VR-Forces 4.0.4 Class Documentation
include/makArchives/DtVisualizerDefinitionRecord.h
Go to the documentation of this file.
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 

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)