![]() |
VR-Vantage 1.4.1 API Class Documentation
|
00001 /****************************************************************************** 00002 ** Copyright (c) 2008 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 ******************************************************************************/ 00005 /****************************************************************************** 00006 ** $RCSfile: DtTerrain.h,v $ $Revision: 1.55 $ $State: Exp $ 00007 ******************************************************************************/ 00008 00012 00013 #ifndef DtTerrain_H_ 00014 #define DtTerrain_H_ 00015 00016 #include <vrvCore/vrvCore.h> 00017 #include <vrvCore/DtAgentManagerInterface.h> 00018 #include <vrvCore/DtForest.h> 00019 #include <vrvUtil/DtVirtualBaseClass.h> 00020 #include <vrvUtil/DtSignalConnectionManager.h> 00021 00022 #include <makArchives/DtTerrainOperationRecord.h> 00023 00024 #include <boost/signal.hpp> 00025 #include <boost/shared_ptr.hpp> 00026 00027 #include <string> 00028 #include <map> 00029 #include <list> 00030 #include <vector> 00031 00032 namespace makArchives 00033 { 00034 class DtTerrainRecord; 00035 class DtFeatureLayerRecord; 00036 class DtTerrainPatchRecord; 00037 class DtTerrainOperationRecord; 00038 } 00039 00040 namespace makVrv 00041 { 00042 class DtDe; 00043 class DtFeature; 00044 class DtFeatureLayer; 00045 class DtModelAgent; 00046 class DtProp; 00047 class DtTerrainPatch; 00048 class DtTerrainPatchObjectAgent; 00049 class DtTerrainSignaler; 00050 00053 class DT_DLL_VRVCORE DtTerrain : private DtSignalConnectionManager 00054 { 00055 00056 public: 00057 00058 typedef std::list<DtTerrainPatch*> TerrainPatches; 00059 typedef std::list<DtFeatureLayer*> FeatureLayers; 00060 00062 typedef std::map<int, makArchives::DtTerrainOperationRecord> TerrainOperationsMap; 00063 00065 DtTerrain(DtDe& de, DtAgentManagerInterface& sceneManagerInterface); 00066 00068 ~DtTerrain(); 00069 00071 virtual void clear(); 00072 00074 00075 00079 bool globalScaleTerrain() const; 00080 00084 void updateGlobalScaleTerrain(); 00085 00087 virtual void getRecord(makArchives::DtTerrainRecord& rec); 00088 00090 virtual void setFromRecord(const makArchives::DtTerrainRecord& rec); 00091 00093 00095 00096 00101 virtual DtTerrainPatch& addTerrainPatch(const makArchives::DtTerrainPatchRecord& rec); 00102 00107 virtual DtTerrainPatch& addTerrainPatch(const std::string& terrainDefinitionName); 00108 00110 virtual DtTerrainPatch* findTerrainPatch(const std::string& terrainDefinitionName); 00111 00113 virtual DtTerrainPatch* findTerrainPatch(DtUniqueID id); 00114 00117 virtual bool removeTerrainPatch(const std::string& terrainDefinitionName); 00118 00121 const TerrainPatches& terrainPatches() const ; 00122 00125 TerrainPatches& terrainPatches(); 00126 00128 00129 00131 00132 virtual const TerrainOperationsMap& terrainOperationsMap() const; 00134 00136 00137 00138 00141 virtual DtFeatureLayer& addFeatureLayer(const makArchives::DtFeatureLayerRecord& rec); 00142 00147 virtual DtFeatureLayer& addFeatureLayer(const std::string& featureLayerFilename); 00148 00150 virtual void removeFeatureLayer(const std::string& featureLayerFilename); 00151 00153 virtual const FeatureLayers& featureLayers() const; 00154 00156 virtual FeatureLayers& featureLayers(); 00157 00159 virtual DtFeatureLayer* findFeatureLayer(const std::string& featureLayerFilename); 00160 00162 00164 00165 00167 std::string generatePropName(const std::string& propType); 00168 00170 00172 00173 00177 virtual DtForest& forest(); 00178 00180 00181 bool isPropNameUsed(const std::string& propName) const; 00182 00186 virtual bool getTerrainIntersection(double x, double y, double z, 00187 double upX, double upY, double upZ, double& retX, double& retY, 00188 double& retZ ); 00189 00193 virtual void clearElevationCache(); 00195 00197 00198 00201 virtual bool exportTerrainAndProps(const std::string&); 00202 00204 00205 protected: 00206 00208 void executeTerrainOperation(const makArchives::DtTerrainOperationRecord& operation, 00209 const makArchives::DtTerrainRecord& terrainRec); 00210 00212 void addTerrainOperationRecord(const makArchives::DtTerrainOperationRecord& operation); 00213 00215 void removeTerrainOperationRecord( const makArchives::DtTerrainOperationRecord& operation); 00216 00218 void removeTerrainOperationRecord(int id); 00219 00221 void clearTerrainOperations(); 00222 00223 protected: 00224 typedef std::map<std::string,int> PropNameMap; 00225 00226 DtDe& myDe; 00227 DtTerrainSignaler& mySignaler; 00228 DtAgentManagerInterface& myAgentManagerInterface; 00229 00230 TerrainPatches myTerrainPatches; 00231 FeatureLayers myFeatureLayers; 00232 DtForest myForest; 00233 00234 TerrainOperationsMap myTerrainOperationsMap; 00235 int myNextTerrainOperationId; 00236 bool myGlobalScaleFlag; 00237 00238 PropNameMap myPropNameMap; 00239 00240 }; 00241 00244 class DT_DLL_VRVCORE DtTerrainSignaler : public DtVirtualBaseClass 00245 { 00246 public: 00247 00249 static DtTerrainSignaler& instance(DtDe& de); 00250 00252 virtual ~DtTerrainSignaler(); 00253 00254 //@name Signals 00256 00258 boost::signal< void (const DtTerrainPatch&) > signal_terrainPatchAdded; 00259 00261 boost::signal< void (const DtTerrainPatch&) > signal_terrainPatchToBeDeleted; 00262 00264 boost::signal< void (const DtFeatureLayer&) > signal_featureLayerAdded; 00265 00267 boost::signal< void (const DtFeatureLayer&) > signal_featureLayerToBeDeleted; 00268 00270 boost::signal<void () > signal_terrainToBeCleared; 00271 00273 boost::signal< void () > signal_terrainCleared; 00274 00276 boost::signal< void (const std::string&, const std::string&) > signal_propExtractionRuleLoaded; 00277 00279 boost::signal< void (DtProp& prop) > signal_propCreated; 00280 00282 boost::signal< void (const DtProp& prop) > signal_propAboutToBeDestroyed; 00283 00285 boost::signal< void (const DtProp& prop, double x, double y, double z) > signal_propPositionAboutToChange; 00286 00288 boost::signal< void (const DtProp& prop, double x, double y, double z, double w) > signal_propOrientationAboutToChange; 00289 00291 boost::signal< void (const DtFeature&) > signal_featureAdded; 00292 00294 boost::signal< void (const DtFeature&) > signal_featureToBeDeleted; 00295 00297 boost::signal< void(int id, const makArchives::DtTerrainOperationRecord& rec) > signal_terrainOperationAdded; 00298 00300 boost::signal< void(int id) > signal_terrainOperationRemoved; 00301 00303 boost::signal< void(bool) > signal_terrainIsGlobalScaleChanged; 00304 00307 boost::signal< void() > signal_terrainGeometryLoaded; 00308 00310 00311 protected: 00312 DtTerrainSignaler(); 00313 }; 00314 } 00315 00316 #endif 00317