| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 | 
							- from .node_container_common import *
 
- from math import pi, tau
 
- from .base_definitions import MantisNode, NodeSocket
 
- def 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')
 
 
  |