Изменить порядок сокетов в нодовой группе вручную можно простым перетаскиванием – в N-панели во вкладке Group – Interface зажимаем нужный сокет и перетягиваем его мышкой на нужное место. Переместить сокет в групповом ноде на новое место при помощи Blender Python API можно, используя функцию move объекта interface.
Начиная с версии Blender 4.1 все манипуляции с сокетами нодов производятся через объект interface нодового дерева.
Указатель на нодовое дерево Geometry Nodes для текущего активного объекта:
1 2 3 |
node_group = bpy.context.object.modifiers['GeometryNodes'].node_group # bpy.data.node_groups['Geometry Nodes'] |
Указатель на объект interface нодового дерева:
1 2 3 |
interface = node_group.interface # bpy.data.node_groups['Geometry Nodes']...NodeTreeInterface |
Для примера переместим сокет типа Float, стоящий на седьмом месте по порядку в выходном ноде Group Output на второе место.
Указатель на нужный сокет мы можем получить по его имени:
1 2 3 |
socket = interface.items_tree['Socket_float'] # bpy.data.node_groups['Geometry Nodes'].interface.items_tree[7] |
или по его типу:
1 2 3 4 5 6 |
socket = next( (_socket for _socket in interface.items_tree if _socket.bl_socket_idname == 'NodeSocketFloat') , None ) # bpy.data.node_groups['Geometry Nodes'].interface.items_tree[7] |
или, что проще всего, по его порядковому номеру:
1 2 3 |
socket = interface.items_tree[7] # bpy.data.node_groups['Geometry Nodes'].interface.items_tree[7] |
Чтобы переместить его на второе место по порядку, воспользуемся функцией move(), передав в ее параметрах указатель на перемещаемый сокет и индекс места, куда его нужно переместить.
1 2 3 4 |
interface.move( socket, 1 ) |
После вызова этой функции сокет переместится на указанное место. Обратите внимание, индекс места считается начиная с нуля, поэтому 1 – переместить на второе место.