|
|
@@ -45,7 +45,8 @@ def reroute_links_grpout(nc, all_nc):
|
|
|
if (nc_to := all_nc.get( ( *nc.signature[:-1],) )):
|
|
|
grp_node_reroute_common(nc, nc_to, all_nc)
|
|
|
else:
|
|
|
- raise RuntimeError("error leaving a node group (maybe you are running the tree from inside a node group?)")
|
|
|
+ prOrange(f"WARN: unconnected outputs from a node group "
|
|
|
+ "(maybe you are running the tree from inside a node group?)")
|
|
|
|
|
|
# FIXME I don't think these signatures are unique.
|
|
|
def insert_lazy_parents(nc):
|
|
|
@@ -295,34 +296,39 @@ def get_schema_length_dependencies(node, all_nodes={}):
|
|
|
def insert_default_values_base_tree(base_tree, all_mantis_nodes):
|
|
|
# we can get this by name because group inputs are gathered to the bl_idname
|
|
|
InputNode = all_mantis_nodes.get((None, 'NodeGroupInput'))
|
|
|
- for output in InputNode.outputs:
|
|
|
+ if InputNode is None: return # nothing to do here.
|
|
|
+ ui_node = InputNode.prototype
|
|
|
+
|
|
|
+ for i, output in enumerate(InputNode.outputs):
|
|
|
+ ui_output = ui_node.outputs[i] # I need this for the error messages to make sense
|
|
|
+ assert ui_output.identifier == output.name, "Cannot find UI Socket for Default Value"
|
|
|
for interface_item in base_tree.interface.items_tree:
|
|
|
+ if interface_item.item_type == 'PANEL': continue
|
|
|
if interface_item.identifier == output.name: break
|
|
|
else:
|
|
|
- raise RuntimeError(f"Default value {output.name} does not exist in {base_tree.name} ")
|
|
|
+ raise RuntimeError(f"Default value {ui_output.name} does not exist in {base_tree.name} ")
|
|
|
if interface_item.item_type == "PANEL":
|
|
|
- raise RuntimeError(f"Cannot get default value for {output.name} in {base_tree.name} ")
|
|
|
+ raise RuntimeError(f"Cannot get default value for {ui_output.name} in {base_tree.name} ")
|
|
|
default_value = None
|
|
|
- match interface_item.bl_socket_idname:
|
|
|
- case "BooleanSocket":
|
|
|
- default_value = interface_item.default_bool
|
|
|
- case "IntSocket":
|
|
|
- default_value = interface_item.default_int
|
|
|
- case "FloatSocket":
|
|
|
- default_value = interface_item.default_float
|
|
|
- case "BooleanThreeTupleSocket":
|
|
|
- default_value = interface_item.default_bool_vector
|
|
|
- case "VectorSocket":
|
|
|
- default_value = interface_item.default_float
|
|
|
- case "StringSocket":
|
|
|
- default_value = interface_item.default_string
|
|
|
- case "xFormSocket":
|
|
|
- if interface_item.default_xForm == 'ARMATURE':
|
|
|
- default_value = 'MANTIS_DEFAULT_ARMATURE'
|
|
|
- else:
|
|
|
- raise RuntimeError(f"No xForm connected for {output.name} in {base_tree.name}.")
|
|
|
- case _:
|
|
|
- raise RuntimeError(f"Cannot get default value for {output.name} in {base_tree.name} ")
|
|
|
+ from bpy.types import bpy_prop_array
|
|
|
+ from mathutils import Vector
|
|
|
+ val_type = None
|
|
|
+ if hasattr(ui_output, 'default_value'):
|
|
|
+ val_type = type(ui_output.default_value) # why tf can't I match/case here?
|
|
|
+ if val_type is bool: default_value = interface_item.default_bool
|
|
|
+ elif val_type is int: default_value = interface_item.default_int
|
|
|
+ elif val_type is float: default_value = interface_item.default_float
|
|
|
+ elif val_type is Vector: default_value = interface_item.default_vector
|
|
|
+ elif val_type is str: default_value = interface_item.default_string
|
|
|
+ elif val_type is bpy_prop_array: default_value = interface_item.default_bool_vector
|
|
|
+ elif interface_item.bl_socket_idname == "xFormSocket":
|
|
|
+ if interface_item.default_xForm == 'ARMATURE':
|
|
|
+ default_value = 'MANTIS_DEFAULT_ARMATURE'
|
|
|
+ else:
|
|
|
+ raise RuntimeError(f"No xForm connected for {ui_output.name} in {base_tree.name}.")
|
|
|
+
|
|
|
+ else:
|
|
|
+ raise RuntimeError(f"Cannot get default value for {ui_output.name} in {base_tree.name} ")
|
|
|
output_name = output.name
|
|
|
if interface_item.bl_socket_idname not in ['xFormSocket']:
|
|
|
signature = ("MANTIS_AUTOGENERATED", f"Default Value {output.name}",)
|