def testCustomRigUpdaterAutoEditLoad(self): "Validate auto edit on stage load for CustomRig codeless schema" import mayaUsd_createStageWithNewLayer proxyShape = mayaUsd_createStageWithNewLayer.createStageWithNewLayer() stage = mayaUsdUfe.getStage(proxyShape) self.assertTrue(stage) layer = stage.GetRootLayer() layer.ImportFromString(''' #sdf 1 ( defaultPrim = "world" ) def Xform "world" { def Xform "anim" { def CustomRig "bob" { int cubes = 2 bool autoEdit = 1 } } } ''') self.assertTrue(self._GetMFnDagNode("bob|pCube1")) self.assertTrue(self._GetMFnDagNode("bob|pCube2")) bobPrim = stage.GetPrimAtPath("/world/anim/bob") autoEditAttr = bobPrim.GetAttribute("autoEdit") self.assertTrue(autoEditAttr.Get())
def testPerInstanceInheritedData(self): self._StartTest('perInstanceInheritedData') # These tests don't work in earlier versions of USD, the wrong # instance index gets selected usdVersion = Usd.GetVersion() if usdVersion < (0, 20, 8): return # Hide and show some instances to make sure it updates correctly stage = mayaUsdUfe.getStage("|stage|stageShape") ball_03_vis = stage.GetPrimAtPath('/root/group/ball_03').GetAttribute( 'visibility') ball_04_vis = stage.GetPrimAtPath('/root/group/ball_04').GetAttribute( 'visibility') cmds.select("|stage|stageShape,/root/group/ball_03") self.assertSnapshotClose('%s_ball_03_selected.png' % self._testName) ball_03_vis.Set('hidden') self.assertSnapshotClose('%s_ball_03_hidden.png' % self._testName) ball_04_vis.Set('hidden') self.assertSnapshotClose('%s_ball_03_and_04_hidden.png' % self._testName) ball_03_vis.Set('inherited') # this should show the object again self.assertSnapshotClose('%s_ball_04_hidden.png' % self._testName) ball_04_vis.Set('inherited') self.assertSnapshotClose('%s_shown_after_hidden.png' % self._testName) # These tests behave differently before USD version 21.05, so don't run # them for those earlier versions. if usdVersion < (0, 21, 5): return imageVersion = None if usdVersion < (0, 21, 8): imageVersion = 'pre-21_08' # Modify the purpose of some instances to make sure they are shown and hidden properly ball_03_purpose = stage.GetPrimAtPath( '/root/group/ball_03').GetAttribute('purpose') ball_04_purpose = stage.GetPrimAtPath( '/root/group/ball_04').GetAttribute('purpose') ball_03_purpose.Set('guide') self.assertSnapshotClose('%s_ball_03_guide.png' % self._testName, imageVersion) ball_04_purpose.Set('guide') self.assertSnapshotClose( '%s_ball_03_and_04_guide.png' % self._testName, imageVersion) ball_03_purpose.Set('default') self.assertSnapshotClose('%s_ball_04_guide.png' % self._testName, imageVersion) ball_04_purpose.Set('default') self.assertSnapshotClose('%s_default_after_guide.png' % self._testName, imageVersion)
def testModifyConsolidatedMaterial(self): self._StartTest('colorConsolidation') self.assertSnapshotClose('%s_unselected.png' % self._testName) stage = mayaUsdUfe.getStage("|stage|stageShape") shader = stage.GetPrimAtPath('/lambert2SG/sphereLambert') diffuseColorAttr = shader.GetAttribute('inputs:diffuseColor') diffuseColorAttr.Set((0.0, 1.0, 0.0)) self.assertSnapshotClose('%s_greenSpheres.png' % self._testName)
def testModifyDisplayColor(self): self._StartTest('capsule') cmds.move(3, 3, 3, 'persp') cmds.rotate(-30, 45, 0, 'persp') self.assertSnapshotClose('%s_unselected.png' % self._testName) stage = mayaUsdUfe.getStage("|stage|stageShape") rprim = stage.GetPrimAtPath('/Capsule1') displayColorPrimvar = rprim.GetAttribute('primvars:displayColor') displayColorPrimvar.Set(Vt.Vec3fArray([(0.0, 1.0, 0.0)])) self.assertSnapshotClose('%s_green.png' % self._testName)
def testCustomRigUpdater(self): "Validate prim updater for CustomRig codeless schema" import mayaUsd_createStageWithNewLayer proxyShape = mayaUsd_createStageWithNewLayer.createStageWithNewLayer() stage = mayaUsdUfe.getStage(proxyShape) self.assertTrue(stage) layer = stage.GetRootLayer() layer.ImportFromString(''' #sdf 1 ( defaultPrim = "world" ) def Xform "world" { def Xform "anim" { def CustomRig "bob" { int cubes = 2 } } } ''') bobUfePathStr = "{},/world/anim/bob".format(proxyShape) # Pull the object for editing in Maya self.assertTrue( mayaUsdLib.PrimUpdaterManager.editAsMaya(bobUfePathStr)) # Retrieve pulled object bobMayaPathStr = cmds.ls(sl=True)[0] # Test partial paths to make the test more robust with any changes around "invisible" __mayaUsd__ # parent self.assertTrue(self._GetMFnDagNode("bob|pCube1")) self.assertTrue(self._GetMFnDagNode("bob|pCube2")) # Animate the cubes cmds.playbackOptions(minTime=0, maxTime=10) cmds.setKeyframe("bob|pCube1.ry", time=1.0, value=0) cmds.setKeyframe("bob|pCube1.ry", time=10.0, value=100) cmds.setKeyframe("bob|pCube2.ty", time=1.0, value=0) cmds.setKeyframe("bob|pCube2.ty", time=10.0, value=10) # Push the animation back to USD. This will use a custom logic that will write it to a new prim self.assertTrue( mayaUsdLib.PrimUpdaterManager.mergeToUsd(bobMayaPathStr)) # After push, all Maya objects should be gone self.assertFalse(self._GetMFnDagNode("bob")) self.assertFalse(self._GetMFnDagNode("bob|pCube1")) self.assertFalse(self._GetMFnDagNode("bob|pCube2")) # Validate the data we pushed back via custom updater self.assertTrue(stage.GetPrimAtPath("/world/anim/bob_cache")) self.assertTrue(stage.GetPrimAtPath("/world/anim/bob_cache/pCube1")) self.assertTrue(stage.GetPrimAtPath("/world/anim/bob_cache/pCube2")) prim = stage.GetPrimAtPath("/world/anim/bob_cache/pCube2") attr = prim.GetAttribute("xformOp:translate") self.assertEqual(attr.GetNumTimeSamples(), 11) self.assertEqual( attr.GetTimeSamples(), [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0])