diff options
author | Spivak Vladimir (cwolf3d) <cwolf3d@gmail.com> | 2019-08-17 01:35:25 +0300 |
---|---|---|
committer | Spivak Vladimir (cwolf3d) <cwolf3d@gmail.com> | 2019-08-17 01:36:04 +0300 |
commit | 6c882f7d817ad092f72d53b37daefc8622e9e74e (patch) | |
tree | 7a23a10b6edd22624912f4734245bbc4e16756b0 /add_mesh_extra_objects | |
parent | c5b6e7a4c89828227c6c11aa00b679cef994c30e (diff) |
Addon: Mesh Extra Objects: Gem, Diamond, Brilliant: Implemented parametric object and add object in edit mode
Diffstat (limited to 'add_mesh_extra_objects')
-rw-r--r-- | add_mesh_extra_objects/__init__.py | 21 | ||||
-rw-r--r-- | add_mesh_extra_objects/add_mesh_gemstones.py | 198 | ||||
-rw-r--r-- | add_mesh_extra_objects/add_mesh_round_brilliant.py | 113 |
3 files changed, 306 insertions, 26 deletions
diff --git a/add_mesh_extra_objects/__init__.py b/add_mesh_extra_objects/__init__.py index f785c663..3151a614 100644 --- a/add_mesh_extra_objects/__init__.py +++ b/add_mesh_extra_objects/__init__.py @@ -323,6 +323,27 @@ def Extras_contex_menu(self, context): setattr(props, prm, obj.data[prm]) layout.separator() + if 'Diamond' in obj.data.keys(): + props = layout.operator("mesh.primitive_diamond_add", text="Change Diamond") + props.change = True + for prm in add_mesh_gemstones.DiamondParameters(): + setattr(props, prm, obj.data[prm]) + layout.separator() + + if 'Gem' in obj.data.keys(): + props = layout.operator("mesh.primitive_gem_add", text="Change Gem") + props.change = True + for prm in add_mesh_gemstones.GemParameters(): + setattr(props, prm, obj.data[prm]) + layout.separator() + + if 'Brilliant' in obj.data.keys(): + props = layout.operator("mesh.primitive_brilliant_add", text="Change Brilliant") + props.change = True + for prm in add_mesh_round_brilliant.BrilliantParameters(): + setattr(props, prm, obj.data[prm]) + layout.separator() + # Register classes = [ VIEW3D_MT_mesh_vert_add, diff --git a/add_mesh_extra_objects/add_mesh_gemstones.py b/add_mesh_extra_objects/add_mesh_gemstones.py index 3db2af10..d060e812 100644 --- a/add_mesh_extra_objects/add_mesh_gemstones.py +++ b/add_mesh_extra_objects/add_mesh_gemstones.py @@ -10,6 +10,8 @@ from math import cos, sin, pi from bpy.props import ( FloatProperty, IntProperty, + BoolProperty, + StringProperty, ) @@ -211,6 +213,18 @@ class AddDiamond(Operator): bl_description = "Construct a diamond mesh" bl_options = {'REGISTER', 'UNDO', 'PRESET'} + Diamond : BoolProperty(name = "Diamond", + default = True, + description = "Diamond") + + #### change properties + name : StringProperty(name = "Name", + description = "Name") + + change : BoolProperty(name = "Change", + default = False, + description = "change Diamond") + segments: IntProperty( name="Segments", description="Number of segments for the diamond", @@ -247,17 +261,86 @@ class AddDiamond(Operator): default=0.8 ) - def execute(self, context): - verts, faces = add_diamond(self.segments, - self.girdle_radius, - self.table_radius, - self.crown_height, - self.pavilion_height) + def draw(self, context): + layout = self.layout + box = layout.box() + box.prop(self, "segments") + box.prop(self, "girdle_radius") + box.prop(self, "table_radius") + box.prop(self, "crown_height") + box.prop(self, "pavilion_height") - obj = create_mesh_object(context, verts, [], faces, "Diamond") + def execute(self, context): + + if bpy.context.mode == "OBJECT": + if self.change == True and self.change != None: + obj = context.active_object + if 'Diamond' in obj.data.keys(): + oldmesh = obj.data + oldmeshname = obj.data.name + verts, faces = add_diamond(self.segments, + self.girdle_radius, + self.table_radius, + self.crown_height, + self.pavilion_height) + mesh = bpy.data.meshes.new("TMP") + mesh.from_pydata(verts, [], faces) + mesh.update() + obj.data = mesh + bpy.data.meshes.remove(oldmesh) + obj.data.name = oldmeshname + else: + verts, faces = add_diamond(self.segments, + self.girdle_radius, + self.table_radius, + self.crown_height, + self.pavilion_height) + + obj = create_mesh_object(context, verts, [], faces, "Diamond") + else: + verts, faces = add_diamond(self.segments, + self.girdle_radius, + self.table_radius, + self.crown_height, + self.pavilion_height) + + obj = create_mesh_object(context, verts, [], faces, "Diamond") + + obj.data["Diamond"] = True + obj.data["change"] = False + for prm in DiamondParameters(): + obj.data[prm] = getattr(self, prm) + + if bpy.context.mode == "EDIT_MESH": + active_object = context.active_object + name_active_object = active_object.name + bpy.ops.object.mode_set(mode='OBJECT') + verts, faces = add_diamond(self.segments, + self.girdle_radius, + self.table_radius, + self.crown_height, + self.pavilion_height) + + obj = create_mesh_object(context, verts, [], faces, "TMP") + + obj.select_set(True) + active_object.select_set(True) + bpy.ops.object.join() + context.active_object.name = name_active_object + bpy.ops.object.mode_set(mode='EDIT') return {'FINISHED'} +def DiamondParameters(): + DiamondParameters = [ + "segments", + "girdle_radius", + "table_radius", + "crown_height", + "pavilion_height", + ] + return DiamondParameters + class AddGem(Operator): bl_idname = "mesh.primitive_gem_add" @@ -265,6 +348,18 @@ class AddGem(Operator): bl_description = "Construct an offset faceted gem mesh" bl_options = {'REGISTER', 'UNDO', 'PRESET'} + Gem : BoolProperty(name = "Gem", + default = True, + description = "Gem") + + #### change properties + name : StringProperty(name = "Name", + description = "Name") + + change : BoolProperty(name = "Change", + default = False, + description = "change Gem") + segments: IntProperty( name="Segments", description="Longitudial segmentation", @@ -301,15 +396,86 @@ class AddGem(Operator): default=0.8 ) + def draw(self, context): + layout = self.layout + box = layout.box() + box.prop(self, "segments") + box.prop(self, "pavilion_radius") + box.prop(self, "crown_radius") + box.prop(self, "crown_height") + box.prop(self, "pavilion_height") + def execute(self, context): - # create mesh - verts, faces = add_gem( - self.pavilion_radius, - self.crown_radius, - self.segments, - self.pavilion_height, - self.crown_height) - - obj = create_mesh_object(context, verts, [], faces, "Gem") + + if bpy.context.mode == "OBJECT": + if self.change == True and self.change != None: + obj = context.active_object + if 'Gem' in obj.data.keys(): + oldmesh = obj.data + oldmeshname = obj.data.name + verts, faces = add_gem( + self.pavilion_radius, + self.crown_radius, + self.segments, + self.pavilion_height, + self.crown_height) + mesh = bpy.data.meshes.new("TMP") + mesh.from_pydata(verts, [], faces) + mesh.update() + obj.data = mesh + bpy.data.meshes.remove(oldmesh) + obj.data.name = oldmeshname + else: + verts, faces = add_gem( + self.pavilion_radius, + self.crown_radius, + self.segments, + self.pavilion_height, + self.crown_height) + + obj = create_mesh_object(context, verts, [], faces, "Gem") + else: + verts, faces = add_gem( + self.pavilion_radius, + self.crown_radius, + self.segments, + self.pavilion_height, + self.crown_height) + + obj = create_mesh_object(context, verts, [], faces, "Gem") + + obj.data["Gem"] = True + obj.data["change"] = False + for prm in GemParameters(): + obj.data[prm] = getattr(self, prm) + + if bpy.context.mode == "EDIT_MESH": + active_object = context.active_object + name_active_object = active_object.name + bpy.ops.object.mode_set(mode='OBJECT') + verts, faces = add_gem( + self.pavilion_radius, + self.crown_radius, + self.segments, + self.pavilion_height, + self.crown_height) + + obj = create_mesh_object(context, verts, [], faces, "TMP") + + obj.select_set(True) + active_object.select_set(True) + bpy.ops.object.join() + context.active_object.name = name_active_object + bpy.ops.object.mode_set(mode='EDIT') return {'FINISHED'} + +def GemParameters(): + GemParameters = [ + "segments", + "pavilion_radius", + "crown_radius", + "crown_height", + "pavilion_height", + ] + return GemParameters diff --git a/add_mesh_extra_objects/add_mesh_round_brilliant.py b/add_mesh_extra_objects/add_mesh_round_brilliant.py index b8bf393a..6d795795 100644 --- a/add_mesh_extra_objects/add_mesh_round_brilliant.py +++ b/add_mesh_extra_objects/add_mesh_round_brilliant.py @@ -14,12 +14,12 @@ from bpy.props import ( IntProperty, FloatProperty, BoolProperty, + StringProperty, ) +from bpy_extras import object_utils - -# mesh/object generating function, returns final object - -def addBrilliant(context, s, table_w, crown_h, girdle_t, pavi_d, bezel_f, +# mesh generating function, returns mesh +def add_mesh_Brilliant(context, s, table_w, crown_h, girdle_t, pavi_d, bezel_f, pavi_f, culet, girdle_real, keep_lga, g_real_smooth): # # possible user inputs ( output 100% = 2 blender units ) @@ -220,16 +220,25 @@ def addBrilliant(context, s, table_w, crown_h, girdle_t, pavi_d, bezel_f, cf.append(i) fa(*cf) - # deactivate possible active Objects - bpy.context.view_layer.objects.active = None - # create actual mesh and object based on Verts and Faces given dmesh = bpy.data.meshes.new("dmesh") dmesh.from_pydata(Verts, [], Faces) dmesh.update() + + return dmesh + +# object generating function, returns final object +def addBrilliant(context, s, table_w, crown_h, girdle_t, pavi_d, bezel_f, + pavi_f, culet, girdle_real, keep_lga, g_real_smooth): + + # deactivate possible active Objects + bpy.context.view_layer.objects.active = None + + # create actual mesh and object based on Verts and Faces given + dmesh = add_mesh_Brilliant(context, s, table_w, crown_h, girdle_t, pavi_d, bezel_f, + pavi_f, culet, girdle_real, keep_lga, g_real_smooth) # Create object and link it into scene. - from bpy_extras import object_utils dobj = object_utils.object_data_add(context, dmesh, operator=None, name="dobj") # activate and select object @@ -301,7 +310,18 @@ class MESH_OT_primitive_brilliant_add(Operator): bl_description = "Construct a custom brilliant mesh" bl_options = {'REGISTER', 'UNDO', 'PRESET'} - # set user options + Brilliant : BoolProperty(name = "Brilliant", + default = True, + description = "Brilliant") + + #### change properties + name : StringProperty(name = "Name", + description = "Name") + + change : BoolProperty(name = "Change", + default = False, + description = "change Brilliant") + s: IntProperty( name="Segments", description="Longitudial segmentation", @@ -383,11 +403,84 @@ class MESH_OT_primitive_brilliant_add(Operator): default=False ) + def draw(self, context): + layout = self.layout + box = layout.box() + box.prop(self, "s") + box.prop(self, "table_w") + box.prop(self, "crown_h") + box.prop(self, "girdle_t") + box.prop(self, "girdle_real") + box.prop(self, "g_real_smooth") + box.prop(self, "pavi_d") + box.prop(self, "bezel_f") + box.prop(self, "pavi_f") + box.prop(self, "culet") + box.prop(self, "keep_lga") + # call mesh/object generator function with user inputs def execute(self, context): - ob = addBrilliant(context, self.s, self.table_w, self.crown_h, + + if bpy.context.mode == "OBJECT": + if self.change == True and self.change != None: + obj = context.active_object + if 'Brilliant' in obj.data.keys(): + oldmesh = obj.data + oldmeshname = obj.data.name + mesh = add_mesh_Brilliant(context, self.s, self.table_w, self.crown_h, self.girdle_t, self.pavi_d, self.bezel_f, self.pavi_f, self.culet, self.girdle_real, self.keep_lga, self.g_real_smooth ) + obj.data = mesh + bpy.data.meshes.remove(oldmesh) + obj.data.name = oldmeshname + else: + obj = addBrilliant(context, self.s, self.table_w, self.crown_h, + self.girdle_t, self.pavi_d, self.bezel_f, + self.pavi_f, self.culet, self.girdle_real, + self.keep_lga, self.g_real_smooth + ) + else: + obj = addBrilliant(context, self.s, self.table_w, self.crown_h, + self.girdle_t, self.pavi_d, self.bezel_f, + self.pavi_f, self.culet, self.girdle_real, + self.keep_lga, self.g_real_smooth + ) + obj.data["Brilliant"] = True + obj.data["change"] = False + for prm in BrilliantParameters(): + obj.data[prm] = getattr(self, prm) + + if bpy.context.mode == "EDIT_MESH": + active_object = context.active_object + name_active_object = active_object.name + bpy.ops.object.mode_set(mode='OBJECT') + obj = addBrilliant(context, self.s, self.table_w, self.crown_h, + self.girdle_t, self.pavi_d, self.bezel_f, + self.pavi_f, self.culet, self.girdle_real, + self.keep_lga, self.g_real_smooth + ) + obj.select_set(True) + active_object.select_set(True) + bpy.ops.object.join() + context.active_object.name = name_active_object + bpy.ops.object.mode_set(mode='EDIT') + return {'FINISHED'} + +def BrilliantParameters(): + BrilliantParameters = [ + "s", + "table_w", + "crown_h", + "girdle_t", + "girdle_real", + "g_real_smooth", + "pavi_d", + "bezel_f", + "pavi_f", + "culet", + "keep_lga", + ] + return BrilliantParameters |