diff --git a/node_to_python.py b/node_to_python.py index 8f7ca3c..af8acac 100644 --- a/node_to_python.py +++ b/node_to_python.py @@ -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", @@ -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: @@ -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] @@ -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)