[Bf-extensions-cvs] [1883ee2] master: update parent to mesh, update & fix crasher in mesh_round_cube, update init.

Brendon Murphy noreply at git.blender.org
Mon Jun 22 07:28:54 CEST 2015


Commit: 1883ee23fb258e05c91b4fb2121d7150b6673cd9
Author: Brendon Murphy
Date:   Mon Jun 22 15:28:17 2015 +1000
Branches: master
https://developer.blender.org/rBA1883ee23fb258e05c91b4fb2121d7150b6673cd9

update parent to mesh, update & fix crasher in mesh_round_cube, update init.

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

M	add_mesh_extra_objects/__init__.py
M	add_mesh_extra_objects/add_empty_as_parent.py
M	add_mesh_extra_objects/add_mesh_round_cube.py

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

diff --git a/add_mesh_extra_objects/__init__.py b/add_mesh_extra_objects/__init__.py
index ce4c36d..0b14f3d 100644
--- a/add_mesh_extra_objects/__init__.py
+++ b/add_mesh_extra_objects/__init__.py
@@ -200,7 +200,7 @@ class INFO_MT_mesh_pipe_joints_add(bpy.types.Menu):
 def menu_func(self, context):
     self.layout.separator()
     self.layout.menu("INFO_MT_mesh_vert_add", text="Single Vert", icon="LAYER_ACTIVE")
-    self.layout.menu("INFO_MT_mesh_round_cube_add", text="Round Cube", icon="WIRE")
+    self.layout.operator("mesh.primitive_round_cube_add", text="Round Cube", icon="MOD_SUBSURF")
     self.layout.menu("INFO_MT_mesh_math_add", text="Math Function", icon="PACKAGE")
     self.layout.menu("INFO_MT_mesh_pipe_joints_add", text="Pipe Joints", icon="SNAP_PEEL_OBJECT")
     self.layout.menu("INFO_MT_mesh_gears_add", text="Gears", icon="SCRIPTWIN")
diff --git a/add_mesh_extra_objects/add_empty_as_parent.py b/add_mesh_extra_objects/add_empty_as_parent.py
index 8628055..b7431b6 100644
--- a/add_mesh_extra_objects/add_empty_as_parent.py
+++ b/add_mesh_extra_objects/add_empty_as_parent.py
@@ -1,57 +1,115 @@
 # GPL # Original Author Liero #
 
 import bpy
-from bpy.props import StringProperty, FloatProperty, BoolProperty, FloatVectorProperty
+from bpy.props import StringProperty, BoolProperty, EnumProperty
 
-def centro(objetos):
-    x = sum([obj.location[0] for obj in objetos])/len(objetos)
-    y = sum([obj.location[1] for obj in objetos])/len(objetos)
-    z = sum([obj.location[2] for obj in objetos])/len(objetos)
+def centro(sel):
+    x = sum([obj.location[0] for obj in sel])/len(sel)
+    y = sum([obj.location[1] for obj in sel])/len(sel)
+    z = sum([obj.location[2] for obj in sel])/len(sel)
     return (x,y,z)
 
+
 class P2E(bpy.types.Operator):
     bl_idname = 'object.parent_to_empty'
-    bl_label = 'Parent Selected to Empty'
+    bl_label = 'Parent to Empty'
     bl_description = 'Parent selected objects to a new Empty'
     bl_options = {'REGISTER', 'UNDO'}
 
     nombre = StringProperty(name='', default='OBJECTS', description='Give the empty / group a name')
-    grupo = bpy.props.BoolProperty(name='Create Group', default=False, description='Also link objects to a new group')
-    cursor = bpy.props.BoolProperty(name='Cursor Location', default=False, description='Add the empty at cursor / selection center')
-    renombrar = bpy.props.BoolProperty(name='Rename Objects', default=False, description='Rename child objects')
+    grupo = bpy.props.BoolProperty(name='Create Group', default=False, description='Also add objects to a group')
+    locat = bpy.props.EnumProperty(name='', items=[('CURSOR','Cursor','Cursor'),('ACTIVE','Active','Active'),
+    ('CENTER','Center','Selection Center')],description='Empty location', default='CENTER')
+    renom = bpy.props.BoolProperty(name='Add Prefix', default=False, description='Add prefix to objects name')
 
     @classmethod
     def poll(cls, context):
