Ejemplo n.º 1
0
	def testCanWriteAnimatedPositions( self ):

		fileName = self.getOutputPath("usd_animated_positions.usda")

		sceneWrite = IECoreScene.SceneInterface.create( fileName, IECore.IndexedIO.OpenMode.Write )
		root = sceneWrite.createChild( "root" )
		child = root.createChild( "child" )

		for t in range( 64 ):

			planeDimensions = imath.Box2f( imath.V2f( 0, 0 ), imath.V2f( 1 + t, 1 ) )
			planeDivisions = imath.V2i( 1, 1 )

			plane = IECoreScene.MeshPrimitive.createPlane( planeDimensions, planeDivisions )
			child.writeObject( plane, t )

		del child
		del root
		del sceneWrite

		sceneRead = IECoreScene.SceneInterface.create( fileName, IECore.IndexedIO.OpenMode.Read )

		root = sceneRead.child( "root" )
		child = root.child( "child" )

		for t in range( 64 ):
			readObject = child.readObject ( t )

			self.assertEqual(readObject["P"].data[1][0], 1 + t)
Ejemplo n.º 2
0
    def testReferencedData(self):

        p1 = IECoreScene.MeshPrimitive.createPlane(
            imath.Box2f(imath.V2f(-1), imath.V2f(0)))
        p1["Pref"] = p1["P"]
        p2 = IECoreScene.MeshPrimitive.createPlane(
            imath.Box2f(imath.V2f(0), imath.V2f(1)))
        merged = IECoreScene.MeshMergeOp()(input=p1, mesh=p2)
        self.failUnless("Pref" in merged)
        self.verifyMerge(p1, p2, merged)

        del p1["Pref"]
        p2["Pref"] = p2["P"]
        merged = IECoreScene.MeshMergeOp()(input=p1, mesh=p2)
        self.failUnless("Pref" in merged)
        self.verifyMerge(p1, p2, merged)
Ejemplo n.º 3
0
	def testTagsAsSets( self ) :

		s = IECoreScene.SceneCache( "/tmp/test.scc", IECore.IndexedIO.OpenMode.Write )

		sphereGroup = s.createChild( "sphereGroup" )
		sphereGroup.writeTags( [ "chrome" ] )
		sphere = sphereGroup.createChild( "sphere" )
		sphere.writeObject( IECoreScene.SpherePrimitive(), 0 )

		planeGroup = s.createChild( "planeGroup" )
		plane = planeGroup.createChild( "plane" )
		plane.writeTags( [ "wood", "something" ] )
		plane.writeObject( IECoreScene.MeshPrimitive.createPlane( imath.Box2f( imath.V2f( -1 ), imath.V2f( 1 ) ) ), 0 )

		del s, sphereGroup, sphere, planeGroup, plane

		s = GafferScene.SceneReader()
		s["fileName"].setValue( "/tmp/test.scc" )
		s["refreshCount"].setValue( self.uniqueInt( "/tmp/test.scc" ) ) # account for our changing of file contents between tests

		self.assertEqual(
			set( [ str( ss ) for ss in s["out"]["setNames"].getValue() ] ),
			set( [ "ObjectType:SpherePrimitive", "wood", "chrome", "ObjectType:MeshPrimitive", "something" ] )
		)

		self.assertEqual( s["out"].set( "chrome" ).value.paths(), [ "/sphereGroup" ] )
		self.assertEqual( s["out"].set( "wood" ).value.paths(), [ "/planeGroup/plane" ] )
		self.assertEqual( s["out"].set( "something" ).value.paths(), [ "/planeGroup/plane" ] )
		self.assertEqual( s["out"].set( "ObjectType:SpherePrimitive" ).value.paths(), [ "/sphereGroup/sphere" ] )
		self.assertEqual( s["out"].set( "ObjectType:MeshPrimitive" ).value.paths(), [ "/planeGroup/plane" ] )
Ejemplo n.º 4
0
	def testCancel( self ) :
		canceller = IECore.Canceller()
		cancelled = [False]

		# Basic large mesh
		strip = IECoreScene.MeshPrimitive.createPlane( imath.Box2f( imath.V2f( 0 ), imath.V2f( 3000000, 1 ) ), imath.V2i( 3000000, 1 ) )

		def backgroundRun():
			try:
				IECoreScene.MeshAlgo.triangulate( strip, canceller )
			except IECore.Cancelled:
				cancelled[0] = True

		thread = threading.Thread(target=backgroundRun, args=())

		startTime = time.time()
		thread.start()

		time.sleep( 0.1 )
		canceller.cancel()
		thread.join()

		# This test should actually produce a time extremely close to the sleep duration ( within
		# 0.01 seconds whether the sleep duration is 0.01 seconds or 1 seconds ), but checking
		# that it terminates with 0.1 seconds is a minimal performance bar
		self.assertLess( time.time() - startTime, 0.2 )
		self.assertTrue( cancelled[0] )
