Blender Python脚本

根据物体大小分类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import bpy
from collections import defaultdict

# 准备一个字典,用来根据大小组织物体
size_to_objects = defaultdict(list)

# 遍历场景中的所有物体
for obj in bpy.context.scene.objects:
# 确保物体有网格数据
if obj.type == 'MESH':
# 计算物体的体积大小
# 注意:确保物体的变换应用过,才能得到正确的体积
bpy.context.view_layer.objects.active = obj
bpy.ops.object.mode_set(mode='OBJECT')
bpy.ops.object.transform_apply(location=True, rotation=True, scale=True)
volume = obj.dimensions.x * obj.dimensions.y * obj.dimensions.z
# 根据大小分组
size_to_objects[volume].append(obj)

# 根据大小创建集合并分配物体
for size, objs in size_to_objects.items():
# 创建一个新的集合用于这个特定的大小
collection_name = f"Size_{size:.2f}"
new_collection = bpy.data.collections.new(name=collection_name)
bpy.context.scene.collection.children.link(new_collection)

# 将具有相同大小的物体移动到新集合
for obj in objs:
# 先从它们当前的集合中解除链接
for col in obj.users_collection:
col.objects.unlink(obj)
# 链接到新集合
new_collection.objects.link(obj)

print("分组完成!")

改变相机位置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import bpy

try:
# 获取场景中的相机对象
camera = bpy.data.objects.get('Camera')

if camera:
# 输出当前相机的位置和旋转角度
print("当前相机位置:", camera.location)
print("当前相机旋转角度 (弧度):", camera.rotation_euler)

# # 设定新的位置
# camera.location = (1.0, 2.0, 3.0)

# # 设定新的旋转角度(采用弧度制)
# import math
# camera.rotation_euler = (math.radians(90), math.radians(0), math.radians(0))

# # 输出修改后的相机位置和旋转角度
# print("修改后的相机位置:", camera.location)
# print("修改后的相机旋转角度 (弧度):", camera.rotation_euler)
else:
print("场景中没有找到名为 'Camera' 的相机对象。请检查对象名称是否正确。")

except Exception as e:
print("发生错误:", str(e))