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

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)