尝试使用 get_child_objects 函数

本教程将使用 get_child_objects 函数来批量获取多个对象。
以下将编写获取所有Cue Sheet正下方的Cue,并按照命名规则来设置类别的脚本。

本教程使用了 find_object 尝试使用 find_object 函数 教程中创建的项目。
没有打开项目时,请打开项目,或执行 find_object 尝试使用 find_object 函数 所创建的脚本后开始此教程。

脚本文件的准备

选择脚本菜单上的“脚本列表...”显示脚本列表窗口。
按脚本列表窗口的“新建”按钮,使用以下名称创建脚本文件。

脚本的保存目标脚本文件名
tutorials [CRI] tutorial05-3_use_get_child_objects.py

脚本说明

双击已创建的脚本,用 从脚本编辑器运行脚本 打开。
要通过脚本列表窗口确认脚本概要,按照以下脚本说明来编写。

# --Description:[教程]使用get_child_objects函数获取Cue并按照命名规则来设置类别


模块的导入

编写脚本说明后,导入以下模块来用脚本操作CRI Atom Craft。

import sys
import cri.atomcraft.debug as acdebug
import cri.atomcraft.project as acproject

导入 Project模块 以进行项目操作,同时导入 debug模块 以输出日志。

设置的类别的准备

find_object 尝试使用 find_object 函数 教程中介绍了如何创建Cue名以"sfx_"开头的多个Cue。
请将 "sfx" 开头的Cue设置为类别“sfx”。
使用以下函数,将创建项目时的预设类别“Category_0”更改为 “sfx”

函数名 说明
get_global_folder 获取总体设置正下方的各对象文件夹
find_object 进行递归搜索获取匹配的对象
set_value 设置指定对象的参数

使用以上函数获取类别并更改名称的处理可以如下编写脚本。

# Cue中设置的类别的准备
# 类别文件夹的获取
category_folder = acproject.get_global_folder("CategoryFolder")["data"]
# 类别的获取
category = acproject.find_object(category_folder, "Category", "Category_0")["data"]
# 类别名的更改
acproject.set_value(category, "Name", "sfx")

要设置的类别准备的解说

使用 get_global_folder 函数来获取类别文件夹。
接下来,使用 find_object 函数,从类别文件夹下方获取类别“Category_0”, 使用 set_value 函数,将类别名更改为“sfx”。

获取要设置类别的Cue Sheet正下方的Cue

先获取工作单元、Cue Sheet。然后以列表形式获取Cue Sheet内的Cue来设置类别。
在此脚本中,Cue的获取使用 get_child_objects 函数来获取位于同一阶层的相同种类的对象列表。

函数名 说明
get_workunit 获取工作单元
find_object 进行递归搜索获取匹配的对象
get_child_objects 指定父对象后获取多个子对象

使用以上函数获取列表形式的Cue Sheet正下方的Cue的处理可以如下编写脚本。

# 获取工作单元
workunit = acproject.get_workunit("WorkUnit_Tutorial")["data"]
# 获取Cue Sheet
cuesheet = acproject.find_object(workunit, "CueSheet", "Tutorial")["data"]
# 获取Cue Sheet正下方的多个Cue
cues = acproject.get_child_objects(cuesheet, "Cue")["data"]

通过 get_child_objects 函数获取多个Cue的解说

使用 get_child_objects 函数,以列表形式获取Cue Sheet正下方的Cue。
get_child_objects 函数中指定“父对象”和“要获取的对象类型”。
指定cuesheet变量和"Cue"(Cue的对象类型)后,获取Cue Sheet正下方的所有Cue,保存在cues变量中。

获取条件匹配的Cue

使用 get_child_objects 函数从获取了的Cue列表创建名称以 "sfx" 开头的Cue列表。
要获取Cue的名称时,使用以下函数。

函数名 说明
get_value 获取已指定对象的参数

写入脚本时如下。

# 要设置类别的Cue列表
# 保存名称的开头包含“sfx”的Cue列表
cues_for_set_categories = []
## 检查对象的Cue
for cue in cues:
# 获取Cue名
cue_name = acproject.get_value(cue, "Name")["data"]
# 使用字符串函数startswith,检查开头是否包含sfx字符
if cue_name.startswith('sfx'): # Cue名以'sfx'开头
# 添加至列表
cues_for_set_categories.append(cue)

获取条件匹配的Cue的解说

使用for控制语句,从cues变量逐个提取Cue, 使用 get_value 函数来获取名称。
使用 find 函数检查名称的开头是否有 "sfx" 字符。如果有,则使用 append 函数将Cue添加至cues_for_set_categories列表中。

对Cue设置类别

对cues_for_set_categories列表中保存的名称以sfx开头的Cue设置类别。
本节使用以下函数,只需调用一次就能为多个Cue设置类别。

函数名 说明
add_category_to_cues 针对多个Cue设置类别

写入脚本时如下。

# 设置类别
# 要为多个Cue批量应用类别时,使用add_category_to_cues。
acproject.add_category_to_cues(cues_for_set_categories, category)
acdebug.log("[教程]使用get_child_objects函数获取Cue,按照命名规则设置类别完成")

对Cue设置类别的解说

使用 add_category_to_cues 函数对多个Cue设置相同的类别。
add_category_to_cues 函数中指定“Cue列表”和“类别”。

类别设置方法除了 add_category_to_cues 函数之外, 还有能针对单个Cue批量设置多个类别的 set_categories 函数。
可以按照自己的用途,使用不同的类别设置函数来高效地对Cue设置类别。

脚本的保存和执行

本教程的脚本编写到此为止。
请保存并执行脚本。
正常运行脚本后,CategoryGroup_0下方的“Category_0”将变为“sfx”,以 "sfx" 开头的名称的Cue上会设置“sfx”类别,如下所示。

criatom_tools_atomcraft_api_tutorial_search_and_edit_category.png