![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2012 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 00008 00009 #pragma once 00010 00011 #include <vrfGuiCore/vrfGuiCore.h> 00012 #include <vrvUtil/signalslib.h> 00013 #include <vrfGuiCore/DtVrfStateViewCollectionManager.h> 00014 #include <vrvUtil/DtSignalConnectionManager.h> 00015 #include <vlutil/vlPerformanceStats.h> 00016 00017 #include <vrvUtil/DtVirtualBaseClass.h> 00018 00019 #include <boost/signal.hpp> 00020 00021 #include <matrix/vlVector.h> 00022 #include <vector> 00023 00024 namespace makVrv 00025 { 00026 class DtDe; 00027 class DtSimObjectEntry; 00028 class DtModel; 00029 class DtCoordinateSystem; 00030 } 00031 00032 namespace makVrf 00033 { 00041 class DT_DLL_VRFGUICORE DtSymbolTracker 00042 { 00043 protected: 00044 class MyTimeStatistic : public DtTimeStatistic 00045 { 00046 public: 00047 MyTimeStatistic() {}; 00048 00049 inline double sum() const { return mySum; }; 00050 }; 00051 00052 protected: 00053 typedef std::pair<makVrv::DtModel*, const makVrv::DtStateView<makVrv::DtVrlinkSimulatedEntityState>*> TrackingData; 00054 typedef std::map<makVrv::DtElementID, TrackingData> TrackingMap; 00055 00056 struct TrackData 00057 { 00058 DtTimedSection myTimer; 00059 MyTimeStatistic myTotalTime; 00060 double myTimeoutPeriod; 00061 TrackingMap myMap; 00062 }; 00063 00064 public: 00065 DtSymbolTracker(makVrv::DtDe&); 00066 virtual ~DtSymbolTracker(); 00067 00070 virtual void setLinePoints(const std::vector<DtVector>&); 00071 00074 virtual void setShowObjectsWithinRange(double); 00075 00077 virtual void findAllInRange(); 00078 00081 virtual bool canTrack(makVrv::DtModel* model, double& range, 00082 DtVector* retPosition = 0); 00083 00086 virtual bool withinRange(const DtVector&, double& range) const; 00087 00089 virtual void suspend(); 00090 00092 virtual void resume(); 00093 00095 virtual bool isSuspended() const; 00096 00098 virtual DtVector geocentricPosition(makVrv::DtModel*) const; 00099 00101 virtual void modelAboutToBeDestroyed(makVrv::DtModel*); 00102 00105 00107 boost::signal<void (DtVector geocentricPosition, const makVrv::DtStateView<makVrv::DtVrlinkSimulatedEntityState>*)> signal_trackingEntity; 00108 00110 boost::signal<void (DtVector geocentricPosition, const makVrv::DtStateView<makVrv::DtVrlinkSimulatedEntityState>*)> signal_trackingEntityUpdated; 00111 00113 boost::signal<void (makVrv::DtElementID)> signal_stoppedTrackingEntity; 00114 00116 boost::signal<void ()> signal_suspended; 00118 00119 protected: 00122 virtual void checkTracked(); 00123 00125 virtual void slot_simObjectEntryAboutToBeRemoved(makVrv::DtSimObjectEntry& e); 00126 virtual void removeTrackedItem(makVrv::DtElementID); 00127 00128 00131 virtual void slot_simStateAdded(makVrv::DtSimObjectEntry& e); 00132 00134 virtual void reset(TrackingMap&); 00135 00137 virtual void updateRateForRange(makVrv::DtModel*, double range); 00138 00140 virtual bool checkAndRemove(makVrv::DtElementID id, TrackingMap& map) const; 00141 00143 virtual void tick(); 00144 00146 virtual makVrv::DtModel* findModelFor(makVrv::DtElementID) const; 00147 00149 virtual void updateData(TrackData& data, bool tracked = false); 00150 00152 virtual void checkWaiting(); 00153 00155 virtual makVrv::DtElementID simIdFromModel(makVrv::DtModel*) const; 00156 00157 protected: 00158 makVrv::DtDe& myDe; 00159 std::vector<DtVector> myLinePoints; 00160 double myRange; 00161 makVrv::DtSignalConnectionManager myConnectionManager; 00162 00163 TrackData myTrackingMap; 00164 TrackData myAt4s; 00165 TrackData myAt8s; 00166 TrackData myWaiting; 00167 00168 DtTimedSection myLastMovement; 00169 int myLastMovementTime; 00170 00171 bool mySuspended; 00172 bool mySuspendedByMovement; 00173 00174 makVrv::DtCoordinateSystem& myCoordinateSystem; 00175 00176 std::map<makVrv::DtElementID, bool> myMadeConnection; 00177 std::map<makVrv::DtModel*, makVrv::DtElementID> myModelToSimIdMap; 00178 }; 00179 00181 class DT_DLL_VRFGUICORE DtSymbolTrackerCreator : public makVrv::DtVirtualBaseClass 00182 { 00183 public: 00184 DtSymbolTrackerCreator(); 00185 virtual ~DtSymbolTrackerCreator(); 00186 00188 static DtSymbolTrackerCreator& instance(makVrv::DtDe& de); 00189 static void registerInstance(makVrv::DtDe&, DtSymbolTrackerCreator*); 00190 00191 virtual DtSymbolTracker* create(makVrv::DtDe&); 00192 }; 00193 00194 }