//-***************************************************************************** void AddArbitraryStringPropertyToParamListBuilder( ICompoundProperty &parent, const PropertyHeader &propHeader, ISampleSelector &sampleSelector, ParamListBuilder &ParamListBuilder ) { IStringArrayProperty prop( parent, propHeader.getName() ); if ( ! prop.valid() ) { //error message? return; } std::string rmanType = GetPrmanScopeString( GetGeometryScope( propHeader.getMetaData() ) ) + " "; rmanType += "string " + propHeader.getName(); StringArraySamplePtr propSample = prop.getValue( sampleSelector ); RtPointer dataStart = NULL; for ( size_t i = 0; i < propSample->size(); ++i ) { RtPointer data = ParamListBuilder.addStringValue( (*propSample)[i] ); if ( i == 0 ) { dataStart = data; } } ParamListBuilder.add(rmanType, dataStart, propSample); }
//-***************************************************************************** void simpleTestIn() { IArchive archive( Alembic::AbcCoreHDF5::ReadArchive(), "slappyJim.abc", ErrorHandler::kThrowPolicy ); IObject slim( IObject( archive, kTop ), "slim" ); IObject jubby( slim, "jubby" ); IObject mespa( jubby, "mespa" ); ICompoundProperty clampto( ICompoundProperty( mespa, kTop ), "clampto" ); IV3fProperty clanker( clampto, "clanker" ); IInt32Property clunker( clampto, "clunker" ); // By scoping it, it deletes itself immediately. std::cout << "Do I Slumber? " << IBoolProperty( ICompoundProperty( slim, kTop ), "slumber" ).getValue() << std::endl; // Strangely sampled. { IObject spaniard( jubby, "spaniard" ); IV3dArrayProperty pointy( ICompoundProperty( spaniard, kTop ), "pointy" ); std::cout << "Num pointy spaniard samples: " << pointy.getNumSamples() << std::endl; size_t pointySampleIdx = pointy.getNumSamples() / 2; V3dArraySamplePtr pointySamp; pointy.get( pointySamp, pointySampleIdx ); ABCA_ASSERT( pointySamp, "should be valid" ); size_t numPoints = pointySamp->size(); std::cout << "Num points in sample: " << numPoints << std::endl; for ( size_t i = 0; i < numPoints; ++i ) { std::cout << "pointy[" << i << "] = " << (*pointySamp)[i] << std::endl; } // Test that we can get a zero-sized sample. std::cout << "Testing getting a zero-length sample" << std::endl; pointy.get( pointySamp, pointy.getNumSamples()-1 ); std::cout << "Zero length sample num points: " << pointySamp->size() << std::endl; } //-************************************************************************* // STRING PROPERTIES //-************************************************************************* IObject oscar( mespa, "oscar" ); IStringProperty wildeName( ICompoundProperty( oscar, kTop ), "wildeName" ); std::cout << "Oscar Wilde Names: " << std::endl; size_t numNames = wildeName.getNumSamples(); for ( size_t i = 0; i < numNames; ++i ) { std::cout << "\t" << i << ": " << wildeName.getValue( i ) << std::endl; } IStringArrayProperty jabber( ICompoundProperty( oscar, kTop ), "jabberwocky" ); std::cout << "Jabberwocky first two lines: " << std::endl; size_t numLines = jabber.getNumSamples(); std::cout << "Num lines: " << numLines << std::endl; for ( size_t i = 0; i < numLines; ++i ) { StringArraySamplePtr line = jabber.getValue( i ); if ( line ) { size_t numWords = line->size(); if ( numWords ) { std::cout << "\t"; for ( size_t j = 0; j < numWords; ++j ) { std::cout << " " << (*line)[j]; } std::cout << std::endl; } else { std::cout << "\tNo words in this line." << std::endl; } } } IFloatProperty radius( clampto, "radius" ); std::cout << "Num clanker samples: " << clanker.getNumSamples() << std::endl; std::cout << "Gonna try to close: " << archive.getName() << std::endl; }
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 && intSamp[0] == ( *intSampPtr )[0] ); colorProp.get( colorSampPtr, 3 ); strProp.get( strSampPtr, 3 ); numProp.get( intSampPtr, 3 ); TESTING_ASSERT( colorSampPtr->size() == 1 && colorSamp[0] == ( *colorSampPtr )[0] ); TESTING_ASSERT( strSampPtr->size() == 1 && strSamp[0] == ( *strSampPtr )[0] ); TESTING_ASSERT( intSampPtr->size() == 1 && intSamp[0] == ( *intSampPtr )[0] ); } }