-        return (context.object and context.object.select)
+        objs = context.selected_objects
+        return (len(objs) > 0)
 
     def draw(self, context):
         layout = self.layout
         layout.prop(self,'nombre')
         column = layout.column(align=True)
+        column.prop(self,'locat')
         column.prop(self,'grupo')
-        column.prop(self,'cursor')
-        column.prop(self,'renombrar')
+        column.prop(self,'renom')
 
     def execute(self, context):
-        objs = bpy.context.selected_objects
-        bpy.ops.object.mode_set()
-        if self.cursor:
-            loc = context.scene.cursor_location
+        objs = context.selected_objects
+        act = context.object
+        sce = context.scene
+        try: bpy.ops.object.mode_set()
+        except: pass
+        if self.locat == 'CURSOR':
+            loc = sce.cursor_location
+        elif self.locat == 'ACTIVE':
+            loc = act.location
         else:
-            loc = centro(objs)
+            loc = centro(objs) 
+        
         bpy.ops.object.add(type='EMPTY',location=loc)
-        bpy.context.object.name = self.nombre
+        context.object.name = self.nombre
+        context.object.show_name = True
+        context.object.show_x_ray = True
+            
         if self.grupo:
             bpy.ops.group.create(name=self.nombre)
             bpy.ops.group.objects_add_active()
+            
         for o in objs:
             o.select = True
             if not o.parent:
-                    bpy.ops.object.parent_set(type='OBJECT')
+                bpy.ops.object.parent_set(type='OBJECT')
             if self.grupo:
                 bpy.ops.group.objects_add_active()
             o.select = False
         for o in objs:
-            if self.renombrar:
+            if self.renom:
                 o.name = self.nombre+'_'+o.name
-        return {'FINISHED'}
\ No newline at end of file
+        return {'FINISHED'}
+
+
+class PreFix(bpy.types.Operator):
+    bl_idname = 'object.toggle_prefix'
+    bl_label = 'Toggle Sufix'
+    bl_description = 'Toggle parent name as sufix for c'
+    bl_options = {'REGISTER', 'UNDO'}
+
+    @classmethod
+    def poll(cls, context):
+        act = bpy.context.object
+        return (act and act.type == 'EMPTY')
+
+    def execute(self, context):
+        act = bpy.context.object
+        objs = act.children
+        prefix = act.name+'_'
+        remove = False
+        for o in objs:
+            if o.name.startswith(prefix):
+                remove = True
+                break
+
+        if remove == True:
+            for o in objs:
+                if o.name.startswith(prefix):
+                    o.name = o.name.partition(prefix)[2]
+        else:
+            for o in objs:
+                o.name = prefix+o.name
+
+        return {'FINISHED'}
+
+
+class PanelP2E(bpy.types.Panel):
+    bl_label = 'Parent to Empty'
+    bl_space_type = 'VIEW_3D'
+    bl_region_type = 'TOOLS'
+    bl_category = 'Relations'
+
+    def draw(self, context):
+        layout = self.layout
+        layout.operator('object.parent_to_empty')
+        layout.operator('object.toggle_prefix')
+
diff --git a/add_mesh_extra_objects/add_mesh_round_cube.py b/add_mesh_extra_objects/add_mesh_round_cube.py
index 1c67721..169a7da 100644
--- a/add_mesh_extra_objects/add_mesh_round_cube.py
+++ b/add_mesh_extra_objects/add_mesh_round_cube.py
@@ -1,4 +1,4 @@
-# GPL #     'author': 'Alain Ducharme (Phymec)'
+# GPL # Author: Alain Ducharme (phymec)
 
 import bpy
 from bpy_extras import object_utils
