Esempio n. 1
0
	def testAttribWrangleName( self ) :
		
		geo = hou.node( "/obj" ).createNode( "geo" )
		torus = geo.createNode( "torus" )
		torus.parm( "rows" ).set( 10 )
		torus.parm( "cols" ).set( 10 )
		name = torus.createOutputNode( "name" )
		name.parm( "name1" ).set( "/a" )
		wrangle = name.createOutputNode( "attribwrangle" )
		wrangle.parm( "class" ).set( 1 ) # primitive
		wrangle.parm( "snippet" ).set( 's@name = "/b";' )
		
		# since the geo is named it doesn't count as a
		# local object, but rather as a child scene.
		
		name.setRenderFlag( True )
		scene = IECoreHoudini.LiveScene( geo.path() )
		self.assertFalse( scene.hasObject() )
		self.assertEqual( scene.childNames(), [ "a" ] )
		childScene = scene.child( "a" )
		self.assertTrue( childScene.hasObject() )
		self.assertEqual( childScene.childNames(), [] )
		self.assertEqual( childScene.readObject( 0 ).variableSize( IECore.PrimitiveVariable.Interpolation.Uniform ), 100 )
		
		# this is still true after wrangling the name attrib,
		# which we are testing because attribwrangle nodes
		# do not clean up the mess they've made with the
		# string table for attributes.
		
		wrangle.setRenderFlag( True )
		scene = IECoreHoudini.LiveScene( geo.path() )
		self.assertFalse( scene.hasObject() )
		self.assertEqual( scene.childNames(), [ "b" ] )
		childScene = scene.child( "b" )
		self.assertTrue( childScene.hasObject() )
		self.assertEqual( childScene.childNames(), [] )
		self.assertEqual( childScene.readObject( 0 ).variableSize( IECore.PrimitiveVariable.Interpolation.Uniform ), 100 )
		
		# it works for nested names too
		
		wrangle.parm( "snippet" ).set( 's@name = "/c/d/e";' )
		scene = IECoreHoudini.LiveScene( geo.path() )
		self.assertFalse( scene.hasObject() )
		self.assertEqual( scene.childNames(), [ "c" ] )
		childScene = scene.child( "c" )
		self.assertFalse( childScene.hasObject() )
		self.assertEqual( childScene.childNames(), [ "d" ] )
		childScene = childScene.child( "d" )
		self.assertFalse( childScene.hasObject() )
		self.assertEqual( childScene.childNames(), [ "e" ] )
		childScene = childScene.child( "e" )
		self.assertTrue( childScene.hasObject() )
		self.assertEqual( childScene.childNames(), [] )
		self.assertEqual( childScene.readObject( 0 ).variableSize( IECore.PrimitiveVariable.Interpolation.Uniform ), 100 )
Esempio n. 2
0
		def test() :
			
			scene = IECoreHoudini.LiveScene()
			self.assertEqual( scene.childNames(), [ "boxes" ] )
			boxesScene = scene.child( "boxes" )
			self.assertEqual( boxesScene.childNames(), [ "box1", "box2" ] )
			self.assertFalse( boxesScene.hasObject() )
			
			box1Scene = boxesScene.child( "box1" )
			self.assertEqual( box1Scene.childNames(), [] )
			self.assertTrue( box1Scene.hasObject() )
			box1Obj = box1Scene.readObject( 0 )
			self.assertTrue( isinstance( box1Obj, IECore.MeshPrimitive ) )
			self.assertEqual( box1Obj.numFaces(), 6 )
			self.assertTrue( box1Obj.arePrimitiveVariablesValid() )
			
			box2Scene = boxesScene.child( "box2" )
			self.assertEqual( box2Scene.childNames(), [] )
			self.assertTrue( box2Scene.hasObject() )
			box2Obj = box2Scene.readObject( 0 )
			self.assertTrue( isinstance( box2Obj, IECore.MeshPrimitive ) )
			self.assertEqual( box2Obj.numFaces(), 6 )
			self.assertTrue( box2Obj.arePrimitiveVariablesValid() )
			
			self.assertNotEqual( box1Obj, box2Obj )
			box2Obj["P"] = box1Obj["P"]
			self.assertEqual( box1Obj, box2Obj )
Esempio n. 3
0
	def buildScene( self ) :
		
		obj = hou.node( "/obj" )
		sub1 = obj.createNode( "subnet", "sub1" )
		sub2 = obj.createNode( "subnet", "sub2" )
		box1 = sub1.createOutputNode( "geo", "box1", run_init_scripts=False )
		box1.createNode( "box", "actualBox" )
		actualBox = box1.children()[0]
		bname = actualBox.createOutputNode( "name" )
		bname.parm( "name1" ).set( "/" )
		torus = box1.createNode( "torus" )
		torus.parm( "rows" ).set( 10 )
		torus.parm( "cols" ).set( 10 )
		tname = torus.createOutputNode( "name" )
		tname.parm( "name1" ).set( "/gap/torus" )
		merge = bname.createOutputNode( "merge" )
		merge.setInput( 1, tname )
		merge.setRenderFlag( True )
		box2 = obj.createNode( "geo", "box2", run_init_scripts=False )
		box2.createNode( "box", "actualBox" )
		torus1 = sub1.createNode( "geo", "torus1", run_init_scripts=False )
		actualTorus1 = torus1.createNode( "torus", "actualTorus" )
		actualTorus1.parm( "rows" ).set( 10 )
		actualTorus1.parm( "cols" ).set( 10 )
		torus2 = torus1.createOutputNode( "geo", "torus2", run_init_scripts=False )
		actualTorus2 = torus2.createNode( "torus", "actualTorus" )
		actualTorus2.parm( "rows" ).set( 10 )
		actualTorus2.parm( "cols" ).set( 10 )
		
		return IECoreHoudini.LiveScene()