Ejemplo n.º 5
0
    def testReferencedData(self):

        p1 = IECoreScene.MeshPrimitive.createPlane(
            imath.Box2f(imath.V2f(-1), imath.V2f(0)))
        p1["Pref"] = p1["P"]
        p2 = IECoreScene.MeshPrimitive.createPlane(
            imath.Box2f(imath.V2f(0), imath.V2f(1)))
        merged = IECoreScene.MeshAlgo.merge([p1, p2])
        self.failUnless("Pref" in merged)
        self.verifyMerge(merged, [p1, p2])

        del p1["Pref"]
        p2["Pref"] = p2["P"]
        merged = IECoreScene.MeshAlgo.merge([p1, p2])
        self.failUnless("Pref" in merged)
        self.verifyMerge(merged, [p1, p2])
Ejemplo n.º 6
0
	def testVisualisation( self ) :

		r = IECoreGL.Renderer()
		r.setOption( "gl:mode", IECore.StringData( "immediate" ) )

		r.camera( "main", {
				"projection" : IECore.StringData( "orthographic" ),
				"resolution" : IECore.V2iData( imath.V2i( 256 ) ),
				"clippingPlanes" : IECore.V2fData( imath.V2f( 1, 1000 ) ),
				"screenWindow" : IECore.Box2fData( imath.Box2f( imath.V2f( -1 ), imath.V2f( 1 ) ) )
			}
		)
		r.display( self.__outputFileName, "tif", "rgba", {} )

		r.setOption( "gl:drawCoordinateSystems", IECore.BoolData( True ) )

		with IECoreScene.WorldBlock( r ) :

			r.concatTransform( imath.M44f().translate( imath.V3f( 0, 0, -5 ) ) )
			r.coordinateSystem( "myCoordSys" )

		i = IECore.Reader.create( self.__outputFileName ).read()

		a = i["A"]
		self.assertTrue( a[127*256 + 127] > 0 )
		self.assertTrue( a[127*256 + 255] > 0 )
		self.assertTrue( a[127] > 0 )
		self.assertEqual( a[200*127 + 127], 0 )
		self.assertEqual( a[120*127 + 127], 0 )
Ejemplo n.º 7
0
	def testFaceVaryingUVsWithoutIndices( self ) :

		plane = IECoreScene.MeshPrimitive.createPlane( imath.Box2f( imath.V2f( -1 ), imath.V2f( 1 ) ), divisions = imath.V2i( 2, 1 ) )
		uv = plane["uv"]
		uv.data = uv.expandedData()
		uv.indices = None
		plane["uv"] = uv

		objectToScene = GafferScene.ObjectToScene()
		objectToScene["object"].setValue( plane )

		filter = GafferScene.PathFilter()
		filter["paths"].setValue( IECore.StringVectorData( [ "/object" ] ) )

		wireframe = GafferScene.Wireframe()
		wireframe["in"].setInput( objectToScene["out"] )
		wireframe["filter"].setInput( filter["out"] )
		wireframe["position"].setValue( "uv" )

		self.assertSceneValid( wireframe["out"] )

		# Because we removed the indices, there is no connectivity information,
		# and therefore no shared edges, so we expect to see 8 curves.
		curves = wireframe["out"].object( "/object" )
		self.assertEqual( len( curves.verticesPerCurve() ), 8 )
Ejemplo n.º 8
0
    def testIndexedUniformPrimitiveVariables(self):

        # We expect uniform indexed variables to be expanded out fully
        # when converting to Arnold, because Arnold only supports indexing
        # for FaceVarying variables.

        m = IECoreScene.MeshPrimitive.createPlane(
            imath.Box2f(imath.V2f(-1), imath.V2f(1)),
            imath.V2i(4, 1),
        )
        self.assertEqual(
            m.variableSize(
                IECoreScene.PrimitiveVariable.Interpolation.Uniform), 4)

        m["myPrimVar"] = IECoreScene.PrimitiveVariable(
            IECoreScene.PrimitiveVariable.Interpolation.Uniform,
            IECore.FloatVectorData([5, 10]), IECore.IntVectorData([0, 1, 0,
                                                                   1]))

        with IECoreArnold.UniverseBlock(writable=True):

            n = IECoreArnold.NodeAlgo.convert(m, "testMesh")

            self.assertEqual(
                arnold.AiNodeLookUpUserParameter(n, "myPrimVaridxs"), None)

            a = arnold.AiNodeGetArray(n, "myPrimVar")
            self.assertEqual(arnold.AiArrayGetNumElements(a.contents), 4)

            for i in range(0, 4):
                self.assertEqual(
                    arnold.AiArrayGetFlt(a, i),
                    m["myPrimVar"].data[m["myPrimVar"].indices[i]])
