Load a data library MTLX document. Returns (nodes, defaults).
(mtlxPath)
| 632 | # ----------------------------------------------------------------------------- |
| 633 | |
| 634 | def loadDataLibrary(mtlxPath): |
| 635 | '''Load a data library MTLX document. Returns (nodes, defaults).''' |
| 636 | doc = mx.createDocument() |
| 637 | mx.readFromXmlFile(doc, str(mtlxPath)) |
| 638 | |
| 639 | nodes = {} |
| 640 | defaults = {} # (nodeName, signature) -> {portName -> (value, isGeomprop)} |
| 641 | |
| 642 | for nodedef in doc.getNodeDefs(): |
| 643 | nodeName = nodedef.getNodeString() |
| 644 | node = nodes.setdefault(nodeName, NodeInfo(name=nodeName)) |
| 645 | |
| 646 | # Build signature from this nodedef |
| 647 | sigInputs = {inp.getName(): inp.getType() for inp in nodedef.getInputs()} |
| 648 | sigOutputs = {out.getName(): out.getType() for out in nodedef.getOutputs()} |
| 649 | sig = NodeSignature.create(sigInputs, sigOutputs) |
| 650 | node.signatures.add(sig) |
| 651 | |
| 652 | # Store defaults keyed by signature |
| 653 | sigDefaults = {} |
| 654 | for inp in nodedef.getInputs(): |
| 655 | if inp.hasDefaultGeomPropString(): |
| 656 | sigDefaults[inp.getName()] = (inp.getDefaultGeomPropString(), True) |
| 657 | elif inp.getValue() is not None: |
| 658 | sigDefaults[inp.getName()] = (inp.getValue(), False) |
| 659 | if sigDefaults: |
| 660 | defaults[(nodeName, sig)] = sigDefaults |
| 661 | |
| 662 | return nodes, defaults |
| 663 | |
| 664 | |
| 665 | # ----------------------------------------------------------------------------- |