@@ -15,14 +15,15 @@ def round_cube(radius=1.0, arcdiv=4, lindiv=0., size=(0. ,0. ,0.), div_type='COR
 
     radius = max(radius, 0.)
     if not radius:
+        # No sphere
         arcdiv = 1
+        odd_axis_align = False
 
     if arcdiv <= 0:
         arcdiv = max(round(pi * radius * lindiv * 0.5), 1)
     arcdiv = max(round(arcdiv), 1)
-    if lindiv <= 0.:
-        if radius:
-            lindiv = 1. / (pi / (arcdiv * 2.) * radius)
+    if lindiv <= 0. and radius:
+        lindiv = 1. / (pi / (arcdiv * 2.) * radius)
     lindiv = max(lindiv, 0.)
     if not lindiv:
         subdiv = CORNERS
@@ -72,9 +73,9 @@ def round_cube(radius=1.0, arcdiv=4, lindiv=0., size=(0. ,0. ,0.), div_type='COR
             dvc = arcdiv * 4 * sum(fxyz)
             if subdiv == ALL:
                 dvc += sum(p1 * p2 for p1, p2 in permutations(fxyz, 2))
-            elif subdiv == EDGES:
+            elif subdiv == EDGES and axis_aligned:
                 #      (0, 0, 2, 4) * sum(dxyz) + (0, 0, 2, 6)
-                dvc += ec * ec // 2 * sum(dxyz) + ec * (ec - 1) if axis_aligned else 0
+                dvc += ec * ec // 2 * sum(dxyz) + ec * (ec - 1)
         else:
             dvc = (arcdiv * 4) * ec + ec * (ec - 1) if axis_aligned else 0
         vert_count = int(6 * arcdiv*arcdiv + (0 if odd_aligned else 2) + dvc)
@@ -83,6 +84,7 @@ def round_cube(radius=1.0, arcdiv=4, lindiv=0., size=(0. ,0. ,0.), div_type='COR
         return arcdiv, lindiv, vert_count
 
     if not radius and not max(size) > 0:
+        # Single vertex
         return [(0,0,0)], []
 
     # uv lookup table
@@ -92,11 +94,11 @@ def round_cube(radius=1.0, arcdiv=4, lindiv=0., size=(0. ,0. ,0.), div_type='COR
         v2 = v*v
         uvlt.append((v, v2, radius * sqrt(18. - 6. * v2) / 6.))
         v = vi + j * step_size # v += step_size # instead of accumulating errors
-        # clear precision errors / signs at axis
+        # clear fp errors / signs at axis
         if abs(v) < 1e-10:
             v = 0.0
 
-    # Round cube sides built left to right bottom up
+    # Sides built left to right bottom up
     #         xp yp zp  xd  yd  zd
     sides = ((0, 2, 1, (-1,  1,  1)),   # Y+ Front
              (1, 2, 0, (-1, -1,  1)),   # X- Left
@@ -105,9 +107,10 @@ def round_cube(radius=1.0, arcdiv=4, lindiv=0., size=(0. ,0. ,0.), div_type='COR
              (0, 1, 2, (-1,  1, -1)),   # Z- Bottom
              (0, 1, 2, (-1, -1,  1)))   # Z+ Top
 
-    # side vertex index table
+    # side vertex index table (for sphere)
     svit = [[[] for i in range(steps)] for i in range(6)]
-    # Extend rows for extrusion
+    # Extend svit rows for extrusion
+    yer = zer = 0
     if ey:
         yer = axis_aligned + (dxyz[1] if subdiv else 0)
         svit[4].extend([[] for i in range(yer)])
@@ -116,8 +119,7 @@ def round_cube(radius=1.0, arcdiv=4, lindiv=0., size=(0. ,0. ,0.), div_type='COR
         zer = axis_aligned + (dxyz[2] if subdiv else 0)
         for side in range(4):
             svit[side].extend([[] for i in range(zer)])
-    ryi = rzi = 0 # row vertex indices
-    # Extend rows for odd_aligned
+    # Extend svit rows for odd_aligned
     if odd_aligned:
         for side in range(4):
             svit[side].append([])
@@ -129,117 +131,115 @@ def round_cube(radius=1.0, arcdiv=4, lindiv=0., size=(0. ,0. ,0.), div_type='COR
     verts = []
 
     if arcdiv == 1 and not odd_aligned and subdiv == ALL:
-        # Special case: 3D Grid Cuboid
+        # Special case: Grid Cuboid
         for side, (xp, yp, zp, dir) in enumerate(sides):
             svitc = svit[side]
             rows = len(svitc)
             if rows < dxyz[yp] + 2:
                 svitc.extend([[] for i in range(dxyz[yp] + 2 - row

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list