Ejemplo n.º 9
0
    def testPointTypePrimitiveVariables(self):
        # make sure that we can add prim vars of both vector and point type, and differentiate between the two.
        m = IECoreScene.MeshPrimitive.createPlane(
            imath.Box2f(imath.V2f(-1), imath.V2f(1)))

        points = IECore.V3fVectorData([])
        IECore.setGeometricInterpretation(
            points, IECore.GeometricData.Interpretation.Point)
        m["points"] = IECoreScene.PrimitiveVariable(
            IECoreScene.PrimitiveVariable.Interpolation.Vertex, points)

        vectors = IECore.V3fVectorData([])
        IECore.setGeometricInterpretation(
            vectors, IECore.GeometricData.Interpretation.Vector)
        m["vectors"] = IECoreScene.PrimitiveVariable(
            IECoreScene.PrimitiveVariable.Interpolation.Vertex, vectors)

        with IECoreArnold.UniverseBlock(writable=True):
            node = IECoreArnold.NodeAlgo.convert(m, "testMesh")
            p = arnold.AiNodeGetArray(node, "points")
            self.assertEqual(arnold.AiArrayGetType(p.contents),
                             arnold.AI_TYPE_VECTOR)

            v = arnold.AiNodeGetArray(node, "vectors")
            self.assertEqual(arnold.AiArrayGetType(v.contents),
                             arnold.AI_TYPE_VECTOR)
Ejemplo n.º 10
0
    def testAdditionalUVs(self):

        m = IECoreScene.MeshPrimitive.createPlane(
            imath.Box2f(imath.V2f(-1), imath.V2f(1)))
        m["myMap"] = m["uv"]
        uvData = m["myMap"].data
        indicesData = m["myMap"].indices

        with IECoreArnold.UniverseBlock(writable=True):

            n = IECoreArnold.NodeAlgo.convert(m, "testMesh")

            uvs = arnold.AiNodeGetArray(n, "myMap")
            self.assertEqual(arnold.AiArrayGetNumElements(uvs.contents), 4)

            uvIndices = arnold.AiNodeGetArray(n, "myMapidxs")
            self.assertEqual(arnold.AiArrayGetNumElements(uvIndices.contents),
                             4)

            for i in range(0, 4):
                p = arnold.AiArrayGetVec2(uvs, i)
                self.assertEqual(arnold.AiArrayGetVec2(uvs, i),
                                 arnold.AtVector2(uvData[i][0], uvData[i][1]))
                self.assertEqual(arnold.AiArrayGetInt(uvIndices, i),
                                 indicesData[i])
Ejemplo n.º 11
0
    def testIndexedFaceVaryingPrimitiveVariables(self):

        m = IECoreScene.MeshPrimitive.createPlane(
            imath.Box2f(imath.V2f(-1), imath.V2f(1)),
            imath.V2i(2, 1),
        )
        self.assertEqual(
            m.variableSize(
                IECoreScene.PrimitiveVariable.Interpolation.FaceVarying), 8)

        m["myPrimVar"] = IECoreScene.PrimitiveVariable(
            IECoreScene.PrimitiveVariable.Interpolation.FaceVarying,
            IECore.FloatVectorData([5, 10]),
            IECore.IntVectorData([0, 0, 0, 0, 1, 1, 1, 1]))

        with IECoreArnold.UniverseBlock(writable=True):

            n = IECoreArnold.NodeAlgo.convert(m, "testMesh")
            a = arnold.AiNodeGetArray(n, "myPrimVar")
            ia = arnold.AiNodeGetArray(n, "myPrimVaridxs")
            self.assertEqual(arnold.AiArrayGetNumElements(a.contents), 2)
            self.assertEqual(arnold.AiArrayGetNumElements(ia.contents), 8)

            for i in range(0, len(m["myPrimVar"].data)):
                self.assertEqual(arnold.AiArrayGetFlt(a, i),
                                 m["myPrimVar"].data[i])

            for i in range(0, len(m["myPrimVar"].indices)):
                self.assertEqual(arnold.AiArrayGetUInt(ia, i),
                                 m["myPrimVar"].indices[i])
Ejemplo n.º 12
0
    def testSegmentSubset(self):
        mesh = IECoreScene.MeshPrimitive.createPlane(
            imath.Box2f(imath.V2f(0), imath.V2f(2)), imath.V2i(2))

        mesh["s"] = IECoreScene.PrimitiveVariable(
            IECoreScene.PrimitiveVariable.Interpolation.Uniform,
            IECore.StringVectorData(["a", "a", "a", "b"]))

        segmentValues = IECore.StringVectorData(["b"])
        segments = IECoreScene.MeshAlgo.segment(mesh, mesh["s"], segmentValues)

        p00 = imath.V3f(0, 0, 0)
        p10 = imath.V3f(1, 0, 0)
        p20 = imath.V3f(2, 0, 0)

        p01 = imath.V3f(0, 1, 0)
        p11 = imath.V3f(1, 1, 0)
        p21 = imath.V3f(2, 1, 0)

        p02 = imath.V3f(0, 2, 0)
        p12 = imath.V3f(1, 2, 0)
        p22 = imath.V3f(2, 2, 0)

        self.assertEqual(len(segments), 1)
        self.assertEqual(
            segments[0]["P"].data,
            IECore.V3fVectorData([p11, p21, p12, p22],
                                 IECore.GeometricData.Interpretation.Point))
        self.assertEqual(segments[0]["s"].data, IECore.StringVectorData(["b"]))
