def testNonPrimitiveObject(self): c = GafferScene.Camera() p = GafferScene.MeshToPoints() p["in"].setInput(c["out"]) self.assertSceneValid(p["out"]) self.assertIsInstance(p["out"].object("/camera"), IECoreScene.Camera) self.assertEqual(p["out"].object("/camera"), c["out"].object("/camera")) self.assertTrue(p["out"].object("/camera", _copy=False).isSame( c["out"].object("/camera", _copy=False)))
def test(self): plane = GafferScene.Plane() group = GafferScene.Group() group["in"][0].setInput(plane["out"]) filter = GafferScene.PathFilter() filter["paths"].setValue(IECore.StringVectorData(["/group/plane"])) meshToPoints = GafferScene.MeshToPoints() meshToPoints["in"].setInput(group["out"]) meshToPoints["filter"].setInput(filter["out"]) self.assertSceneValid(meshToPoints["out"]) mesh = group["out"].object("/group/plane", _copy=False) points = meshToPoints["out"].object("/group/plane", _copy=False) self.assertTrue(points.arePrimitiveVariablesValid()) self.assertEqual(points["P"], mesh["P"]) self.assertTrue(points["P"].data.isSame(mesh["P"].data)) self.assertEqual(points["type"].data.value, "particle")
GafferUI.WidgetAlgo.grab(widget=GafferUI.NodeEditor.acquire(script["Node"], floating=True), imagePath="images/nodeEditor.png") del script["Node"] script["Sphere"] = GafferScene.Sphere() scriptEditor.inputWidget().setText('script["Sphere"]["radius"].getValue()') scriptEditor.inputWidget()._qtWidget().selectAll() scriptEditor.outputWidget().setText('') scriptEditor.execute() scriptEditor.reveal() GafferUI.WidgetAlgo.grab(widget=scriptEditor.parent(), imagePath="images/scriptEditorGetValue.png") script["Sphere"]["radius"].setValue(10.5) script["MeshToPoints"] = GafferScene.MeshToPoints("MeshToPoints") script["MeshToPoints"]["type"].setValue("sphere") script["MeshToPoints"]["in"].setInput(script["Sphere"]["out"]) script.selection().add(script["MeshToPoints"]) viewer = scriptWindow.getLayout().editors(GafferUI.Viewer)[0] # delay so it can redraw GafferUI.EventLoop.waitForIdle() viewer.view().viewportGadget().frame( script["MeshToPoints"]["out"].bound("/sphere")) GafferUI.WidgetAlgo.grab(widget=viewer, imagePath="images/meshToPointsViewer.png") graph = scriptWindow.getLayout().editors(GafferUI.GraphEditor)[0] graph.frame(script.children(Gaffer.Node)) GafferUI.WidgetAlgo.grab(widget=graph, imagePath="images/meshToPointsGraphEditor.png")
def test( self ) : # Build network to perform closest point queries # from a plane, against a copy of the same plane # converted to a points primitive. Closest points # should be exact vertices. plane = GafferScene.Plane() plane["dimensions"].setValue( imath.V2f( 2 ) ) planeFilter = GafferScene.PathFilter() planeFilter["paths"].setValue( IECore.StringVectorData( [ "/plane" ] ) ) planeTransform = GafferScene.Transform() planeTransform["in"].setInput( plane["out"] ) planeTransform["filter"].setInput( planeFilter["out"] ) points = GafferScene.MeshToPoints() points["in"].setInput( plane["out"] ) points["filter"].setInput( planeFilter["out"] ) pointsTransform = GafferScene.Transform() pointsTransform["in"].setInput( points["out"] ) pointsTransform["filter"].setInput( planeFilter["out"] ) sampler = GafferScene.ClosestPointSampler() sampler["in"].setInput( planeTransform["out"] ) sampler["source"].setInput( pointsTransform["out"] ) sampler["filter"].setInput( planeFilter["out"] ) sampler["sourceLocation"].setValue( "/plane" ) sampler["prefix"].setValue( "sampled:" ) self.assertScenesEqual( sampler["out"], plane["out"] ) # Identical transforms. Closest point should # be the same as the query point. sampler["primitiveVariables"].setValue( "P" ) self.assertSceneValid( sampler["out"] ) inMesh = sampler["in"].object( "/plane" ) outMesh = sampler["out"].object( "/plane" ) self.assertEqual( set( outMesh.keys() ), set( inMesh.keys() + [ "sampled:P" ] ) ) self.assertEqual( outMesh["sampled:P"], inMesh["P"] ) # Translate source off to one side. A single # point is the closest for all query points. pointsTransform["transform"]["translate"].setValue( imath.V3f( 5, 5, 0 ) ) outMesh = sampler["out"].object( "/plane" ) self.assertEqual( outMesh["sampled:P"].data, IECore.V3fVectorData( [ imath.V3f( 4, 4, 0 ) ] * 4, IECore.GeometricData.Interpretation.Point ) ) # Translate the plane too. Sampled results should # be adjusted so that they are relative to the local # space of the plane. planeTransform["transform"]["translate"].setValue( imath.V3f( -1, 0, 0 ) ) outMesh = sampler["out"].object( "/plane" ) self.assertEqual( outMesh["sampled:P"].data, IECore.V3fVectorData( [ imath.V3f( 5, 4, 0 ) ] * 4, IECore.GeometricData.Interpretation.Point ) )