Skip to content

Commit 995de90

Browse files
IECoreUSD::PointInstancerAlgo : Support inactive / invisible ids
1 parent e8bc39a commit 995de90

File tree

3 files changed

+22
-1
lines changed

3 files changed

+22
-1
lines changed

Changes

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
10.5.x.x (relative to 10.5.9.2)
22
========
33

4-
4+
Improvements
5+
------------
6+
- USDScene : PointInstancers are now loaded with invisibleIds and inactiveIds as primitive variables.
57

68

79
10.5.9.2 (relative to 10.5.9.1)

contrib/IECoreUSD/src/IECoreUSD/PointInstancerAlgo.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,19 @@ IECore::ObjectPtr readPointInstancer( pxr::UsdGeomPointInstancer &pointInstancer
8686
Canceller::check( canceller );
8787
PrimitiveAlgo::readPrimitiveVariable( pointInstancer.GetAngularVelocitiesAttr(), time, newPoints.get(), "angularVelocity" );
8888

89+
DataPtr cortexInvisIds = DataAlgo::fromUSD( pointInstancer.GetInvisibleIdsAttr(), time, true );
90+
if( cortexInvisIds )
91+
{
92+
newPoints->variables["invisibleIds"] = IECoreScene::PrimitiveVariable( PrimitiveVariable::Constant, cortexInvisIds );
93+
}
94+
95+
pxr::SdfInt64ListOp inactiveIdsListOp;
96+
pointInstancer.GetPrim().GetMetadata( pxr::UsdGeomTokens->inactiveIds, &inactiveIdsListOp );
97+
newPoints->variables["inactiveIds"] = IECoreScene::PrimitiveVariable(
98+
PrimitiveVariable::Constant,
99+
new IECore::Int64VectorData( inactiveIdsListOp.GetExplicitItems() )
100+
);
101+
89102
// Prototype paths
90103

91104
pxr::SdfPathVector targets;

contrib/IECoreUSD/test/IECoreUSD/USDSceneTest.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3665,6 +3665,9 @@ def testPointInstancerPrimvars( self ) :
36653665
[ ( c, c, c ) for c in range( 1, 6 ) ]
36663666
)
36673667

3668+
points.DeactivateIds( [ 0, 2 ] )
3669+
points.InvisIds( [ 1, 4 ], 0 )
3670+
36683671
stage.GetRootLayer().Save()
36693672

36703673
# Check we can load the primvar via a SceneInterface.
@@ -3681,6 +3684,9 @@ def testPointInstancerPrimvars( self ) :
36813684
self.assertEqual( points["myColor"].interpolation, IECoreScene.PrimitiveVariable.Interpolation.Vertex )
36823685
self.assertEqual( points["myColor"].indices, None )
36833686

3687+
self.assertEqual( points["inactiveIds"], IECoreScene.PrimitiveVariable( IECoreScene.PrimitiveVariable.Interpolation.Constant, IECore.Int64VectorData( [ 0, 2 ] ) ) )
3688+
self.assertEqual( points["invisibleIds"], IECoreScene.PrimitiveVariable( IECoreScene.PrimitiveVariable.Interpolation.Constant, IECore.Int64VectorData( [ 1, 4 ] ) ) )
3689+
36843690
def testArnoldArrayInputs( self ) :
36853691

36863692
def assertExpectedArrayInputs( network ) :

0 commit comments

Comments
 (0)