Ejemplo n.º 13
0
    def testNameClashesWithThreading(self):

        sphere = IECoreScene.SpherePrimitive()
        input1 = GafferSceneTest.CompoundObjectSource()
        input1["in"].setValue(
            IECore.CompoundObject({
                "bound": IECore.Box3fData(sphere.bound()),
                "children": {
                    "myLovelyObject1": {
                        "bound": IECore.Box3fData(sphere.bound()),
                        "object": sphere,
                    },
                },
            }), )

        plane = IECoreScene.MeshPrimitive.createPlane(
            imath.Box2f(imath.V2f(-1), imath.V2f(1)))
        input2 = GafferSceneTest.CompoundObjectSource()
        input2["in"].setValue(
            IECore.CompoundObject({
                "bound": IECore.Box3fData(plane.bound()),
                "children": {
                    "myLovelyObject1": {
                        "bound": IECore.Box3fData(plane.bound()),
                        "object": plane,
                    },
                },
            }), )

        group = GafferScene.Group()
        group["name"].setValue("topLevel")
        group["in"][0].setInput(input1["out"])
        group["in"][1].setInput(input2["out"])

        GafferSceneTest.traverseScene(group["out"])
Ejemplo n.º 14
0
	def testTransform( self ) :

		r = GafferScene.Private.IECoreScenePreview.Renderer.create(
			"3Delight",
			GafferScene.Private.IECoreScenePreview.Renderer.RenderType.SceneDescription,
			self.temporaryDirectory() + "/test.nsi",
		)

		m = IECoreScene.MeshPrimitive.createPlane( imath.Box2f( imath.V2f( -1 ), imath.V2f( 1 ) ) )
		a = r.attributes( IECore.CompoundObject() )

		r.object( "untransformed", m, a )
		r.object( "identity", m, a ).transform( imath.M44f() )
		r.object( "transformed", m, a ).transform( imath.M44f().translate( imath.V3f( 1, 0, 0 ) ) )
		r.object( "animated", m, a ).transform(
			[ imath.M44f().translate( imath.V3f( x, 0, 0 ) ) for x in range( 0, 2 ) ],
			[ 0, 1 ]
		)

		r.render()
		del r

		nsi = self.__parse( self.temporaryDirectory() + "/test.nsi" )

		self.__assertNotInNSI( 'DeleteAttribute', nsi )
		self.__assertNotInNSI( 'SetAttribute "untransformed" "transformationmatrix"', nsi )
		self.__assertNotInNSI( 'SetAttribute "identity" "transformationmatrix"', nsi )
		self.__assertInNSI( 'SetAttribute "transformed" "transformationmatrix" "doublematrix" 1 [ 1 0 0 0 0 1 0 0 0 0 1 0 1 0 0 1 ]', nsi )
		self.__assertInNSI( 'SetAttributeAtTime "animated" 0 "transformationmatrix" "doublematrix" 1 [ 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 ]', nsi )
		self.__assertInNSI( 'SetAttributeAtTime "animated" 1 "transformationmatrix" "doublematrix" 1 [ 1 0 0 0 0 1 0 0 0 0 1 0 1 0 0 1 ]', nsi )
    def testPrimVarInterpolationChangeSkipped(self):

        m1 = IECoreScene.MeshPrimitive.createPlane(
            imath.Box2f(imath.V2f(-1), imath.V2f(1)))
        m2 = m1.copy()

        m1["v"] = IECoreScene.PrimitiveVariable(
            IECoreScene.PrimitiveVariable.Interpolation.Vertex,
            IECore.FloatVectorData([1, 2, 3, 4]),
            IECore.IntVectorData([0, 1, 2, 3]))
        m2["v"] = IECoreScene.PrimitiveVariable(
            IECoreScene.PrimitiveVariable.Interpolation.Vertex,
            IECore.FloatVectorData([4, 3, 2, 1]))

        with IECore.CapturingMessageHandler() as mh:
            m3 = IECore.linearObjectInterpolation(m1, m2, 0.5)

        self.assertEqual(len(mh.messages), 1)
        self.assertEqual(mh.messages[0].level, IECore.Msg.Level.Error)
        self.assertEqual(mh.messages[0].context, "interpolatePrimitive")
        self.assertEqual(
            mh.messages[0].message,
            "primitive variable 'v' indexing changes between primitives")

        self.assertTrue("v" in m3)
        self.assertEqual(m3["v"], m1["v"])
