Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 64 additions & 9 deletions node_to_python.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "Node to Python",
"description": "Convert Geometry Node Groups to a Python add-on",
"author": "Brendan Parmer",
"version": (1, 2, 4),
"version": (1, 3, 0),
"blender": (3, 0, 0),
"location": "Node",
"category": "Node",
Expand Down Expand Up @@ -223,7 +223,8 @@ def process_node_group(node_group, level):
file.write("\n")

inputs_set = False

outputs_set = False

#initialize nodes
file.write(f"{inner}#initialize {ng_name} nodes\n")
for node in node_group.nodes:
Expand All @@ -237,8 +238,8 @@ def process_node_group(node_group, level):
file.write((f"{inner}{ng_name}.inputs.new"
f"(\"{input.bl_idname}\", "
f"\"{input.name}\")\n"))
if input.bl_idname in default_sockets:
socket = node_group.inputs[i]
socket = node_group.inputs[i]
if input.bl_idname in default_sockets:
if input.bl_idname == 'NodeSocketColor':
col = socket.default_value
r, g, b, a = col[0], col[1], col[2], col[3]
Expand All @@ -253,28 +254,82 @@ def process_node_group(node_group, level):
file.write((f"{inner}{ng_name}"
f".inputs[{i}]"
f".default_value = {dv}\n"))
if input.bl_idname in value_sockets:
#min value

#min value
if hasattr(socket, "min_value"):
file.write((f"{inner}{ng_name}"
f".inputs[{i}]"
f".min_value = "
f"{socket.min_value}\n"))
#max value
#max value
if hasattr(socket, "max_value"):
file.write((f"{inner}{ng_name}"
f".inputs[{i}]"
f".max_value = "
f"{socket.max_value}\n"))
#default attribute name
if hasattr(socket, "default_attribute_name"):
if socket.default_attribute_name != "":
file.write((f"{inner}{ng_name}"
f".inputs[{i}]"
f".default_attribute_name = \""
f"{socket.default_attribute_name}"
f"\"\n"))
#description
if socket.description != "":
file.write((f"{inner}{ng_name}"
f".inputs[{i}]"
f".description = "
f"\"{socket.description}\"\n"))
#hide value
if socket.hide_value is True:
file.write((f"{inner}{ng_name}"
f".inputs[{i}]"
f".hide_value = "
f"{socket.hide_value}\n"))
file.write("\n")
file.write("\n")
inputs_set = True
elif node.bl_idname == 'NodeGroupOutput':

elif node.bl_idname == 'NodeGroupOutput' and not outputs_set:
file.write(f"{inner}#{ng_name} outputs\n")
for output in node.inputs:
for i, output in enumerate(node.inputs):
if output.bl_idname != 'NodeSocketVirtual':
file.write((f"{inner}{ng_name}.outputs"
f".new(\"{output.bl_idname}\", "
f"\"{output.name}\")\n"))

socket = node_group.outputs[i]
#description
if socket.description != "":
file.write((f"{inner}{ng_name}"
f".outputs[{i}]"
f".description = "
f"\"{socket.description}\"\n"))
#hide value
if socket.hide_value is True:
file.write((f"{inner}{ng_name}"
f".outputs[{i}]"
f".hide_value = "
f"{socket.hide_value}\n"))

#default attribute name
if hasattr(socket, "default_attribute_name"):
if socket.default_attribute_name != "":
file.write((f"{inner}{ng_name}"
f".outputs[{i}]"
f".default_attribute_name = \""
f"{socket.default_attribute_name}"
f"\"\n"))
#attribute domain
if hasattr(socket, "attribute_domain"):
file.write((f"{inner}{ng_name}"
f".outputs[{i}]"
f".attribute_domain = "
f"\'{socket.attribute_domain}\'\n"))

file.write("\n")
outputs_set = True

#create node
node_name = cleanup_string(node.name)
Expand Down