Przeglądaj źródła

update visualization tool

Joseph Brandenburg 5 miesięcy temu
rodzic
commit
e1bf097c0c
1 zmienionych plików z 30 dodań i 6 usunięć
  1. 30 6
      visualize.py

+ 30 - 6
visualize.py

@@ -1,6 +1,7 @@
 """ Optional file providing a tool to visualize Mantis Graphs, for debugging and development"""
 
 from bpy.types import Node, NodeTree, Operator
+from bpy.props import StringProperty
 
 from .utilities import (prRed, prGreen, prPurple, prWhite,
                               prOrange,
@@ -16,17 +17,28 @@ class MantisVisualizeTree(NodeTree):
 class MantisVisualizeNode(Node):
     bl_idname = "MantisVisualizeNode"
     bl_label = "Node"
+    signature : StringProperty(default = '')
     @classmethod
     def poll(cls, ntree):
         return (ntree.bl_idname in ['MantisVisualizeTree'])
     
     def init(self, context):
         pass
+
+    def draw_label(self):
+        label=''
+        exploded = self.signature.separate('|')
+        for elem in exploded:
+            label+=elem+', '
+        label = label[:-2] # cut the last comma
+        return label
     
     def gen_data(self, mantis_node, mode='DEBUG_CONNECTIONS'):
         from .utilities import get_node_prototype
         if mantis_node.node_type in ['SCHEMA', 'DUMMY']:
             np=None
+        elif mantis_node.ui_signature is None:
+            np=None
         else:
             np=get_node_prototype(mantis_node.ui_signature, mantis_node.base_tree)
         self.use_custom_color = True
@@ -37,7 +49,16 @@ class MantisVisualizeNode(Node):
             case 'DRIVER':       self.color = (0.7, 0.05, 0.8)
             case 'DUMMY_SCHEMA': self.color = (0.85 ,0.95, 0.9)
             case 'DUMMY':        self.color = (0.05 ,0.05, 0.15)
-        self.name = '.'.join(mantis_node.signature[1:])
+        
+        if mantis_node.execution_prepared:
+            self.color = (0.02, 0.98, 0.02) # GREEN!
+                
+        # if mantis_node.execution_debug_tag:
+        #     self.color = (0.02 ,0.02, 0.02)
+
+        self.name = '.'.join(mantis_node.signature[1:]) # this gets trunc'd
+        self.signature = '|'.join(mantis_node.signature[1:])
+
 
         if np:
             if np.label:
@@ -92,8 +113,10 @@ def gen_vis_node( mantis_node,
                   links,
                   omit_simple=True,
                  ):
-    if mantis_node.node_type == 'UTILITY':
-        return
+    from .base_definitions import array_output_types
+    if mantis_node.node_type == 'UTILITY' and \
+         mantis_node.execution_prepared == True:
+            return
     base_tree= mantis_node.base_tree
     vis = vis_tree.nodes.new('MantisVisualizeNode')
     vis.gen_data(mantis_node)
@@ -119,11 +142,11 @@ def visualize_tree(m_nodes, base_tree, context):
     from pstats import SortKey
     with cProfile.Profile() as pr:
         try:
-            trace_all_nodes = True
+            trace_from_roots = True
             all_links = set()
             mantis_nodes=set()
             nodes={}
-            if trace_all_nodes:
+            if trace_from_roots:
                 roots=[]
                 for n in m_nodes.values():
                     check_and_add_root(n, roots)
@@ -139,6 +162,8 @@ def visualize_tree(m_nodes, base_tree, context):
 
             for m in mantis_nodes:
                 nodes[m.signature]=gen_vis_node(m, vis_tree,all_links)
+                # useful for debugging: check the connections for nodes that are
+                # not in the parsed tree or available from trace_all_nodes_from_root.
 
             for l in all_links:
                 if l.to_node.node_type in ['DUMMY_SCHEMA', 'DUMMY'] or \
@@ -227,7 +252,6 @@ class MantisVisualizeOutput(Operator):
         
         tree=context.space_data.path[0].node_tree
         tree.update_tree(context)
-        # tree.execute_tree(context)
         prGreen(f"Visualize Tree: {tree.name}")
         nodes = tree.parsed_tree
         visualize_tree(nodes, tree, context)