Skip to content

Commit 7c45851

Browse files
committed
Merge pull request #187 from andrewkaufman/deleteNormalsOnSubdiv
Deleting normals on subdiv meshes converted from Houdini.
2 parents 72748d1 + 9863b9f commit 7c45851

File tree

2 files changed

+12
-3
lines changed

2 files changed

+12
-3
lines changed

src/IECoreHoudini/FromHoudiniPolygonsConverter.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,8 @@ ObjectPtr FromHoudiniPolygonsConverter::doDetailConversion( const GU_Detail *geo
125125
if ( attrHandle.isAttributeValid() )
126126
{
127127
modifiedOperands = operands->copy();
128-
modifiedOperands->member<StringData>( "attributeFilter" )->writable() += " ^ieMeshInterpolation";
128+
std::string &attributeFilter = modifiedOperands->member<StringData>( "attributeFilter" )->writable();
129+
attributeFilter += " ^ieMeshInterpolation";
129130

130131
GA_Range primRange = geo->getPrimitiveRange();
131132
const GA_ROAttributeRef attrRef( attrHandle.getAttribute() );
@@ -137,6 +138,9 @@ ObjectPtr FromHoudiniPolygonsConverter::doDetailConversion( const GU_Detail *geo
137138
if ( !strcmp( value, "subdiv" ) )
138139
{
139140
interpolation = "catmullClark";
141+
// subdivision meshes should not have normals. we assume this occurred because the geo contained
142+
// both subdiv and linear meshes, inadvertantly extending the normals attribute to both.
143+
attributeFilter += " ^N";
140144
break;
141145
}
142146
else if ( !strcmp( value, "poly" ) )

test/IECoreHoudini/FromHoudiniPolygonsConverter.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -788,23 +788,28 @@ def testStandardAttributeConversion( self ) :
788788
def testInterpolation( self ) :
789789

790790
torus = self.createTorus()
791-
result = IECoreHoudini.FromHoudiniPolygonsConverter( torus ).convert()
791+
normals = torus.createOutputNode( "facet" )
792+
normals.parm( "postnml" ).set( True )
793+
result = IECoreHoudini.FromHoudiniPolygonsConverter( normals ).convert()
792794
self.assertTrue( "ieMeshInterpolation" not in result.keys() )
793795
self.assertEqual( result.interpolation, "linear" )
796+
self.assertTrue( "N" in result.keys() )
794797

795-
attr = torus.createOutputNode( "attribcreate", node_name = "interpolation", exact_type_name=True )
798+
attr = normals.createOutputNode( "attribcreate", node_name = "interpolation", exact_type_name=True )
796799
attr.parm( "name" ).set( "ieMeshInterpolation" )
797800
attr.parm( "class" ).set( 1 ) # prim
798801
attr.parm( "type" ).set( 3 ) # string
799802
attr.parm( "string") .set( "subdiv" )
800803
result = IECoreHoudini.FromHoudiniPolygonsConverter( attr ).convert()
801804
self.assertTrue( "ieMeshInterpolation" not in result.keys() )
802805
self.assertEqual( result.interpolation, "catmullClark" )
806+
self.assertTrue( "N" not in result.keys() )
803807

804808
attr.parm( "string") .set( "poly" )
805809
result = IECoreHoudini.FromHoudiniPolygonsConverter( attr ).convert()
806810
self.assertTrue( "ieMeshInterpolation" not in result.keys() )
807811
self.assertEqual( result.interpolation, "linear" )
812+
self.assertTrue( "N" in result.keys() )
808813

809814
if __name__ == "__main__":
810815
unittest.main()

0 commit comments

Comments
 (0)