def hierarchyBefore(): aPath = ufe.Path( [psPathSegment, usdUtils.createUfePathSegment('/A')]) a = ufe.Hierarchy.createItem(aPath) bPath = aPath + ufe.PathComponent('B') b = ufe.Hierarchy.createItem(bPath) cPath = bPath + ufe.PathComponent('C') c = ufe.Hierarchy.createItem(cPath) ePath = dPath + ufe.PathComponent('E') e = ufe.Hierarchy.createItem(ePath) fPath = ePath + ufe.PathComponent('F') f = ufe.Hierarchy.createItem(fPath) gPath = ufe.Path( [psPathSegment, usdUtils.createUfePathSegment('/G')]) g = ufe.Hierarchy.createItem(gPath) return [a, b, c, e, f, g]
def hierarchyBefore(): retVal = [] aPath = ufe.Path( [psPathSegment, usdUtils.createUfePathSegment('/A')]) retVal.append(ufe.Hierarchy.createItem(aPath)) for i in range(4): aPath = aPath + ufe.PathComponent('A') retVal.append(ufe.Hierarchy.createItem(aPath)) return retVal
def testEditRouter(self): '''Test edit router functionality.''' cmds.file(new=True, force=True) import mayaUsd_createStageWithNewLayer # Create the following hierarchy: # # ps # |_ A # |_ B # # We A and duplicate it. psPathStr = mayaUsd_createStageWithNewLayer.createStageWithNewLayer() stage = mayaUsd.lib.GetPrim(psPathStr).GetStage() stage.DefinePrim('/A', 'Xform') stage.DefinePrim('/A/B', 'Xform') psPath = ufe.PathString.path(psPathStr) psPathSegment = psPath.segments[0] aPath = ufe.Path([psPathSegment, usdUtils.createUfePathSegment('/A')]) a = ufe.Hierarchy.createItem(aPath) bPath = aPath + ufe.PathComponent('B') b = ufe.Hierarchy.createItem(bPath) # Add a sub-layer, where the parent edit should write to. subLayerId = cmds.mayaUsdLayerEditor(stage.GetRootLayer().identifier, edit=True, addAnonymous="aSubLayer")[0] mayaUsd.lib.registerEditRouter('duplicate', firstSubLayer) sn = ufe.GlobalSelection.get() sn.clear() sn.append(a) cmds.duplicate() sublayer01 = Sdf.Find(subLayerId) self.assertIsNotNone(sublayer01) self.assertIsNotNone(sublayer01.GetPrimAtPath('/A1/B'))
def hierarchyAfter(): return [ ufe.Hierarchy.createItem(groupPath + ufe.PathComponent(pc)) for pc in ['A', 'B', 'C', 'E', 'F', 'G'] ]
def testGroupKind(self): """ Tests that grouping maintains a contiguous model hierarchy when the parent of the group is in the model hierarchy. """ mayaPathSegment = mayaUtils.createUfePathSegment( "|transform1|proxyShape1") usdSegmentBall3 = usdUtils.createUfePathSegment( "/Ball_set/Props/Ball_3") ball3Path = ufe.Path([mayaPathSegment, usdSegmentBall3]) ball3Item = ufe.Hierarchy.createItem(ball3Path) usdSegmentBall5 = usdUtils.createUfePathSegment( "/Ball_set/Props/Ball_5") ball5Path = ufe.Path([mayaPathSegment, usdSegmentBall5]) ball5Item = ufe.Hierarchy.createItem(ball5Path) usdSegmentProps = usdUtils.createUfePathSegment("/Ball_set/Props") propsPath = ufe.Path([mayaPathSegment, usdSegmentProps]) propsItem = ufe.Hierarchy.createItem(propsPath) ufeSelection = ufe.GlobalSelection.get() ufeSelection.append(ball3Item) ufeSelection.append(ball5Item) groupName = "newGroup" cmds.group(name=groupName) newGroupPath = propsPath + ufe.PathComponent("%s1" % groupName) newGroupItem = ufe.Hierarchy.createItem(newGroupPath) newGroupPrim = usdUtils.getPrimFromSceneItem(newGroupItem) # The "Props" prim that was the parent of both "Ball" prims has # kind=group and is part of the model hierarchy, so the new group prim # should also have kind=group and be included in the model hierarchy. self.assertEqual( Usd.ModelAPI(newGroupPrim).GetKind(), Kind.Tokens.group) self.assertTrue(newGroupPrim.IsModel()) cmds.undo() # Clear the kind metadata on the "Props" prim before testing again. propsPrim = usdUtils.getPrimFromSceneItem(propsItem) Usd.ModelAPI(propsPrim).SetKind("") self.assertFalse(propsPrim.IsModel()) # Freshen the UFE scene items so they have valid handles to their # UsdPrims. ball3Item = ufe.Hierarchy.createItem(ball3Path) ball5Item = ufe.Hierarchy.createItem(ball5Path) ufeSelection.clear() ufeSelection.append(ball3Item) ufeSelection.append(ball5Item) cmds.group(name=groupName) newGroupItem = ufe.Hierarchy.createItem(newGroupPath) newGroupPrim = usdUtils.getPrimFromSceneItem(newGroupItem) # When the "Props" prim does not have an authored kind and is not part # of the model hierarchy, the new group prim should not have any kind # authored either. self.assertEqual(Usd.ModelAPI(newGroupPrim).GetKind(), "") self.assertFalse(newGroupPrim.IsModel())
def testUsdGroup(self): '''Creation of USD group objects.''' mayaPathSegment = mayaUtils.createUfePathSegment( "|transform1|proxyShape1") usdSegmentBall5 = usdUtils.createUfePathSegment( "/Ball_set/Props/Ball_5") ball5Path = ufe.Path([mayaPathSegment, usdSegmentBall5]) ball5Item = ufe.Hierarchy.createItem(ball5Path) usdSegmentBall3 = usdUtils.createUfePathSegment( "/Ball_set/Props/Ball_3") ball3Path = ufe.Path([mayaPathSegment, usdSegmentBall3]) ball3Item = ufe.Hierarchy.createItem(ball3Path) usdSegmentProps = usdUtils.createUfePathSegment("/Ball_set/Props") parentPath = ufe.Path([mayaPathSegment, usdSegmentProps]) parentItem = ufe.Hierarchy.createItem(parentPath) parentHierarchy = ufe.Hierarchy.hierarchy(parentItem) parentChildrenPre = parentHierarchy.children() self.assertEqual(len(parentChildrenPre), 6) # get the USD stage stage = mayaUsd.ufe.getStage(str(mayaPathSegment)) # set the edit target to balls.usda layer = stage.GetLayerStack()[1] self.assertEqual("ballset.usda", layer.GetDisplayName()) stage.SetEditTarget(layer) if (os.getenv('UFE_PREVIEW_VERSION_NUM', '0000') > '3000'): globalSn = ufe.GlobalSelection.get() globalSn.append(ball5Item) globalSn.append(ball3Item) # group groupName = cmds.group(ufe.PathString.string(ball5Path), ufe.PathString.string(ball3Path), n="newGroup") else: newGroupName = ufe.PathComponent("newGroup") ufeSelectionList = ufe.Selection() ufeSelectionList.append(ball5Item) ufeSelectionList.append(ball3Item) groupCmd = parentHierarchy.createGroupCmd(ufeSelectionList, newGroupName) groupCmd.execute() # Group object (a.k.a parent) will be added to selection list. This behavior matches the native Maya group command. globalSelection = ufe.GlobalSelection.get() groupPath = ufe.Path([ mayaPathSegment, usdUtils.createUfePathSegment("/Ball_set/Props/newGroup1") ]) self.assertEqual(globalSelection.front(), ufe.Hierarchy.createItem(groupPath)) # Group object (a.k.a parent) will be added to selection list. This behavior matches the native Maya group command. globalSelection = ufe.GlobalSelection.get() groupPath = ufe.Path([ mayaPathSegment, usdUtils.createUfePathSegment("/Ball_set/Props/newGroup1") ]) self.assertEqual(globalSelection.front(), ufe.Hierarchy.createItem(groupPath)) parentChildrenPost = parentHierarchy.children() self.assertEqual(len(parentChildrenPost), 5) # The command will now append a number 1 at the end to match the naming # convention in Maya. if (os.getenv('UFE_PREVIEW_VERSION_NUM', '0000') > '3000'): newGroupPath = parentPath + ufe.PathComponent(groupName) else: newGroupPath = parentPath + ufe.PathComponent("newGroup1") # Make sure the new group item has the correct Usd type newGroupItem = ufe.Hierarchy.createItem(newGroupPath) newGroupPrim = usdUtils.getPrimFromSceneItem(newGroupItem) newGroupType = newGroupPrim.GetTypeName() self.assertEqual(newGroupType, 'Xform') childPaths = set([child.path() for child in parentChildrenPost]) self.assertTrue(newGroupPath in childPaths) self.assertTrue(ball5Path not in childPaths) self.assertTrue(ball3Path not in childPaths) if (os.getenv('UFE_PREVIEW_VERSION_NUM', '0000') > '3000'): cmds.undo() else: groupCmd.undo() # global selection should not be empty after undo. if (os.getenv('UFE_PREVIEW_VERSION_NUM', '0000') > '3004'): self.assertEqual(len(globalSelection), 2) else: self.assertEqual(len(globalSelection), 1) parentChildrenUndo = parentHierarchy.children() self.assertEqual(len(parentChildrenUndo), 6) childPathsUndo = set([child.path() for child in parentChildrenUndo]) self.assertTrue(newGroupPath not in childPathsUndo) self.assertTrue(ball5Path in childPathsUndo) self.assertTrue(ball3Path in childPathsUndo) if (os.getenv('UFE_PREVIEW_VERSION_NUM', '0000') > '3000'): cmds.redo() else: groupCmd.redo() # global selection should still have the group path. self.assertEqual(globalSelection.front(), ufe.Hierarchy.createItem(groupPath)) parentChildrenRedo = parentHierarchy.children() self.assertEqual(len(parentChildrenRedo), 5) childPathsRedo = set([child.path() for child in parentChildrenRedo]) self.assertTrue(newGroupPath in childPathsRedo) self.assertTrue(ball5Path not in childPathsRedo) self.assertTrue(ball3Path not in childPathsRedo)
def testUsdGroup(self): '''Creation of USD group objects.''' mayaPathSegment = mayaUtils.createUfePathSegment( "|transform1|proxyShape1") usdSegmentBall5 = usdUtils.createUfePathSegment( "/Ball_set/Props/Ball_5") ball5Path = ufe.Path([mayaPathSegment, usdSegmentBall5]) ball5Item = ufe.Hierarchy.createItem(ball5Path) usdSegmentBall3 = usdUtils.createUfePathSegment( "/Ball_set/Props/Ball_3") ball3Path = ufe.Path([mayaPathSegment, usdSegmentBall3]) ball3Item = ufe.Hierarchy.createItem(ball3Path) usdSegmentProps = usdUtils.createUfePathSegment("/Ball_set/Props") parentPath = ufe.Path([mayaPathSegment, usdSegmentProps]) parentItem = ufe.Hierarchy.createItem(parentPath) parentHierarchy = ufe.Hierarchy.hierarchy(parentItem) parentChildrenPre = parentHierarchy.children() self.assertEqual(len(parentChildrenPre), 6) newGroupName = ufe.PathComponent("newGroup") # get the USD stage stage = mayaUsd.ufe.getStage(str(mayaPathSegment)) # set the edit target to balls.usda layer = stage.GetLayerStack()[1] self.assertEqual("ballset.usda", layer.GetDisplayName()) stage.SetEditTarget(layer) ufeSelectionList = ufe.Selection() ufeSelectionList.append(ball5Item) ufeSelectionList.append(ball3Item) groupCmd = parentHierarchy.createGroupCmd(ufeSelectionList, newGroupName) groupCmd.execute() parentChildrenPost = parentHierarchy.children() self.assertEqual(len(parentChildrenPost), 5) # The command will now append a number 1 at the end to match the naming # convention in Maya. newGroupPath = parentPath + ufe.PathComponent("newGroup1") # Make sure the new group item has the correct Usd type newGroupItem = ufe.Hierarchy.createItem(newGroupPath) newGroupPrim = usdUtils.getPrimFromSceneItem(newGroupItem) newGroupType = newGroupPrim.GetTypeName() self.assertEqual(newGroupType, 'Xform') childPaths = set([child.path() for child in parentChildrenPost]) self.assertTrue(newGroupPath in childPaths) self.assertTrue(ball5Path not in childPaths) self.assertTrue(ball3Path not in childPaths) groupCmd.undo() parentChildrenUndo = parentHierarchy.children() self.assertEqual(len(parentChildrenUndo), 6) childPathsUndo = set([child.path() for child in parentChildrenUndo]) self.assertTrue(newGroupPath not in childPathsUndo) self.assertTrue(ball5Path in childPathsUndo) self.assertTrue(ball3Path in childPathsUndo) groupCmd.redo() parentChildrenRedo = parentHierarchy.children() self.assertEqual(len(parentChildrenRedo), 5) childPathsRedo = set([child.path() for child in parentChildrenRedo]) self.assertTrue(newGroupPath in childPathsRedo) self.assertTrue(ball5Path not in childPathsRedo) self.assertTrue(ball3Path not in childPathsRedo)