def testRenameUniqueName(self): # open tree.ma scene in testSamples mayaUtils.openTreeScene() # clear selection to start off cmds.select(clear=True) # select a USD object. mayaPathSegment = mayaUtils.createUfePathSegment('|Tree_usd|Tree_usdShape') usdPathSegment = usdUtils.createUfePathSegment('/TreeBase/trunk') trunkPath = ufe.Path([mayaPathSegment, usdPathSegment]) trunkItem = ufe.Hierarchy.createItem(trunkPath) ufe.GlobalSelection.get().append(trunkItem) # get the USD stage stage = mayaUsd.ufe.getStage(str(mayaPathSegment)) # by default edit target is set to the Rootlayer. self.assertEqual(stage.GetEditTarget().GetLayer(), stage.GetRootLayer()) # rename `/TreeBase/trunk` to `/TreeBase/leavesXform` cmds.rename("leavesXform") # get the prim item = ufe.GlobalSelection.get().front() usdPrim = stage.GetPrimAtPath(str(item.path().segments[1])) self.assertTrue(usdPrim) # the new prim name is expected to be "leavesXform1" assert ([x for x in stage.Traverse()] == [stage.GetPrimAtPath("/TreeBase"), stage.GetPrimAtPath("/TreeBase/leavesXform"), stage.GetPrimAtPath("/TreeBase/leavesXform/leaves"), stage.GetPrimAtPath("/TreeBase/leavesXform1"),])
def testParentingToGPrim(self): '''Parenting an object to UsdGeomGprim object is not allowed''' # open tree scene mayaUtils.openTreeScene() with self.assertRaises(RuntimeError): cmds.parent("|Tree_usd|Tree_usdShape,/TreeBase/trunk", "|Tree_usd|Tree_usdShape,/TreeBase/leavesXform/leaves")
def testRename(self): # open tree.ma scene in testSamples mayaUtils.openTreeScene() # clear selection to start off cmds.select(clear=True) # select a USD object. mayaPathSegment = mayaUtils.createUfePathSegment('|Tree_usd|Tree_usdShape') usdPathSegment = usdUtils.createUfePathSegment('/TreeBase') treebasePath = ufe.Path([mayaPathSegment, usdPathSegment]) treebaseItem = ufe.Hierarchy.createItem(treebasePath) ufe.GlobalSelection.get().append(treebaseItem) # get the USD stage stage = mayaUsd.ufe.getStage(str(mayaPathSegment)) # by default edit target is set to the Rootlayer. self.assertEqual(stage.GetEditTarget().GetLayer(), stage.GetRootLayer()) self.assertTrue(stage.GetRootLayer().GetPrimAtPath("/TreeBase")) # get default prim defaultPrim = stage.GetDefaultPrim() self.assertEqual(defaultPrim.GetName(), 'TreeBase') # TreeBase has two childern: leavesXform, trunk assert len(defaultPrim.GetChildren()) == 2 # get prim spec for defaultPrim primspec = stage.GetEditTarget().GetPrimSpecForScenePath(defaultPrim.GetPath()); # set primspec name primspec.name = "TreeBase_potato" # get the renamed prim renamedPrim = stage.GetPrimAtPath('/TreeBase_potato') # One must use the SdfLayer API for setting the defaultPrim when you rename the prim it identifies. stage.SetDefaultPrim(renamedPrim); # get defaultPrim again defaultPrim = stage.GetDefaultPrim() self.assertEqual(defaultPrim.GetName(), 'TreeBase_potato') # make sure we have a valid prims after the primspec rename assert stage.GetPrimAtPath('/TreeBase_potato') assert stage.GetPrimAtPath('/TreeBase_potato/leavesXform') # prim should be called TreeBase_potato potatoPrim = stage.GetPrimAtPath('/TreeBase_potato') self.assertEqual(potatoPrim.GetName(), 'TreeBase_potato') # prim should be called leaves leavesPrimSpec = stage.GetObjectAtPath('/TreeBase_potato/leavesXform/leaves') self.assertEqual(leavesPrimSpec.GetName(), 'leaves')
def testDuplicateProxyStageFileBacked(self): ''' Verify stage from file is duplicated properly. ''' # open tree.ma scene mayaUtils.openTreeScene() # clear selection to start off cmds.select(clear=True) # select a USD object. mayaPathSegment = mayaUtils.createUfePathSegment( '|Tree_usd|Tree_usdShape') usdPathSegment = usdUtils.createUfePathSegment('/TreeBase') treebasePath = ufe.Path([mayaPathSegment]) treebaseItem = ufe.Hierarchy.createItem(treebasePath) # TreeBase has two children self.assertEqual(1, len(ufe.Hierarchy.hierarchy(treebaseItem).children())) # get the USD stage stage = mayaUsd.ufe.getStage(str(mayaPathSegment)) # by default edit target is set to the Rootlayer. self.assertEqual(stage.GetEditTarget().GetLayer(), stage.GetRootLayer()) # add treebaseItem to selection list ufe.GlobalSelection.get().append(treebaseItem) # duplicate cmds.duplicate() # get the next item in UFE selection list. snIter = iter(ufe.GlobalSelection.get()) duplStageItem = next(snIter) # duplicated stage name is expected to be incremented correctly self.assertEqual(str(duplStageItem.nodeName()), "Tree_usd1") # duplicated proxyShape name is expected to be incremented correctly duplProxyShapeHier = ufe.Hierarchy.hierarchy(duplStageItem) duplProxyShapeItem = duplProxyShapeHier.children()[0] self.assertEqual(str(duplProxyShapeItem.nodeName()), "Tree_usd1Shape") # duplicated ProxyShapeItem should have exactly one child self.assertEqual( 1, len(ufe.Hierarchy.hierarchy(duplProxyShapeItem).children())) # child name is expected to be Capsule1 childName = str( ufe.Hierarchy.hierarchy(duplProxyShapeItem).children() [0].nodeName()) self.assertEqual(childName, "TreeBase") # validate session name and anonymous tag name duplStage = mayaUsd.ufe.getStage( str(ufe.PathString.path('|Tree_usd1|Tree_usd1Shape'))) self.assertEqual(duplStage.GetLayerStack()[0], duplStage.GetSessionLayer()) self.assertEqual(duplStage.GetEditTarget().GetLayer(), duplStage.GetRootLayer()) self.assertEqual(True, "-session" in duplStage.GetSessionLayer().identifier) self.assertEqual(True, "tree.usd" in duplStage.GetRootLayer().identifier) # delete "/TreeBase" cmds.delete('|Tree_usd1|Tree_usd1Shape,/TreeBase') # confirm that edits are shared. Both source and duplicated proxyShapes have no children now. self.assertEqual( 0, len(ufe.Hierarchy.hierarchy(duplProxyShapeItem).children())) self.assertEqual(0, len(ufe.Hierarchy.hierarchy(treebaseItem).children()))