From 4d2280e3e27fd193d26a2321edda85d5c1ef757f Mon Sep 17 00:00:00 2001 From: BrendanParmer <51296046+BrendanParmer@users.noreply.github.com> Date: Mon, 22 May 2023 15:03:02 -0500 Subject: [PATCH 1/5] fix: typo for set dimensions comment --- utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils.py b/utils.py index fc0a796..da3395e 100644 --- a/utils.py +++ b/utils.py @@ -529,7 +529,7 @@ def set_dimensions(node_tree, file: TextIO, inner: str, node_vars: dict): node_vars (dict): dictionary for (node, variable) name pairs """ - file.write(f"{inner}#sSet dimensions\n") + file.write(f"{inner}#Set dimensions\n") for node in node_tree.nodes: node_var = node_vars[node] file.write((f"{inner}{node_var}.width, {node_var}.height " From a5ed5e5196166eb7123c887b382057168a61d72e Mon Sep 17 00:00:00 2001 From: BrendanParmer <51296046+BrendanParmer@users.noreply.github.com> Date: Mon, 22 May 2023 15:59:33 -0500 Subject: [PATCH 2/5] feat: pair simulation inputs with corresponding output --- geo_nodes.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/geo_nodes.py b/geo_nodes.py index bedad2e..59b3452 100644 --- a/geo_nodes.py +++ b/geo_nodes.py @@ -231,6 +231,8 @@ def process_geo_nodes_group(node_tree, level, node_vars, used_vars): #initialize nodes file.write(f"{inner}#initialize {node_tree_var} nodes\n") + sim_inputs = [] + for node in node_tree.nodes: if node.bl_idname == 'GeometryNodeGroup': node_nt = node.node_tree @@ -390,9 +392,17 @@ def process_geo_nodes_group(node_tree, level, node_vars, used_vars): if img.source in {'FILE', 'GENERATED', 'TILED'}: save_image(img, addon_dir) load_image(img, file, inner, f"{node_var}.image") - + elif node.bl_idname == 'GeometryNodeSimulationInput': + sim_inputs.append(node) set_input_defaults(node, file, inner, node_var, addon_dir) set_output_defaults(node, file, inner, node_var) + + #create simulation zones + for sim_input in sim_inputs: + sim_input_var = node_vars[sim_input] + sim_output_var = node_vars[sim_input.paired_output] + file.write((f"{inner}{sim_input_var}.pair_with_output" + f"({sim_output_var})\n")) set_parents(node_tree, file, inner, node_vars) set_locations(node_tree, file, inner, node_vars) set_dimensions(node_tree, file, inner, node_vars) From 5a1ebc64c3c937759f56f58426cd0e4f254eb97f Mon Sep 17 00:00:00 2001 From: BrendanParmer <51296046+BrendanParmer@users.noreply.github.com> Date: Mon, 22 May 2023 16:00:15 -0500 Subject: [PATCH 3/5] feat: don't write set parents comment unless parents are set --- utils.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/utils.py b/utils.py index da3395e..5392324 100644 --- a/utils.py +++ b/utils.py @@ -492,9 +492,12 @@ def set_parents(node_tree, file: TextIO, inner: str, node_vars: dict): inner (str): indentation string node_vars (dict): dictionary for (node, variable) name pairs """ - file.write(f"{inner}#Set parents\n") + parent_comment = False for node in node_tree.nodes: if node is not None and node.parent is not None: + if not parent_comment: + file.write(f"{inner}#Set parents\n") + parent_comment = True node_var = node_vars[node] parent_var = node_vars[node.parent] file.write(f"{inner}{node_var}.parent = {parent_var}\n") From 135a6e64469c08810ce3c969c67d28f7dd5b55ae Mon Sep 17 00:00:00 2001 From: BrendanParmer <51296046+BrendanParmer@users.noreply.github.com> Date: Mon, 22 May 2023 16:32:31 -0500 Subject: [PATCH 4/5] feat: handles simulation state items --- geo_nodes.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/geo_nodes.py b/geo_nodes.py index 59b3452..eb6d906 100644 --- a/geo_nodes.py +++ b/geo_nodes.py @@ -394,6 +394,20 @@ def process_geo_nodes_group(node_tree, level, node_vars, used_vars): load_image(img, file, inner, f"{node_var}.image") elif node.bl_idname == 'GeometryNodeSimulationInput': sim_inputs.append(node) + elif node.bl_idname == 'GeometryNodeSimulationOutput': + file.write(f"{inner}#remove generated sim state items\n") + file.write(f"{inner}for item in {node_var}.state_items:\n") + file.write(f"{inner}\t{node_var}.state_items.remove(item)\n") + for i, si in enumerate(node.state_items): + socket_type = enum_to_py_str(si.socket_type) + name = str_to_py_str(si.name) + file.write((f"{inner}{node_var}.state_items.new" + f"({socket_type}, {name})\n")) + si_var = f"{node_var}.state_items[{i}]" + attr_domain = enum_to_py_str(si.attribute_domain) + file.write((f"{inner}{si_var}.attribute_domain = " + f"{attr_domain}\n")) + set_input_defaults(node, file, inner, node_var, addon_dir) set_output_defaults(node, file, inner, node_var) From cf9a960a3545d0afb5a02b52aa8ef6db2c0111e0 Mon Sep 17 00:00:00 2001 From: BrendanParmer <51296046+BrendanParmer@users.noreply.github.com> Date: Mon, 22 May 2023 16:51:57 -0500 Subject: [PATCH 5/5] fix: sim input nodes now set socket defaults after being paired with the corresponding output --- geo_nodes.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/geo_nodes.py b/geo_nodes.py index eb6d906..6f9082a 100644 --- a/geo_nodes.py +++ b/geo_nodes.py @@ -401,6 +401,7 @@ def process_geo_nodes_group(node_tree, level, node_vars, used_vars): for i, si in enumerate(node.state_items): socket_type = enum_to_py_str(si.socket_type) name = str_to_py_str(si.name) + file.write(f"{inner}#create SSI {name}\n") file.write((f"{inner}{node_var}.state_items.new" f"({socket_type}, {name})\n")) si_var = f"{node_var}.state_items[{i}]" @@ -408,8 +409,9 @@ def process_geo_nodes_group(node_tree, level, node_vars, used_vars): file.write((f"{inner}{si_var}.attribute_domain = " f"{attr_domain}\n")) - set_input_defaults(node, file, inner, node_var, addon_dir) - set_output_defaults(node, file, inner, node_var) + if node.bl_idname != 'GeometryNodeSimulationInput': + set_input_defaults(node, file, inner, node_var, addon_dir) + set_output_defaults(node, file, inner, node_var) #create simulation zones for sim_input in sim_inputs: @@ -417,6 +419,11 @@ def process_geo_nodes_group(node_tree, level, node_vars, used_vars): sim_output_var = node_vars[sim_input.paired_output] file.write((f"{inner}{sim_input_var}.pair_with_output" f"({sim_output_var})\n")) + + #must set defaults after paired with output + set_input_defaults(sim_input, file, inner, sim_input_var, addon_dir) + set_output_defaults(sim_input, file, inner, sim_input_var) + set_parents(node_tree, file, inner, node_vars) set_locations(node_tree, file, inner, node_vars) set_dimensions(node_tree, file, inner, node_vars)