Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Compound List | File List | Namespace Members | Compound Members | File Members | Related Pages | Examples

vos/3D/a3dl/model.cc

Go to the documentation of this file.
00001 /*
00002     This file is part of the Virtual Object System of
00003     the Interreality project (http://interreality.org).
00004 
00005     Copyright (C) 2001, 2002 Peter Amstutz
00006 
00007     This library is free software; you can redistribute it and/or
00008     modify it under the terms of the GNU Lesser General Public
00009     License as published by the Free Software Foundation; either
00010     version 2 of the License, or (at your option) any later version.
00011 
00012     This library is distributed in the hope that it will be useful,
00013     but WITHOUT ANY WARRANTY; without even the implied warranty of
00014     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00015     Lesser General Public License for more details.
00016 
00017     You should have received a copy of the GNU Lesser General Public
00018     License along with this library; if not, write to the Free Software
00019     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
00020 
00021     Peter Amstutz <tetron@interreality.org>
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 }

Generated on Tue Aug 12 03:55:36 2003 for Interreality Project - VOS by doxygen 1.3.2