![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2006 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: aggregateSpatialModel.h,v $ $Revision: 1.7 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00017 00018 #ifndef DtAggregateSpatialModel_H_ 00019 #define DtAggregateSpatialModel_H_ 00020 00021 #include "vrfobjcore/vrfobjcoreDefines.h" 00022 #include "vrfobjcore/aggregateSpatialData.h" 00023 #include "vrfobjcore/aggregateNode.h" 00024 #include "vrfobjcore/orgViewManagedObjList.h" 00025 00026 #include <vlutil/vlString.h> 00027 #include <vlutil/vlSmartPointers.h> 00028 00029 #include <map> 00030 #include <list> 00031 00032 typedef DtBoost::shared_ptr<DtAggregateData> DtAggregateDataPtr; 00033 typedef DtBoost::shared_ptr<const DtAggregateData> DtAggregateDataConstPtr; 00034 00035 class DtAggregateSpatialData; 00036 class DtExerciseClock; 00037 class DtVrfObjectManager; 00038 class DtOrganizationManagerNode; 00039 class DtVrfObject; 00040 class DtSimBoundingGeometry; 00041 00050 class DT_DLL_vrfobjcore DtAggregateSpatialModel 00051 { 00052 public: 00053 00055 DtAggregateSpatialModel(DtVrfObjectManager& objectManager, 00056 const DtExerciseClock& exerciseClock); 00057 00059 virtual ~DtAggregateSpatialModel(); 00060 00064 virtual void init(); 00065 00070 virtual void timedTick(); 00071 00075 virtual void setTickPeriodUsesRealTime(bool value); 00076 virtual bool tickPeriodUsesRealTime() const; 00077 00080 virtual void setMinTickPeriod(double minTickPeriod); 00081 00083 virtual double minTickPeriod() const; 00084 00086 virtual void setMinTickPeriodVariance(double minTickPeriodVariance); 00087 00089 virtual double minTickPeriodVariance() const; 00090 00094 virtual void setNextTickTime(double nextTickTime); 00095 00097 virtual double nextTickTime() const; 00098 00101 virtual void setTickAsFastAsPossibleWhenPaused(bool yesNo); 00102 virtual bool tickAsFastAsPossibleWhenPaused() const; 00103 00109 virtual DtAggregateSpatialDataConstPtr lookup( 00110 const DtEntityIdentifier& id) const; 00111 00113 virtual void printHierarchy() const; 00114 00115 protected: 00116 00122 virtual double calculateNextTickTime() const; 00123 00131 virtual void tick(); 00132 00135 virtual void destroyTreesAndMap(); 00136 00139 virtual void buildTreesAndMap(); 00140 00143 virtual void traverseTreesAndUpdateNodes(); 00144 00147 virtual DtAggregateNodePtr createNode( 00148 const DtOrganizationManagerNode& orgViewNode); 00149 00155 virtual void updateNode(DtAggregateNodePtr node); 00156 00158 virtual bool updateNodeData(DtAggregateNodePtr node, 00159 const DtAggregateSpatialData& newData); 00160 00167 virtual bool computeState(DtAggregateNodeConstPtr node, 00168 DtAggregateSpatialData& state); 00169 00175 virtual bool computeOrientation(DtAggregateNodeConstPtr node, 00176 DtAggregateNodeList subordinates, 00177 DtDcm& geocentricOrientation, double& heading); 00178 00191 virtual bool computeLocationAndBoundingGeometry( 00192 DtAggregateNodeConstPtr node, 00193 DtAggregateNodeList subordinates, 00194 const DtDcm& geocentricOrientation, 00195 DtVector& geocentricLocation, 00196 DtSimBoundingGeometry& boundingGeometry); 00197 00203 virtual bool computeVelocity(DtAggregateNodeConstPtr node, 00204 DtAggregateNodeList subordinates, 00205 DtVector& geocentricVelocity); 00206 00210 virtual void subordinatesToIncludeInComputingState( 00211 DtAggregateNodeConstPtr node, 00212 DtAggregateNodeList& list); 00213 00220 virtual DtOrgViewManagedObjectListConstPtr subordinatesToIncludeInComputingState( 00221 DtAggregateNodeConstPtr node) const; 00222 00225 virtual void processNodeAdded(DtEntityIdentifier eid); 00226 00229 virtual void processNodeRemoved(DtEntityIdentifier eid); 00230 00232 virtual void processChildAdded(DtEntityIdentifier eid); 00233 00235 virtual void processChildRemoved(DtEntityIdentifier eid); 00236 00240 virtual void registerOrgViewCallbacks(); 00241 void unregisterOrgViewCallbacks(); 00243 00247 virtual void registerAggregateNodeCallbacks( 00248 DtOrganizationManagerNode& aggregateNode); 00249 void unregisterAggregateNodeCallbacks( 00250 DtOrganizationManagerNode& aggregateNode); 00252 00253 00257 virtual bool organizationHasChanged() const; 00258 virtual void setOrganizationHasChanged(bool yesNo); 00260 00262 virtual void printNode(DtAggregateNodePtr node, int indentLevel = 0) const; 00263 00264 public: 00265 00268 static void nodeAddedCallback(DtEntityIdentifier eid, void* userData); 00269 00272 static void nodeRemovedCallback(DtEntityIdentifier eid, void* userData); 00273 00276 static void childAddedCallback(DtEntityIdentifier eid, void* userData); 00277 00280 static void childRemovedCallback(DtEntityIdentifier eid, void* userData); 00281 00282 private: 00283 00285 DtAggregateSpatialModel(const DtAggregateSpatialModel& orig); 00286 00288 DtAggregateSpatialModel& operator=(const DtAggregateSpatialModel& orig); 00289 00290 protected: 00291 00292 typedef std::map<DtEntityIdentifier, DtAggregateNodePtr> DtAggregateNodeMap; 00293 00296 DtAggregateNodeMap myNodeMap; 00297 00299 DtAggregateNodeList myRootNodeList; 00300 00301 const DtExerciseClock& myExerciseClock; 00302 00306 DtVrfObjectManager& myObjectManager; 00307 00310 bool myOrganizationHasChanged; 00311 00313 bool myTickPeriodUsesRealTime; 00314 double myMinTickPeriod; 00315 double myMinTickPeriodVariance; 00316 double myNextTickTime; 00317 double myLastTickSimTime; 00318 bool myTickAsFastAsPossibleWhenPaused; 00319 }; 00320 00321 #endif