void ColladaInstanceController::read(void) { OSG_COLLADA_LOG(("ColladaInstanceController::read\n")); ColladaControllerRefPtr colCont = getTargetElem(); if(colCont == NULL) { colCont = dynamic_pointer_cast<ColladaController>( ColladaElementFactory::the()->create( getTargetDOMElem(), getGlobal())); colCont->read(); } domInstance_controllerRef instCont = getDOMElementAs<domInstance_controller>(); _joints = instCont->getSkeleton_array(); domBind_materialRef bindMat = instCont->getBind_material (); if(bindMat == NULL) { SWARNING << "ColladaInstanceController::read: No <bind_material> found." << std::endl; return; } domBind_material::domTechnique_commonRef techCom = bindMat->getTechnique_common(); const domInstance_material_Array &instMatArray = techCom->getInstance_material_array(); for(UInt32 i = 0; i < instMatArray.getCount(); ++i) { ColladaInstanceMaterialRefPtr colInstMat = getUserDataAs<ColladaInstanceMaterial>(instMatArray[i]); if(colInstMat == NULL) { colInstMat = dynamic_pointer_cast<ColladaInstanceMaterial>( ColladaElementFactory::the()->create( instMatArray[i], getGlobal())); colInstMat->read(); } _matMap[colInstMat->getSymbol()] = colInstMat; OSG_COLLADA_LOG(("ColladaInstanceController::read: binding symbol [%s] " "to target [%s]\n", colInstMat->getSymbol().c_str(), instMatArray[i]->getTarget().getURI())); } }
void ColladaInstanceGeometry::readBindMaterial(domBind_material *bindMat) { domBind_material::domTechnique_commonRef techCom = bindMat->getTechnique_common(); const domInstance_material_Array &instMatArray = techCom->getInstance_material_array(); for(UInt32 i = 0; i < instMatArray.getCount(); ++i) { ColladaInstanceMaterialRefPtr colInstMat = getUserDataAs<ColladaInstanceMaterial>(instMatArray[i]); if(colInstMat == NULL) { colInstMat = dynamic_pointer_cast<ColladaInstanceMaterial>( ColladaElementFactory::the()->create( instMatArray[i], getGlobal())); colInstMat->read(this); } _matMap[colInstMat->getSymbol()] = colInstMat; OSG_COLLADA_LOG(("ColladaInstanceGeometry::readBindMaterial: " "binding symbol [%s] to target [%s]\n", colInstMat->getSymbol().c_str(), instMatArray[i]->getTarget().getURI())); } const domParam_Array ¶ms = bindMat->getParam_array(); if(params.getCount() > 0) { SWARNING << "ColladaInstanceGeometry::readBindMaterial: " << "Ignoring [" << params.getCount() << "] <param> elements." << std::endl; } }