From a7ce2d91eba6053a0ccfe41f9ea811d5b33fd042 Mon Sep 17 00:00:00 2001 From: rioforce Date: Tue, 20 May 2014 12:15:41 -0400 Subject: [PATCH 1/4] Added new bevel option --- import_ldraw.py | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/import_ldraw.py b/import_ldraw.py index ea3150a..1d3b3f6 100644 --- a/import_ldraw.py +++ b/import_ldraw.py @@ -844,6 +844,28 @@ def create_model(self, scale, context): # Go back to object mode bpy.ops.object.mode_set(mode='OBJECT') + + # The Bevel import option was selected + if BevelOpt: # noqa + debugPrint("Bevel option selected") + + # Select all the mesh + for cur_obj in objects: + cur_obj.select = True + bpy.context.scene.objects.active = cur_obj + if bpy.ops.object.mode_set.poll(): + + # Change to edit mode + bpy.ops.object.mode_set(mode='EDIT') + bpy.ops.mesh.select_all(action='DESELECT') + + # Add small bevel to each brick + bpy.ops.mesh.edges_select_sharp() + bpy.ops.mesh.bevel(offset=0.0110997, segments=1, vertex_only=False) + if bpy.ops.object.mode_set.poll(): + + # Go back to object mode + bpy.ops.object.mode_set(mode='OBJECT') # Select all the mesh now that import is complete for cur_obj in objects: @@ -1080,6 +1102,12 @@ class LDRImporterOps(bpy.types.Operator, ImportHelper): description="Add small spaces between each brick", default=False ) + + addBevels = BoolProperty( + name="Bevel", + description="Add a small bevel to each brick model", + default=False + ) lsynthParts = BoolProperty( name="Use LSynth Parts", @@ -1101,15 +1129,17 @@ def draw(self, context): box.prop(self, "cleanUpModel", expand=True) box.label("Additional Options", icon='PREFERENCES') box.prop(self, "addGaps") + box.prop(self, "addBevels") box.prop(self, "lsynthParts") def execute(self, context): """Set import options and run the script""" - global LDrawDir, CleanUpOpt, GapsOpt + global LDrawDir, CleanUpOpt, GapsOpt, BevelOpt LDrawDir = str(self.ldrawPath) WhatRes = str(self.resPrims) CleanUpOpt = str(self.cleanUpModel) GapsOpt = bool(self.addGaps) + BevelOpt = bool(self.addBevels) LSynth = bool(self.lsynthParts) # Clear array before adding data if it contains data already From 432e232c5415bdfe82e02372dfe089ab8395db7c Mon Sep 17 00:00:00 2001 From: rioforce Date: Tue, 20 May 2014 12:18:55 -0400 Subject: [PATCH 2/4] Changed description on bevel button --- import_ldraw.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/import_ldraw.py b/import_ldraw.py index 1d3b3f6..ee4f79a 100644 --- a/import_ldraw.py +++ b/import_ldraw.py @@ -1105,7 +1105,7 @@ class LDRImporterOps(bpy.types.Operator, ImportHelper): addBevels = BoolProperty( name="Bevel", - description="Add a small bevel to each brick model", + description="Add small 1-segment bevel to edges of bricks ", default=False ) From 4da822f80b75c09c99d2d3bb7d475e02f2d64f15 Mon Sep 17 00:00:00 2001 From: Triangle717 Date: Tue, 20 May 2014 13:35:19 -0400 Subject: [PATCH 3/4] Remove whitespace [ci skip] --- import_ldraw.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/import_ldraw.py b/import_ldraw.py index ee4f79a..9c27667 100644 --- a/import_ldraw.py +++ b/import_ldraw.py @@ -325,8 +325,8 @@ def parse(self, filename): if tmpdate[0] == "1": new_file = tmpdate[14] ( - x, y, z, a, b, c, - d, e, f, g, h, i + x, y, z, a, b, c, + d, e, f, g, h, i ) = map(float, tmpdate[2:14]) mat_new = self.mat * mathutils.Matrix( ((a, b, c, x), (d, e, f, y), (g, h, i, z), @@ -832,8 +832,8 @@ def create_model(self, scale, context): for cur_obj in objects: cur_obj.select = True bpy.context.scene.objects.active = cur_obj - if bpy.ops.object.mode_set.poll(): + if bpy.ops.object.mode_set.poll(): # Change to edit mode bpy.ops.object.mode_set(mode='EDIT') bpy.ops.mesh.select_all(action='SELECT') @@ -844,7 +844,7 @@ def create_model(self, scale, context): # Go back to object mode bpy.ops.object.mode_set(mode='OBJECT') - + # The Bevel import option was selected if BevelOpt: # noqa debugPrint("Bevel option selected") @@ -853,8 +853,8 @@ def create_model(self, scale, context): for cur_obj in objects: cur_obj.select = True bpy.context.scene.objects.active = cur_obj - if bpy.ops.object.mode_set.poll(): + if bpy.ops.object.mode_set.poll(): # Change to edit mode bpy.ops.object.mode_set(mode='EDIT') bpy.ops.mesh.select_all(action='DESELECT') @@ -1102,7 +1102,7 @@ class LDRImporterOps(bpy.types.Operator, ImportHelper): description="Add small spaces between each brick", default=False ) - + addBevels = BoolProperty( name="Bevel", description="Add small 1-segment bevel to edges of bricks ", From 42f291a20070bac36e4f51bf10d0a5f379ae0bcf Mon Sep 17 00:00:00 2001 From: rioforce Date: Tue, 20 May 2014 16:05:16 -0400 Subject: [PATCH 4/4] Bevel function is now a modifier instead of direct mesh modification --- import_ldraw.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/import_ldraw.py b/import_ldraw.py index 9c27667..0f05e7d 100644 --- a/import_ldraw.py +++ b/import_ldraw.py @@ -855,17 +855,16 @@ def create_model(self, scale, context): bpy.context.scene.objects.active = cur_obj if bpy.ops.object.mode_set.poll(): - # Change to edit mode - bpy.ops.object.mode_set(mode='EDIT') - bpy.ops.mesh.select_all(action='DESELECT') + # Go back to object mode, set origin to geometry + bpy.ops.object.mode_set(mode='OBJECT') # Add small bevel to each brick - bpy.ops.mesh.edges_select_sharp() - bpy.ops.mesh.bevel(offset=0.0110997, segments=1, vertex_only=False) - if bpy.ops.object.mode_set.poll(): - - # Go back to object mode - bpy.ops.object.mode_set(mode='OBJECT') + for cur_obj in objects: + bevel = cur_obj.modifiers.new("Bevel", type='BEVEL') + bpy.ops.object.modifier_move_up(modifier="Bevel") + bevel.width = 0.01 + bevel.limit_method = 'ANGLE' + bevel.angle_limit = 0.523599 # Select all the mesh now that import is complete for cur_obj in objects: