[Bf-extensions-cvs] [9ce456d9] master: Addon: Mesh Extra Objects: Gears, Wallfactory, Beam: Converted to parametric objects

Spivak Vladimir cwolf3d noreply at git.blender.org
Thu Aug 8 23:27:23 CEST 2019


Commit: 9ce456d94f0b706f2591d7d2e2c353a61c730e8e
Author: Spivak Vladimir (cwolf3d)
Date:   Fri Aug 9 00:26:26 2019 +0300
Branches: master
https://developer.blender.org/rBA9ce456d94f0b706f2591d7d2e2c353a61c730e8e

Addon: Mesh Extra Objects: Gears, Wallfactory, Beam: Converted to parametric objects

===================================================================

M	add_mesh_extra_objects/Wallfactory.py
M	add_mesh_extra_objects/__init__.py
M	add_mesh_extra_objects/add_mesh_beam_builder.py
M	add_mesh_extra_objects/add_mesh_gears.py

===================================================================

diff --git a/add_mesh_extra_objects/Wallfactory.py b/add_mesh_extra_objects/Wallfactory.py
index 8fb09e19..db7918c3 100644
--- a/add_mesh_extra_objects/Wallfactory.py
+++ b/add_mesh_extra_objects/Wallfactory.py
@@ -34,6 +34,7 @@ from bpy.types import Operator
 from bpy.props import (
         BoolProperty,
         FloatProperty,
+        StringProperty,
         )
 from .Blocks import (
         NOTZERO, PI,
@@ -53,7 +54,7 @@ from .Blocks import (
         stepOnly,
         stepBack,
         )
-
+from bpy_extras import object_utils
 
 class add_mesh_wallb(Operator):
     bl_idname = "mesh.wall_add"
@@ -63,6 +64,18 @@ class add_mesh_wallb(Operator):
 
     # UI items - API for properties - User accessible variables...
     # not all options are via UI, and some operations just don't work yet
+    
+    Wall : BoolProperty(name = "Wall",
+                default = True,
+                description = "Wall")
+
+    #### change properties
+    name : StringProperty(name = "Name",
+                    description = "Name")
+
+    change : BoolProperty(name = "Change",
+                default = False,
+                description = "change Wall")
 
     # only create object when True
     # False allows modifying several parameters without creating object
@@ -859,25 +872,97 @@ class add_mesh_wallb(Operator):
                                         stepBack
                                         )
 
-        # Create new mesh
-        mesh = bpy.data.meshes.new("Wall")
-
-        # Make a mesh from a list of verts/edges/faces.
-        mesh.from_pydata(verts_array, [], faces_array)
-
-        # Deselect all objects.
-        bpy.ops.object.select_all(action='DESELECT')
-
+        if self.change == True and self.change != None:
+            obj = context.active_object
+            oldmesh = obj.data
+            oldmeshname = obj.data.name
+            mesh = bpy.data.meshes.new("Wall")
+            mesh.from_pydata(verts_array, [], faces_array)
+            obj.data = mesh
+            bpy.data.meshes.remove(oldmesh)
+            obj.data.name = oldmeshname
+        else:
+            mesh = bpy.data.meshes.new("Wall")
+            mesh.from_pydata(verts_array, [], faces_array)
+            obj = object_utils.object_data_add(context, mesh, operator=None)
+        
         mesh.update()
-
-        ob_new = bpy.data.objects.new("Wall", mesh)
-        context.collection.objects.link(ob_new)
-        # leave this out to prevent 'Tab key" going into edit mode :)
-        # Use rmb click to select and still modify.
-        context.view_layer.objects.active = ob_new
-        ob_new.select_set(True)
-
-        ob_new.location = tuple(context.scene.cursor.location)
-        ob_new.rotation_quaternion = [1.0, 0.0, 0.0, 0.0]
+        
+        obj.data["Wall"] = True
+        obj.data["change"] = False
+        for prm in WallParameters():
+            obj.data[prm] = getattr(self, prm)
 
         return {'FINISHED'}
