VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
aisDataManager.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2022 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
6 #pragma once
7 
10 
13 
14 #include <atomic>
15 #include <tbb/spin_mutex.h>
16 #include <memory>
17 
19 
21 class DtEntityType;
22 class DtAisTrack;
23 class DtAisDataManagerJob;
24 
25 namespace MAKVRinTerra
26 {
27  class DtFeatureGeometry;
28 }
29 
34 {
35 public:
36 
37  typedef std::vector<DtAisTrack> DtAisTrackBuffer;
38  typedef std::list<DtAisTrack*> DtAisTrackList;
39  typedef std::unordered_map<DtMmsi, DtAisTrack*> DtAisTrackMap;
40 
43 
45  virtual ~DtAisDataManager();
46 
49  virtual bool init();
50 
52  static void tickCallback(void* usr);
53 
56  virtual void tick();
57 
59  virtual bool isDataLoaded() const override;
60 
61  //\copydoc DtAisDataServiceInterface::findTracksInArea()
62  virtual DtAisDataJob::Ptr findTracksInArea(const DtVertexList& areaVertices,
63  bool unownedOnly = true) override;
64 
65  //\copydoc DtAisDataServiceInterface::findTracksInAreaDuringTime()
66  virtual DtAisDataJob::Ptr findTracksInAreaDuringTime(const DtVertexList & areaVertices,
67  double startSimTime, double endSimTime, bool unownedOnly) override;
68 
69  //\copydoc DtAisDataServiceInterface::trackInfo()
70  virtual const DtAisTrack* trackInfo(DtMmsi trackId) const override;
71 
72  //\copydoc DtAisDataServiceInterface::takeOwnershipOfTrack()
73  virtual DtAisDataJob::Ptr requestOwnershipOfTracks(const DtMmsiSet& trackIds) override;
74 
75  //\copydoc DtAisDataServiceInterface::releaseOwnershipOfTrack()
76  virtual DtAisDataJob::Ptr releaseOwnershipOfTracks(const DtMmsiSet& trackIds) override;
77 
78  //\copydoc DtAisDataServiceInterface::aisTimeFromSimTime()
79  virtual double aisTimeFromSimTime(double simTime) const override;
80 
81  //\copydoc DtAisDataServiceInterface::simTimeFromAisTime()
82  virtual double simTimeFromAisTime(double aisTime) const override;
83 
84  //\copydoc DtAisDataServiceInterface::finalDataSimTime()
85  virtual double finalDataSimTime() const override;
86 
87  //\copydoc DtAisDataServiceInterface::getFirstPointAfterTime()
88  virtual bool getFirstPointAfterTime(const DtAisTrack& track, double simTime,
89  DtPathPointIter& pathPointIter) const override;
90 
91  //\copydoc DtAisDataServiceInterface::getLastPointBeforeTime()
92  virtual bool getLastPointBeforeTime(const DtAisTrack& track, double simTime,
93  DtPathPointIter& pathPointIter) const override;
94 
95  //\copydoc DtAisDataServiceInterface::getEndOfPath()
96  virtual DtPathPointIter getEndOfpath(const DtAisTrack& track) const override;
97 
98  //\copydoc DtAisDataServiceInterface::resetData()
99  virtual void resetData() override;
100 
101  //\copydoc DtAisDataServiceInterface::clearData()
102  virtual void clearData() override;
103 
107  virtual void loadAisData();
108 
109  virtual bool isDataLoading() const;
110  virtual bool timeToStop() const;
111  virtual void stop();
112 
113 protected:
114 
115  friend class DtAisDataManagerJob;
116 
118  virtual void performDataClear();
119 
121  virtual void performDataReset();
122 
124  virtual void startAisDataLoad();
125 
128  virtual void calculateTrackTimeOffset();
129 
130 private:
131 
133  DtAisDataManager(const DtAisDataManager& orig);
136 
137 protected:
138 
141 
144 
147 
150 
151  typedef tbb::spin_mutex QueryQueueMutex;
153 
154  typedef std::list<DtAisDataJob::Ptr> JobQueue;
156 
163 
164  std::atomic<bool> myClearData;
165  std::atomic<bool> myResetData;
166  std::atomic<bool> myResetTimeOffset;
167  std::atomic<bool> myDataIsLoaded;
168  std::atomic<bool> myLoadInProgress;
169 
170  std::atomic<bool> myWarnedOnce;
171  std::atomic<bool> myTimeToStop;
172 };
DtAisTrackMap myTracksByMmsi
Index into the track data by MMSI.
Definition: aisDataManager.h:143
tbb::spin_mutex QueryQueueMutex
Definition: aisDataManager.h:151
DtSimulationServices * mySimulationServices
Definition: aisDataManager.h:157
std::atomic< bool > myLoadInProgress
Definition: aisDataManager.h:168
std::atomic< bool > myResetTimeOffset
Definition: aisDataManager.h:166
std::atomic< bool > myWarnedOnce
Definition: aisDataManager.h:170
virtual bool isDataLoaded() const =0
Returns true if AIS data has been loaded.
DtTime myFinalDataAisTime
Definition: aisDataManager.h:161
virtual double simTimeFromAisTime(double aisTime) const =0
Converts the AIS data time to sim time. Needed to understand how sim time relates to the timestamps i...
Abstract interface class to the AIS data service. This service provides access to Automatic Identific...
Definition: aisDataServiceInterface.h:28
JobQueue myJobQueue
Definition: aisDataManager.h:155
virtual bool getFirstPointAfterTime(const DtAisTrack &track, double simTime, DtPathPointIter &pathPointIter) const =0
Find the first point in the track&#39;s path that occurs after (or at) the specified sim time...
QueryQueueMutex myQueryQueueMutex
Definition: aisDataManager.h:152
DtTime myTrackTimeAtSimTime0
Definition: aisDataManager.h:158
virtual bool getLastPointBeforeTime(const DtAisTrack &track, double simTime, DtPathPointIter &pathPointIter) const =0
Find the last point in the track&#39;s path that occurs before (or at) the specified sim time...
virtual double aisTimeFromSimTime(double simTime) const =0
Converts a sim time to AIS data time. Needed to understand how sim time relates to the timestamps in ...
std::atomic< bool > myDataIsLoaded
Definition: aisDataManager.h:167
virtual void clearData()=0
Marks AIS data to be cleared. Data will be completely unloaded.
virtual DtAisDataJob::Ptr findTracksInAreaDuringTime(const DtVertexList &areaVertices, double startSimTime, double endSimTime, bool unownedOnly)=0
Starts a query for all tracks in the specified area. If unownedOnly is true (the default) then only u...
std::set< DtMmsi > DtMmsiSet
Definition: aisDataServiceInterface.h:34
std::list< DtAisDataJob::Ptr > JobQueue
Definition: aisDataManager.h:154
virtual DtAisDataJob::Ptr requestOwnershipOfTracks(const DtMmsiSet &trackIds)=0
Request ownership of the specified given tracks.
std::atomic< bool > myResetData
Definition: aisDataManager.h:165
DtTime myFinalDataSimTime
Definition: aisDataManager.h:162
#define DT_DLL_vrfobjcore
This file is used to determine how to build.
Definition: vrfobjcoreDefines.h:24
virtual DtAisDataJob::Ptr releaseOwnershipOfTracks(const DtMmsiSet &trackIds)=0
Release ownership of the specified tracks.
std::atomic< bool > myTimeToStop
Definition: aisDataManager.h:171
std::list< DtAisTrack * > DtAisTrackList
Definition: aisDataManager.h:38
class DtVertexList:
Definition: vertexList.h:22
Class definition for one track created from AIS messages, i.e. the identifying information and time-s...
Definition: aisTrack.h:60
virtual DtPathPointIter getEndOfpath(const DtAisTrack &track) const =0
Returns an iterator to the end of the path (i.e. path.end()).
virtual const DtAisTrack * trackInfo(DtMmsi trackId) const =0
Returns information for the track with the specified MMSI, or nullptr if it could not be found...
std::unordered_map< DtMmsi, DtAisTrack * > DtAisTrackMap
Definition: aisDataManager.h:39
DtMmsiSet myUnusedTracks
List of the subset of tracks that are not in use.
Definition: aisDataManager.h:146
DtMmsiSet myTracksInUse
List of the subset of tracks that are in use.
Definition: aisDataManager.h:149
virtual void resetData()=0
Marks AIS data to be reset. Data will not be unloaded, but ownership of all tracks will be reset to u...
virtual double finalDataSimTime() const =0
Returns the sim time for the last point of AIS data available.
DtAisTrackBuffer myTracks
Buffer containing information on all loaded AIS tracks.
Definition: aisDataManager.h:140
Central access point of all non-object-specific the services and managers that are available for use ...
Definition: simulationServices.h:94
std::map< double, DtPathPoint >::const_iterator DtPathPointIter
Definition: aisDataServiceInterface.h:36
DT_DLL_DEBUGDRAWRENDERER void init(makVrv::DtDe &de)
Work function for the plugin initialization.
std::vector< DtAisTrack > DtAisTrackBuffer
Definition: aisDataManager.h:37
DtTime myFirstDataAisTime
Definition: aisDataManager.h:159
std::atomic< bool > myClearData
Definition: aisDataManager.h:164
virtual DtAisDataJob::Ptr findTracksInArea(const DtVertexList &areaVertices, bool unownedOnly=true)=0
Starts a query for all tracks in the specified area. If unownedOnly is true (the default) then only u...
The DtAisDataManager loads and manages Automatic Identification System (AIS) data, which is used to track and monitor real world ships. This data can be used to create and simulate clutter entities in a simulation.
Definition: aisDataManager.h:33
DtAisDataServiceInterface & operator=(const DtAisDataServiceInterface &)
Assignment operator not implemented.
DtTime myFirstDataSimTime
Definition: aisDataManager.h:160

Document ID: Generated on Wed Mar 27 22:49:11 EDT 2024 from SVN revision 264633
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)