void traverse(Abc::IObject object, bool includeSelf) { if (includeSelf) { std::cout << "---------------------------------" << std::endl; std::cout << object.getFullName() << std::endl; if (Mat::IMaterial::matches(object.getHeader())) { std::cout << "(is material, local data shown)\n"; Mat::IMaterial mat(object, Abc::kWrapExisting); printMaterialSchema(mat.getSchema()); TESTING_ASSERT(object.getName() == "materialA" || object.getName() == "materialB"); } else { Mat::MaterialFlatten mafla(object); std::string name = object.getName(); std::cout << name << " " << mafla.empty() << std::endl; TESTING_ASSERT( (!mafla.empty() && (name == "geoA" || name == "geoB" || name == "geoC")) || (mafla.empty() && (name == "geometry" || name == "materials"))); if (!mafla.empty()) { std::cout << "(flattened material via has and/or assigned)\n"; printFlattenedMafla(mafla); } else { std::cout << "(neither is, has or is assigned)\n"; } } } for (size_t i = 0; i < object.getNumChildren(); ++i) { traverse(object.getChild(i), true); } }
//-***************************************************************************** bool is_leaf( AbcG::IObject iObj ) { if ( !iObj.getParent().valid() ) { return true; } Abc::IObject parent = iObj.getParent(); int numChildren = parent.getNumChildren(); Abc::IObject test = parent.getChild(numChildren - 1); if ( test.valid() && test.getName() != iObj.getName() ) { return false; } return true; }
void copyObject(Alembic::Abc::IObject & iIn, Alembic::Abc::OObject & iOut) { std::size_t numChildren = iIn.getNumChildren(); Alembic::Abc::ICompoundProperty inProps = iIn.getProperties(); Alembic::Abc::OCompoundProperty outProps = iOut.getProperties(); copyProps(inProps, outProps); for (std::size_t i = 0; i < numChildren; ++i) { Alembic::Abc::IObject childIn(iIn.getChild(i)); Alembic::Abc::OObject childOut(iOut, childIn.getName(), childIn.getMetaData()); copyObject(childIn, childOut); } }
void getABCCameras(Alembic::Abc::IObject & iObj, std::vector<Alembic::AbcGeom::ICamera> & _objs) { unsigned int numChildren = iObj.getNumChildren(); for (unsigned i=0; i<numChildren; ++i) { IObject child( iObj.getChild( i )); if ( Alembic::AbcGeom::ICamera::matches(child.getHeader()) ) { ICamera cam(child, Alembic::Abc::kWrapExisting); _objs.push_back(cam); } if (child.getNumChildren() > 0) { getABCCameras(child, _objs); } } }
void getABCGeos(Alembic::Abc::IObject & iObj, std::vector<Alembic::AbcGeom::IObject> & _objs) { unsigned int numChildren = iObj.getNumChildren(); for (unsigned i=0; i<numChildren; ++i) { IObject child( iObj.getChild( i )); if ( Alembic::AbcGeom::IPolyMesh::matches(child.getHeader()) || Alembic::AbcGeom::ISubD::matches(child.getHeader())) { _objs.push_back(child); } if (child.getNumChildren() > 0) { getABCGeos(child, _objs); } } }