本文整理汇总了C++中alembic::abccorefactory::IFactory::setPolicy方法的典型用法代码示例。如果您正苦于以下问题:C++ IFactory::setPolicy方法的具体用法?C++ IFactory::setPolicy怎么用?C++ IFactory::setPolicy使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类alembic::abccorefactory::IFactory
的用法示例。
在下文中一共展示了IFactory::setPolicy方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: readEmptyCompoundProperties
void readEmptyCompoundProperties(const std::string &archiveName)
{
// Open an existing archive for reading. Indicate that we want
// Alembic to throw exceptions on errors.
AbcF::IFactory factory;
factory.setPolicy( ErrorHandler::kThrowPolicy );
AbcF::IFactory::CoreType coreType;
IArchive archive = factory.getArchive(archiveName, coreType);
IObject archiveTop = archive.getTop();
// Determine the number of (top level) children the archive has
const int numChildren = archiveTop.getNumChildren();
ABCA_ASSERT( numChildren == 2, "Wrong number of children (expected 2)");
std::cout << "The archive has " << numChildren << " children:"
<< std::endl;
// Iterate through them, print out their names
for (int ii=0; ii<numChildren; ii++)
{
IObject child( archiveTop, archiveTop.getChildHeader(ii).getName() );
std::cout << " " << child.getName();
std::cout << " has " << child.getNumChildren() << " children"
<< std::endl;
// Properties
ICompoundProperty props = child.getProperties();
int numProperties = props.getNumProperties();
std::cout << " ..and " << numProperties << " properties"
<< std::endl;
std::vector<std::string> propNames;
for (int pp=0; pp<numProperties; pp++)
propNames.push_back( props.getPropertyHeader(pp).getName() );
for (int jj=0; jj<numProperties; jj++)
{
std::cout << " ..named " << propNames[jj] << std::endl;
std::cout << " ..with type: ";
PropertyType pType = props.getPropertyHeader(jj).getPropertyType();
if (pType == kCompoundProperty)
{
std::cout << "compound" << std::endl;
}
else if (pType == kScalarProperty)
{
std::cout << "scalar" << std::endl;
}
else if (pType == kArrayProperty)
{
std::cout << "array" << std::endl;
}
}
}
// Done - the archive closes itself
}
示例2: readDeepHierarchy
void readDeepHierarchy(const std::string &archiveName)
{
// Open an existing archive for reading. Indicate that we want
// Alembic to throw exceptions on errors.
AbcF::IFactory factory;
factory.setPolicy( ErrorHandler::kThrowPolicy );
AbcF::IFactory::CoreType coreType;
IArchive archive = factory.getArchive(archiveName, coreType);
IObject archiveTop = archive.getTop();
// Determine the number of (top level) children the archive has
const unsigned int numChildren = archiveTop.getNumChildren();
std::cout << "The archive has " << numChildren << " children:"
<< std::endl;
ABCA_ASSERT( numChildren == 2,
"Expected 2 children, found " << numChildren );
// Iterate through them, print out their names
for (unsigned int ii=0; ii<numChildren; ii++)
{
IObject child( archiveTop, archiveTop.getChildHeader(ii).getName() );
std::cout << " " << child.getName();
recursivelyReadChildren( child );
}
// do it again to make sure we clean up after ourselves properly
IArchive archive2 = factory.getArchive(archiveName, coreType);
IObject archiveTop2 = archive2.getTop();
// Done - the archive closes itself
}
示例3: simpleTestIn
//-*****************************************************************************
void simpleTestIn( const std::string &iArchiveName )
{
AbcF::IFactory factory;
factory.setPolicy( ErrorHandler::kThrowPolicy );
AbcF::IFactory::CoreType coreType;
IArchive archive = factory.getArchive(iArchiveName, coreType);
IObject archiveTop = archive.getTop();
TESTING_ASSERT( archiveTop.getNumChildren() == ( size_t )NUM_TOP_CHILDREN );
for ( int i = 0 ; i < NUM_TOP_CHILDREN ; i++ )
{
std::ostringstream strm;
strm << i;
std::string cname = strm.str();
IObject obj( archiveTop, cname );
readDeepHierarchy( obj, 0, obj );
}
TESTING_ASSERT( PATHS.size() == ( size_t ) NUM_TOP_CHILDREN );
}
示例4: readFlatHierarchy
void readFlatHierarchy(const std::string &archiveName)
{
// Open an existing archive for reading. Indicate that we want
// Alembic to throw exceptions on errors.
AbcF::IFactory factory;
factory.setPolicy( ErrorHandler::kThrowPolicy );
AbcF::IFactory::CoreType coreType;
IArchive archive = factory.getArchive(archiveName, coreType);
IObject archiveTop = archive.getTop();
// Determine the number of (top level) children the archive has
const int numChildren = archiveTop.getNumChildren();
ABCA_ASSERT( numChildren == 10,
"Expected 10 children, found " << numChildren );
std::cout << "The archive has " << numChildren << " children:"
<< std::endl;
// Iterate through them, print out their names
for (int ii=0; ii<numChildren; ii++)
{
IObject child( archiveTop,
archiveTop.getChildHeader(ii).getName() );
std::cout << " " << child.getName();
const unsigned int children = child.getNumChildren();
std::cout << " has " << children << " children"
<< std::endl;
ABCA_ASSERT( children == 0,
"Expected no children, found " << children );
}
// Done - the archive closes itself
}
示例5: readSimpleProperties
void readSimpleProperties(const std::string &archiveName)
{
// Open an existing archive for reading. Indicate that we want
// Alembic to throw exceptions on errors.
AbcF::IFactory factory;
factory.setPolicy( ErrorHandler::kThrowPolicy );
AbcF::IFactory::CoreType coreType;
IArchive archive = factory.getArchive(archiveName, coreType);
IObject archiveTop = archive.getTop();
// Determine the number of (top level) children the archive has
const int numChildren = archiveTop.getNumChildren();
TESTING_ASSERT( numChildren == 4 );
std::cout << "The archive has " << numChildren << " children:"
<< std::endl;
// Iterate through them, print out their names
for (int ii=0; ii<numChildren; ii++)
{
IObject child( archiveTop, archiveTop.getChildHeader( ii ).getName() );
std::cout << " " << child.getName();
std::cout << " has " << child.getNumChildren() << " children"
<< std::endl;
// Properties
ICompoundProperty props = child.getProperties();
int numProperties = props.getNumProperties();
std::cout << " ..and " << numProperties << " simple properties"
<< std::endl;
std::vector<std::string> propNames;
for (int pp=0; pp<numProperties; pp++)
propNames.push_back( props.getPropertyHeader(pp).getName() );
for (int jj=0; jj<numProperties; jj++)
{
std::cout << " ..named " << propNames[jj] << std::endl;
std::cout << " ..with type: ";
PropertyType pType = props.getPropertyHeader(jj).getPropertyType();
if (pType == kCompoundProperty)
{
std::cout << "compound" << std::endl;
}
else if (pType == kScalarProperty)
{
std::cout << "scalar" << std::endl;
}
else if (pType == kArrayProperty)
{
std::cout << "array" << std::endl;
}
DataType dType = props.getPropertyHeader(jj).getDataType();
std::cout << " ..with POD-type: ";
switch (dType.getPod())
{
case kBooleanPOD:
std::cout << "boolean" << std::endl;
break;
// Char/UChar
case kUint8POD:
std::cout << "unsigned char" << std::endl;
break;
case kInt8POD:
std::cout << "char" << std::endl;
break;
// Short/UShort
case kUint16POD:
std::cout << "short unsigned int" << std::endl;
break;
case kInt16POD:
std::cout << "short int" << std::endl;
break;
// Int/UInt
case kUint32POD:
std::cout << "unsigned int" << std::endl;
break;
case kInt32POD:
std::cout << "int" << std::endl;
break;
// Long/ULong
case kUint64POD:
std::cout << "unsigned long int" << std::endl;
break;
case kInt64POD:
std::cout << "long int" << std::endl;
break;
// Half/Float/Double
case kFloat16POD:
std::cout << "half" << std::endl;
break;
//.........这里部分代码省略.........
示例6: errorHandlerTest
void errorHandlerTest(bool useOgawa)
{
{
OArchive archive;
if (useOgawa)
{
archive = OArchive( Alembic::AbcCoreOgawa::WriteArchive(),
"throwTest.abc", ErrorHandler::kThrowPolicy );
}
else
{
archive = OArchive( Alembic::AbcCoreHDF5::WriteArchive(),
"throwTest.abc", ErrorHandler::kThrowPolicy );
}
OObject archiveTop = archive.getTop();
ABCA_ASSERT( archiveTop.getErrorHandler().getPolicy() ==
ErrorHandler::kThrowPolicy, "Error: Not kThrowPolicy" );
OObject childQuiet(archiveTop, "childQuiet",
ErrorHandler::kQuietNoopPolicy );
OObject childNoisy(archiveTop, "childNoisy",
ErrorHandler::kNoisyNoopPolicy );
OObject grandchildQuiet(childQuiet, "grandchildQuiet" );
OObject grandchildNoisy(childNoisy, "grandchildNoisy" );
ABCA_ASSERT( childQuiet.getErrorHandler().getPolicy() ==
ErrorHandler::kQuietNoopPolicy, "Error: Not kQuietNoopPolicy" );
ABCA_ASSERT( childNoisy.getErrorHandler().getPolicy() ==
ErrorHandler::kNoisyNoopPolicy, "Error: Not kNoisyNoopPolicy" );
ABCA_ASSERT( grandchildQuiet.getErrorHandler().getPolicy() ==
ErrorHandler::kQuietNoopPolicy, "Error: Not kQuietNoopPolicy" );
ABCA_ASSERT( grandchildNoisy.getErrorHandler().getPolicy() ==
ErrorHandler::kNoisyNoopPolicy, "Error: Not kNoisyNoopPolicy" );
}
{
AbcF::IFactory factory;
factory.setPolicy( ErrorHandler::kThrowPolicy );
AbcF::IFactory::CoreType coreType;
IArchive archive = factory.getArchive("throwTest.abc", coreType);
IObject archiveTop = archive.getTop();
ABCA_ASSERT( archiveTop.getErrorHandler().getPolicy() ==
ErrorHandler::kThrowPolicy, "Error: Not kThrowPolicy" );
IObject childQuiet(archiveTop, "childQuiet",
ErrorHandler::kQuietNoopPolicy );
IObject childNoisy(archiveTop, "childNoisy",
ErrorHandler::kNoisyNoopPolicy );
IObject grandchildQuiet(childQuiet, "grandchildQuiet" );
IObject grandchildNoisy(childNoisy, "grandchildNoisy" );
ABCA_ASSERT( childQuiet.getErrorHandler().getPolicy() ==
ErrorHandler::kQuietNoopPolicy, "Error: Not kQuietNoopPolicy" );
ABCA_ASSERT( childNoisy.getErrorHandler().getPolicy() ==
ErrorHandler::kNoisyNoopPolicy, "Error: Not kNoisyNoopPolicy" );
ABCA_ASSERT( grandchildQuiet.getErrorHandler().getPolicy() ==
ErrorHandler::kQuietNoopPolicy, "Error: Not kQuietNoopPolicy" );
ABCA_ASSERT( grandchildNoisy.getErrorHandler().getPolicy() ==
ErrorHandler::kNoisyNoopPolicy, "Error: Not kNoisyNoopPolicy" );
}
}
示例7: main
//-*****************************************************************************
//-*****************************************************************************
// DO IT.
//-*****************************************************************************
//-*****************************************************************************
int main( int argc, char *argv[] )
{
if (argc < 4)
{
std::cerr << "USAGE: " << argv[0] << " outFile.abc inFile1.abc"
<< " inFile2.abc (inFile3.abc ...)" << std::endl;
return -1;
}
{
size_t numInputs = argc - 2;
std::vector< chrono_t > minVec;
minVec.reserve(numInputs);
std::vector< IArchive > iArchives;
iArchives.reserve(numInputs);
std::map< chrono_t, size_t > minIndexMap;
size_t rootChildren = 0;
Alembic::AbcCoreFactory::IFactory factory;
factory.setPolicy(ErrorHandler::kThrowPolicy);
Alembic::AbcCoreFactory::IFactory::CoreType coreType;
for (int i = 2; i < argc; ++i)
{
IArchive archive = factory.getArchive(argv[i], coreType);
if (!archive.valid() || archive.getTop().getNumChildren() < 1)
{
std::cerr << "ERROR: " << argv[i] <<
" not a valid Alembic file" << std::endl;
return 1;
}
IObject iRoot = archive.getTop();
size_t numChildren = iRoot.getNumChildren();
if (i == 2)
{
rootChildren = numChildren;
}
else if (rootChildren != numChildren)
{
std::cerr << "ERROR: " << argv[i] <<
" doesn't have the same number of children as: " <<
argv[i-1] << std::endl;
}
// reorder the input files according to their mins
chrono_t min = DBL_MAX;
Alembic::Util::uint32_t numSamplings = archive.getNumTimeSamplings();
if (numSamplings > 1)
{
// timesampling index 0 is special, so it will be skipped
//
// make sure all the other timesampling objects start at
// the same time or throw here
//
min = archive.getTimeSampling(1)->getSampleTime(0);
for (Alembic::Util::uint32_t s = 2; s < numSamplings; ++s)
{
chrono_t thisMin =
archive.getTimeSampling(s)->getSampleTime(0);
if (fabs(thisMin - min) > 1e-5)
{
std::cerr << "ERROR: " << argv[i]
<< " has non-default TimeSampling objects"
<< " that don't start at the same time."
<< std::endl;
return 1;
}
}
minVec.push_back(min);
if (minIndexMap.count(min) == 0)
{
minIndexMap.insert(std::make_pair(min, i-2));
}
else if (argv[2] != argv[i])
{
std::cerr << "ERROR: overlapping frame range between "
<< argv[2] << " and " << argv[i] << std::endl;
return 1;
}
}
else
{
std::cerr << "ERROR: " << archive.getName() <<
" only has default (static) TimeSampling." << std::endl;
return 1;
}
//.........这里部分代码省略.........
示例8: main
//.........这里部分代码省略.........
std::stringstream ss( files[i] );
std::stringstream fp;
std::string segment;
std::vector<std::string> seglist;
/*
* separate file and object paths, e.g.
*
* ../dir1/foo.abc/bar/baz/index
* \_____________/\______/\____/
* file obj sample
*/
int j = 0;
while ( std::getline( ss, segment, '/' ) ) {
if ( !isFile ( fp.str() ) ) {
if ( j != 0 )
fp << "/";
fp << segment;
} else {
seglist.push_back( segment );
}
++j;
}
bool lastIsIndex = false;
if (!seglist.empty() && is_digit( seglist.back() ) ) {
index = atoi( seglist.back().c_str() );
lastIsIndex = true;
}
// open the iarchive
Abc::IArchive archive;
AbcF::IFactory factory;
factory.setPolicy(Abc::ErrorHandler::kQuietNoopPolicy);
AbcF::IFactory::CoreType coreType;
archive = factory.getArchive(std::string( fp.str() ), coreType);
// display file metadata
if ( opt_meta && seglist.size() == 0 ) {
std::cout << "Using "
<< Alembic::AbcCoreAbstract::GetLibraryVersion()
<< std::endl;;
std::string appName;
std::string libraryVersionString;
Alembic::Util::uint32_t libraryVersion;
std::string whenWritten;
std::string userDescription;
std::string coreName;
GetArchiveInfo (archive,
appName,
libraryVersionString,
libraryVersion,
whenWritten,
userDescription);
if ( coreType == AbcF::IFactory::kOgawa ) {
coreName = "Ogawa";
} else if ( coreType == AbcF::IFactory::kHDF5 ) {
coreName = "HDF5";
} else {
coreName = "Unknown";
};
if ( appName != "" ) {
std::cout << " file written by: " << appName << std::endl;
示例9: simpleTestIn
//-*****************************************************************************
void simpleTestIn( const std::string& iArchiveName )
{
AbcF::IFactory factory;
factory.setPolicy( ErrorHandler::kThrowPolicy );
AbcF::IFactory::CoreType coreType;
IArchive archive = factory.getArchive( iArchiveName, coreType );
/*
x1
/ | \
x2 x3 x2a (x2a is an instance targeting x2)
| |
x4 x5 (x5 is an instance targeting x4)
/ |
g1 g2
|
g5
*/
// an archive has a single top object which contains all its children
IObject topObject = archive.getTop();
IObject x1( topObject, "x1" );
TESTING_ASSERT( x1 != 0 );
//
// Verify the target path
IObject x2( x1, "x2" );
TESTING_ASSERT( x2.valid() );
TESTING_ASSERT( !x2.isInstanceDescendant() );
IObject x4( x2, "x4" );
TESTING_ASSERT( x4.valid() );
TESTING_ASSERT( !x4.isInstanceDescendant() );
int numChildren = x4.getNumChildren();
TESTING_ASSERT( numChildren == 2 );
TESTING_ASSERT( x4.getParent().getFullName() == x2.getFullName() );
IObject g1( x4.getChild(0) );
TESTING_ASSERT( g1 != 0 );
TESTING_ASSERT( g1.getName() == "g1" );
TESTING_ASSERT( !g1.isInstanceDescendant() );
TESTING_ASSERT( g1.getParent() != 0 );
TESTING_ASSERT( g1.getParent().getFullName() == x4.getFullName() );
IObject g2( x4.getChild(1) );
TESTING_ASSERT( g2 != 0 );
TESTING_ASSERT( g2.getName() == "g2" );
TESTING_ASSERT( !g2.isInstanceDescendant() );
TESTING_ASSERT( g2.getParent() != 0 );
TESTING_ASSERT( g2.getParent().getFullName() == x4.getFullName() );
IObject g5( g2.getChild(0) );
TESTING_ASSERT( g5 != 0 );
TESTING_ASSERT( g5.getName() == "g5" );
TESTING_ASSERT( !g5.isInstanceDescendant() );
TESTING_ASSERT( g5.getParent() != 0 );
TESTING_ASSERT( g5.getParent().getFullName() == g2.getFullName() );
//
// Verify the instance path
IObject x3( x1, "x3" );
TESTING_ASSERT( x3 != 0 );
IObject x5( x3, "x5" );
TESTING_ASSERT( x5 != 0 );
TESTING_ASSERT( x5.isInstanceDescendant() );
TESTING_ASSERT( x5.isInstanceRoot() );
TESTING_ASSERT( x5.instanceSourcePath() == x4.getFullName() );
numChildren = x5.getNumChildren();
TESTING_ASSERT( numChildren == 2 );
TESTING_ASSERT( x5.getParent().getFullName() == x3.getFullName() );
IObject g1p( x5.getChild(0) );
TESTING_ASSERT( g1p != 0 );
TESTING_ASSERT( g1p.getName() == "g1" );
TESTING_ASSERT( g1p.isInstanceDescendant() );
TESTING_ASSERT( !g1p.isInstanceRoot() );
TESTING_ASSERT( g1p.getParent() != 0 );
TESTING_ASSERT( g1p.getParent().getFullName() == x5.getFullName() );
IObject g2p( x5.getChild(1) );
TESTING_ASSERT( g2p != 0 );
TESTING_ASSERT( g2p.getName() == "g2" );
TESTING_ASSERT( g2p.isInstanceDescendant() );
TESTING_ASSERT( !g2p.isInstanceRoot() );
TESTING_ASSERT( g2p.getParent() != 0 );
TESTING_ASSERT( g2p.getParent().getFullName() == x5.getFullName() );
IObject g5p( g2p.getChild(0) );
TESTING_ASSERT( g5p != 0 );
TESTING_ASSERT( g5p.getName() == "g5" );
TESTING_ASSERT( g5p.isInstanceDescendant() );
TESTING_ASSERT( !g5p.isInstanceRoot() );
TESTING_ASSERT( g5p.getParent() != 0 );
//.........这里部分代码省略.........
示例10: simpleTestIn
//-*****************************************************************************
void simpleTestIn( const std::string &iArchiveName, bool useOgawa)
{
AbcF::IFactory factory;
factory.setPolicy( ErrorHandler::kThrowPolicy );
AbcF::IFactory::CoreType coreType;
IArchive archive = factory.getArchive(iArchiveName, coreType);
TESTING_ASSERT( (useOgawa && coreType == AbcF::IFactory::kOgawa) ||
(!useOgawa && coreType == AbcF::IFactory::kHDF5) );
IObject archiveTop = archive.getTop();
IObject ac0( archiveTop, "ac0" );
IObject acc0( ac0, "acc0" );
IObject ac1( archiveTop, "ac1" );
IInt32ArrayProperty ac1iap0( ac1.getProperties(), "iap0" );
const AbcA::PropertyHeader * iap0Header =
ac1.getProperties().getPropertyHeader( "iap0" );
TESTING_ASSERT( IInt32ArrayProperty::matches( *iap0Header ) );
TESTING_ASSERT( OInt32ArrayProperty::matches( *iap0Header ) );
TESTING_ASSERT( ! IFloatArrayProperty::matches( *iap0Header ) );
TESTING_ASSERT( ! IV3fArrayProperty::matches( *iap0Header ) );
ISampleSelector ac1iap0iss;
AbcA::index_t sampIdx = ac1iap0iss.getIndex( ac1iap0.getTimeSampling(),
ac1iap0.getNumSamples() );
std::cout << "sampIdx: " << sampIdx << std::endl;
// an object contains a single compound property that contains all
// sub-properties; all property access is through that.
ICompoundProperty ac0Props = ac0.getProperties();
ICompoundProperty acc0Props = acc0.getProperties();
TESTING_ASSERT( ac0.getNumChildren() == 1 );
TESTING_ASSERT( ac0Props.getNumProperties() == 4 );
TESTING_ASSERT( acc0.getNumChildren() == 0 );
TESTING_ASSERT( acc0Props.getNumProperties() == 6 );
std::cout << "ac0 has " << ac0.getNumChildren() << " children and "
<< ac0Props.getNumProperties() << " properties." << std::endl;
std::cout << "acc0 has " << acc0.getNumChildren() << " children and "
<< acc0Props.getNumProperties() << " properties." << std::endl;
for ( size_t i = 0 ; i < acc0Props.getNumProperties() ; ++i )
{
std::cout << "acc0.getPropertyHeader( " << i << " ).getName(): "
<< acc0Props.getPropertyHeader( i ).getName() << std::endl;
}
ICompoundProperty acc0CProp0( acc0Props, "acc0CProp0" );
IInt32Property acc0cp0ip0( acc0CProp0, "acc0cp0ip0" );
IInt32Property acc0cp0ip1( acc0CProp0, "acc0cp0ip1" );
int acc0cp0ip0val = acc0cp0ip0.getValue();
int acc0cp0ip1val = acc0cp0ip1.getValue();
TESTING_ASSERT( acc0cp0ip0val == 0 );
TESTING_ASSERT( acc0cp0ip1val == 1 );
std::cout << "acc0cp0ip0 is " << acc0cp0ip0val << std::endl;
std::cout << "acc0cp0ip1 is " << acc0cp0ip1val << std::endl;
IV3fProperty ac0V3fp0( ac0Props, "ac0V3fp0", kStrictMatching );
IN3fProperty ac0N3fp0( ac0Props, "ac0N3fp0", kStrictMatching );
IP3fProperty ac0P3fp0( ac0Props, "ac0P3fp0", kStrictMatching );
// we expect this to throw when doing strict matching
TESTING_ASSERT_THROW (
IP3fProperty( ac0Props, "ac0N3fp0", kStrictMatching ),
Alembic::Util::Exception );
IInt32Property acc0ip0( acc0Props, "acc0ip0" );
IBoolProperty acc0bp0( acc0Props, "acc0bp0" );
TESTING_ASSERT( ! acc0bp0.getValue() );
std::cout << "bool scalar property acc0bp0 is false! Huzzah!"
<< std::endl;
TESTING_ASSERT( acc0ip0.getValue() == 99 );
TESTING_ASSERT( ac0V3fp0.getValue() == scalarV3fval );
TESTING_ASSERT( ac0N3fp0.getValue() == scalarV3fval );
TESTING_ASSERT( ac0P3fp0.getValue() == scalarV3fval );
std::cout << "acc0ip0 is " << acc0ip0.getValue() << std::endl;
std::cout << "ac0V3fp0 is " << ac0V3fp0.getValue() << std::endl;
//.........这里部分代码省略.........
示例11: readProperty
void readProperty(const std::string &archiveName)
{
// Open an existing archive for reading. Indicate that we want
// Alembic to throw exceptions on errors.
std::cout << "Reading " << archiveName << std::endl;
AbcF::IFactory factory;
factory.setPolicy( ErrorHandler::kThrowPolicy );
AbcF::IFactory::CoreType coreType;
IArchive archive = factory.getArchive(archiveName, coreType);
IObject archiveTop = archive.getTop();
// Determine the number of (top level) children the archive has
const unsigned int numChildren = archiveTop.getNumChildren();
ABCA_ASSERT( numChildren == 1, "Wrong number of children (expected 3)");
std::cout << "The archive has " << numChildren << " children:"
<< std::endl;
// Iterate through them, print out their names
IObject child( archiveTop, archiveTop.getChildHeader(0).getName() );
std::cout << " " << child.getName();
// Properties
ICompoundProperty props = child.getProperties();
size_t numProperties = props.getNumProperties(); // only top-level props
ABCA_ASSERT( numProperties == 1,
"Expected 1 property, found " << numProperties);
std::cout << " has a simple property";
std::vector<std::string> propNames(1);
propNames[0] = props.getPropertyHeader(0).getName();
std::cout << " named " << propNames[0] << std::endl;
PropertyType pType = props.getPropertyHeader(0).getPropertyType();
ABCA_ASSERT( pType == kScalarProperty,
"Expected a scalar property, but didn't find one" );
DataType dType = props.getPropertyHeader(0).getDataType();
ABCA_ASSERT( dType.getPod() == kFloat64POD,
"Expected a double (kFloat64POD) property, but didn't"
" find one" );
// We know this is a scalar property (I'm eliding the if/else
// statements required to recognize this)
IDoubleProperty mass( props, propNames[0] );
size_t numSamples = mass.getNumSamples();
std::cout << ".. it has " << numSamples << " samples" << std::endl;
ABCA_ASSERT( numSamples == 5, "Expected 5 samples, found " << numSamples );
std::cout << "..with values: ";
for (unsigned int ss=0; ss<numSamples; ss++)
{
ISampleSelector iss( (index_t) ss);
printSampleValue( mass, iss );
double massDiff = mass.getValue( iss ) - (33.0 + 0.1*ss);
ABCA_ASSERT( fabs(massDiff) < 1e-12, "Incorrect sample value read" );
}
std::cout << std::endl;
// Done - the archive closes itself
}
示例12: emptyAndValueTest
void emptyAndValueTest(const std::string &archiveName, bool useOgawa)
{
std::vector<std::string> strVec;
strVec.push_back( "potato" );
std::vector<C3f> colorVec;
colorVec.push_back( C3f( 0.0, 0.5, 0.75 ) );
std::vector<Alembic::Util::int32_t> intVec;
intVec.push_back(42);
StringArraySample strSamp( strVec );
C3fArraySample colorSamp( colorVec );
Int32ArraySample intSamp( intVec );
StringArraySample emptyStrSamp = StringArraySample::emptySample();
C3fArraySample emptyColorSamp = C3fArraySample::emptySample();
Int32ArraySample emptyIntSamp = Int32ArraySample::emptySample();
{
OArchive archive;
if (useOgawa)
{
archive = OArchive( Alembic::AbcCoreOgawa::WriteArchive(),
archiveName );
}
else
{
archive = OArchive( Alembic::AbcCoreHDF5::WriteArchive(),
archiveName );
}
OCompoundProperty root = archive.getTop().getProperties();
OC3fArrayProperty colorProp( root, "colors" );
OInt32ArrayProperty numProp( root, "numbers" );
AbcA::MetaData md;
SetReference( md );
OStringArrayProperty strProp( root, "strings", md );
TESTING_ASSERT( isReference( strProp.getHeader() ) );
colorProp.set( emptyColorSamp );
colorProp.set( colorSamp );
colorProp.set( emptyColorSamp );
colorProp.set( colorSamp );
numProp.set( emptyIntSamp );
numProp.set( intSamp );
numProp.set( emptyIntSamp );
numProp.set( intSamp );
strProp.set( emptyStrSamp );
strProp.set( strSamp );
strProp.set( emptyStrSamp );
strProp.set( strSamp );
}
{
StringArraySamplePtr strSampPtr;
C3fArraySamplePtr colorSampPtr;
Int32ArraySamplePtr intSampPtr;
AbcF::IFactory factory;
factory.setPolicy( ErrorHandler::kThrowPolicy );
AbcF::IFactory::CoreType coreType;
IArchive archive = factory.getArchive(archiveName, coreType);
TESTING_ASSERT( (useOgawa && coreType == AbcF::IFactory::kOgawa) ||
(!useOgawa && coreType == AbcF::IFactory::kHDF5) );
ICompoundProperty root = archive.getTop().getProperties();
IC3fArrayProperty colorProp( root, "colors" );
IInt32ArrayProperty numProp( root, "numbers" );
IStringArrayProperty strProp( root, "strings" );
TESTING_ASSERT( isReference( strProp.getHeader() ) );
TESTING_ASSERT( colorProp.getNumSamples() == 4 );
TESTING_ASSERT( strProp.getNumSamples() == 4 );
TESTING_ASSERT( numProp.getNumSamples() == 4 );
colorProp.get( colorSampPtr, 0 );
strProp.get( strSampPtr, 0 );
numProp.get( intSampPtr, 0 );
TESTING_ASSERT( colorSampPtr->size() == 0 );
TESTING_ASSERT( strSampPtr->size() == 0 );
TESTING_ASSERT( intSampPtr->size() == 0 );
colorProp.get( colorSampPtr, 2 );
strProp.get( strSampPtr, 2 );
numProp.get( intSampPtr, 2 );
TESTING_ASSERT( colorSampPtr->size() == 0 );
TESTING_ASSERT( strSampPtr->size() == 0 );
TESTING_ASSERT( intSampPtr->size() == 0 );
colorProp.get( colorSampPtr, 1 );
strProp.get( strSampPtr, 1 );
numProp.get( intSampPtr, 1 );
TESTING_ASSERT( colorSampPtr->size() == 1 &&
colorSamp[0] == ( *colorSampPtr )[0] );
TESTING_ASSERT( strSampPtr->size() == 1 &&
strSamp[0] == ( *strSampPtr )[0] );
TESTING_ASSERT( intSampPtr->size() == 1 &&
//.........这里部分代码省略.........
示例13: readWriteColorArrayProperty
void readWriteColorArrayProperty(const std::string &archiveName, bool useOgawa)
{
{
OArchive archive;
if (useOgawa)
{
archive = OArchive( Alembic::AbcCoreOgawa::WriteArchive(),
archiveName, ErrorHandler::kThrowPolicy );
}
else
{
archive = OArchive( Alembic::AbcCoreHDF5::WriteArchive(),
archiveName, ErrorHandler::kThrowPolicy );
}
OObject archiveTop = archive.getTop();
OObject child( archiveTop, "test" );
OCompoundProperty childProps = child.getProperties();
OC3fArrayProperty shades( childProps, "shades", 0 );
std::vector < C3f > grays(8);
grays[0].x = 0.0; grays[0].y = 0.0; grays[0].z = 0.0;
grays[1].x = 0.125; grays[1].y = 0.125; grays[1].z = 0.125;
grays[2].x = 0.25; grays[2].y = 0.25; grays[2].z = 0.25;
grays[3].x = 0.375; grays[3].y = 0.375; grays[3].z = 0.375;
grays[4].x = 0.5; grays[4].y = 0.5; grays[4].z = 0.5;
grays[5].x = 0.625; grays[5].y = 0.625; grays[5].z = 0.625;
grays[6].x = 0.75; grays[6].y = 0.75; grays[6].z = 0.75;
grays[7].x = 0.875; grays[7].y = 0.875; grays[7].z = 0.875;
// let's write 4 different color3f[2]
Dimensions d;
d.setRank(2);
d[0] = 2;
d[1] = 4;
C3fArraySample cas(&(grays.front()), d);
shades.set(cas);
}
{
// now read it
AbcF::IFactory factory;
factory.setPolicy( ErrorHandler::kThrowPolicy );
AbcF::IFactory::CoreType coreType;
IArchive archive = factory.getArchive(archiveName, coreType);
TESTING_ASSERT( (useOgawa && coreType == AbcF::IFactory::kOgawa) ||
(!useOgawa && coreType == AbcF::IFactory::kHDF5) );
IObject archiveTop = archive.getTop();
IObject child( archiveTop, archiveTop.getChildHeader(0).getName() );
ICompoundProperty props = child.getProperties();
IC3fArrayProperty shades( props, "shades" );
C3fArraySamplePtr samplePtr;
shades.get( samplePtr );
ABCA_ASSERT( samplePtr->getDimensions().rank() == 2,
"Incorrect rank on the sample." );
ABCA_ASSERT( samplePtr->getDimensions().numPoints() == 8,
"Incorrect number of total points." );
ABCA_ASSERT( samplePtr->getDimensions()[0] == 2,
"Incorrect size on dimension 0." );
ABCA_ASSERT( samplePtr->getDimensions()[1] == 4,
"Incorrect size on dimension 1." );
Alembic::Util::Dimensions dims;
shades.getDimensions( dims );
ABCA_ASSERT( dims.rank() == 2,
"Incorrect rank on the sample." );
ABCA_ASSERT( dims.numPoints() == 8,
"Incorrect number of total points." );
ABCA_ASSERT( dims[0] == 2,
"Incorrect size on dimension 0." );
ABCA_ASSERT( dims[1] == 4,
"Incorrect size on dimension 1." );
for (size_t i = 0; i < 8; ++i)
{
ABCA_ASSERT( (*samplePtr)[i].x == i/8.0 &&
(*samplePtr)[i].x == (*samplePtr)[i].y &&
(*samplePtr)[i].x == (*samplePtr)[i].z,
"Color [" << i << "] is incorrect.");
}
double start, end;
GetArchiveStartAndEndTime( archive, start, end );
//.........这里部分代码省略.........
示例14: readV3fArrayProperty
void readV3fArrayProperty(const std::string &archiveName, bool useOgawa)
{
// Open an existing archive for reading. Indicate that we want
// Alembic to throw exceptions on errors.
std::cout << "Reading " << archiveName << std::endl;
AbcF::IFactory factory;
factory.setPolicy( ErrorHandler::kThrowPolicy );
AbcF::IFactory::CoreType coreType;
IArchive archive = factory.getArchive(archiveName, coreType);
TESTING_ASSERT( (useOgawa && coreType == AbcF::IFactory::kOgawa) ||
(!useOgawa && coreType == AbcF::IFactory::kHDF5) );
IObject archiveTop = archive.getTop();
// Determine the number of (top level) children the archive has
const unsigned int numChildren = archiveTop.getNumChildren();
ABCA_ASSERT( numChildren == 1, "Wrong number of children (expected 1)");
std::cout << "The archive has " << numChildren << " children:"
<< std::endl;
// Iterate through them, print out their names
IObject child( archiveTop, archiveTop.getChildHeader(0).getName() );
std::cout << " named '" << child.getName() << "'";
// Properties
ICompoundProperty props = child.getProperties();
size_t numProperties = props.getNumProperties(); // only top-level props
ABCA_ASSERT( numProperties == 1,
"Expected 1 property, found " << numProperties);
std::cout << " with one property";
std::vector<std::string> propNames(1);
propNames[0] = props.getPropertyHeader(0).getName();
std::cout << " named '" << propNames[0] << "'" << std::endl;
PropertyType pType = props.getPropertyHeader(0).getPropertyType();
ABCA_ASSERT( pType == kArrayProperty,
"Expected an array property, but didn't find one" );
std::cout << " which is an array property";
DataType dType = props.getPropertyHeader(0).getDataType();
ABCA_ASSERT( dType.getPod() == kFloat32POD,
"Expected an v3f property, but didn't find one" );
// We know this is an array property (I'm eliding the if/else
// statements required to recognize and handle this properly)
IV3fArrayProperty positions( props, propNames[0] );
size_t numSamples = positions.getNumSamples();
std::cout << ".. it has " << numSamples << " samples" << std::endl;
ABCA_ASSERT( numSamples == 5, "Expected 5 samples, found " << numSamples );
TimeSamplingPtr ts = positions.getTimeSampling();
std::cout << "..with time/value pairs: " << std::endl;;
for (unsigned int ss=0; ss<numSamples; ss++)
{
std::cout << " ";
ISampleSelector iss( (index_t) ss);
std::cout << ts->getSampleTime( (index_t) ss ) << " / ";
V3fArraySamplePtr samplePtr;
positions.get( samplePtr, iss );
std::cout << "[ ";
size_t numPoints = samplePtr->size();
for ( size_t jj=0 ; jj<numPoints ; jj++ )
std::cout << (*samplePtr)[jj] << " ";
std::cout << "]" << std::endl;
if (ss == 2) // no entries in sample #2
{
ABCA_ASSERT( numPoints == 0,
"Expected an empty sample, but found " << numPoints
<< " entries." );
}
else
{
for ( size_t jj=0 ; jj<numPoints ; jj++ )
ABCA_ASSERT( (*samplePtr)[jj] == g_vectors[jj],
"Incorrect value read from archive." );
}
}
ABCA_ASSERT(
archive.getMaxNumSamplesForTimeSamplingIndex(1) == (index_t) numSamples,
"Incorrect number of max samples in readV3fArrayProperty." );
std::cout << std::endl;
// Done - the archive closes itself
double start, end;
GetArchiveStartAndEndTime( archive, start, end );
TESTING_ASSERT( almostEqual(start, 123.0) );
TESTING_ASSERT( almostEqual(end, 123.0 + 4.0 / 24.0) );
}
示例15: compute
MStatus AlembicNode::compute(const MPlug & plug, MDataBlock & dataBlock)
{
MStatus status;
// update the frame number to be imported
MDataHandle speedHandle = dataBlock.inputValue(mSpeedAttr, &status);
double speed = speedHandle.asDouble();
MDataHandle offsetHandle = dataBlock.inputValue(mOffsetAttr, &status);
double offset = offsetHandle.asDouble();
MDataHandle timeHandle = dataBlock.inputValue(mTimeAttr, &status);
MTime t = timeHandle.asTime();
double inputTime = t.as(MTime::kSeconds);
double fps = getFPS();
// scale and offset inputTime.
inputTime = computeAdjustedTime(inputTime, speed, offset/fps);
// this should be done only once per file
if (mFileInitialized == false)
{
mFileInitialized = true;
//Get list of input filenames
MFnDependencyNode depNode(thisMObject());
MPlug layerFilesPlug = depNode.findPlug("abc_layerFiles");
MFnStringArrayData fnSAD( layerFilesPlug.asMObject() );
MStringArray storedFilenames = fnSAD.array();
//Legacy support for single-filename input
if( storedFilenames.length() == 0 )
{
MFileObject fileObject;
MDataHandle dataHandle = dataBlock.inputValue(mAbcFileNameAttr);
fileObject.setRawFullName(dataHandle.asString());
MString fileName = fileObject.resolvedFullName();
storedFilenames.append( fileName );
}
std::vector<std::string> abcFilenames;
for(unsigned int i = 0; i < storedFilenames.length(); i++)
abcFilenames.push_back( storedFilenames[i].asChar() );
Alembic::Abc::IArchive archive;
Alembic::AbcCoreFactory::IFactory factory;
factory.setPolicy(Alembic::Abc::ErrorHandler::kQuietNoopPolicy);
archive = factory.getArchive( abcFilenames );
if (!archive.valid())
{
MString theError = "Error opening these alembic files: ";
const unsigned int numFilenames = storedFilenames.length();
for( unsigned int i = 0; i < numFilenames; i++ )
{
theError += storedFilenames[ i ];
if( i != (numFilenames - 1) )
theError += ", ";
}
printError(theError);
}
// initialize some flags for plug update
mSubDInitialized = false;
mPolyInitialized = false;
// When an alembic cache will be imported at the first time using
// AbcImport, we need to set mIncludeFilterAttr (filterHandle) to be
// mIncludeFilterString for later use. When we save a maya scene(.ma)
// mIncludeFilterAttr will be saved. Then when we load the saved
// .ma file, mIncludeFilterString will be set to be mIncludeFilterAttr.
MDataHandle includeFilterHandle =
dataBlock.inputValue(mIncludeFilterAttr, &status);
MString& includeFilterString = includeFilterHandle.asString();
if (mIncludeFilterString.length() > 0)
{
includeFilterHandle.set(mIncludeFilterString);
dataBlock.setClean(mIncludeFilterAttr);
}
else if (includeFilterString.length() > 0)
{
mIncludeFilterString = includeFilterString;
}
MDataHandle excludeFilterHandle =
dataBlock.inputValue(mExcludeFilterAttr, &status);
MString& excludeFilterString = excludeFilterHandle.asString();
if (mExcludeFilterString.length() > 0)
{
excludeFilterHandle.set(mExcludeFilterString);
dataBlock.setClean(mExcludeFilterAttr);
}
else if (excludeFilterString.length() > 0)
//.........这里部分代码省略.........