![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /****************************************************************************** 00002 ** Copyright (c) 2011 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 ******************************************************************************/ 00005 00006 #pragma once 00007 00008 #include <makArchives/makArchives.h> 00009 #include <makArchives/DtSerialize.h> 00010 #include <makArchives/DtXmlFileIo.h> 00011 00012 #include <boost/tuple/tuple_comparison.hpp> 00013 00014 #include <map> 00015 00016 namespace makArchives 00017 { 00019 namespace oldRecords 00020 { 00023 class DT_DLL_MAKARCHIVES Dt3Tuple 00024 { 00025 public: 00026 double myX; 00027 double myY; 00028 double myZ; 00029 00030 protected: 00031 00032 friend class boost::serialization::access; 00033 00037 template <typename Archive> 00038 void serialize(Archive & ar, const unsigned int version) 00039 { 00040 ar & BOOST_SERIALIZATION_NVP(myX); 00041 ar & BOOST_SERIALIZATION_NVP(myY); 00042 ar & BOOST_SERIALIZATION_NVP(myZ); 00043 } 00044 }; 00045 00048 class DT_DLL_MAKARCHIVES DtVisualColor 00049 { 00050 public: 00051 float myR; 00052 float myG; 00053 float myB; 00054 float myA; 00055 00056 protected: 00057 00058 friend class boost::serialization::access; 00059 00063 template <typename Archive> 00064 void serialize(Archive & ar, const unsigned int version) 00065 { 00066 ar & BOOST_SERIALIZATION_NVP(myR); 00067 ar & BOOST_SERIALIZATION_NVP(myG); 00068 ar & BOOST_SERIALIZATION_NVP(myB); 00069 ar & BOOST_SERIALIZATION_NVP(myA); 00070 } 00071 }; 00072 00075 class DT_DLL_MAKARCHIVES DtVisualAttributeInterface 00076 { 00077 public: 00078 DtVisualAttributeInterface(); 00079 DtVisualAttributeInterface(const DtVisualAttributeInterface&); 00080 virtual ~DtVisualAttributeInterface(); 00081 00082 virtual std::string classType() const = 0; 00083 00084 virtual void write(boost::archive::xml_oarchive& out, const unsigned int) = 0; 00085 virtual void read(boost::archive::xml_iarchive& in, const unsigned int) = 0; 00086 00087 protected: 00088 friend class boost::serialization::access; 00089 00090 template <typename Archive> 00091 void serialize(Archive & ar, const unsigned int version) 00092 { 00093 if (Archive::is_loading::value) 00094 { 00095 read(*(boost::archive::xml_iarchive*)&ar,version); 00096 } 00097 else 00098 { 00099 write(*(boost::archive::xml_oarchive*)&ar,version); 00100 } 00101 } 00102 }; 00103 00106 typedef DtVisualAttributeInterface* (*DtVisualAttributeCreatorFcn)(); 00107 00108 class DT_DLL_MAKARCHIVES DtVisualAttributeFactory 00109 { 00110 public: 00111 DtVisualAttributeFactory(); 00112 virtual ~DtVisualAttributeFactory(); 00113 00114 public: 00115 static bool addAttributeCreator(const std::string& name, DtVisualAttributeCreatorFcn f); 00116 static DtVisualAttributeInterface* createAttribute(const std::string& name); 00117 }; 00118 00120 // @{ 00121 00124 template <typename Type> 00125 class DtVisualAttribute : public DtVisualAttributeInterface 00126 { 00127 public: 00128 DtVisualAttribute() 00129 : DtVisualAttributeInterface() 00130 { 00131 } 00132 00133 DtVisualAttribute(const DtVisualAttribute& orig) 00134 : DtVisualAttributeInterface(orig) 00135 , myValue(orig.myValue) 00136 { 00137 } 00138 00139 DtVisualAttribute& operator=(const DtVisualAttribute& rhs) 00140 { 00141 if (this != &rhs) 00142 { 00143 myValue = rhs.myValue; 00144 } 00145 00146 return *this; 00147 } 00148 00149 virtual ~DtVisualAttribute() 00150 { 00151 } 00152 00153 Type myValue; 00154 00155 protected: 00156 00157 friend class boost::serialization::access; 00158 00159 virtual void write(boost::archive::xml_oarchive& out, const unsigned int version) 00160 { 00161 out & BOOST_SERIALIZATION_NVP(myValue); 00162 } 00163 00164 virtual void read(boost::archive::xml_iarchive& in, const unsigned int version) 00165 { 00166 in & BOOST_SERIALIZATION_NVP(myValue); 00167 } 00168 }; 00169 00171 typedef std::map<std::string, DtVisualAttributeCreatorFcn > DtVisualAttributeCreatorMap; 00172 00174 static DtVisualAttributeCreatorMap* theAttributeCreatorMap = 0; 00175 00177 #define REGISTER_VISUAL_ATTRIBUTE(Attribute) static bool Attribute##_Registered = \ 00178 DtVisualAttributeFactory::addAttributeCreator(Attribute::theClassType(), &Attribute::create); 00179 00183 #define DEFINE_VISUAL_ATTRIBUTE(ATTRIBUTE, VALUETYPE, DEFAULTVALUE)\ 00184 class DT_DLL_MAKARCHIVES ATTRIBUTE : public DtVisualAttribute<VALUETYPE>\ 00185 {\ 00186 public:\ 00187 ATTRIBUTE() { myValue = DEFAULTVALUE ; }\ 00188 ATTRIBUTE(const ATTRIBUTE& s) : DtVisualAttribute<VALUETYPE>(s) {}\ 00189 virtual ~ATTRIBUTE() {}\ 00190 static std::string theClassType() { return #ATTRIBUTE ; }\ 00191 virtual std::string classType() const { return theClassType();}\ 00192 static DtVisualAttributeInterface* create() { return new ATTRIBUTE(); }\ 00193 }; 00194 00197 class DT_DLL_MAKARCHIVES DtVisualDefinition 00198 { 00199 public: 00200 typedef std::map<std::string, DtVisualAttributeInterface*> DtVisualAttributeMap; 00201 00202 protected: 00203 friend class boost::serialization::access; 00204 00205 template <typename Archive> 00206 void serialize(Archive & ar, const unsigned int version) 00207 { 00208 ar & BOOST_SERIALIZATION_NVP(myVisualDefinitionName); 00209 00210 if (Archive::is_loading::value) 00211 { 00212 int size; 00213 std::string classType; 00214 std::string name; 00215 00216 ar & BOOST_SERIALIZATION_NVP(size); 00217 00218 for (int i = 0; i < size; i++) 00219 { 00220 ar & BOOST_SERIALIZATION_NVP(name); 00221 ar & BOOST_SERIALIZATION_NVP(classType); 00222 DtVisualAttributeInterface* iface = 00223 DtVisualAttributeFactory::createAttribute(classType); 00224 00225 if (iface) 00226 { 00227 DtVisualAttributeInterface& visualDefinition = *iface; 00228 ar & BOOST_SERIALIZATION_NVP(visualDefinition); 00229 myAttributes[name] = iface; 00230 } 00231 } 00232 00233 } 00234 else 00235 { 00236 int size = myAttributes.size(); 00237 ar & BOOST_SERIALIZATION_NVP(size); 00238 DtVisualAttributeMap::const_iterator iter = myAttributes.begin(); 00239 00240 while (iter != myAttributes.end()) 00241 { 00242 std::string name = iter->first; 00243 00244 ar & BOOST_SERIALIZATION_NVP(name); 00245 std::string classType = iter->second->classType(); 00246 ar & BOOST_SERIALIZATION_NVP(classType); 00247 00248 DtVisualAttributeInterface& visualDefinition = *iter->second; 00249 ar & BOOST_SERIALIZATION_NVP(visualDefinition); 00250 00251 ++iter; 00252 } 00253 } 00254 } 00255 00256 public: 00257 std::string myVisualDefinitionName; 00258 DtVisualAttributeMap myAttributes; 00259 }; 00260 00263 class DT_DLL_MAKARCHIVES DtVisualDefinitionSet 00264 { 00265 public: 00266 typedef std::map<std::string, makArchives::oldRecords::DtVisualDefinition> DtVisualDefinitionMap; 00267 00268 protected: 00269 friend class boost::serialization::access; 00270 00271 template <typename Archive> 00272 void serialize(Archive & ar, const unsigned int version) 00273 { 00274 ar & BOOST_SERIALIZATION_NVP(myVisualDefinitionSetName); 00275 ar & BOOST_SERIALIZATION_NVP(myVisualDefinitions); 00276 } 00277 00278 public: 00279 std::string myVisualDefinitionSetName; 00280 DtVisualDefinitionMap myVisualDefinitions; 00281 }; 00282 00285 class DT_DLL_MAKARCHIVES DtElementDefinition 00286 { 00287 public: 00288 typedef std::map<int, makArchives::oldRecords::DtVisualDefinitionSet> VisualDefinitionSetMap; 00289 00290 protected: 00291 friend class boost::serialization::access; 00292 00293 template<class Archive> 00294 void serialize(Archive & ar, const unsigned int version) 00295 { 00296 ar & BOOST_SERIALIZATION_NVP(myVisualDefinitionSets); 00297 } 00298 00299 public: 00300 VisualDefinitionSetMap myVisualDefinitionSets; 00301 }; 00302 00305 class DT_DLL_MAKARCHIVES DtElementDefinitionNode 00306 { 00307 public: 00308 typedef std::map<std::string, makArchives::oldRecords::DtElementDefinitionNode> DtNodeChildren; 00309 00310 protected: 00311 friend class boost::serialization::access; 00312 00313 template<class Archive> 00314 void serialize(Archive & ar, const unsigned int version) 00315 { 00316 ar & BOOST_SERIALIZATION_NVP(myRoot); 00317 ar & BOOST_SERIALIZATION_NVP(myChildren); 00318 } 00319 00320 public: 00321 makArchives::oldRecords::DtElementDefinition myRoot; 00322 DtElementDefinitionNode::DtNodeChildren myChildren; 00323 }; 00324 00327 class DT_DLL_MAKARCHIVES DtElementDefinitionHierarchy 00328 { 00329 public: 00330 typedef std::map<std::string, makArchives::oldRecords::DtElementDefinitionNode> ElementDefinitionRoots; 00331 00332 protected: 00333 friend class boost::serialization::access; 00334 00335 template<class Archive> 00336 void serialize(Archive & ar, const unsigned int version) 00337 { 00338 ar & BOOST_SERIALIZATION_NVP(myHierarchy); 00339 } 00340 00341 public: 00342 ElementDefinitionRoots myHierarchy; 00343 }; 00344 00345 DEFINE_VISUAL_ATTRIBUTE(DtVisualAttributeBool, bool, false) 00346 DEFINE_VISUAL_ATTRIBUTE(DtVisualAttributeInteger, int, 0) 00347 DEFINE_VISUAL_ATTRIBUTE(DtVisualAttributeFontGlyph, unsigned int, 0) 00348 DEFINE_VISUAL_ATTRIBUTE(DtVisualAttributeString, std::string, std::string("")) 00349 DEFINE_VISUAL_ATTRIBUTE(DtVisualAttributeEnumeration, std::string, std::string("")) 00350 DEFINE_VISUAL_ATTRIBUTE(DtVisualAttributeFilename, std::string, std::string("")) 00351 DEFINE_VISUAL_ATTRIBUTE(DtVisualAttributeStringVector, std::vector<std::string>, std::vector<std::string>()) 00352 DEFINE_VISUAL_ATTRIBUTE(DtVisualAttributeColor, DtVisualColor, DtVisualColor()) 00353 DEFINE_VISUAL_ATTRIBUTE(DtVisualAttributeVector, Dt3Tuple, Dt3Tuple()) 00354 DEFINE_VISUAL_ATTRIBUTE(DtVisualAttributeDouble, double, 0.0) 00355 00356 REGISTER_VISUAL_ATTRIBUTE(DtVisualAttributeBool) 00357 REGISTER_VISUAL_ATTRIBUTE(DtVisualAttributeInteger) 00358 REGISTER_VISUAL_ATTRIBUTE(DtVisualAttributeFontGlyph) 00359 REGISTER_VISUAL_ATTRIBUTE(DtVisualAttributeString) 00360 REGISTER_VISUAL_ATTRIBUTE(DtVisualAttributeEnumeration) 00361 REGISTER_VISUAL_ATTRIBUTE(DtVisualAttributeFilename) 00362 REGISTER_VISUAL_ATTRIBUTE(DtVisualAttributeStringVector) 00363 REGISTER_VISUAL_ATTRIBUTE(DtVisualAttributeColor) 00364 REGISTER_VISUAL_ATTRIBUTE(DtVisualAttributeVector) 00365 REGISTER_VISUAL_ATTRIBUTE(DtVisualAttributeDouble) 00366 00367 } 00368 } 00369 00370 BOOST_CLASS_VERSION(makArchives::oldRecords::DtElementDefinitionHierarchy, 1); 00371 BOOST_CLASS_VERSION(makArchives::oldRecords::DtElementDefinitionNode, 1); 00372 BOOST_CLASS_VERSION(makArchives::oldRecords::DtElementDefinition, 1); 00373 BOOST_CLASS_VERSION(makArchives::oldRecords::DtVisualDefinitionSet, 1); 00374 BOOST_CLASS_VERSION(makArchives::oldRecords::DtVisualDefinition, 1); 00375 BOOST_CLASS_VERSION(makArchives::oldRecords::DtVisualAttributeBool, 1) 00376 BOOST_CLASS_VERSION(makArchives::oldRecords::DtVisualAttributeColor, 1) 00377 BOOST_CLASS_VERSION(makArchives::oldRecords::DtVisualAttributeDouble, 1) 00378 BOOST_CLASS_VERSION(makArchives::oldRecords::DtVisualAttributeInteger, 1) 00379 BOOST_CLASS_VERSION(makArchives::oldRecords::DtVisualAttributeFontGlyph, 1) 00380 BOOST_CLASS_VERSION(makArchives::oldRecords::DtVisualAttributeString, 1) 00381 BOOST_CLASS_VERSION(makArchives::oldRecords::DtVisualAttributeEnumeration, 1) 00382 BOOST_CLASS_VERSION(makArchives::oldRecords::DtVisualAttributeFilename, 1) 00383 BOOST_CLASS_VERSION(makArchives::oldRecords::DtVisualAttributeStringVector, 1) 00384 BOOST_CLASS_VERSION(makArchives::oldRecords::DtVisualAttributeVector, 1) 00385