Beispiel #1
0
    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())
Beispiel #2
0
    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)
Beispiel #5
0
    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])