From f3377892235ca74593f6c05e620e74612419756b Mon Sep 17 00:00:00 2001
From: RichardFrangenberg <richard@prism-pipeline.com>
Date: Fri, 7 Jun 2024 17:14:14 +0100
Subject: [PATCH 1/2] fix gltf node types

---
 src/QuiltiX/mx_node.py | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/QuiltiX/mx_node.py b/src/QuiltiX/mx_node.py
index 3e9ac2d..af3de2c 100644
--- a/src/QuiltiX/mx_node.py
+++ b/src/QuiltiX/mx_node.py
@@ -127,4 +127,7 @@ def get_mx_node_def_type(mx_node_def):
         else "ND_"
     )
     mx_node_def_type = mx_node_def_full_name.replace(all_but_type_string, "")
+    if "_" in mx_node_def_type:
+        mx_node_def_type = mx_node_def_type.split("_")[0]
+
     return mx_node_def_type

From d12f6926342f52c2783d0e847322b9bd5ea02c5b Mon Sep 17 00:00:00 2001
From: RichardFrangenberg <richard@prism-pipeline.com>
Date: Thu, 20 Jun 2024 20:58:34 +0100
Subject: [PATCH 2/2] changed approach to get node types

---
 src/QuiltiX/mx_node.py      |  6 ++----
 src/QuiltiX/qx_node.py      | 42 +++++++++++++------------------------
 src/QuiltiX/qx_nodegraph.py |  8 +++++--
 3 files changed, 23 insertions(+), 33 deletions(-)

diff --git a/src/QuiltiX/mx_node.py b/src/QuiltiX/mx_node.py
index af3de2c..39dc5db 100644
--- a/src/QuiltiX/mx_node.py
+++ b/src/QuiltiX/mx_node.py
@@ -102,13 +102,13 @@ def get_mx_node_group_dict(mx_node_defs):
         mx_node_group_dict.setdefault(mx_node_group, {})
         mx_node_group_key = mx_node_group_dict[mx_node_group]
 
-        mx_node_def_type = get_mx_node_def_type(mx_node_def)
+        mx_node_def_type = get_displaytype_from_mx_def(mx_node_def)
         mx_node_group_key.setdefault(mx_node_def_name, {})[mx_node_def_type] = mx_node_def
 
     return mx_node_group_dict
 
 
-def get_mx_node_def_type(mx_node_def):
+def get_displaytype_from_mx_def(mx_node_def):
     # return mx_node_def.getType()
 
     mx_node_def_string = mx_node_def.getNodeString()
@@ -127,7 +127,5 @@ def get_mx_node_def_type(mx_node_def):
         else "ND_"
     )
     mx_node_def_type = mx_node_def_full_name.replace(all_but_type_string, "")
-    if "_" in mx_node_def_type:
-        mx_node_def_type = mx_node_def_type.split("_")[0]
 
     return mx_node_def_type
diff --git a/src/QuiltiX/qx_node.py b/src/QuiltiX/qx_node.py
index c72b152..20c1b42 100644
--- a/src/QuiltiX/qx_node.py
+++ b/src/QuiltiX/qx_node.py
@@ -101,38 +101,26 @@ def __init__(self, node_type=None, node_graph=None):
 
     @classmethod
     def from_mx_node(cls, mx_node, node_graph=None):
-        mx_def_type = cls.get_mx_def_type_from_mx_node(cls, mx_node)
+        mx_def_type = cls.get_displaytype_from_mx_node(cls, mx_node)
         qx_node = cls(node_type=mx_def_type, node_graph=node_graph)
         return qx_node
 
-    def get_mx_def_type_from_mx_node(self, mx_node):
-        def match_inputs(mx_node):
-            mx_node_input_types = [o.getType() for o in mx_node.getActiveInputs()]
-            for mx_def in self.possible_mx_defs.values():
-                mx_def_input_types = [o.getType() for o in mx_def.getActiveInputs()]
-                if mx_node_input_types == mx_def_input_types:
-                    # TODO reverse lookup from dict instead
-                    from QuiltiX.mx_node import get_mx_node_def_type
-                    return get_mx_node_def_type(mx_def)
-            return None
-
-        # TODO: is matching inputs enough?
-        if matched_def := match_inputs(mx_node):
-            return matched_def
-        elif (mx_node_type := mx_node.getType()) in self.possible_mx_defs:
-            return mx_node_type
-            # return self.possible_mx_defs[mx_node.getType()]
-        elif (mx_node_category := mx_node.getCategory()) in self.possible_mx_defs:
-            return mx_node_category
-        else:
-            # TODO: log error, definition can't be found
-            logger.warning(
-                f"Could not find matching definition for type '{mx_node.getType()}' of node '{mx_node.getName()}'."
-            )
-            return None
+    def get_displaytype_from_mx_node(self, mx_node):
+        from QuiltiX.mx_node import get_displaytype_from_mx_def
+        mx_def = mx_node.getNodeDef()
+        if mx_def:
+            return get_displaytype_from_mx_def(mx_def)
+
+        mx_category = mx_node.getCategory()
+        if mx_category in self.possible_mx_defs:
+            return mx_category
+
+        logger.warning(
+            f"Could not find matching definition for type '{mx_node.getType()}' of node '{mx_node.getName()}'."
+        )
 
     def update_from_mx_node(self, mx_node):
-        mx_def_type = self.get_mx_def_type_from_mx_node(mx_node)
+        mx_def_type = self.get_displaytype_from_mx_node(mx_node)
         if not mx_def_type:
             return
 
diff --git a/src/QuiltiX/qx_nodegraph.py b/src/QuiltiX/qx_nodegraph.py
index 6589b0e..f1d7b6d 100644
--- a/src/QuiltiX/qx_nodegraph.py
+++ b/src/QuiltiX/qx_nodegraph.py
@@ -739,8 +739,12 @@ def load_graph_from_mx_doc(self, doc):
             had_pos = False
             qx_node_to_mx_node = {}
 
+            mx_nodes = doc.getNodes()
+            mx_graphs = doc.getNodeGraphs()
+            doc.importLibrary(self.mx_library_doc)
+
             # Create Nodes
-            for cur_mx_node in doc.getNodes():
+            for cur_mx_node in mx_nodes:
                 if cur_mx_node.hasAttribute("xpos") and cur_mx_node.hasAttribute("ypos"):
                     had_pos = True
 
@@ -748,7 +752,7 @@ def load_graph_from_mx_doc(self, doc):
 
                 qx_node_to_mx_node[cur_qx_node] = cur_mx_node
 
-            for mx_graph in doc.getNodeGraphs():
+            for mx_graph in mx_graphs:
                 ng_node = self.create_nodegraph_from_mx_nodegraph(mx_graph)
                 for cur_mx_node in mx_graph.getNodes():
                     cur_qx_node = self.create_node_from_mx_node(cur_mx_node, graph=ng_node.get_sub_graph())