From: Oliver O. <fr...@us...> - 2007-05-08 03:26:51
|
Update of /cvsroot/simspark/simspark/spark/kerosin/materialserver In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv23557 Modified Files: Tag: projectx materialserver.cpp Log Message: - Added facilities to export registered materials. - the (protected) method ExportMaterial(material) exports one material via all registered exporters - exporters can be created and registered via InitMaterialExporter(name) - ExportAllMaterial() exports all materials (when it's called). Materials can't just be exported automatically, as one possible method to register materials is to just put them in the tree below the MaterialServer. So ExportAllMaterial has to be called manually after Materials have been installed (can also be called from Ruby). Index: materialserver.cpp =================================================================== RCS file: /cvsroot/simspark/simspark/spark/kerosin/materialserver/materialserver.cpp,v retrieving revision 1.2 retrieving revision 1.2.4.1 diff -C2 -d -r1.2 -r1.2.4.1 *** materialserver.cpp 19 Feb 2006 11:10:11 -0000 1.2 --- materialserver.cpp 8 May 2007 03:26:48 -0000 1.2.4.1 *************** *** 25,28 **** --- 25,29 ---- #include "material.h" #include "materialsolid.h" + #include "materialexporter.h" using namespace boost; *************** *** 38,47 **** } ! void MaterialServer::RegisterMaterial(shared_ptr<Material> material) { if (material.get() == 0) ! { ! return; ! } // remove any previous material with the same name --- 39,49 ---- } ! void ! MaterialServer::RegisterMaterial(shared_ptr<Material> material) { if (material.get() == 0) ! { ! return; ! } // remove any previous material with the same name *************** *** 50,58 **** if (previous.get() != 0) ! { ! GetLog()->Debug() << "(MaterialServer) removing material " ! << material->GetName() << "\n"; ! RemoveChildReference(previous); ! } // register new material --- 52,60 ---- if (previous.get() != 0) ! { ! GetLog()->Debug() << "(MaterialServer) removing material " ! << material->GetName() << "\n"; ! RemoveChildReference(previous); ! } // register new material *************** *** 61,67 **** GetLog()->Debug() << "(MaterialServer) registered material " << material->GetName() << "\n"; } ! shared_ptr<Material> MaterialServer::GetMaterial(const std::string& name) { shared_ptr<Material> material = --- 63,71 ---- GetLog()->Debug() << "(MaterialServer) registered material " << material->GetName() << "\n"; + } ! shared_ptr<Material> ! MaterialServer::GetMaterial(const std::string& name) { shared_ptr<Material> material = *************** *** 69,81 **** if (material.get() == 0) ! { ! GetLog()->Error() << "(MaterialServer) ERROR: Unknown material '" ! << name << "'\n"; ! } return material; } ! void MaterialServer::OnLink() { // create the default material --- 73,86 ---- if (material.get() == 0) ! { ! GetLog()->Error() << "(MaterialServer) ERROR: Unknown material '" ! << name << "'\n"; ! } return material; } ! void ! MaterialServer::OnLink() { // create the default material *************** *** 85,86 **** --- 90,138 ---- AddChildReference(defMat); } + + bool + MaterialServer::InitMaterialExporter(const std::string& name) + { + shared_ptr<MaterialExporter> exporter + = shared_dynamic_cast<MaterialExporter>(GetCore()->New(name)); + + if (exporter.get() == 0) + { + GetLog()->Error() << "(MaterialServer) ERROR: " + << "unable to create MaterialExporter '" << name << "'\n"; + return false; + } + + exporter->SetName(name); + AddChildReference(exporter); + + GetLog()->Normal() << "(MaterialServer) MaterialExporter '" << name << "' registered\n"; + + return true; + } + + void + MaterialServer::ExportAllMaterial() + { + TLeafList materials; + ListChildrenSupportingClass<Material>(materials); + + for (TLeafList::const_iterator mi = materials.begin(); mi != materials.end(); ++mi) + { + shared_ptr<Material> m = shared_static_cast<Material>(*mi); + ExportMaterial(m); + } + } + + void + MaterialServer::ExportMaterial(shared_ptr<Material> material) + { + TLeafList exporters; + ListChildrenSupportingClass<MaterialExporter>(exporters); + + for (TLeafList::const_iterator bi = exporters.begin(); bi != exporters.end(); ++bi) + { + shared_ptr<MaterialExporter> mb = shared_static_cast<MaterialExporter>(*bi); + mb->RegisterMaterial(material); + } + } |