From 33eb9e80c72b798d22a583bad0e788a1f4729f48 Mon Sep 17 00:00:00 2001 From: Sean Donnelly <23455376+seando-adsk@users.noreply.github.com> Date: Tue, 12 Jul 2022 10:11:10 -0400 Subject: [PATCH] MAYA-124311 - Empty Display Layer command leaves invalid Ufe paths fUfeMembers * Added unit test for this scenario. --- test/lib/ufe/testDisplayLayer.py | 37 ++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/test/lib/ufe/testDisplayLayer.py b/test/lib/ufe/testDisplayLayer.py index 33508d4908..be4636939e 100644 --- a/test/lib/ufe/testDisplayLayer.py +++ b/test/lib/ufe/testDisplayLayer.py @@ -44,6 +44,7 @@ class DisplayLayerTestCase(unittest.TestCase): NEW_SPHERE1 = '|stage1|stageShape1,/NewSphere1' XFORM1_SPHERE1 = '|stage1|stageShape1,/Xform1/Sphere1' NEW_XFORM1_SPHERE1 = '|stage1|stageShape1,/NewXform1/Sphere1' + INVALID_PRIM = '|stage1|stageShape1,/BogusPrim' @classmethod def setUpClass(cls): @@ -268,3 +269,39 @@ def testDisplayLayerItemDelete(self): # TODO - test the undo/redo for delete of Ufe item in Layer. # This currently doesn't work. + + def testDisplayLayerClear(self): + cmdHelp = cmds.help('editDisplayLayerMembers') + if '-clear' not in cmdHelp: + self.skipTest('Requires clear flag in editDisplayLayerMembers command.') + + # First create Display Layer. + cmds.createDisplayLayer(name=self.LAYER1, number=1, empty=True) + layer1 = self.displayLayer(self.LAYER1) + psPathStr = mayaUsd_createStageWithNewLayer.createStageWithNewLayer() + stage = mayaUsd.lib.GetPrim(psPathStr).GetStage() + + # Add the one valid and one invalid prim to the layer. + # Note: we cannot use the command to add an invalid prim since it verifies that a valid + # scene item can be created. Instead we use the Maya API to add it. + # Note: you can get invalid prims thru different operations such as loading USD file + # or changing variants. + stage.DefinePrim('/Cube1', 'Cube') + cmds.editDisplayLayerMembers(self.LAYER1, self.CUBE1, noRecurse=True) + layer1.add(self.INVALID_PRIM) + + # Verify that both prims are in layer. + # Note: the editDisplayLayerMembers command only returns valid prims. + # But the MFnDisplayLayer will return all prims (including invalid ones). + layerObjs = cmds.editDisplayLayerMembers(self.LAYER1, query=True, fn=True) + self.assertTrue(self.CUBE1 in layerObjs) + self.assertFalse(self.INVALID_PRIM in layerObjs) + self._testLayerFromPath(self.CUBE1, self.LAYER1) + self._testLayerFromPath(self.INVALID_PRIM, self.LAYER1) + + # Now clear the layer and make sure both prims (valid and invalid) got removed. + cmds.editDisplayLayerMembers(self.LAYER1, clear=True) + layerObjs = cmds.editDisplayLayerMembers(self.LAYER1, query=True, fn=True) + self.assertIsNone(layerObjs) + self.assertFalse(layer1.contains(self.CUBE1)) + self.assertFalse(layer1.contains(self.INVALID_PRIM))