def testMotion(self): c1 = IECoreScene.CurvesPrimitive(IECore.IntVectorData([4])) c2 = IECoreScene.CurvesPrimitive(IECore.IntVectorData([4])) c1["P"] = IECoreScene.PrimitiveVariable( IECoreScene.PrimitiveVariable.Interpolation.Vertex, IECore.V3fVectorData([imath.V3f(1)] * 4), ) c2["P"] = IECoreScene.PrimitiveVariable( IECoreScene.PrimitiveVariable.Interpolation.Vertex, IECore.V3fVectorData([imath.V3f(2)] * 4), ) with IECoreArnold.UniverseBlock(writable=True) as universe: n = IECoreArnold.NodeAlgo.convert([c1, c2], -0.25, 0.25, universe, "testCurve") a = arnold.AiNodeGetArray(n, "points") self.assertEqual(arnold.AiArrayGetNumElements(a.contents), 4) self.assertEqual(arnold.AiArrayGetNumKeys(a.contents), 2) for i in range(0, 4): self.assertEqual(arnold.AiArrayGetVec(a, i), arnold.AtVector(1)) for i in range(4, 8): self.assertEqual(arnold.AiArrayGetVec(a, i), arnold.AtVector(2)) self.assertEqual(arnold.AiNodeGetFlt(n, "motion_start"), -0.25) self.assertEqual(arnold.AiNodeGetFlt(n, "motion_end"), 0.25)
def testMotion( self ) : p1 = IECoreScene.PointsPrimitive( IECore.V3fVectorData( [ imath.V3f( 10 ) ] * 10 ) ) p1["width"] = IECoreScene.PrimitiveVariable( IECoreScene.PrimitiveVariable.Interpolation.Vertex, IECore.FloatVectorData( [ 1 ] * 10 ), ) p2 = IECoreScene.PointsPrimitive( IECore.V3fVectorData( [ imath.V3f( 20 ) ] * 10 ) ) p2["width"] = IECoreScene.PrimitiveVariable( IECoreScene.PrimitiveVariable.Interpolation.Vertex, IECore.FloatVectorData( [ 2 ] * 10 ), ) with IECoreArnold.UniverseBlock( writable = True ) : n = IECoreArnold.NodeAlgo.convert( [ p1, p2 ], -0.25, 0.25, "testPoints" ) a = arnold.AiNodeGetArray( n, "points" ) self.assertEqual( arnold.AiArrayGetNumElements( a.contents ), 10 ) self.assertEqual( arnold.AiArrayGetNumKeys( a.contents ), 2 ) r = arnold.AiNodeGetArray( n, "radius" ) self.assertEqual( arnold.AiArrayGetNumElements( r.contents ), 10 ) self.assertEqual( arnold.AiArrayGetNumKeys( r.contents ), 2 ) for i in range( 0, 10 ) : self.assertEqual( arnold.AiArrayGetVec( a, i ), arnold.AtVector( 10 ) ) self.assertEqual( arnold.AiArrayGetFlt( r, i ), 0.5 ) for i in range( 11, 20 ) : self.assertEqual( arnold.AiArrayGetVec( a, i ), arnold.AtVector( 20 ) ) self.assertEqual( arnold.AiArrayGetFlt( r, i ), 1 ) self.assertEqual( arnold.AiNodeGetFlt( n, "motion_start" ), -0.25 ) self.assertEqual( arnold.AiNodeGetFlt( n, "motion_end" ), 0.25 )
def testNormals(self): m = IECoreScene.MeshPrimitive.createPlane( imath.Box2f(imath.V2f(-0.9), imath.V2f(0.9))) m["N"] = IECoreScene.PrimitiveVariable( IECoreScene.PrimitiveVariable.Interpolation.Vertex, IECore.V3fVectorData([ imath.V3f(1, 0, 0), imath.V3f(1, 0, 0), imath.V3f(1, 0, 0), imath.V3f(1, 0, 0) ])) mFaceVaryingIndexed = IECoreScene.MeshPrimitive.createBox( imath.Box3f(imath.V3f(-0.9), imath.V3f(0.9))) mVertexIndexed = IECoreScene.MeshPrimitive.createPlane( imath.Box2f(imath.V2f(-0.9), imath.V2f(0.9)), imath.V2i(3)) mVertexIndexed["N"] = IECoreScene.PrimitiveVariable( IECoreScene.PrimitiveVariable.Interpolation.Vertex, IECore.V3fVectorData([imath.V3f(1, 0, 0), imath.V3f(-1, 0, 0)]), IECore.IntVectorData([0] * 8 + [1] * 8)) with IECoreArnold.UniverseBlock(writable=True) as universe: n = IECoreArnold.NodeAlgo.convert(m, universe, "testMesh") normals = arnold.AiNodeGetArray(n, "nlist") self.assertEqual(arnold.AiArrayGetNumElements(normals.contents), 4) for i in range(0, 4): self.assertEqual(arnold.AiArrayGetVec(normals, i), arnold.AtVector(1, 0, 0)) n = IECoreArnold.NodeAlgo.convert(mFaceVaryingIndexed, universe, "testMesh2") normals = arnold.AiNodeGetArray(n, "nlist") normalIndices = arnold.AiNodeGetArray(n, "nidxs") refNormals = [(0, 0, -1), (1, 0, 0), (0, 0, 1), (-1, 0, 0), (0, 1, 0), (0, -1, 0)] for i in range(0, 24): self.assertEqual( arnold.AiArrayGetVec( normals, arnold.AiArrayGetInt(normalIndices, i)), arnold.AtVector(*refNormals[i // 4])) n = IECoreArnold.NodeAlgo.convert(mVertexIndexed, universe, "testMesh3") normals = arnold.AiNodeGetArray(n, "nlist") normalIndices = arnold.AiNodeGetArray(n, "nidxs") for i in range(0, 36): s = [0, (i // 2) % 2, 1][i // 12] self.assertEqual( arnold.AiArrayGetVec( normals, arnold.AiArrayGetInt(normalIndices, i)), arnold.AtVector(-1 if s else 1, 0, 0))
def testNPrimitiveVariable(self): c = IECore.CurvesPrimitive(IECore.IntVectorData([4]), IECore.CubicBasisf.catmullRom()) c["P"] = IECore.PrimitiveVariable( IECore.PrimitiveVariable.Interpolation.Vertex, IECore.V3fVectorData([IECore.V3f(x, 0, 0) for x in range(0, 4)])) with IECoreArnold.UniverseBlock(writable=True): # No N - should be a ribbon n = IECoreArnold.NodeAlgo.convert(c) self.assertEqual(arnold.AiNodeGetStr(n, "mode"), "ribbon") self.assertEqual( arnold.AiNodeGetArray(n, "orientations").contents.nelements, 0) # N - should be oriented c["N"] = IECore.PrimitiveVariable( IECore.PrimitiveVariable.Interpolation.Vertex, IECore.V3fVectorData([ IECore.V3f(0, math.sin(x), math.cos(x)) for x in range(0, 4) ])) n = IECoreArnold.NodeAlgo.convert(c) self.assertEqual(arnold.AiNodeGetStr(n, "mode"), "oriented") orientations = arnold.AiNodeGetArray(n, "orientations") self.assertEqual(orientations.contents.nelements, 4) for i in range(0, 4): self.assertEqual(arnold.AiArrayGetVec(orientations, i), arnold.AtVector(0, math.sin(i), math.cos(i))) # Motion blurred N - should be oriented and deforming c2 = c.copy() c2["N"] = IECore.PrimitiveVariable( IECore.PrimitiveVariable.Interpolation.Vertex, IECore.V3fVectorData([ IECore.V3f(0, math.sin(x + 0.2), math.cos(x + 0.2)) for x in range(0, 4) ])) n = IECoreArnold.NodeAlgo.convert([c, c2], [0.0, 1.0]) self.assertEqual(arnold.AiNodeGetStr(n, "mode"), "oriented") orientations = arnold.AiNodeGetArray(n, "orientations") self.assertEqual(orientations.contents.nelements, 4) self.assertEqual(orientations.contents.nkeys, 2) for i in range(0, 4): self.assertEqual(arnold.AiArrayGetVec(orientations, i), arnold.AtVector(0, math.sin(i), math.cos(i))) self.assertEqual( arnold.AiArrayGetVec(orientations, i + 4), arnold.AtVector(0, math.sin(i + 0.2), math.cos(i + 0.2)))
def testMotion(self): m1 = IECore.MeshPrimitive.createPlane( IECore.Box2f(IECore.V2f(-1), IECore.V2f(1))) IECore.MeshNormalsOp()(input=m1, copyInput=False) m2 = m1.copy() m2["P"].data[0] -= IECore.V3f(0, 0, 1) m2["P"].data[1] -= IECore.V3f(0, 0, 1) IECore.MeshNormalsOp()(input=m2, copyInput=False) with IECoreArnold.UniverseBlock(writable=True): node = IECoreArnold.NodeAlgo.convert([m1, m2], -0.25, 0.25, "testMesh") vList = arnold.AiNodeGetArray(node, "vlist") self.assertEqual(arnold.AiArrayGetNumElements(vList.contents), 4) self.assertEqual(arnold.AiArrayGetNumKeys(vList.contents), 2) nList = arnold.AiNodeGetArray(node, "nlist") self.assertEqual(arnold.AiArrayGetNumElements(nList.contents), 4) self.assertEqual(arnold.AiArrayGetNumKeys(nList.contents), 2) for i in range(0, 4): p = arnold.AiArrayGetVec(vList, i) self.assertEqual(IECore.V3f(p.x, p.y, p.z), m1["P"].data[i]) n = arnold.AiArrayGetVec(nList, i) self.assertEqual(IECore.V3f(n.x, n.y, n.z), m1["N"].data[i]) for i in range(4, 8): p = arnold.AiArrayGetVec(vList, i) self.assertEqual(IECore.V3f(p.x, p.y, p.z), m2["P"].data[i - 4]) n = arnold.AiArrayGetVec(nList, i) self.assertEqual(IECore.V3f(n.x, n.y, n.z), m2["N"].data[i - 4]) self.assertEqual(arnold.AiNodeGetFlt(node, "motion_start"), -0.25) self.assertEqual(arnold.AiNodeGetFlt(node, "motion_end"), 0.25)
def testVertexPrimitiveVariables(self): m = IECoreScene.MeshPrimitive.createPlane( imath.Box2f(imath.V2f(-1), imath.V2f(1))) m["myPrimVar"] = IECoreScene.PrimitiveVariable( IECoreScene.PrimitiveVariable.Interpolation.Vertex, IECore.FloatVectorData([0, 1, 2, 3])) m["myV3fPrimVar"] = IECoreScene.PrimitiveVariable( IECoreScene.PrimitiveVariable.Interpolation.Vertex, IECore.V3fVectorData([imath.V3f(v) for v in range(0, 4)])) with IECoreArnold.UniverseBlock(writable=True) as universe: n = IECoreArnold.NodeAlgo.convert(m, universe, "testMesh") a = arnold.AiNodeGetArray(n, "myPrimVar") v = arnold.AiNodeGetArray(n, "myV3fPrimVar") self.assertEqual(arnold.AiArrayGetNumElements(a.contents), 4) for i in range(0, 4): self.assertEqual(arnold.AiArrayGetFlt(a, i), i) self.assertEqual(arnold.AiArrayGetVec(v, i), i)
def testVertexPrimitiveVariables(self): m = IECore.MeshPrimitive.createPlane( IECore.Box2f(IECore.V2f(-1), IECore.V2f(1))) m["myPrimVar"] = IECore.PrimitiveVariable( IECore.PrimitiveVariable.Interpolation.Vertex, IECore.FloatVectorData([0, 1, 2, 3])) m["myV3fPrimVar"] = IECore.PrimitiveVariable( IECore.PrimitiveVariable.Interpolation.Vertex, IECore.V3fVectorData([IECore.V3f(v) for v in range(0, 4)])) with IECoreArnold.UniverseBlock(): n = IECoreArnold.NodeAlgo.convert(m) a = arnold.AiNodeGetArray(n, "user:myPrimVar") v = arnold.AiNodeGetArray(n, "user:myV3fPrimVar") self.assertEqual(a.contents.nelements, 4) for i in range(0, 4): self.assertEqual(arnold.AiArrayGetFlt(a, i), i) self.assertEqual(arnold.AiArrayGetVec(v, i), i)
def testNormals(self): m = IECoreScene.MeshPrimitive.createPlane( imath.Box2f(imath.V2f(-0.9), imath.V2f(0.9))) m["N"] = IECoreScene.PrimitiveVariable( IECoreScene.PrimitiveVariable.Interpolation.Vertex, IECore.V3fVectorData([ imath.V3f(1, 0, 0), imath.V3f(1, 0, 0), imath.V3f(1, 0, 0), imath.V3f(1, 0, 0) ])) with IECoreArnold.UniverseBlock(writable=True): n = IECoreArnold.NodeAlgo.convert(m, "testMesh") normals = arnold.AiNodeGetArray(n, "nlist") self.assertEqual(arnold.AiArrayGetNumElements(normals.contents), 4) for i in range(0, 4): self.assertEqual(arnold.AiArrayGetVec(normals, i), arnold.AtVector(1, 0, 0))