Esempio n. 1
0
	def testStandardAttributeConversion( self ) :
		
		torus = hou.node("/obj").createNode("geo", run_init_scripts=False).createNode( "torus" )
		color = torus.createOutputNode( "color" )
		color.parm( "class" ).set( 3 )
		color.parm( "colortype" ).set( 2 )
		rest = color.createOutputNode( "rest" )
		scale = rest.createOutputNode( "attribcreate" )
		scale.parm( "name1" ).set( "pscale" )
		scale.parm( "value1v1" ).setExpression( "$PT" )
		uvunwrap = scale.createOutputNode( "uvunwrap" )
		opHolder = uvunwrap.createOutputNode( "ieOpHolder" )
		fn = IECoreHoudini.FnOpHolder( opHolder )
		fn.setOp( "parameters/primitives/polyParam" )
		out = opHolder.createOutputNode( "ieCortexConverter" )
		
		# verify input
		inGeo = uvunwrap.geometry()
		self.assertEqual( sorted([ x.name() for x in inGeo.pointAttribs() ]), ['P', 'Pw', 'pscale', 'rest'] )
		self.assertEqual( sorted([ x.name() for x in inGeo.primAttribs() ]), [] )
		self.assertEqual( sorted([ x.name() for x in inGeo.vertexAttribs() ]), ['Cd', 'uv'] )
		self.assertEqual( sorted([ x.name() for x in inGeo.globalAttribs() ]), ['varmap'] )
		
		# verifty output
		outGeo = out.geometry()
		self.assertEqual( sorted([ x.name() for x in outGeo.pointAttribs() ]), ['P', 'Pw', 'pscale', 'rest'] )
		self.assertEqual( sorted([ x.name() for x in outGeo.primAttribs() ]), ["ieMeshInterpolation"] )
		self.assertEqual( sorted([ x.name() for x in outGeo.vertexAttribs() ]), ['Cd', 'uv'] )
		self.assertEqual( sorted([ x.name() for x in outGeo.globalAttribs() ]), ['varmap'] )
		
		# verify intermediate op result
		result = fn.getOp().resultParameter().getValue()
		self.assertEqual( result.keys(), [ "Cs", "P", "Pref", "s", "t", "varmap", "width" ] )
		self.assertTrue( result.arePrimitiveVariablesValid() )
		self.assertEqual( result["P"].data.getInterpretation(), IECore.GeometricData.Interpretation.Point )
		self.assertEqual( result["Pref"].data.getInterpretation(), IECore.GeometricData.Interpretation.Point )
		
		sData = result["s"].data
		tData = result["t"].data
		inUvs = inGeo.findVertexAttrib( "uv" )
		outUvs = outGeo.findVertexAttrib( "uv" )
		
		i = 0
		for prim in inGeo.prims() :
			verts = list(prim.vertices())
			verts.reverse()
			for vert in verts :
				uvValues = vert.attribValue( inUvs )
				self.assertAlmostEqual( sData[i], uvValues[0] )
				self.assertAlmostEqual( tData[i], 1 - uvValues[1] )
				i += 1
		
		i = 0
		for prim in outGeo.prims() :
			verts = list(prim.vertices())
			verts.reverse()
			for vert in verts :
				uvValues = vert.attribValue( outUvs )
				self.assertAlmostEqual( sData[i], uvValues[0] )
				self.assertAlmostEqual( tData[i], 1 - uvValues[1] )
				i += 1		
		
		# turn off half the conversion
		opHolder.parm( "parm_input_convertStandardAttributes" ).set( False )
		
		# verifty output
		outGeo = out.geometry()
		self.assertEqual( sorted([ x.name() for x in outGeo.pointAttribs() ]), ['P', 'Pw', 'pscale', 'rest'] )
		self.assertEqual( sorted([ x.name() for x in outGeo.primAttribs() ]), ["ieMeshInterpolation"] )
		self.assertEqual( sorted([ x.name() for x in outGeo.vertexAttribs() ]), ['Cd', 'uv'] )
		self.assertEqual( sorted([ x.name() for x in outGeo.globalAttribs() ]), ['varmap'] )
		
		# verify intermediate op result
		result = fn.getOp().resultParameter().getValue()
		self.assertEqual( result.keys(), [ "Cd", "P", "pscale", "rest", "uv", "varmap" ] )
		self.assertTrue( result.arePrimitiveVariablesValid() )
		self.assertEqual( result["P"].data.getInterpretation(), IECore.GeometricData.Interpretation.Point )
		self.assertEqual( result["rest"].data.getInterpretation(), IECore.GeometricData.Interpretation.Point )
		
		uvData = result["uv"].data
		inUvs = inGeo.findVertexAttrib( "uv" )
		outUvs = outGeo.findVertexAttrib( "uv" )
		
		i = 0
		for prim in inGeo.prims() :
			verts = list(prim.vertices())
			verts.reverse()
			for vert in verts :
				uvValues = vert.attribValue( inUvs )
				self.assertAlmostEqual( uvData[i][0], uvValues[0] )
				self.assertAlmostEqual( uvData[i][1], uvValues[1] )
				i += 1
		
		i = 0
		for prim in outGeo.prims() :
			verts = list(prim.vertices())
			verts.reverse()
			for vert in verts :
				uvValues = vert.attribValue( outUvs )
				self.assertAlmostEqual( uvData[i][0], uvValues[0] )
				self.assertAlmostEqual( uvData[i][1], uvValues[1] )
				i += 1
		
		# turn off the other half of the conversion
		opHolder.parm( "parm_input_convertStandardAttributes" ).set( True )
		out.parm( "convertStandardAttributes" ).set( False )
		
		# verifty output
		outGeo = out.geometry()
		self.assertEqual( sorted([ x.name() for x in outGeo.pointAttribs() ]), ['P', 'Pref', 'Pw', 'width'] )
		self.assertEqual( sorted([ x.name() for x in outGeo.primAttribs() ]), ["ieMeshInterpolation"] )
		self.assertEqual( sorted([ x.name() for x in outGeo.vertexAttribs() ]), ['Cs', 's', 't'] )
		self.assertEqual( sorted([ x.name() for x in outGeo.globalAttribs() ]), ['varmap'] )
		
		# verify intermediate op result
		result = fn.getOp().resultParameter().getValue()
		self.assertEqual( result.keys(), [ "Cs", "P", "Pref", "s", "t", "varmap", "width" ] )
		self.assertTrue( result.arePrimitiveVariablesValid() )
		self.assertEqual( result["P"].data.getInterpretation(), IECore.GeometricData.Interpretation.Point )
		self.assertEqual( result["Pref"].data.getInterpretation(), IECore.GeometricData.Interpretation.Point )
		
		sData = result["s"].data
		tData = result["t"].data
		inUvs = inGeo.findVertexAttrib( "uv" )
		outS = outGeo.findVertexAttrib( "s" )
		outT = outGeo.findVertexAttrib( "t" )
		
		i = 0
		for prim in inGeo.prims() :
			verts = list(prim.vertices())
			verts.reverse()
			for vert in verts :
				uvValues = vert.attribValue( inUvs )
				self.assertAlmostEqual( sData[i], uvValues[0] )
				self.assertAlmostEqual( tData[i], 1 - uvValues[1] )
				i += 1
		
		i = 0
		for prim in outGeo.prims() :
			verts = list(prim.vertices())
			verts.reverse()
			for vert in verts :
				self.assertAlmostEqual( sData[i], vert.attribValue( outS ) )
				self.assertAlmostEqual( tData[i], vert.attribValue( outT ) )
				i += 1
