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.HoudiniScene(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)
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") 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) torus1.createNode("torus", "actualTorus") torus2 = torus1.createOutputNode("geo", "torus2", run_init_scripts=False) torus2.createNode("torus", "actualTorus") return IECoreHoudini.HoudiniScene()
def testRerooting(self): self.buildScene() scene = IECoreHoudini.HoudiniScene("/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)