You've already forked stocker_helper
45 lines
1.3 KiB
Python
45 lines
1.3 KiB
Python
import bpy
|
|
import mathutils
|
|
|
|
def calculate_global_bounds(selected_objects):
|
|
if not selected_objects:
|
|
print("No objects selected.")
|
|
return None
|
|
|
|
min_x = float('inf')
|
|
min_y = float('inf')
|
|
min_z = float('inf')
|
|
max_x = float('-inf')
|
|
max_y = float('-inf')
|
|
max_z = float('-inf')
|
|
|
|
for obj in selected_objects:
|
|
if obj.type != 'MESH':
|
|
continue
|
|
|
|
# Transform local bounding box corners to world space
|
|
matrix = obj.matrix_all_world = obj.matrix_world
|
|
for corner in obj.bound_box:
|
|
world_corner = matrix @ mathutils.Vector(corner)
|
|
|
|
min_x = min(min_x, world_corner.x)
|
|
min_y = min(min_y, world_corner.y)
|
|
min_z = min(min_z, world_corner.z)
|
|
max_x = max(max_x, world_corner.x)
|
|
max_y = max(max_y, world_corner.y)
|
|
max_z = max(max_z, world_corner.z)
|
|
|
|
if min_x == float('inf'):
|
|
print("No valid mesh objects found in selection.")
|
|
return None
|
|
|
|
return {
|
|
'min': (min_x, min_y, min_z),
|
|
'max': (max_x, max_y, max_z),
|
|
'dimensions': (max_x - min_x, max_y - min_y, max_z - min_z),
|
|
'target_origin': (max_x, min_y, min_z)
|
|
}
|
|
|
|
if __name__ == "__main__":
|
|
print("Phase 1: Logic verification script loaded.")
|