Ejemplo n.º 16
0
    def testColor4fVectorDataPrimimitiveVariable(self):

        m = IECoreScene.MeshPrimitive.createPlane(
            imath.Box2f(imath.V2f(-1), imath.V2f(1)))
        m["myColor"] = IECoreScene.PrimitiveVariable(
            IECoreScene.PrimitiveVariable.Interpolation.Vertex,
            IECore.Color4fVectorData([
                imath.Color4f(1, 0, 0, 1),
                imath.Color4f(0, 2, 0, 0),
                imath.Color4f(0, 0, 3, 0.25),
                imath.Color4f(4, 0, 0, 1),
            ]))

        with IECoreArnold.UniverseBlock(writable=True):

            n = IECoreArnold.NodeAlgo.convert(m, "testMesh")
            a = arnold.AiNodeGetArray(n, "myColor")

            self.assertEqual(arnold.AiArrayGetType(a.contents),
                             arnold.AI_TYPE_RGBA)
            self.assertEqual(arnold.AiArrayGetNumElements(a.contents), 4)

            self.assertEqual(arnold.AiArrayGetRGBA(a, 0),
                             arnold.AtRGBA(1, 0, 0, 1))
            self.assertEqual(arnold.AiArrayGetRGBA(a, 1),
                             arnold.AtRGBA(0, 2, 0, 0))
            self.assertEqual(arnold.AiArrayGetRGBA(a, 2),
                             arnold.AtRGBA(0, 0, 3, 0.25))
            self.assertEqual(arnold.AiArrayGetRGBA(a, 3),
                             arnold.AtRGBA(4, 0, 0, 1))
    def testPrimitiveInterpolationMaintainsUninterpolableValuesFromFirstPrimitive(
            self):

        m1 = IECoreScene.MeshPrimitive.createPlane(
            imath.Box2f(imath.V2f(-1), imath.V2f(1)))
        m1["c"] = IECoreScene.PrimitiveVariable(
            IECoreScene.PrimitiveVariable.Interpolation.Constant,
            IECore.StringData("hi"))
        m2 = m1.copy()

        m3 = IECore.linearObjectInterpolation(m1, m2, 0.5)
        self.assertEqual(
            m3["c"],
            IECoreScene.PrimitiveVariable(
                IECoreScene.PrimitiveVariable.Interpolation.Constant,
                IECore.StringData("hi")))

        m2["c"] = IECoreScene.PrimitiveVariable(
            IECoreScene.PrimitiveVariable.Interpolation.Constant,
            IECore.StringData("bye"))

        m3 = IECore.linearObjectInterpolation(m1, m2, 0.5)
        self.assertEqual(
            m3["c"],
            IECoreScene.PrimitiveVariable(
                IECoreScene.PrimitiveVariable.Interpolation.Constant,
                IECore.StringData("hi")))
Ejemplo n.º 18
0
    def testUVs(self):

        m = IECoreScene.MeshPrimitive.createPlane(
            imath.Box2f(imath.V2f(-1), imath.V2f(1)))
        m["uv"] = IECoreScene.PrimitiveVariable(
            IECoreScene.PrimitiveVariable.Interpolation.FaceVarying,
            m["uv"].expandedData())
        uvData = m["uv"].data

        with IECoreArnold.UniverseBlock(writable=True):

            n = IECoreArnold.NodeAlgo.convert(m, "testMesh")

            uvs = arnold.AiNodeGetArray(n, "uvlist")
            self.assertEqual(arnold.AiArrayGetNumElements(uvs.contents), 4)

            uvIndices = arnold.AiNodeGetArray(n, "uvidxs")
            self.assertEqual(arnold.AiArrayGetNumElements(uvIndices.contents),
                             4)

            for i in range(0, 4):
                p = arnold.AiArrayGetVec2(uvs, i)
                self.assertEqual(arnold.AiArrayGetVec2(uvs, i),
                                 arnold.AtVector2(uvData[i][0], uvData[i][1]))
                self.assertEqual(arnold.AiArrayGetInt(uvIndices, i), i)
Ejemplo n.º 19
0
    def testValueTypes(self):

        for v in [
                IECore.FloatVectorData([1, 2, 3]),
                IECore.IntVectorData([1, 2, 3]),
                IECore.StringVectorData(["1", "2", "3"]),
                IECore.V3fVectorData([imath.V3f(x) for x in range(1, 5)]),
                IECore.Color3fVectorData(
                    [imath.Color3f(x) for x in range(1, 5)]),
                IECore.M44fVectorData([imath.M44f() * x for x in range(1, 5)]),
                IECore.V2iVectorData([imath.V2i(x) for x in range(1, 5)]),
                IECore.V3fData(imath.V3f(1, 2, 3)),
                IECore.V2fData(imath.V2f(1, 2)),
                IECore.M44fData(imath.M44f(*range(16))),
                IECore.Box2fData(imath.Box2f(imath.V2f(0, 1), imath.V2f(1,
                                                                        2))),
                IECore.Box2iData(
                    imath.Box2i(imath.V2i(-1, 10), imath.V2i(11, 20))),
                IECore.Box3fData(
                    imath.Box3f(imath.V3f(0, 1, 2), imath.V3f(3, 4, 5))),
                IECore.Box3iData(
                    imath.Box3i(imath.V3i(0, 1, 2), imath.V3i(3, 4, 5))),
                IECore.InternedStringVectorData(["a", "b"])
        ]:
            if 'value' in dir(v):
                expected = v.value
            else:
                expected = v
            self.assertEqual(
                expected,
                Gaffer.NameValuePlug("test", v)["value"].getValue())