+
+def WallParameters():
+    WallParameters = [
+        "ConstructTog",
+        "RadialTog",
+        "SlopeTog",
+        "WallStart",
+        "WallEnd",
+        "WallBottom",
+        "WallTop",
+        "EdgeOffset",
+        "Width",
+        "WidthVariance",
+        "WidthMinimum",
+        "Height",
+        "HeightVariance",
+        "HeightMinimum",
+        "Depth",
+        "DepthVariance",
+        "DepthMinimum",
+        "MergeBlock",
+        "Grout",
+        "GroutVariance",
+        "GroutDepth",
+        "GroutDepthVariance",
+        "GroutEdge",
+        "Opening1Tog",
+        "Opening1Width",
+        "Opening1Height",
+        "Opening1X",
+        "Opening1Z",
+        "Opening1Repeat",
+        "Opening1TopArchTog",
+        "Opening1TopArch",
+        "Opening1TopArchThickness",
+        "Opening1BtmArchTog",
+        "Opening1BtmArch",
+        "Opening1BtmArchThickness",
+        "CrenelTog",
+        "CrenelXP",
+        "CrenelZP",
+        "SlotTog",
+        "SlotRpt",
+        "SlotWdg",
+        "SlotX",
+        "SlotGap",
+        "SlotV",
+        "SlotVH",
+        "SlotVBtm",
+        "SlotH",
+        "SlotHW",
+        "SlotHBtm",
+        "ShelfTog",
+        "ShelfX",
+        "ShelfZ",
+        "ShelfH",
+        "ShelfW",
+        "ShelfD",
+        "ShelfBack",
+        "StepTog",
+        "StepX",
+        "StepZ",
+        "StepH",
+        "StepW",
+        "StepD",
+        "StepV",
+        "StepT",
+        "StepLeft",
+        "StepOnly",
+        "StepBack",
+        ]
+    return WallParameters
\ No newline at end of file
diff --git a/add_mesh_extra_objects/__init__.py b/add_mesh_extra_objects/__init__.py
index a918f96d..560305be 100644
--- a/add_mesh_extra_objects/__init__.py
+++ b/add_mesh_extra_objects/__init__.py
@@ -86,6 +86,7 @@ else:
 
 import bpy
 from bpy.types import Menu
+from sys import *
 
 class VIEW3D_MT_mesh_vert_add(Menu):
     # Define the "Single Vert" menu
@@ -260,39 +261,32 @@ def Extras_contex_menu(self, context):
     obj = context.object
     layout = self.layout
     
-    if 'Gear' in obj.keys():
+    if 'Gear' in obj.data.keys():
         props = layout.operator("mesh.primitive_gear", text="Change Gear")
         props.change = True
-        props.delete = obj.name
-        props.startlocation = obj.location
-        props.rotation_euler = obj.rotation_euler
-        props.number_of_teeth = obj["number_of_teeth"]
-        props.radius = obj["radius"]
-        props.addendum = obj["addendum"]
-        props.dedendum = obj["dedendum"]
-        props.base = obj["base"]
-        props.angle = obj["angle"]
-        props.width = obj["width"]
-        props.skew = obj["skew"]
-        props.conangle = obj["conangle"]
-        props.crown = obj["crown"]
+        for prm in add_mesh_gears.GearParameters():
+            setattr(props, prm, obj.data[prm])
         layout.separator()
 
-    if 'WormGear' in obj.keys():
+    if 'WormGear' in obj.data.keys():
         props = layout.operator("mesh.primitive_worm_gear", text="Change WormGear")
         props.change = True
