Как создать узлы в Xpresso и соединить их
Получаем тег Xpresso и корневой узел:
# Получаем активный объект в документе
my_object = doc.GetActiveObject()
# Получаем тег Xpresso, предполагается, что он уже прикреплен к объекту
xpresso_tag = my_object.GetTag(c4d.Texpresso)
# Получаем мастер узлов и корневой узел
node_master = xpresso_tag.GetNodeMaster()
root = node_master.GetRoot()
Создадим узел объекта и математический узел:
node1 = node_master.CreateNode(root, c4d.ID_OPERATOR_OBJECT, x=200, y=100)
node2 = node_master.CreateNode(root, c4d.ID_OPERATOR_MATH, x=400, y=100)
Другие типы узлов смотрим в документации, а их параметры ищем тут
У мат.оператора поменяем тип данных на целочисленный и тип функции на умножение. Для изменения этих параметров, сначала надо получить контейнер с настройками соответствующего узла:
bc = node2.GetOperatorContainer() # получаем контейнер мат.узла
bc[c4d.GV_DYNAMIC_DATATYPE] = c4d.DTYPE_LONG # меняем тип данных
bc[c4d.GV_MATH_FUNCTION_ID] = c4d.GV_MUL_NODE_FUNCTION # меняем функцию
node2.SetOperatorContainer(bc) # сохраняем изменения в узле
print(node2[c4d.GV_DYNAMIC_DATATYPE]) # можно вывести значение параметра
Обратите внимание: значение параметра можно прочитать обратившись к соответствующему свойству, но изменить его напрямую, присвоив значение нельзя (node2[c4d.GV_DYNAMIC_DATATYPE] = c4d.DTYPE_LONG
- выдаст ошибку!)
Можно задать узлу своё название:
node2.SetName("My Math operator")
Теперь, добавляем порты и соединяем:
# Добавляем порты
node1.AddPort(c4d.GV_PORT_INPUT, c4d.ID_BASEOBJECT_REL_POSITION)
node1.AddPort(c4d.GV_PORT_OUTPUT, c4d.ID_BASEOBJECT_REL_POSITION)
# Получаем порты узлов
node1_out = node1.GetOutPorts()[0]
node2_in = node2.GetInPorts()[0]
# Соединяем порты
node1_out.Connect(node2_in)
# Обновляем документ
c4d.EventAdd()
Last updated
Was this helpful?