Autodesk / Autodesk/maya-usd

Schema API Adaptors registered on "mesh" will override ones on "shape"

Open
#2,605 0 comments 0 reactions 1 assignee Claimed by @santosg87 View on GitHub
bug
Dominant language
Wolfram Language
Stars
905
Forks
223
Avg merge
2d 9h
Merged PRs (30d)
17

Description

**Describe the bug**
Registering an API adaptor for "mesh" will cause all the ones registered for "shape" to fall off. We encountered this when trying to use the schema API Adaptors in order to register a MeshLightAPI adaptor for "mesh". This caused the testSchemaApiAdaptor to fail because the test registers adaptors on "shape".

**Steps to reproduce**
Here's a standalone script you can run to reproduce the issue
```
import maya.standalone
maya.standalone.initialize()
import mayaUsd.lib as mayaUsdLib
from maya import cmds
cmds.loadPlugin("mayaUsdPlugin")

class _A(mayaUsdLib.SchemaApiAdaptor):
def CanAdaptForExport(self, jobArgs):
print("_A")
return False

def GetAdaptedAttributeNames(self):
return []

def GetMayaNameForUsdAttrName(self, usdName):
return usdName

class _B(mayaUsdLib.SchemaApiAdaptor):
def CanAdaptForExport(self, jobArgs):
print("_B")
return False

def GetAdaptedAttributeNames(self):
return []

def GetMayaNameForUsdAttrName(self, usdName):
return usdName

def main():
# Suppose some plugin registers some apiSchemas that could apply to all
# shapes.
mayaUsdLib.SchemaApiAdaptor.Register(_A, "shape", "ShapingAPI")

# Now, suppose we have an API schema that only applies to meshes.
mayaUsdLib.SchemaApiAdaptor.Register(_B, "mesh", "ShadowAPI")

# create a mesh to export
cmds.file(new=True, force=True)
cmds.polySphere()

# When exporting a "mesh" (which is also a "shape"), I'd expect both schemas
# to be exported.
cmds.mayaUSDExport(file="tmp.usda", apiSchema=["ShapingAPI", "ShadowAPI"])

if __name__ == '__main__':
main()
```

**Additional context**
I believe this code that finds the adaptors should actually be walking up the type hierarchy:
https://github.com/Autodesk/maya-usd/blob/dev/lib/mayaUsd/fileio/schemaApiAdaptorRegistry.cpp#L106

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.