//-***************************************************************************** bool XformSample::isTopologyEqual( const XformSample & iSample ) { if (getNumOps() != iSample.getNumOps()) { return false; } std::vector<XformOp>::const_iterator opA, opB; for ( opA = m_ops.begin(), opB = iSample.m_ops.begin(); opA != m_ops.end(); ++opA, ++opB ) { if ( opA->getType() != opB->getType() ) { return false; } } return true; }
//-***************************************************************************** void xformIn() { IArchive archive( Alembic::AbcCoreOgawa::ReadArchive(), "Xform1.abc" ); Abc::M44d identity; XformSample xs; IXform a( IObject( archive, kTop ), "a" ); std::cout << "'a' num samples: " << a.getSchema().getNumSamples() << std::endl; TESTING_ASSERT( a.getSchema().getNumOps() == 1 ); TESTING_ASSERT( a.getSchema().getInheritsXforms() ); for ( index_t i = 0; i < 20; ++i ) { XformSample xs; a.getSchema().get( xs, Abc::ISampleSelector( i ) ); TESTING_ASSERT( xs.getNumOps() == 1 ); TESTING_ASSERT( xs[0].isTranslateOp() ); TESTING_ASSERT( xs[0].isYAnimated() == true ); TESTING_ASSERT( xs[0].isXAnimated() == false ); TESTING_ASSERT( xs[0].isZAnimated() == false ); TESTING_ASSERT( xs.getTranslation() == V3d( 12.0, i+42.0, 20.0 ) ); TESTING_ASSERT( xs.getMatrix() == Abc::M44d().setTranslation( V3d(12.0, i+42.0, 20.0)) ); } IXform b( a, "b" ); b.getSchema().get( xs ); TESTING_ASSERT( b.getSchema().getTimeSampling()->getTimeSamplingType().isUniform() ); // the schema is not static, because set() was called 20 times on it. TESTING_ASSERT( !b.getSchema().isConstant() ); TESTING_ASSERT( b.getSchema().getNumSamples() == 20 ); TESTING_ASSERT( xs.getNumOps() == 0 ); TESTING_ASSERT( b.getSchema().getNumOps() == 0 ); TESTING_ASSERT( xs.getMatrix() == identity ); for (size_t i = 0; i < 20; ++i) { AbcA::index_t j = i; TESTING_ASSERT( b.getSchema().getInheritsXforms( ISampleSelector( j ) ) == (i&1) ); } IXform c( b, "c" ); xs = c.getSchema().getValue(); TESTING_ASSERT( xs.getNumOps() == 0 ); TESTING_ASSERT( c.getSchema().getNumOps() == 0 ); TESTING_ASSERT( xs.getMatrix() == identity ); TESTING_ASSERT( c.getSchema().getInheritsXforms() ); TESTING_ASSERT( c.getSchema().isConstantIdentity() ); IXform d( c, "d" ); xs = d.getSchema().getValue(); TESTING_ASSERT( xs.getNumOps() == 1 ); TESTING_ASSERT( d.getSchema().getNumOps() == 1 ); TESTING_ASSERT( xs[0].isScaleOp() ); TESTING_ASSERT( ! ( xs[0].isXAnimated() || xs[0].isYAnimated() || xs[0].isZAnimated() ) ); TESTING_ASSERT( xs.getScale().equalWithAbsError( V3d( 3.0, 6.0, 9.0 ), VAL_EPSILON ) ); TESTING_ASSERT( xs.getMatrix() == Abc::M44d().setScale( V3d(3.0, 6.0, 9.0)) ); TESTING_ASSERT( d.getSchema().getInheritsXforms() ); IXform e( d, "e" ); TESTING_ASSERT( e.getSchema().isConstantIdentity() ); TESTING_ASSERT( e.getSchema().isConstant() ); TESTING_ASSERT( e.getSchema().getNumOps() == 3 ); IXform f( e, "f" ); TESTING_ASSERT( f.getSchema().isConstant() ); // is constant TESTING_ASSERT( ! f.getSchema().isConstantIdentity() ); // not identity IXform g( f, "g" ); Abc::M44d gmatrix; gmatrix.makeIdentity(); XformSample gsamp = g.getSchema().getValue(); TESTING_ASSERT( gsamp.getNumOps() == 20 ); TESTING_ASSERT( gsamp.getNumOpChannels() == 20 * 16 ); TESTING_ASSERT( g.getSchema().getNumSamples() == 1 ); TESTING_ASSERT( g.getSchema().isConstant() ); TESTING_ASSERT( !g.getSchema().isConstantIdentity() ); for ( size_t i = 0 ; i < 20 ; ++i ) { TESTING_ASSERT( gsamp[i].getChannelValue( 1 ) == (double)i ); } std::cout << "Tested all xforms in first test!" << std::endl; }