diff --git a/lib/flowViewport/sceneIndex/fvpWireframeSelectionHighlightSceneIndex.cpp b/lib/flowViewport/sceneIndex/fvpWireframeSelectionHighlightSceneIndex.cpp index 7e664f7fe..2b9408fea 100644 --- a/lib/flowViewport/sceneIndex/fvpWireframeSelectionHighlightSceneIndex.cpp +++ b/lib/flowViewport/sceneIndex/fvpWireframeSelectionHighlightSceneIndex.cpp @@ -104,9 +104,13 @@ SdfPathVector _GetInstancingRelatedPaths(const HdSceneIndexPrim& prim, Fvp::Sele instancingRelatedPaths.push_back(instancerPath); } - auto protoRootPaths = instancedBy.GetPrototypeRoots()->GetTypedValue(0); - for (const auto& protoRootPath : protoRootPaths) { - instancingRelatedPaths.push_back(protoRootPath); + // Having a prototype root is not a hard requirement (a single prim being instanced + // does not need to specify itself as its own prototype root). + if (instancedBy.GetPrototypeRoots()) { + auto protoRootPaths = instancedBy.GetPrototypeRoots()->GetTypedValue(0); + for (const auto& protoRootPath : protoRootPaths) { + instancingRelatedPaths.push_back(protoRootPath); + } } } diff --git a/test/lib/mayaUsd/render/mayaToHydra/cpp/testDataProducerExample.py b/test/lib/mayaUsd/render/mayaToHydra/cpp/testDataProducerExample.py index 89cd19200..6a0aad63e 100644 --- a/test/lib/mayaUsd/render/mayaToHydra/cpp/testDataProducerExample.py +++ b/test/lib/mayaUsd/render/mayaToHydra/cpp/testDataProducerExample.py @@ -58,6 +58,9 @@ def cube000PathString(self): def cube222PathString(self): return '|transform1|' + self._locator + ',/cube_2_2_2' + def cubePrototypePathString(self): + return '|transform1|' + self._locator + ',/cube_' + def test_Pick(self): # Pick an exterior cube to ensure we don't pick a hidden one. cmds.mayaHydraCppTest(self.cube222PathString(), f='TestUsdPicking.pick') @@ -132,5 +135,26 @@ def assertTranslationAlmostEqual(expected): cmds.redo() assertTranslationAlmostEqual([3, 4, 5]) + def test_SelectPrototype(self): + # Enable instancing + cmds.setAttr(self._locator + '.cubesUseInstancing', True) + + # Clear selection + sn = ufe.GlobalSelection.get() + sn.clear() + + # Empty Maya selection, therefore no fully selected path in the scene + # index. + cmds.mayaHydraCppTest(f='TestSelection.fullySelectedPaths') + + # Add cube to selection + item = ufe.Hierarchy.createItem(ufe.PathString.path(self.cubePrototypePathString())) + sn.append(item) + + # Item added to the Maya selection, it should be fully selected in the + # scene index. + cmds.mayaHydraCppTest( + self.cubePrototypePathString(), f='TestSelection.fullySelectedPaths') + if __name__ == '__main__': fixturesUtils.runTests(globals())