[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