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())