Skip to content

Commit ef1433f

Browse files
authored
Merge pull request #1297 from johnhaddon/alembicIntegerGeomParams
AlembicScene : Support various flavours of integer GeomParams
2 parents c226396 + b2614dd commit ef1433f

File tree

3 files changed

+67
-0
lines changed

3 files changed

+67
-0
lines changed

contrib/IECoreAlembic/src/IECoreAlembic/PrimitiveReader.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,26 @@ void PrimitiveReader::readArbGeomParams( const Alembic::Abc::ICompoundProperty &
7272
IV3dGeomParam p( params, header.getName() );
7373
readGeomParam( p, sampleSelector, primitive );
7474
}
75+
else if( IUcharGeomParam::matches( header ) )
76+
{
77+
IUcharGeomParam p( params, header.getName() );
78+
readGeomParam( p, sampleSelector, primitive );
79+
}
80+
else if( IUInt16GeomParam::matches( header ) )
81+
{
82+
IUInt16GeomParam p( params, header.getName() );
83+
readGeomParam( p, sampleSelector, primitive );
84+
}
85+
else if( IInt16GeomParam::matches( header ) )
86+
{
87+
IInt16GeomParam p( params, header.getName() );
88+
readGeomParam( p, sampleSelector, primitive );
89+
}
90+
else if( IUInt32GeomParam::matches( header ) )
91+
{
92+
IUInt32GeomParam p( params, header.getName() );
93+
readGeomParam( p, sampleSelector, primitive );
94+
}
7595
else if( IInt32GeomParam::matches( header ) )
7696
{
7797
IInt32GeomParam p( params, header.getName() );

contrib/IECoreAlembic/src/IECoreAlembic/PrimitiveWriter.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,18 @@ void PrimitiveWriter::writeArbGeomParams( const IECoreScene::Primitive *primitiv
101101
case BoolVectorDataTypeId :
102102
writeArbGeomParam<BoolVectorData, OBoolGeomParam>( p.first, p.second, params );
103103
break;
104+
case UCharVectorDataTypeId :
105+
writeArbGeomParam<UCharVectorData, OUcharGeomParam>( p.first, p.second, params );
106+
break;
107+
case UShortVectorDataTypeId :
108+
writeArbGeomParam<UShortVectorData, OUInt16GeomParam>( p.first, p.second, params );
109+
break;
110+
case ShortVectorDataTypeId :
111+
writeArbGeomParam<ShortVectorData, OInt16GeomParam>( p.first, p.second, params );
112+
break;
113+
case UIntVectorDataTypeId :
114+
writeArbGeomParam<UIntVectorData, OUInt32GeomParam>( p.first, p.second, params );
115+
break;
104116
case IntVectorDataTypeId :
105117
writeArbGeomParam<IntVectorData, OInt32GeomParam>( p.first, p.second, params );
106118
break;

contrib/IECoreAlembic/test/IECoreAlembic/AlembicSceneTest.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2005,5 +2005,40 @@ def testVisibilityAttribute( self ) :
20052005
self.assertNotEqual( child.hash( IECoreScene.SceneInterface.HashType.AttributesHash, 1 ), animatedFrame1Hash )
20062006
self.assertNotEqual( child.hash( IECoreScene.SceneInterface.HashType.AttributesHash, 1 ), withoutHash )
20072007

2008+
def testArbGeomParamTypes( self ) :
2009+
2010+
points = IECoreScene.PointsPrimitive( IECore.V3fVectorData( [ imath.V3f( i ) for i in range( 0, 2 ) ] ) )
2011+
2012+
points["uint8"] = IECoreScene.PrimitiveVariable(
2013+
IECoreScene.PrimitiveVariable.Interpolation.Vertex,
2014+
IECore.UCharVectorData( range( 0, 2 ) )
2015+
)
2016+
points["uint16"] = IECoreScene.PrimitiveVariable(
2017+
IECoreScene.PrimitiveVariable.Interpolation.Vertex,
2018+
IECore.UShortVectorData( range( 0, 2 ) )
2019+
)
2020+
points["int16"] = IECoreScene.PrimitiveVariable(
2021+
IECoreScene.PrimitiveVariable.Interpolation.Vertex,
2022+
IECore.ShortVectorData( range( 0, 2 ) )
2023+
)
2024+
points["uint32"] = IECoreScene.PrimitiveVariable(
2025+
IECoreScene.PrimitiveVariable.Interpolation.Vertex,
2026+
IECore.UIntVectorData( range( 0, 2 ) )
2027+
)
2028+
points["int32"] = IECoreScene.PrimitiveVariable(
2029+
IECoreScene.PrimitiveVariable.Interpolation.Vertex,
2030+
IECore.IntVectorData( range( 0, 2 ) )
2031+
)
2032+
2033+
fileName = os.path.join( self.temporaryDirectory(), "visibilityAttribute.abc" )
2034+
root = IECoreScene.SceneInterface.create( fileName, IECore.IndexedIO.OpenMode.Write )
2035+
root.createChild( "object" ).writeObject( points, 0 )
2036+
del root
2037+
2038+
root = IECoreScene.SceneInterface.create( fileName, IECore.IndexedIO.OpenMode.Read )
2039+
points2 = root.child( "object" ).readObject( 0 )
2040+
for name in points.keys() :
2041+
self.assertEqual( points2[name], points[name] )
2042+
20082043
if __name__ == "__main__":
20092044
unittest.main()

0 commit comments

Comments
 (0)