-        props.delete = obj.name
-        props.startlocation = obj.location
-        props.rotation_euler = obj.rotation_euler
-        props.number_of_teeth = obj["number_of_teeth"]
-        props.number_of_rows = obj["number_of_rows"]
-        props.radius = obj["radius"]
-        props.addendum = obj["addendum"]
-        props.dedendum = obj["dedendum"]
-        props.angle = obj["angle"]
-        props.row_height = obj["row_height"]
-        props.skew = obj["skew"]
-        props.crown = obj["crown"]
+        for prm in add_mesh_gears.WormGearParameters():
+            setattr(props, prm, obj.data[prm])
+        layout.separator()
+        
+    if 'Beam' in obj.data.keys():
+        props = layout.operator("mesh.add_beam", text="Change Beam")
+        props.change = True
+        for prm in add_mesh_beam_builder.BeamParameters():
+            setattr(props, prm, obj.data[prm])
+        layout.separator()
+
+    if 'Wall' in obj.data.keys():
+        props = layout.operator("mesh.wall_add", text="Change Wall")
+        props.change = True
+        for prm in Wallfactory.WallParameters():
+            setattr(props, prm, obj.data[prm])
         layout.separator()
 
 # Register
@@ -335,7 +329,7 @@ classes = [
     add_empty_as_parent.PreFix,
     add_mesh_beam_builder.addBeam,
     Wallfactory.add_mesh_wallb,
-    add_mesh_triangles.MakeTriangle
+    add_mesh_triangles.MakeTriangle,
 ]
 
 def register():
diff --git a/add_mesh_extra_objects/add_mesh_beam_builder.py b/add_mesh_extra_objects/add_mesh_beam_builder.py
index 207883cc..9aa89ef1 100644
--- a/add_mesh_extra_objects/add_mesh_beam_builder.py
+++ b/add_mesh_extra_objects/add_mesh_beam_builder.py
@@ -10,8 +10,9 @@ from bpy.props import (
         EnumProperty,
         FloatProperty,
         IntProperty,
+        StringProperty,
         )
-
+from bpy_extras import object_utils
 
 # #####################
 # Create vertices for end of mesh
@@ -639,9 +640,9 @@ def create_I_beam(sRef):
 
 # ######################
 #
-# Generate beam object.
+# Generate beam mesh.
 
-def addBeamObj(sRef, context):
+def addBeamMesh(sRef, context):
     verts = []
     faces = []
 
@@ -662,25 +663,11 @@ def addBeamObj(sRef, context):
         verts, faces = create_beam(sRef)
 
     beamMesh = bpy.data.meshes.new("Beam")
-    beamObj = bpy.data.objects.new("Beam", beamMesh)
-    context.collection.objects.link(beamObj)
-    context.view_layer.objects.active = beamObj
-    beamObj.select_set(True)
 
     beamMesh.from_pydata(verts, [], faces)
     beamMesh.update(calc_edges=True)
 
-    if sRef.Type == '2':  # Rotate C shape
-        bpy.ops.transform.rotate(value=1.570796, constraint_axis=[False, True, False])
-        bpy.ops.object.transform_apply(location=False, rotation=True, scale=False)
-
-    if sRef.Cursor:
-        if beamObj.select_get() is True:
-            # we also have to check if we're considered to be in 3D View (view3d)
-            if bpy.ops.view3d.snap_selected_to_cursor.poll():
-                bpy.ops.view3d.snap_selected_to_cursor()
-            else:
-                sRef.Cursor = False
+    return beamMesh
 
 
 # ######################
@@ -692,8 +679,20 @@ class addBeam(Operator):
     bl_idname = "mesh.add_beam"
     bl_label = "Beam Builder"
     bl_description = "Create beam meshes of various profiles"
-    bl_options = {'REGISTER', 'UNDO'}
+    bl_options = {'REGISTER', 'UNDO', 'PRESET'}
+
+    Beam : BoolProperty(name = "Beam",
+                default = True,
+                description = "Beam")
 
+    #### change properties
+    name : StringProperty(name = "Name",
+                    description = "Name")
+
+    change : BoolProperty(name = "Change",
+                default = False,
+                description = "change Beam")
+    
     Type: EnumProperty(
             items=(
             ('0', "Box Profile", "Square Beam"),
@@ -707,28 +706,32 @@ class addBeam(Operator):
             )
     beamZ: FloatProperty(
             name="Height",
-            min=0.01, max=100,
+            min=0.01,
+            #max=100,
             default=1
             )
     beamX: FloatProperty(
             name="Width",
-            min=

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list