22 "name" : "Node to Python" ,
33 "description" : "Convert Geometry Node Groups to a Python add-on" ,
44 "author" : "Brendan Parmer" ,
5- "version" : (1 , 2 , 4 ),
5+ "version" : (1 , 3 , 0 ),
66 "blender" : (3 , 0 , 0 ),
77 "location" : "Node" ,
88 "category" : "Node" ,
@@ -223,7 +223,8 @@ def process_node_group(node_group, level):
223223 file .write ("\n " )
224224
225225 inputs_set = False
226-
226+ outputs_set = False
227+
227228 #initialize nodes
228229 file .write (f"{ inner } #initialize { ng_name } nodes\n " )
229230 for node in node_group .nodes :
@@ -237,8 +238,8 @@ def process_node_group(node_group, level):
237238 file .write ((f"{ inner } { ng_name } .inputs.new"
238239 f"(\" { input .bl_idname } \" , "
239240 f"\" { input .name } \" )\n " ))
240- if input . bl_idname in default_sockets :
241- socket = node_group . inputs [ i ]
241+ socket = node_group . inputs [ i ]
242+ if input . bl_idname in default_sockets :
242243 if input .bl_idname == 'NodeSocketColor' :
243244 col = socket .default_value
244245 r , g , b , a = col [0 ], col [1 ], col [2 ], col [3 ]
@@ -253,28 +254,82 @@ def process_node_group(node_group, level):
253254 file .write ((f"{ inner } { ng_name } "
254255 f".inputs[{ i } ]"
255256 f".default_value = { dv } \n " ))
256- if input .bl_idname in value_sockets :
257- #min value
257+
258+ #min value
259+ if hasattr (socket , "min_value" ):
258260 file .write ((f"{ inner } { ng_name } "
259261 f".inputs[{ i } ]"
260262 f".min_value = "
261263 f"{ socket .min_value } \n " ))
262- #max value
264+ #max value
265+ if hasattr (socket , "max_value" ):
263266 file .write ((f"{ inner } { ng_name } "
264267 f".inputs[{ i } ]"
265268 f".max_value = "
266269 f"{ socket .max_value } \n " ))
270+ #default attribute name
271+ if hasattr (socket , "default_attribute_name" ):
272+ if socket .default_attribute_name != "" :
273+ file .write ((f"{ inner } { ng_name } "
274+ f".inputs[{ i } ]"
275+ f".default_attribute_name = \" "
276+ f"{ socket .default_attribute_name } "
277+ f"\" \n " ))
278+ #description
279+ if socket .description != "" :
280+ file .write ((f"{ inner } { ng_name } "
281+ f".inputs[{ i } ]"
282+ f".description = "
283+ f"\" { socket .description } \" \n " ))
284+ #hide value
285+ if socket .hide_value is True :
286+ file .write ((f"{ inner } { ng_name } "
287+ f".inputs[{ i } ]"
288+ f".hide_value = "
289+ f"{ socket .hide_value } \n " ))
267290 file .write ("\n " )
268291 file .write ("\n " )
269292 inputs_set = True
270- elif node .bl_idname == 'NodeGroupOutput' :
293+
294+ elif node .bl_idname == 'NodeGroupOutput' and not outputs_set :
271295 file .write (f"{ inner } #{ ng_name } outputs\n " )
272- for output in node .inputs :
296+ for i , output in enumerate ( node .inputs ) :
273297 if output .bl_idname != 'NodeSocketVirtual' :
274298 file .write ((f"{ inner } { ng_name } .outputs"
275299 f".new(\" { output .bl_idname } \" , "
276300 f"\" { output .name } \" )\n " ))
301+
302+ socket = node_group .outputs [i ]
303+ #description
304+ if socket .description != "" :
305+ file .write ((f"{ inner } { ng_name } "
306+ f".outputs[{ i } ]"
307+ f".description = "
308+ f"\" { socket .description } \" \n " ))
309+ #hide value
310+ if socket .hide_value is True :
311+ file .write ((f"{ inner } { ng_name } "
312+ f".outputs[{ i } ]"
313+ f".hide_value = "
314+ f"{ socket .hide_value } \n " ))
315+
316+ #default attribute name
317+ if hasattr (socket , "default_attribute_name" ):
318+ if socket .default_attribute_name != "" :
319+ file .write ((f"{ inner } { ng_name } "
320+ f".outputs[{ i } ]"
321+ f".default_attribute_name = \" "
322+ f"{ socket .default_attribute_name } "
323+ f"\" \n " ))
324+ #attribute domain
325+ if hasattr (socket , "attribute_domain" ):
326+ file .write ((f"{ inner } { ng_name } "
327+ f".outputs[{ i } ]"
328+ f".attribute_domain = "
329+ f"\' { socket .attribute_domain } \' \n " ))
330+
277331 file .write ("\n " )
332+ outputs_set = True
278333
279334 #create node
280335 node_name = cleanup_string (node .name )
0 commit comments