集合(文件夹)内容转移
作用效果
将旧集合下的所有 直接 对象转移到新集合下,然后删除旧集合。
- 脚本执行前
- 脚本执行后
上面结果虽然看起来像是重命名了该集合,但是要 注意 该脚本并不会管旧集合下的子集合对象
- 执行脚本前
- 执行脚本后
如果想实现该效果的话,则需要考虑加入判断 “旧集合中是否有子集合并遍历” “在新集合中新建子集合” 等功能
代码与详细注释
import bpy
# 当前集合(文件夹)
from_col = bpy.data.collections["Collection"]
# 创建一个新的集合(文件夹)
to_col = bpy.data.collections.new("Collection New")
# 把新的集合(文件夹)链接到场景中(即作为 '场景根集合' 的子集合),不然不显示
bpy.context.scene.collection.children.link(to_col)
# 保存要在旧集合移除的项(将 blender 集合类型转为列表)
un_link_list = list(from_col.objects)
# 遍历旧集合,并把其下的对象移动到新集合
for ob in from_col.objects:
try:
to_col.objects.link(ob)
except:
pass
# 在旧集合里移除项
for ob in un_link_list:
from_col.objects.unlink(ob)
# 删除旧集合文件夹
bpy.data.collections.remove(from_col)
API 注解
-
bpy.context.scene.collection
: '场景根集合',它拥有场景中实例化的所有对象和其他集合 -
bpy.context.scene.collection.children
: 此集合的直接子集合 -
bpy.context.scene.collection.children.link
: 将此集合添加为此集合的子集合 -
bpy.data.collections["Collection"].objects
: 直接挂在该集合下的对象 -
bpy.data.collections["Collection"].objects.link(ob)
: 将ob
添加到该集合当中(Demo 更常见的用bpy.context.scene.collection.objects.link(obj)
直接将ob
挂在 '场景根集合' 下) -
bpy.data.collections["Collection"].objects. unlink(ob)
: 将ob
移除出该集合