C4D.python的标签代码,标签名称,常量名互查工具
可以通过print(f"常量:{c4d.RIGID_BODY_DYNAMIC}")查找到标签代码
在 Cinema 4D 的 Python API 中,通常不能直接通过整数类型的标签代码(如 11003)反查对应的常量(如 c4d.RIGID_BODY_DYNAMIC
)。
import c4d
from c4d import gui# 定义常量用于 UI 元素的 ID
VALUE_INPUT_ID = 1001
LABEL_INPUT_ID = 1002
CONSTANT_NAME_INPUT_ID = 1003
SEARCH_BY_VALUE_BUTTON_ID = 1004
SEARCH_BY_LABEL_BUTTON_ID = 1005
SEARCH_BY_CONSTANT_NAME_BUTTON_ID = 1006class SearchConstantDialog(gui.GeDialog):def CreateLayout(self):self.SetTitle("常量搜索工具")self.AddStaticText(101, c4d.BFH_CENTER, name="标签代码:")self.AddEditText(VALUE_INPUT_ID, c4d.BFH_CENTER, 200, 15)self.AddButton(SEARCH_BY_VALUE_BUTTON_ID, c4d.BFH_CENTER, 200, 15, name="通过代码找常量名")self.AddStaticText(102, c4d.BFH_CENTER, name="标签名称:")self.AddEditText(LABEL_INPUT_ID, c4d.BFH_CENTER, 200, 15)self.AddButton(SEARCH_BY_LABEL_BUTTON_ID, c4d.BFH_CENTER, 200, 15, name="通过标签找常量名")self.AddStaticText(103, c4d.BFH_CENTER, name="常量名称:(去掉c4d.)")self.AddEditText(CONSTANT_NAME_INPUT_ID, c4d.BFH_CENTER, 200, 15)self.AddButton(SEARCH_BY_CONSTANT_NAME_BUTTON_ID, c4d.BFH_CENTER, 200, 15, name="通过常量找代码")return Truedef Command(self, id, msg):if id == SEARCH_BY_VALUE_BUTTON_ID:self.search_by_value()elif id == SEARCH_BY_LABEL_BUTTON_ID:self.search_by_label()elif id == SEARCH_BY_CONSTANT_NAME_BUTTON_ID:self.search_by_constant_name()return Truedef search_by_value(self):#通过标签代码获取常量名>value_to_find = int(self.GetString(VALUE_INPUT_ID))constant_name = find_constant_by_value(value_to_find)if constant_name:print(f"对应的常量为:c4d.{constant_name}")else:print("未找到对应的常量。")def search_by_label(self):#通过标签名获取常量名》label_name = self.GetString(LABEL_INPUT_ID)constant_name = find_constant_by_label_name(label_name)if constant_name:print(f"对应的常量为:c4d.{constant_name}")else:print("未找到对应的常量。")def search_by_constant_name(self):#通过常量名找标签代码constant_name_input = self.GetString(CONSTANT_NAME_INPUT_ID)try:constant_value = getattr(c4d, constant_name_input)#constant_value = eval("c4d." + constant_name_input)#这个也可以print(f"对应的标签代码为:{constant_value}")except AttributeError:print("未找到对应的常量。")def find_constant_by_value(value):#通过标签代码获取常量名>for attr_name in dir(c4d):attr_value = getattr(c4d, attr_name)if attr_value == value:return attr_namereturn Nonedef find_constant_by_label_name(label_name):#通过标签名获取常量名》for attr_name in dir(c4d):attr_value = getattr(c4d, attr_name)if isinstance(attr_value, int):try:tag_name = c4d.GetTagName(attr_value)if tag_name == label_name:return attr_nameexcept:passreturn Noneif __name__ == '__main__':dialog = SearchConstantDialog()dialog.Open(c4d.DLG_TYPE_ASYNC, xpos=100, ypos=100, defaultw=250, defaulth=100)