Esempio n. 2
0
def syncSopParametersWithOp(n):
    fn = IECoreHoudini.FnOpHolder(n)
    parms = fn.getParameterised().parameters().values()
    for p in parms:
        if n.parm("parm_%s" % p.name):
            setHoudiniParm(n, p)
Esempio n. 3
0
	def testAttributeFilter( self ) :
		
		torus = hou.node("/obj").createNode("geo", run_init_scripts=False).createNode( "torus" )
		color = torus.createOutputNode( "color" )
		color.parm( "class" ).set( 3 )
		color.parm( "colortype" ).set( 2 )
		rest = color.createOutputNode( "rest" )
		scale = rest.createOutputNode( "attribcreate" )
		scale.parm( "name1" ).set( "pscale" )
		scale.parm( "value1v1" ).setExpression( "$PT" )
		uvunwrap = scale.createOutputNode( "uvunwrap" )
		opHolder = uvunwrap.createOutputNode( "ieOpHolder" )
		fn = IECoreHoudini.FnOpHolder( opHolder )
		fn.setOp( "parameters/primitives/polyParam" )
		out = opHolder.createOutputNode( "ieCortexConverter" )
		
		# verify input
		inGeo = uvunwrap.geometry()
		self.assertEqual( sorted([ x.name() for x in inGeo.pointAttribs() ]), ['P', 'Pw', 'pscale', 'rest'] )
		self.assertEqual( sorted([ x.name() for x in inGeo.primAttribs() ]), [] )
		self.assertEqual( sorted([ x.name() for x in inGeo.vertexAttribs() ]), ['Cd', 'uv'] )
		self.assertEqual( sorted([ x.name() for x in inGeo.globalAttribs() ]), ['varmap'] )
		
		# verifty output
		outGeo = out.geometry()
		self.assertEqual( sorted([ x.name() for x in outGeo.pointAttribs() ]), ['P', 'Pw', 'pscale', 'rest'] )
		self.assertEqual( sorted([ x.name() for x in outGeo.primAttribs() ]), ["ieMeshInterpolation"] )
		self.assertEqual( sorted([ x.name() for x in outGeo.vertexAttribs() ]), ['Cd', 'uv'] )
		self.assertEqual( sorted([ x.name() for x in outGeo.globalAttribs() ]), ['varmap'] )
		
		# verify intermediate op result
		result = fn.getOp().resultParameter().getValue()
		self.assertEqual( result.keys(), [ "Cs", "P", "Pref", "s", "t", "varmap", "width" ] )
		self.assertTrue( result.arePrimitiveVariablesValid() )
		
		# make sure P is forced
		out.parm( "attributeFilter" ).set( "* ^P" )
		outGeo = out.geometry()
		self.assertEqual( sorted([ x.name() for x in outGeo.pointAttribs() ]), ['P', 'Pw', 'pscale', 'rest'] )
		self.assertEqual( sorted([ x.name() for x in outGeo.primAttribs() ]), ["ieMeshInterpolation"] )
		self.assertEqual( sorted([ x.name() for x in outGeo.vertexAttribs() ]), ['Cd', 'uv'] )
		self.assertEqual( sorted([ x.name() for x in outGeo.globalAttribs() ]), ['varmap'] )
		
		# have to filter the source attrs s, t and not uv
		out.parm( "attributeFilter" ).set( "* ^uv  ^pscale ^rest" )
		outGeo = out.geometry()
		self.assertEqual( sorted([ x.name() for x in outGeo.pointAttribs() ]), ['P', 'Pw', 'pscale', 'rest'] )
		self.assertEqual( sorted([ x.name() for x in outGeo.primAttribs() ]), ["ieMeshInterpolation"] )
		self.assertEqual( sorted([ x.name() for x in outGeo.vertexAttribs() ]), ['Cd', 'uv'] )
		self.assertEqual( sorted([ x.name() for x in outGeo.globalAttribs() ]), ['varmap'] )
		
		out.parm( "attributeFilter" ).set( "* ^s ^t  ^width ^Pref" )
		outGeo = out.geometry()
		self.assertEqual( sorted([ x.name() for x in outGeo.pointAttribs() ]), ['P', 'Pw'] )
		self.assertEqual( sorted([ x.name() for x in outGeo.primAttribs() ]), ["ieMeshInterpolation"] )
		self.assertEqual( sorted([ x.name() for x in outGeo.vertexAttribs() ]), ['Cd'] )
		self.assertEqual( sorted([ x.name() for x in outGeo.globalAttribs() ]), ['varmap'] )
		
		# make sure we can filter on both ends
		opHolder.parm( "parm_input_attributeFilter" ).set( "* ^s ^t  ^width ^Pref" )
		result = fn.getOp().resultParameter().getValue()
		self.assertEqual( result.keys(), [ "Cs", "P", "Pref", "s", "t", "varmap", "width" ] )
		self.assertTrue( result.arePrimitiveVariablesValid() )
		outGeo = out.geometry()
		self.assertEqual( sorted([ x.name() for x in outGeo.pointAttribs() ]), ['P', 'Pw'] )
		self.assertEqual( sorted([ x.name() for x in outGeo.primAttribs() ]), ["ieMeshInterpolation"] )
		self.assertEqual( sorted([ x.name() for x in outGeo.vertexAttribs() ]), ['Cd'] )
		self.assertEqual( sorted([ x.name() for x in outGeo.globalAttribs() ]), ['varmap'] )
		
		opHolder.parm( "parm_input_attributeFilter" ).set( "* ^uv  ^pscale ^rest" )
		opHolder.cook( True )
		result = fn.getOp().resultParameter().getValue()
		self.assertEqual( result.keys(), [ "Cs", "P", "varmap" ] )
		self.assertTrue( result.arePrimitiveVariablesValid() )
		outGeo = out.geometry()
		self.assertEqual( sorted([ x.name() for x in outGeo.pointAttribs() ]), ['P', 'Pw'] )
		self.assertEqual( sorted([ x.name() for x in outGeo.primAttribs() ]), ["ieMeshInterpolation"] )
		self.assertEqual( sorted([ x.name() for x in outGeo.vertexAttribs() ]), ['Cd'] )
		self.assertEqual( sorted([ x.name() for x in outGeo.globalAttribs() ]), ['varmap'] )
		
		# since the vars never made it to the op, the never make it out
		out.parm( "attributeFilter" ).set( "*" )
		outGeo = out.geometry()
		self.assertEqual( sorted([ x.name() for x in outGeo.pointAttribs() ]), ['P', 'Pw'] )
		self.assertEqual( sorted([ x.name() for x in outGeo.primAttribs() ]), ["ieMeshInterpolation"] )
		self.assertEqual( sorted([ x.name() for x in outGeo.vertexAttribs() ]), ['Cd'] )
		self.assertEqual( sorted([ x.name() for x in outGeo.globalAttribs() ]), ['varmap'] )