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

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)