Exemplo n.º 1
0
//-*****************************************************************************
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);

}
Exemplo n.º 2
0
//-*****************************************************************************
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] );
    }
}