Skip to content

Commit 7fa44f0

Browse files
Merge pull request #47 from BrendanParmer/simulation_nodes
Simulation nodes
2 parents 6f5f628 + cf9a960 commit 7fa44f0

File tree

2 files changed

+39
-5
lines changed

2 files changed

+39
-5
lines changed

geo_nodes.py

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,8 @@ def process_geo_nodes_group(node_tree, level, node_vars, used_vars):
231231
#initialize nodes
232232
file.write(f"{inner}#initialize {node_tree_var} nodes\n")
233233

234+
sim_inputs = []
235+
234236
for node in node_tree.nodes:
235237
if node.bl_idname == 'GeometryNodeGroup':
236238
node_nt = node.node_tree
@@ -390,9 +392,38 @@ def process_geo_nodes_group(node_tree, level, node_vars, used_vars):
390392
if img.source in {'FILE', 'GENERATED', 'TILED'}:
391393
save_image(img, addon_dir)
392394
load_image(img, file, inner, f"{node_var}.image")
393-
394-
set_input_defaults(node, file, inner, node_var, addon_dir)
395-
set_output_defaults(node, file, inner, node_var)
395+
elif node.bl_idname == 'GeometryNodeSimulationInput':
396+
sim_inputs.append(node)
397+
elif node.bl_idname == 'GeometryNodeSimulationOutput':
398+
file.write(f"{inner}#remove generated sim state items\n")
399+
file.write(f"{inner}for item in {node_var}.state_items:\n")
400+
file.write(f"{inner}\t{node_var}.state_items.remove(item)\n")
401+
for i, si in enumerate(node.state_items):
402+
socket_type = enum_to_py_str(si.socket_type)
403+
name = str_to_py_str(si.name)
404+
file.write(f"{inner}#create SSI {name}\n")
405+
file.write((f"{inner}{node_var}.state_items.new"
406+
f"({socket_type}, {name})\n"))
407+
si_var = f"{node_var}.state_items[{i}]"
408+
attr_domain = enum_to_py_str(si.attribute_domain)
409+
file.write((f"{inner}{si_var}.attribute_domain = "
410+
f"{attr_domain}\n"))
411+
412+
if node.bl_idname != 'GeometryNodeSimulationInput':
413+
set_input_defaults(node, file, inner, node_var, addon_dir)
414+
set_output_defaults(node, file, inner, node_var)
415+
416+
#create simulation zones
417+
for sim_input in sim_inputs:
418+
sim_input_var = node_vars[sim_input]
419+
sim_output_var = node_vars[sim_input.paired_output]
420+
file.write((f"{inner}{sim_input_var}.pair_with_output"
421+
f"({sim_output_var})\n"))
422+
423+
#must set defaults after paired with output
424+
set_input_defaults(sim_input, file, inner, sim_input_var, addon_dir)
425+
set_output_defaults(sim_input, file, inner, sim_input_var)
426+
396427
set_parents(node_tree, file, inner, node_vars)
397428
set_locations(node_tree, file, inner, node_vars)
398429
set_dimensions(node_tree, file, inner, node_vars)

utils.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -492,9 +492,12 @@ def set_parents(node_tree, file: TextIO, inner: str, node_vars: dict):
492492
inner (str): indentation string
493493
node_vars (dict): dictionary for (node, variable) name pairs
494494
"""
495-
file.write(f"{inner}#Set parents\n")
495+
parent_comment = False
496496
for node in node_tree.nodes:
497497
if node is not None and node.parent is not None:
498+
if not parent_comment:
499+
file.write(f"{inner}#Set parents\n")
500+
parent_comment = True
498501
node_var = node_vars[node]
499502
parent_var = node_vars[node.parent]
500503
file.write(f"{inner}{node_var}.parent = {parent_var}\n")
@@ -529,7 +532,7 @@ def set_dimensions(node_tree, file: TextIO, inner: str, node_vars: dict):
529532
node_vars (dict): dictionary for (node, variable) name pairs
530533
"""
531534

532-
file.write(f"{inner}#sSet dimensions\n")
535+
file.write(f"{inner}#Set dimensions\n")
533536
for node in node_tree.nodes:
534537
node_var = node_vars[node]
535538
file.write((f"{inner}{node_var}.width, {node_var}.height "

0 commit comments

Comments
 (0)