Esempio n. 4
0
	def testStringArrayDetail( self ) :

		obj = hou.node( "/obj" )
		box1 = obj.createNode( "geo", "box1", run_init_scripts = False )
		box1.createNode( "box", "actualBox" )
		actualBox = box1.children()[0]
		wrangle = actualBox.createOutputNode( "attribwrangle" )

		wrangle.parm( "class" ).set( 0 )
		wrangle.parm( "snippet" ).set( """ 
			string tmp[] = {"stringA", "stringB", "stringC"};
			string tmp2 = "stringD";

			s[]@foo = tmp;
			s@bar = tmp2;
		""" )

		wrangle.setRenderFlag( True )

		obj = IECoreHoudini.LiveScene().child( "box1" ).readObject( 0.0 )
		self.assertTrue( "foo" in obj.keys() )
		self.assertTrue( "bar" in obj.keys() )

		self.assertEqual( obj["foo"].data, IECore.StringVectorData( ['stringA', 'stringB', 'stringC'] ) )
		self.assertEqual( obj["bar"].data, IECore.StringData( 'stringD' ) )
Esempio n. 5
0
	def testMultipleTransforms( self ) :
		
		obj = hou.node( "/obj" )
		sub1 = obj.createNode( "subnet", "sub1" )
		sub2 = sub1.createNode( "subnet", "sub2" )
		sub2.setInput( 0, hou.node( "/obj/sub1" ).indirectInputs()[0] )
		sub3 = sub1.createOutputNode( "subnet", "sub3" )
		
		sub1.parmTuple("t").set( (5.0,5.0,0.0) )
		
		sc = IECoreHoudini.LiveScene()
		sub1Sc = sc.scene(["sub1"])
		sub1Transform = sub1Sc.readTransform( 0 ).value
		self.assertEqual( sub1Transform.translate, IECore.V3d( 5.0, 5.0, 0.0 ) )
		sub2Sc = sub1Sc.child("sub2")
		sub2Transform = sub2Sc.readTransform( 0 ).value
		self.assertEqual( sub2Transform.translate, IECore.V3d( 0.0, 0.0, 0.0 ) )
		sub3Sc = sub1Sc.child("sub3")
		sub3Transform = sub3Sc.readTransform( 0 ).value
		self.assertEqual( sub3Transform.translate, IECore.V3d( 0.0, 0.0, 0.0 ) )
Esempio n. 6
0
	def testDefaultTime( self ) :
		
		self.buildScene()
		box = hou.node( "/obj/box1" )
		deformer = box.renderNode().createOutputNode( "twist" )
		deformer.parm( "paxis" ).set( 1 )
		deformer.parm( "strength" ).setExpression( "10*($T+1.0/$FPS)" )
		deformer.setRenderFlag( True )
		
		self.assertNotEqual( hou.time(), 0.5 )
		self.assertEqual( deformer.cookCount(), 0 )
		scene = IECoreHoudini.LiveScene( box.path(), defaultTime = 0.5 )
		self.assertEqual( scene.getDefaultTime(), 0.5 )
		self.assertEqual( deformer.cookCount(), 1 )
		self.assertTrue( scene.hasObject() )
		self.assertEqual( deformer.cookCount(), 1 )
		self.assertEqual( scene.childNames(), [ "gap" ] )
		self.assertEqual( deformer.cookCount(), 1 )
		mesh0_5 = scene.readObject( 0.5 )
		self.assertEqual( deformer.cookCount(), 1 )
		self.assertEqual( len(mesh0_5["P"].data), 8 )
		self.assertAlmostEqual( mesh0_5["P"].data[0].x, -0.521334, 6 )
		
		scene.setDefaultTime( 0 )
		self.assertEqual( scene.getDefaultTime(), 0 )
		self.assertEqual( deformer.cookCount(), 1 )
		self.assertTrue( scene.hasObject() )
		self.assertEqual( deformer.cookCount(), 2 )
		self.assertEqual( scene.childNames(), [ "gap" ] )
		self.assertEqual( deformer.cookCount(), 2 )
		mesh0 = scene.readObject( 0 )
		self.assertEqual( deformer.cookCount(), 2 )
		self.assertEqual( len(mesh0["P"].data), 8 )
		self.assertEqual( mesh0["P"].data[0].x, -0.5 )
		
		scene.setDefaultTime( 0.5 )
		self.assertTrue( scene.hasObject() )
		self.assertEqual( deformer.cookCount(), 3 )
		gap = scene.scene( scene.path() + [ "gap" ] )
		self.assertEqual( deformer.cookCount(), 3 )