Ejemplo n.º 20
0
    def testIndexedUVs(self):

        m = IECoreScene.MeshPrimitive.createPlane(
            imath.Box2f(imath.V2f(-1), imath.V2f(1)))
        uvData = m["uv"].data
        uvIds = m["uv"].indices

        with IECoreArnold.UniverseBlock(writable=True):

            n = IECoreArnold.NodeAlgo.convert(m, "testMesh")

            uvs = arnold.AiNodeGetArray(n, "uvlist")
            self.assertEqual(arnold.AiArrayGetNumElements(uvs.contents), 4)

            uvIndices = arnold.AiNodeGetArray(n, "uvidxs")
            self.assertEqual(arnold.AiArrayGetNumElements(uvIndices.contents),
                             4)

            for i in range(0, 4):
                aiUv = arnold.AiArrayGetVec2(uvs, i)
                aiUVId = arnold.AiArrayGetInt(uvIndices, i)
                aiIndexedUV = arnold.AiArrayGetVec2(uvs, aiUVId)
                self.assertEqual(aiUVId, uvIds[i])
                self.assertEqual(aiUv,
                                 arnold.AtVector2(uvData[i][0], uvData[i][1]))
                self.assertEqual(
                    aiIndexedUV,
                    arnold.AtVector2(uvData[uvIds[i]][0], uvData[uvIds[i]][1]))
Ejemplo n.º 21
0
    def testPlane(self):

        p = IECoreScene.MeshPrimitive.createPlane(
            imath.Box2f(imath.V2f(-1), imath.V2f(1)))
        if "N" in p:
            del p["N"]
        self.assert_(not "N" in p)

        pp = IECoreScene.MeshNormalsOp()(input=p)

        self.assert_("N" in pp)
        self.assertEqual(pp["N"].interpolation,
                         IECoreScene.PrimitiveVariable.Interpolation.Vertex)

        normals = pp["N"].data
        self.assert_(normals.isInstanceOf(IECore.V3fVectorData.staticTypeId()))
        self.assertEqual(
            normals.size(),
            pp.variableSize(
                IECoreScene.PrimitiveVariable.Interpolation.Vertex))
        self.assertEqual(normals.getInterpretation(),
                         IECore.GeometricData.Interpretation.Normal)

        for n in normals:

            self.assertEqual(n, imath.V3f(0, 0, 1))
Ejemplo n.º 22
0
    def makeRandomBound(self):
        b1 = imath.V2f(random.random(), random.random())
        b2 = imath.V2f(random.random(), random.random())
        bound = imath.Box2f(b1)
        bound.extendBy(b2)

        return bound
Ejemplo n.º 23
0
	def rectanglePoints( self, bound = imath.Box2f( imath.V2f( -1 ), imath.V2f( 1 ) ), divisions = imath.V2i( 10 ) ) :

		r = imath.Rand48()

		pData = IECore.V3fVectorData()
		uData = IECore.FloatVectorData()
		vData = IECore.FloatVectorData()
		floatUserData = IECore.FloatVectorData()
		colorUserData = IECore.Color3fVectorData()
		doubleUserData = IECore.DoubleVectorData()
		for y in range( 0, divisions.y ) :
			for x in range( 0, divisions.x ) :
				u = float( x ) / float( divisions.x - 1 )
				v = float( y ) / float( divisions.y - 1 )
				pData.append( imath.V3f(
					bound.min().x + u * bound.size().x,
					bound.min().y + v * bound.size().y,
					0
				) )
				uData.append( u )
				vData.append( v )
				floatUserData.append( r.nextf( 0, 1 ) )
				colorUserData.append( imath.Color3f( r.nextf(), r.nextf(), r.nextf() ) )
				doubleUserData.append( y * divisions.x  + x )

		return IECore.CompoundData( {
			"P" : pData,
			"u" : uData,
			"v" : vData,
			"floatUserData" : floatUserData,
			"colorUserData" : colorUserData,
			"doubleUserData" : doubleUserData
		} )
Ejemplo n.º 24
0
    def testPointsPrimitiveSelect(self):

        r = IECoreGL.Renderer()
        r.setOption("gl:mode", IECore.StringData("deferred"))
        r.setOption("gl:searchPath:shader",
                    IECore.StringData(os.path.dirname(__file__) + "/shaders"))

        with IECoreScene.WorldBlock(r):

            r.concatTransform(imath.M44f().translate(imath.V3f(0, 0, -5)))

            r.setAttribute("name", IECore.StringData("pointsNeedSelectingToo"))
            r.points(
                1, {
                    "P":
                    IECoreScene.PrimitiveVariable(
                        IECoreScene.PrimitiveVariable.Interpolation.Vertex,
                        IECore.V3fVectorData([imath.V3f(0)]))
                })

        s = r.scene()
        s.setCamera(IECoreGL.Camera(imath.M44f(), False))

        for mode in (IECoreGL.Selector.Mode.GLSelect,
                     IECoreGL.Selector.Mode.OcclusionQuery,
                     IECoreGL.Selector.Mode.IDRender):
            ss = s.select(mode, imath.Box2f(imath.V2f(0), imath.V2f(1)))
            names = [
                IECoreGL.NameStateComponent.nameFromGLName(x.name) for x in ss
            ]
            self.assertEqual(len(names), 1)
            self.assertEqual(names[0], "pointsNeedSelectingToo")
