[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [34285] trunk/blender/release/scripts/ templates/operator_mesh_add.py: simple add mesh operator template.

Campbell Barton ideasman42 at gmail.com
Wed Jan 12 18:29:55 CET 2011


Revision: 34285
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=34285
Author:   campbellbarton
Date:     2011-01-12 17:29:54 +0000 (Wed, 12 Jan 2011)
Log Message:
-----------
simple add mesh operator template.

Added Paths:
-----------
    trunk/blender/release/scripts/templates/operator_mesh_add.py

Added: trunk/blender/release/scripts/templates/operator_mesh_add.py
===================================================================
--- trunk/blender/release/scripts/templates/operator_mesh_add.py	                        (rev 0)
+++ trunk/blender/release/scripts/templates/operator_mesh_add.py	2011-01-12 17:29:54 UTC (rev 34285)
@@ -0,0 +1,99 @@
+import bpy
+
+
+def add_box(width, height, depth):
+    """
+    This function takes inputs and returns vertex and face arrays.
+    no actual mesh data creation is done here.
+    """
+
+    vertices = [1.0, 1.0, -1.0,
+                1.0, -1.0, -1.0,
+                -1.0, -1.0, -1.0,
+                -1.0, 1.0, -1.0,
+                1.0, 1.0, 1.0,
+                1.0, -1.0, 1.0,
+                -1.0, -1.0, 1.0,
+                -1.0, 1.0, 1.0,
+                ]
+
+    faces = [0, 1, 2, 3,
+             4, 7, 6, 5,
+             0, 4, 5, 1,
+             1, 5, 6, 2,
+             2, 6, 7, 3,
+             4, 0, 3, 7,
+            ]
+
+    # apply size
+    for i in range(0, len(vertices), 3):
+        vertices[i] *= width
+        vertices[i + 1] *= depth
+        vertices[i + 2] *= height
+
+    return vertices, faces
+
+
+from bpy.props import *
+
+
+class AddBox(bpy.types.Operator):
+    '''Add a simple box mesh'''
+    bl_idname = "mesh.primitive_box_add"
+    bl_label = "Add Box"
+    bl_options = {'REGISTER', 'UNDO'}
+
+    width = FloatProperty(name="Width",
+            description="Box Width",
+            default=1.0, min=0.01, max=100.0)
+
+    height = FloatProperty(name="Height",
+            description="Box Height",
+            default=1.0, min=0.01, max=100.0)
+
+    depth = FloatProperty(name="Depth",
+            description="Box Depth",
+            default=1.0, min=0.01, max=100.0)
+
+    # generic transform props
+    view_align = BoolProperty(name="Align to View",
+            default=False)
+    location = FloatVectorProperty(name="Location")
+    rotation = FloatVectorProperty(name="Rotation")
+
+    def execute(self, context):
+
+        verts_loc, faces = add_box(self.width,
+                                     self.height,
+                                     self.depth,
+                                     )
+
+        mesh = bpy.data.meshes.new("Box")
+
+        mesh.vertices.add(len(verts_loc) // 3)
+        mesh.faces.add(len(faces) // 4)
+
+        mesh.vertices.foreach_set("co", verts_loc)
+        mesh.faces.foreach_set("vertices_raw", faces)
+        mesh.update()
+
+        # add the mesh as an object into the scene with this utility module
+        import add_object_utils
+        add_object_utils.object_data_add(context, mesh, operator=self)
+
+        return {'FINISHED'}
+
+
+def menu_func(self, context):
+    self.layout.operator(AddBox.bl_idname, icon='MESH_CUBE')
+
+
+def register():
+    bpy.types.INFO_MT_mesh_add.append(menu_func)
+
+
+def unregister():
+    bpy.types.INFO_MT_mesh_add.remove(menu_func)
+
+if __name__ == "__main__":
+    bpy.ops.mesh.primitive_box_add()




More information about the Bf-blender-cvs mailing list