def testComparison(self): """Test TransformationMatrixdData comparison""" a = IECore.TransformationMatrixdData() b = IECore.TransformationMatrixdData() self.assertEqual( a, b ) b.value = IECore.TransformationMatrixd( imath.V3d( 0.00001, 0, 0 ), imath.Eulerd(), imath.V3d(0,0,0) ) self.assertNotEqual( a, b ) a.value = IECore.TransformationMatrixd( imath.V3d( 0.00001, 0, 0 ), imath.Eulerd(), imath.V3d(0,0,0) ) self.assertEqual( a, b )
def testTransform(self): """Test TransformationMatrixd transform""" a = IECore.TransformationMatrixd() a.scale = imath.V3d(2, 2, 2) self.assertEqual(a.transform, imath.M44d().scale(imath.V3d(2, 2, 2))) a.rotate = imath.Eulerd(0.2, 0.2, 0.2) self.assertTrue( a.transform.equalWithAbsError( imath.M44d().scale(imath.V3d(2, 2, 2)) * imath.Eulerd(0.2, 0.2, 0.2).toMatrix44(), 0.01))
def testMultiplication(self): vectorTypes = [ IECore.V3fVectorData( [imath.V3f(1), imath.V3f(2), imath.V3f(3)], IECore.GeometricData.Interpretation.Vector), IECore.V3dVectorData( [imath.V3d(1), imath.V3d(2), imath.V3d(3)], IECore.GeometricData.Interpretation.Vector), ] matrixTypes = [ IECore.M33fData(imath.M33f() * 3), IECore.M33dData(imath.M33d() * 3), IECore.M44fData(imath.M44f().scale(imath.V3f(3))), IECore.M44dData(imath.M44d().scale(imath.V3d(3))), IECore.TransformationMatrixfData( IECore.TransformationMatrixf(imath.V3f(3), imath.Eulerf(), imath.V3f(0))), IECore.TransformationMatrixdData( IECore.TransformationMatrixd(imath.V3d(3), imath.Eulerd(), imath.V3d(0))), ] for vector in vectorTypes: targetVector = vector.copy() for i in range(len(targetVector)): targetVector[i] = targetVector[i] * 3 for matrix in matrixTypes: res = IECore.MatrixMultiplyOp()(object=vector.copy(), matrix=matrix) if res == targetVector: continue raise Exception("Error testing vector " + str(type(vector)) + " against matrix " + str(type(matrix)) + ". Resulted " + str(res))
def testConstructors(self): """Test TransformationMatrixdData constructors""" a = IECore.TransformationMatrixdData() self.assertEqual(a.value, IECore.TransformationMatrixd()) a = IECore.TransformationMatrixdData( IECore.TransformationMatrixd(imath.V3d(2, 2, 2), imath.Eulerd(), imath.V3d(1, 0, 0))) self.assertEqual(a.value.scale, imath.V3d(2, 2, 2))
def testConstructors(self): """Test TransformationMatrixd constructors""" a = IECore.TransformationMatrixd() self.assertEqual( a.transform, imath.M44d() ) a = IECore.TransformationMatrixd( imath.V3d( 2, 2, 2 ), imath.Eulerd(), imath.V3d( 1, 0, 0 ) ) self.assertTrue( a.transform.equalWithAbsError( imath.M44d().scale( imath.V3d(2,2,2) ) * imath.M44d().translate( imath.V3d(1,0,0) ), 0.01 ) ) b = IECore.TransformationMatrixd( a ) self.assertEqual( a.transform, b.transform )
def __setupTableProp(self): boxSize = imath.Box3f(imath.V3f(-.5, -.5, -.5), imath.V3f(.5, .5, .5)) table = IECoreScene.SceneCache(FnSceneShapeTest.__testFile, IECore.IndexedIO.Write) table.writeAttribute('scene:visible', IECore.BoolData(True), 0) table.writeAttribute('user:testBool', IECore.BoolData(True), 0) table.writeAttribute('user:testShort', IECore.ShortData(2), 0) table.writeAttribute('user:testInt', IECore.IntData(3), 0) table.writeAttribute('user:testInt64', IECore.Int64Data(4), 0) table.writeAttribute('user:testFloat', IECore.FloatData(5), 0) table.writeAttribute('user:testDouble', IECore.DoubleData(6), 0) table.writeAttribute('user:testString', IECore.StringData('seven'), 0) mat = imath.M44d((8, 9, 10, 11), (12, 13, 14, 15), (16, 17, 18, 19), (20, 21, 22, 23)) table.writeAttribute('user:testMatrixd', IECore.M44dData(mat), 0) mat = imath.M44f((24, 25, 26, 27), (28, 29, 30, 31), (32, 33, 34, 35), (36, 37, 38, 39)) table.writeAttribute('user:testMatrixf', IECore.M44fData(mat), 0) pedestal_GEO = table.createChild('pedestal_GEO') pedestal_GEO.writeObject(IECoreScene.MeshPrimitive.createBox(boxSize), 0) s = imath.V3d(15, 1, 15) r = imath.Eulerd() t = imath.V3d(0, .5, 0) mat = IECore.TransformationMatrixd(s, r, t) pedestal_GEO.writeTransform(IECore.TransformationMatrixdData(mat), 0) column_GEO = pedestal_GEO.createChild('column_GEO') column_GEO.writeObject(IECoreScene.MeshPrimitive.createBox(boxSize), 0) s = imath.V3d(.25, 20, .25) r = imath.Eulerd() t = imath.V3d(0, 10.5, 0) mat = IECore.TransformationMatrixd(s, r, t) column_GEO.writeTransform(IECore.TransformationMatrixdData(mat), 0) tableTop_GEO = column_GEO.createChild('tableTop_GEO') tableTop_GEO.writeObject(IECoreScene.MeshPrimitive.createBox(boxSize), 0) s = imath.V3d(10, 0.05, 10) r = imath.Eulerd() t = imath.V3d(0, .525, 0) mat = IECore.TransformationMatrixd(s, r, t) tableTop_GEO.writeTransform(IECore.TransformationMatrixdData(mat), 0)
def testCopy(self): """Test TransformationMatrixdData copy""" a = IECore.TransformationMatrixdData( IECore.TransformationMatrixd(imath.V3d(2, 2, 2), imath.Eulerd(), imath.V3d(1, 0, 0))) self.assertEqual(a.value.scale, imath.V3d(2, 2, 2)) b = a.copy() a.value = IECore.TransformationMatrixd() self.assertEqual(b.value.scale, imath.V3d(2, 2, 2)) self.assertEqual(a.value.scale, imath.V3d(1, 1, 1))
def testIO(self): """Test TransformationMatrixdData IO""" a = IECore.TransformationMatrixdData( IECore.TransformationMatrixd(imath.V3d(2, 3, 4), imath.Eulerd(), imath.V3d(1, 2, 3))) w = IECore.ObjectWriter(a, self.testFile) w.write() r = IECore.ObjectReader(self.testFile) b = r.read() self.assertEqual(a, b)
def test(self): tm = IECore.TransformationMatrixfData() p = IECore.TransformationMatrixfParameter( name="f", description="d", defaultValue=tm, ) p.validate() self.assertEqual(p.name, "f") self.assertEqual(p.description, "d") self.assertEqual(p.valueValid()[0], True) self.assertTrue(isinstance(p.getTypedValue().translate, imath.V3f)) self.assertEqual(p.getTypedValue().translate, imath.V3f(0, 0, 0)) self.assertEqual(p.getTypedValue().rotate, imath.Eulerf(0, 0, 0)) self.assertEqual(p.getTypedValue().rotationOrientation, imath.Quatf(1, 0, 0, 0)) self.assertEqual(p.getTypedValue().scale, imath.V3f(1, 1, 1)) self.assertEqual(p.getTypedValue().shear, imath.V3f(0, 0, 0)) self.assertEqual(p.getTypedValue().rotatePivot, imath.V3f(0, 0, 0)) self.assertEqual(p.getTypedValue().rotatePivotTranslation, imath.V3f(0, 0, 0)) self.assertEqual(p.getTypedValue().scalePivot, imath.V3f(0, 0, 0)) self.assertEqual(p.getTypedValue().scalePivotTranslation, imath.V3f(0, 0, 0)) tm = IECore.TransformationMatrixdData() p = IECore.TransformationMatrixdParameter( name="f", description="d", defaultValue=tm, ) p.validate() self.assertEqual(p.name, "f") self.assertEqual(p.description, "d") self.assertEqual(p.valueValid()[0], True) self.assertTrue(isinstance(p.getTypedValue().translate, imath.V3d)) self.assertEqual(p.getTypedValue().translate, imath.V3d(0, 0, 0)) self.assertEqual(p.getTypedValue().rotate, imath.Eulerd(0, 0, 0)) self.assertEqual(p.getTypedValue().rotationOrientation, imath.Quatd(1, 0, 0, 0)) self.assertEqual(p.getTypedValue().scale, imath.V3d(1, 1, 1)) self.assertEqual(p.getTypedValue().shear, imath.V3d(0, 0, 0)) self.assertEqual(p.getTypedValue().rotatePivot, imath.V3d(0, 0, 0)) self.assertEqual(p.getTypedValue().rotatePivotTranslation, imath.V3d(0, 0, 0)) self.assertEqual(p.getTypedValue().scalePivot, imath.V3d(0, 0, 0)) self.assertEqual(p.getTypedValue().scalePivotTranslation, imath.V3d(0, 0, 0))
def testInterpolation(self): """Test TranformationMatrixdData interpolation""" a = IECore.TransformationMatrixdData() b = IECore.TransformationMatrixdData( IECore.TransformationMatrixd(imath.V3d(2, 3, 4), imath.Eulerd(), imath.V3d(1, 2, 3))) c = IECore.linearObjectInterpolation(a, b, 0.5) self.assertEqual(type(c), IECore.TransformationMatrixdData) self.assertTrue( c.value.scale.equalWithAbsError(imath.V3d(1.5, 2, 2.5), 0.01)) self.assertTrue( c.value.translate.equalWithAbsError(imath.V3d(0.5, 1, 1.5), 0.01)) # try rotation interpolation... d = IECore.TransformationMatrixdData( IECore.TransformationMatrixd(imath.V3d(2, 3, 4), imath.Eulerd(1., 2., 3.), imath.V3d(1, 2, 3))) e = IECore.linearObjectInterpolation(b, d, 0.2) self.assertTrue( e.value.rotate.equalWithAbsError( imath.V3d(-0.341406, 0.189475, 0.191253), 0.001))
def testAttributes(self): """Test TransformationMatrixd attributes""" a = IECore.TransformationMatrixd() self.assertEqual(a.scalePivot, imath.V3d(0, 0, 0)) self.assertEqual(a.scale, imath.V3d(1, 1, 1)) self.assertEqual(a.shear, imath.V3d(0, 0, 0)) self.assertEqual(a.scalePivotTranslation, imath.V3d(0, 0, 0)) self.assertEqual(a.rotatePivot, imath.V3d(0, 0, 0)) self.assertEqual(a.rotationOrientation, imath.Quatd()) self.assertEqual(a.rotate, imath.Eulerd()) self.assertEqual(a.rotatePivotTranslation, imath.V3d(0, 0, 0)) self.assertEqual(a.translate, imath.V3d(0, 0, 0)) try: a.transform = 1 except: pass else: raise Exception("Should not be able to set transform.")