示例#1
0
    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)))
示例#2
0
    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")
示例#3
0
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")
示例#4
0
	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
			)
		)