![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2008 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: terrainIntersectorRec.h,v $ $Revision: 1.2 $ $State: Exp $ 00007 *******************************************************************************/ 00008 #ifndef terrainIntersectorRec_H_ 00009 #define terrainIntersectorRec_H_ 00010 00011 #include "terrainDbFactory/terrainDbFactoryDefines.h" 00012 #include "terrainDbFactory/mfRec.h" 00013 00014 #include <map> 00015 00016 class DtTerrainIntersectorDescriptor; 00017 class DtTerrainIntersectorRecord; 00018 00019 // This factory will map descriptor types to record creators. Each creator 00020 // will be able to fully populate a descriptor from the descriptor record 00021 00022 typedef DtTerrainIntersectorRecord* (*DtTerrainIntDescCreatorFcn)(const DtTerrainIntersectorDescriptor*); 00023 typedef std::map<int, DtTerrainIntDescCreatorFcn> DtTerrainIntDescCreatorMap; 00024 00025 class DT_DLL_terrainDbFactory DtTerrainIntersectorDescriptorFactory 00026 { 00027 public: 00028 // Constructor will add default descriptors 00029 DtTerrainIntersectorDescriptorFactory(); 00030 00031 DtTerrainIntersectorRecord* createRecordFromDescriptor(const DtTerrainIntersectorDescriptor*); 00032 void addCreator(int, DtTerrainIntDescCreatorFcn); 00033 00034 protected: 00035 00036 DtTerrainIntDescCreatorMap myFactory; 00037 }; 00038 00039 // This class in and of itself does nothing. It is used as a base class 00040 // for intersectors that are implemented by the system 00041 class DT_DLL_terrainDbFactory DtTerrainIntersectorRecord : public DtMetafileRecord 00042 { 00043 public: 00044 00045 // default constructor. 00046 DtTerrainIntersectorRecord(); 00047 00048 // destructor 00049 virtual ~DtTerrainIntersectorRecord(); 00050 00051 // copy constructor 00052 DtTerrainIntersectorRecord(const DtTerrainIntersectorRecord& orig); 00053 00054 // assignment operator 00055 DtTerrainIntersectorRecord& operator=(const DtTerrainIntersectorRecord& rhs); 00056 00057 // Returns "DtNoTerrainIntersectorRecordString". 00058 virtual DtString recordTypeName() const; 00059 virtual DtConfigCategoryType recordCategory() const; 00060 00061 virtual int terrainIntersectorType() const = 0; 00062 virtual DtTerrainIntersectorRecord* clone() const = 0; 00063 virtual DtTerrainIntersectorDescriptor* createIntersectorDescriptor() const = 0; 00064 00065 static DtTerrainIntersectorDescriptorFactory* factory(); 00066 00067 protected: 00068 static DtTerrainIntersectorDescriptorFactory gTerrainRecordDescriptorFactory;; 00069 }; 00070 00071 class DT_DLL_terrainDbFactory DtNativeIntersectorRecord : public DtTerrainIntersectorRecord 00072 { 00073 public: 00074 00075 // default constructor. 00076 DtNativeIntersectorRecord(); 00077 00078 // destructor 00079 virtual ~DtNativeIntersectorRecord(); 00080 00081 // copy constructor 00082 DtNativeIntersectorRecord(const DtNativeIntersectorRecord& orig); 00083 00084 // assignment operator 00085 DtNativeIntersectorRecord& operator=(const DtNativeIntersectorRecord& rhs); 00086 00087 // Returns "DtNativeTerrainIntersectorRecordString". 00088 virtual DtString recordTypeName() const; 00089 virtual DtConfigCategoryType recordCategory() const; 00090 00091 virtual int terrainIntersectorType() const; 00092 00093 static DtMetafileRecord* create(); 00094 static DtTerrainIntersectorRecord* createFromDescriptor(const DtTerrainIntersectorDescriptor*); 00095 00096 virtual DtTerrainIntersectorRecord* clone() const; 00097 virtual DtTerrainIntersectorDescriptor* createIntersectorDescriptor() const; 00098 }; 00099 00100 class DT_DLL_terrainDbFactory DtSpatialSubdivisionIntersectorRecord : public DtTerrainIntersectorRecord 00101 { 00102 public: 00103 00104 // default constructor. 00105 DtSpatialSubdivisionIntersectorRecord(); 00106 00107 // destructor 00108 virtual ~DtSpatialSubdivisionIntersectorRecord(); 00109 00110 // copy constructor 00111 DtSpatialSubdivisionIntersectorRecord(const DtSpatialSubdivisionIntersectorRecord& orig); 00112 00113 // assignment operator 00114 DtSpatialSubdivisionIntersectorRecord& operator=(const DtSpatialSubdivisionIntersectorRecord& rhs); 00115 00116 // Returns "DtNoTerrainIntersectorRecordString". 00117 virtual DtString recordTypeName() const; 00118 virtual DtConfigCategoryType recordCategory() const; 00119 00120 virtual int terrainIntersectorType() const; 00121 00122 virtual void setSpatialSubdivisionCells(int x = 100, int y = 100, int z = 100); 00123 virtual void spatialSubdivisionCells(int& x, int& y, int &z); 00124 00125 static DtMetafileRecord* create(); 00126 static DtTerrainIntersectorRecord* createFromDescriptor(const DtTerrainIntersectorDescriptor*); 00127 00128 virtual DtTerrainIntersectorRecord* clone() const; 00129 00130 // identifies a token or passes it to the parent class. 00131 virtual bool processToken(std::istream& stream, DtString& token); 00132 virtual DtTerrainIntersectorDescriptor* createIntersectorDescriptor() const; 00133 00134 protected: 00135 00136 // Write self to stream. 00137 virtual bool writeAttributes(std::ostream& stream) const; 00138 virtual bool getAttribute(const DtString attrName, DtString& value, unsigned index=0); 00139 virtual bool setToken(const DtString& token, const DtString value); 00140 00141 protected: 00142 int myX; 00143 int myY; 00144 int myZ; 00145 }; 00146 00147 class DT_DLL_terrainDbFactory DtOpcodeIntersectorRecord : public DtTerrainIntersectorRecord 00148 { 00149 public: 00150 00151 // default constructor. 00152 DtOpcodeIntersectorRecord(); 00153 00154 // destructor 00155 virtual ~DtOpcodeIntersectorRecord(); 00156 00157 // copy constructor 00158 DtOpcodeIntersectorRecord(const DtOpcodeIntersectorRecord& orig); 00159 00160 // assignment operator 00161 DtOpcodeIntersectorRecord& operator=(const DtOpcodeIntersectorRecord& rhs); 00162 00163 // Returns "DtNoTerrainIntersectorRecordString". 00164 virtual DtString recordTypeName() const; 00165 virtual DtConfigCategoryType recordCategory() const; 00166 00167 virtual int terrainIntersectorType() const; 00168 00169 static DtMetafileRecord* create(); 00170 static DtTerrainIntersectorRecord* createFromDescriptor(const DtTerrainIntersectorDescriptor*); 00171 00172 virtual DtTerrainIntersectorRecord* clone() const; 00173 virtual DtTerrainIntersectorDescriptor* createIntersectorDescriptor() const; 00174 }; 00175 00176 inline DtTerrainIntersectorDescriptorFactory* DtTerrainIntersectorRecord::factory() 00177 { 00178 return &gTerrainRecordDescriptorFactory; 00179 } 00180 00181 #endif