Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix gltf node types #68

Merged
merged 3 commits into from
Jun 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions src/QuiltiX/mx_node.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand All @@ -127,4 +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, "")

return mx_node_def_type
42 changes: 15 additions & 27 deletions src/QuiltiX/qx_node.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
8 changes: 6 additions & 2 deletions src/QuiltiX/qx_nodegraph.py
Original file line number Diff line number Diff line change
Expand Up @@ -780,16 +780,20 @@ 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

cur_qx_node = self.create_node_from_mx_node(cur_mx_node)

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():
if cur_mx_node.hasAttribute("xpos") and cur_mx_node.hasAttribute("ypos"):
Expand Down