Ejemplo n.º 25
0
    def testBound(self):

        m = IECoreScene.MeshPrimitive.createPlane(
            imath.Box2f(imath.V2f(-0.5), imath.V2f(0.5)))
        m2 = IECoreGL.ToGLMeshConverter(m).convert()

        self.assertEqual(m.bound(), m2.bound())
Ejemplo n.º 26
0
    def testSelectableFlag(self):

        r = IECoreGL.Renderer()
        r.setOption("gl:mode", IECore.StringData("deferred"))
        r.setOption("gl:searchPath:shader",
                    IECore.StringData(os.path.dirname(__file__) + "/shaders"))

        with IECoreScene.WorldBlock(r):

            r.concatTransform(imath.M44f().translate(imath.V3f(0, 0, -5)))

            r.setAttribute("name", IECore.StringData("selectableObj"))
            r.shader(
                "surface", "color",
                {"colorValue": IECore.Color3fData(imath.Color3f(1, 0, 0))})
            r.sphere(1, -1, 1, 360, {})

            r.concatTransform(imath.M44f().translate(imath.V3f(-1, 0, 0)))
            r.setAttribute("name", IECore.StringData("unselectableObj"))
            r.setAttribute("gl:primitive:selectable", IECore.BoolData(False))

            r.sphere(1, -1, 1, 360, {})

        s = r.scene()
        s.setCamera(IECoreGL.Camera(imath.M44f(), False))

        for mode in (IECoreGL.Selector.Mode.GLSelect,
                     IECoreGL.Selector.Mode.OcclusionQuery,
                     IECoreGL.Selector.Mode.IDRender):
            ss = s.select(mode, imath.Box2f(imath.V2f(0), imath.V2f(1)))
            names = [
                IECoreGL.NameStateComponent.nameFromGLName(x.name) for x in ss
            ]
            self.assertEqual(names, ["selectableObj"])
Ejemplo n.º 27
0
	def testTagFilteringPartialScene( self ) :

		s = IECoreScene.SceneCache( "/tmp/test.scc", IECore.IndexedIO.OpenMode.Write )

		sphereGroup = s.createChild( "sphereGroup" )
		sphereGroup.writeTags( [ "chrome" ] )
		sphere = sphereGroup.createChild( "sphere" )
		sphere.writeObject( IECoreScene.SpherePrimitive(), 0 )

		planeGroup = s.createChild( "planeGroup" )
		plane = planeGroup.createChild( "plane" )
		plane.writeTags( [ "wood", "something" ] )
		plane.writeObject( IECoreScene.MeshPrimitive.createPlane( imath.Box2f( imath.V2f( -1 ), imath.V2f( 1 ) ) ), 0 )

		del s, sphereGroup, sphere, planeGroup, plane

		refreshCount = self.uniqueInt( "/tmp/test.scc" )

		# this one will load everything

		s1 = GafferScene.SceneReader()
		s1["fileName"].setValue( "/tmp/test.scc" )
		s1["refreshCount"].setValue( refreshCount )

		# this one should load just the sphere

		s2 = GafferScene.SceneReader()
		s2["fileName"].setValue( "/tmp/test.scc" )
		s2["refreshCount"].setValue( refreshCount )
		s2["tags"].setValue( "chrome" )

		# this one should load just the plane

		s3 = GafferScene.SceneReader()
		s3["fileName"].setValue( "/tmp/test.scc" )
		s3["refreshCount"].setValue( refreshCount )
		s3["tags"].setValue( "wood" )

		# check childnames

		self.assertEqual( set( [ str( x ) for x in s1["out"].childNames( "/" ) ] ), set( [ "sphereGroup", "planeGroup" ] ) )
		self.assertEqual( set( [ str( x ) for x in s2["out"].childNames( "/" ) ] ), set( [ "sphereGroup" ] ) )
		self.assertEqual( set( [ str( x ) for x in s3["out"].childNames( "/" ) ] ), set( [ "planeGroup" ] ) )

		self.assertEqual( set( [ str( x ) for x in s1["out"].childNames( "/sphereGroup" ) ] ), set( [ "sphere" ] ) )
		self.assertEqual( set( [ str( x ) for x in s2["out"].childNames( "/sphereGroup" ) ] ), set( [ "sphere" ] ) )

		self.assertEqual( set( [ str( x ) for x in s1["out"].childNames( "/planeGroup" ) ] ), set( [ "plane" ] ) )
		self.assertEqual( set( [ str( x ) for x in s3["out"].childNames( "/planeGroup" ) ] ), set( [ "plane" ] ) )

		# check equality of the locations which are preserved

		self.assertPathsEqual( s1["out"], "/", s2["out"], "/", checks = self.allPathChecks - { "childNames" } )
		self.assertPathsEqual( s1["out"], "/", s3["out"], "/", checks = self.allPathChecks - { "childNames" } )

		self.assertPathsEqual( s1["out"], "/sphereGroup/sphere", s2["out"], "/sphereGroup/sphere", checks = self.allPathChecks - { "childNames" } )
		self.assertPathsEqual( s1["out"], "/sphereGroup/sphere", s2["out"], "/sphereGroup/sphere", checks = self.allPathChecks - { "childNames" } )

		self.assertPathsEqual( s1["out"], "/planeGroup/plane", s3["out"], "/planeGroup/plane", checks = self.allPathChecks - { "childNames" } )
		self.assertPathsEqual( s1["out"], "/planeGroup/plane", s3["out"], "/planeGroup/plane", checks = self.allPathChecks - { "childNames" } )
    def testPrimVarsWithDifferingDataArraysAreSkipped(self):

        m1 = IECoreScene.MeshPrimitive.createPlane(
            imath.Box2f(imath.V2f(-1), imath.V2f(1)))
        m2 = m1.copy()

        m1["v"] = IECoreScene.PrimitiveVariable(
            IECoreScene.PrimitiveVariable.Interpolation.Vertex,
            IECore.FloatVectorData([1, 2, 1, 2]),
            IECore.IntVectorData([0, 1, 2, 3]))
        m2["v"] = IECoreScene.PrimitiveVariable(
            IECoreScene.PrimitiveVariable.Interpolation.Vertex,
            IECore.FloatVectorData([1, 2]), IECore.IntVectorData([0, 1, 0, 1]))

        with IECore.CapturingMessageHandler() as mh:
            m3 = IECore.linearObjectInterpolation(m1, m2, 0.5)

        self.assertEqual(len(mh.messages), 1)
        self.assertEqual(mh.messages[0].level, IECore.Msg.Level.Error)
        self.assertEqual(mh.messages[0].context, "interpolatePrimitive")
        self.assertEqual(
            mh.messages[0].message,
            "primitive variable 'v' data array size changes between primitives. ( primitive0 size: 4, primitive1 size: 2, alpha: 0.500000 )"
        )

        self.assertTrue("v" in m3)
        self.assertEqual(m3["v"], m1["v"])
