| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 | from .node_container_common import *from math import pi, taufrom .base_definitions import MantisNode, NodeSocketdef TellClasses():    return [        SchemaIndex,        SchemaArrayInput,        SchemaArrayInputGet,        SchemaArrayInputAll,        SchemaArrayOutput,        SchemaConstInput,        SchemaConstOutput,        SchemaOutgoingConnection,        SchemaIncomingConnection,    ]def schema_init_sockets(nc, is_input = True, in_out='INPUT', category=''):    from .utilities import tree_from_nc    parent_tree = tree_from_nc(nc.signature, nc.base_tree)    if is_input:        sockets=nc.inputs    else:        sockets=nc.outputs    if category in ['Constant', 'Array', 'Connection']:        for item in parent_tree.interface.items_tree:            if item.item_type == 'PANEL': continue            if item.parent and item.parent.name == category:                if item.in_out == in_out:                    sockets.init_sockets([item.name])    nc.init_parameters()class SchemaNode(MantisNode):    def __init__(self, signature, base_tree, socket_templates=[]):        super().__init__(signature, base_tree, socket_templates)        self.node_type = 'SCHEMA'        self.prepared = True; self.executed = True        self.execution_prepared = True # should not affect execution!    def reset_execution(self):        super().reset_execution()        self.prepared, self.executed = True, True        raise RuntimeError( "43 Code thought to unreachable has been reached."                           f"Please report this as a bug. {self}")class SchemaIndex(SchemaNode):    def __init__(self, signature, base_tree):        super().__init__(signature, base_tree)        outputs = [          "Index",          "Schema Length",        ]        self.outputs.init_sockets(outputs)        self.init_parameters()class SchemaArrayInput(SchemaNode):    def __init__(self, signature, base_tree):        super().__init__(signature, base_tree)        schema_init_sockets(self, is_input=False, in_out='INPUT', category='Array')class SchemaArrayInputGet(SchemaNode):    def __init__(self, signature, base_tree):        super().__init__(signature, base_tree)        inputs = [            "OoB Behaviour" ,            "Index"         ,        ]        self.inputs.init_sockets(inputs)        schema_init_sockets(self, is_input=False, in_out='INPUT', category='Array')class SchemaArrayInputAll(SchemaNode):    def __init__(self, signature, base_tree):        super().__init__(signature, base_tree)        schema_init_sockets(self, is_input=False, in_out='INPUT', category='Array')class SchemaArrayOutput(SchemaNode):    def __init__(self, signature, base_tree):        super().__init__(signature, base_tree)        schema_init_sockets(self, is_input=True, in_out='OUTPUT', category='Array')class SchemaConstInput(SchemaNode):    def __init__(self, signature, base_tree, parent_schema_node=None):        super().__init__(signature, base_tree)        if parent_schema_node:            # this allows us to generate the Constant Input from a normal Node Group            # and treat the node group as a schema            parent_tree = parent_schema_node.prototype.node_tree            sockets=self.outputs            for item in parent_tree.interface.items_tree:                if item.item_type == 'PANEL': continue                if item.in_out == 'INPUT':                    sockets.init_sockets([item.name])            self.init_parameters()                    else:            schema_init_sockets(self, is_input=False, in_out='INPUT', category='Constant')class SchemaConstOutput(SchemaNode):    def __init__(self, signature, base_tree, parent_schema_node=None):        super().__init__(signature, base_tree)        inputs = [            "Expose at Index",        ]        self.inputs.init_sockets(inputs)        if parent_schema_node:            # this allows us to generate the Constant Input from a normal Node Group            # and treat the node group as a schema            parent_tree = parent_schema_node.prototype.node_tree            sockets=self.inputs            for item in parent_tree.interface.items_tree:                if item.item_type == 'PANEL': continue                if item.in_out == 'OUTPUT':                    sockets.init_sockets([item.name, "Expose at Index",])            self.init_parameters()            self.parameters['Expose at Index"']=1        else:            schema_init_sockets(self, is_input=True, in_out='OUTPUT', category='Constant')        class SchemaOutgoingConnection(SchemaNode):    def __init__(self, signature, base_tree):        super().__init__(signature, base_tree)        schema_init_sockets(self, is_input=True, in_out='INPUT', category='Connection')        class SchemaIncomingConnection(SchemaNode):    def __init__(self, signature, base_tree):        super().__init__(signature, base_tree)        schema_init_sockets(self, is_input=False, in_out='OUTPUT', category='Connection')
 |