Fix T54075: Align Objects fails w/ empty mesh
This commit is contained in:
parent
70f1b8cc40
commit
58ba89b5be
Notes:
blender-bot
2023-02-14 09:34:18 +01:00
Referenced by issue #54075, Align Objects fails with IndexError: bpy_prop_collection[-1]: out of range. Referenced by issue #53683, 2.79a release
|
@ -24,7 +24,7 @@ from bpy.types import Operator
|
|||
from mathutils import Vector
|
||||
|
||||
|
||||
def GlobalBB_LQ(bb_world):
|
||||
def worldspace_bounds_from_object_bounds(bb_world):
|
||||
|
||||
# Initialize the variables with the 8th vertex
|
||||
left, right, front, back, down, up = (
|
||||
|
@ -66,7 +66,7 @@ def GlobalBB_LQ(bb_world):
|
|||
return (Vector((left, front, up)), Vector((right, back, down)))
|
||||
|
||||
|
||||
def GlobalBB_HQ(scene, obj):
|
||||
def worldspace_bounds_from_object_data(scene, obj):
|
||||
|
||||
matrix_world = obj.matrix_world.copy()
|
||||
|
||||
|
@ -75,20 +75,20 @@ def GlobalBB_HQ(scene, obj):
|
|||
me = obj.to_mesh(scene=scene, apply_modifiers=True, settings='PREVIEW')
|
||||
verts = me.vertices
|
||||
|
||||
val = matrix_world * verts[-1].co
|
||||
val = matrix_world * (verts[-1].co if verts else Vector((0.0, 0.0, 0.0)))
|
||||
|
||||
left, right, front, back, down, up = (val[0],
|
||||
val[0],
|
||||
val[1],
|
||||
val[1],
|
||||
val[2],
|
||||
val[2],
|
||||
)
|
||||
left, right, front, back, down, up = (
|
||||
val[0],
|
||||
val[0],
|
||||
val[1],
|
||||
val[1],
|
||||
val[2],
|
||||
val[2],
|
||||
)
|
||||
|
||||
# Test against all other verts
|
||||
for i in range(len(verts) - 1):
|
||||
|
||||
vco = matrix_world * verts[i].co
|
||||
for v in verts:
|
||||
vco = matrix_world * v.co
|
||||
|
||||
# X Range
|
||||
val = vco[0]
|
||||
|
@ -155,9 +155,9 @@ def align_objects(context,
|
|||
for obj, bb_world in objects:
|
||||
|
||||
if bb_quality and obj.type == 'MESH':
|
||||
GBB = GlobalBB_HQ(scene, obj)
|
||||
GBB = worldspace_bounds_from_object_data(scene, obj)
|
||||
else:
|
||||
GBB = GlobalBB_LQ(bb_world)
|
||||
GBB = worldspace_bounds_from_object_bounds(bb_world)
|
||||
|
||||
Left_Front_Up = GBB[0]
|
||||
Right_Back_Down = GBB[1]
|
||||
|
@ -219,9 +219,9 @@ def align_objects(context,
|
|||
bb_world = [matrix_world * Vector(v[:]) for v in obj.bound_box]
|
||||
|
||||
if bb_quality and obj.type == 'MESH':
|
||||
GBB = GlobalBB_HQ(scene, obj)
|
||||
GBB = worldspace_bounds_from_object_data(scene, obj)
|
||||
else:
|
||||
GBB = GlobalBB_LQ(bb_world)
|
||||
GBB = worldspace_bounds_from_object_bounds(bb_world)
|
||||
|
||||
Left_Front_Up = GBB[0]
|
||||
Right_Back_Down = GBB[1]
|
||||
|
|
Loading…
Reference in New Issue