Duplicating the Cells
结果展示
过程记录
这一节全部基于 特殊复制 功能,把单个电池复制到如图所示的电池组。视频中的一句话说的很好,即使不进行复杂的细节刻画,简单的复制操作同样能够创造出令人注意的效果。
为了操作更加清晰,可以将需要进行特殊复制的物体进行分组,并在大纲视图中为这些组进行明确的命名。这样做不仅便于在项目中快速定位和管理这些物体,还能使整个场景的结构更加有序。
导出 obj 显示的时候,发现位置有点问题,需要批量对物体进行移动。但目前还不清楚怎么可视化操作,使用的脚本进行操作。
- import maya.cmds as cmds
- # 获取当前选中的所有物体
- selected_objects = cmds.ls(selection=True, long=True) or []
- if selected_objects:
- # 计算选中物体的组合边界框
- bbox = cmds.exactWorldBoundingBox(selected_objects)
- # 计算边界框中心点
- center_x = (bbox[0] + bbox[3]) / 2.0
- center_y = (bbox[1] + bbox[4]) / 2.0
- center_z = (bbox[2] + bbox[5]) / 2.0
- # 计算移动到原点所需的偏移量
- offset_x = 0 - center_x
- offset_y = 0 - center_y
- offset_z = 0 - center_z
- # 对每个选中的物体应用偏移量,移动到世界坐标原点
- for obj in selected_objects:
- cmds.move(offset_x, offset_y, offset_z, obj, relative=True, worldSpace=True)
- else:
- print("没有选中的物体。")
- import maya.cmds as cmds
- # 获取当前选中的所有物体
- selected_objects = cmds.ls(selection=True, long=True) or []
- if selected_objects:
- # 计算选中物体的组合边界框
- bbox = cmds.exactWorldBoundingBox(selected_objects)
- # 计算边界框中心点
- center_x = (bbox[0] + bbox[3]) / 2.0
- center_y = (bbox[1] + bbox[4]) / 2.0
- center_z = (bbox[2] + bbox[5]) / 2.0
- # 在边界框中心创建一个定位器
- locator_name = cmds.spaceLocator(position=(center_x, center_y, center_z))[0]
- # 将所有选中的物体临时父级到定位器
- for obj in selected_objects:
- cmds.parent(obj, locator_name, relative=True)
- # 指定旋转角度,例如旋转30度绕Y轴
- cmds.rotate(0, '30deg', 0, locator_name)
- # 解除父级关系
- for obj in selected_objects:
- cmds.parent(obj, world=True)
- # 删除定位器
- cmds.delete(locator_name)
- else:
- print("没有选中的物体。")