00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include <typeinfo>
00025
00026 #include <vos/metaobjects/property/property.hh>
00027 #include <vos/metaobjects/property/fileproperty.hh>
00028 #include "model.hh"
00029
00030 using namespace A3DL;
00031
00032 Model::Model(MetaObject* superobject)
00033 : Object3D(superobject), MetaObject(superobject)
00034 {
00035 }
00036
00037 Model::~Model()
00038 {
00039 }
00040
00041 void Model::setModelToFile(const string& filename, const string& datatype)
00042 {
00043 int i;
00044 for(i = filename.size()-1; i > 0 && filename[i] != '/'; i--);
00045 if(filename[i] == '/') i++;
00046 vRef<FileProperty> fp = Site::getDefaultPeer()->createMetaObject<FileProperty>(filename.substr(i).c_str());
00047 if(&fp) {
00048 fp->setFileBackend(filename, datatype);
00049 fp->insertPropertyAccessControl(-1, accesscontrol);
00050 int pos = -1;
00051 try {
00052 vRef<ParentChildRelation> pcr = findChild("a3dl:model");
00053 pos = pcr->position;
00054 } catch(NoSuchObjectError) {
00055 } catch(AccessControlError) {
00056 } catch(RemoteError) {
00057 }
00058
00059 if(pos > -1) setChild(pos, "a3dl:model", &fp);
00060 else insertChild(-1, "a3dl:model", &fp);
00061 } else {
00062 LOG("Model", 1, "Error: You don't seem to have the FileProperty plugin initialized!");
00063 fp->excise();
00064 }
00065 }
00066
00067 void Model::setModel(const string& me, const string& datatype)
00068 {
00069 Property::setProperty(*this, "a3dl:model", me, datatype, accesscontrol);
00070 }
00071
00072 MetaObject* Model::new_Model(MetaObject* superobject, const string& type)
00073 {
00074 return new Model(superobject);
00075 }
00076
00077 const string Model::getType()
00078 {
00079 return "a3dl:object3D.model";
00080 }
00081
00082 void Model::registerExtenders()
00083 {
00084 LocalSite::addLocalObjectExtension(typeid(Model).name(), &Model::new_Model);
00085 LocalSite::addLocalObjectExtension("a3dl:object3D.model", &Model::new_Model);
00086 RemoteSite::addRemoteObjectExtension(typeid(Model).name(), &Model::new_Model);
00087 RemoteSite::addRemoteObjectExtension("a3dl:object3D.model", &Model::new_Model);
00088 }
00089
00090 void Model::setModelObj(Property* obj) {
00091 setOrInsertChild("a3dl:model", obj);
00092 }
00093
00094 Property* Model::getModelObj() {
00095 Property* p = meta_cast<Property*>(&findObject("a3dl:model"));
00096 if(!p) throw bad_cast();
00097 return p;
00098 }