Esempio n. 7
0
	def testRerooting( self ) :	
		
		self.buildScene()
		scene = IECoreHoudini.LiveScene( "/obj/sub1", rootPath = [ "sub1" ] )
		self.assertEqual( scene.path(), [] )
		self.assertEqual( scene.pathAsString(), "/" )
		self.assertEqual( scene.name(), "/" )
		self.assertEqual( sorted( scene.childNames() ), [ "box1", "torus1" ] )
		self.assertEqual( scene.hasChild( "box1" ), True )
		self.assertEqual( scene.hasChild( "torus1" ), True )
		self.assertEqual( scene.hasChild( "torus2" ), False )
		self.assertEqual( scene.hasObject(), False )
		
		torus1 = scene.child( "torus1" )
		self.assertEqual( torus1.path(), [ "torus1" ] )
		self.assertEqual( torus1.pathAsString(), "/torus1" )
		self.assertEqual( torus1.name(), "torus1" )
		self.assertEqual( sorted( torus1.childNames() ), [ "torus2" ] )
		self.assertEqual( torus1.hasChild( "torus2" ), True )
		self.assertEqual( torus1.hasObject(), True )
		mesh = torus1.readObject( 0 )
		self.failUnless( isinstance( mesh, IECore.MeshPrimitive ) )
		self.assertEqual( mesh["P"].data.size(), 100 )
		self.assertEqual( mesh.blindData(), IECore.CompoundData() )
		
		torus2 = torus1.child( "torus2" )
		self.assertEqual( torus2.path(), [ "torus1", "torus2" ] )
		self.assertEqual( torus2.pathAsString(), "/torus1/torus2" )
		self.assertEqual( torus2.name(), "torus2" )
		self.assertEqual( sorted( torus2.childNames() ), [] )
		self.assertEqual( torus2.hasObject(), True )
		mesh = torus2.readObject( 0 )
		self.failUnless( isinstance( mesh, IECore.MeshPrimitive ) )
		self.assertEqual( mesh["P"].data.size(), 100 )
		self.assertEqual( mesh.blindData(), IECore.CompoundData() )
		
		box1 = scene.child( "box1" )
		self.assertEqual( box1.path(), [ "box1" ] )
		self.assertEqual( box1.pathAsString(), "/box1" )
		self.assertEqual( box1.name(), "box1" )
		self.assertEqual( sorted( box1.childNames() ), [ "gap" ] )
		self.assertEqual( box1.hasChild( "gap" ), True )
		self.assertEqual( box1.hasObject(), True )
		mesh = box1.readObject( 0 )
		self.failUnless( isinstance( mesh, IECore.MeshPrimitive ) )
		self.assertEqual( mesh["P"].data.size(), 8 )
		self.assertEqual( mesh.blindData(), IECore.CompoundData() )
		
		gap = box1.child( "gap" )
		self.assertEqual( gap.path(), [ "box1", "gap" ] )
		self.assertEqual( gap.pathAsString(), "/box1/gap" )
		self.assertEqual( gap.name(), "gap" )
		self.assertEqual( sorted( gap.childNames() ), [ "torus" ] )
		self.assertEqual( gap.hasChild( "torus" ), True )
		self.assertEqual( gap.hasObject(), False )
		
		boxTorus = gap.child( "torus" )
		self.assertEqual( boxTorus.path(), [ "box1", "gap", "torus" ] )
		self.assertEqual( boxTorus.pathAsString(), "/box1/gap/torus" )
		self.assertEqual( boxTorus.name(), "torus" )
		self.assertEqual( boxTorus.childNames(), [] )
		self.assertEqual( boxTorus.hasObject(), True )
		mesh = boxTorus.readObject( 0 )
		self.failUnless( isinstance( mesh, IECore.MeshPrimitive ) )
		self.assertEqual( mesh["P"].data.size(), 100 )
		self.assertEqual( mesh.blindData(), IECore.CompoundData() )
		
		self.assertRaises( RuntimeError, scene.child, "box2" )
		self.assertEqual( scene.child( "box2", IECore.SceneInterface.MissingBehaviour.NullIfMissing ), None )
		
		# test the node that does exist according to houdini, but is actually a grandchild in our world
		self.assertRaises( RuntimeError, scene.child, "torus2" )
		self.assertEqual( scene.child( "torus2", IECore.SceneInterface.MissingBehaviour.NullIfMissing ), None )
		
		torus1 = scene.scene( [ "torus1" ] )
		self.assertEqual( torus1.pathAsString(), "/torus1" )
		
		# can't use scene() to go outside of the re-rooting
		self.assertRaises( RuntimeError, scene.scene, [ "sub2" ] )
		self.assertEqual( scene.scene( [ "sub2" ], IECore.SceneInterface.MissingBehaviour.NullIfMissing ), None )