Ejemplo n.º 29
0
	def testCancelLoading( self ) :

		strip = IECoreScene.MeshPrimitive.createPlane( imath.Box2f( imath.V2f( 0 ), imath.V2f( 100000, 1 ) ), imath.V2i( 1000000, 1 ) )
		testData = IECore.FloatVectorData( [0] * ( len( strip["P"].data ) ) )
		for i in range( 10 ):
			q = IECore.FloatVectorData( testData )
			q[0]  = i
			strip["var%i" % i] = IECoreScene.PrimitiveVariable( IECoreScene.PrimitiveVariable.Interpolation.Vertex, q )

		saveIO = IECore.MemoryIndexedIO( IECore.CharVectorData(), IECore.IndexedIO.OpenMode.Write )
		strip.save( saveIO, "test" )
		loadIO = IECore.MemoryIndexedIO( saveIO.buffer(), IECore.IndexedIO.OpenMode.Read )

		canceller = IECore.Canceller()
		cancelled = [False]

		def backgroundRun():
			try:
				IECore.Object.load( loadIO, "test", canceller )
			except IECore.Cancelled:
				cancelled[0] = True

		thread = threading.Thread(target=backgroundRun, args=())

		startTime = time.time()
		thread.start()

		time.sleep( 0.05 )
		canceller.cancel()
		thread.join()

		self.assertLess( time.time() - startTime, 0.1 )
		self.assertTrue( cancelled[0] )
Ejemplo n.º 30
0
	def testCanWriteSimpleMesh( self ) :

		fileName = self.getOutputPath("usd_simple_mesh.usda")

		sceneWrite = IECoreScene.SceneInterface.create( fileName, IECore.IndexedIO.OpenMode.Write )

		flatEarth = sceneWrite.createChild( "flatearth" )

		planeDimensions = imath.Box2f( imath.V2f( 0, 0 ), imath.V2f( 1, 1 ) )
		planeDivisions = imath.V2i( 16, 16 )

		flatEarthObject = IECoreScene.MeshPrimitive.createPlane( planeDimensions, planeDivisions )

		flatEarth.writeObject( flatEarthObject, 0.0 )

		del flatEarth
		del sceneWrite

		sceneRead = IECoreScene.SceneInterface.create( fileName, IECore.IndexedIO.OpenMode.Read )
		self.assertEqual( sceneRead.childNames(), ["flatearth"] )
		otherWorld = sceneRead.child( "flatearth" )

		self.assertTrue( otherWorld.hasObject() )

		object = otherWorld.readObject( 0.0 )
		self.assertIsInstance( object, IECoreScene.MeshPrimitive )

		otherMesh = object

		self.assertTrue("P" in otherMesh)