VR-Forces 4.10 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
radarCoverageMonitor.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2018 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
6 #pragma once
7 
10 #include <matrix/vlMath.h>
11 #include <tbb/spin_mutex.h>
12 #include <tbb/tbb_thread.h>
13 #include <tbb/atomic.h>
14 #include <tbb/compat/condition_variable>
17 
25 class DtSimManager;
26 class DtUUID;
27 class DtVrfObject;
28 class DtSimMessage;
31 
33 {
34 protected:
35  struct RadarCoverage;
37  struct RadarCoverageRequest;
38  struct RadarCoverageData;
39 
40 public:
41 
46 
48  virtual ~DtRadarCoverageMonitor();
49 
52 
54  virtual bool init();
55 
58  void setSimManager(DtSimManager * simManager) { mySimManager = simManager; };
59  DtSimManager* simManager() const { return mySimManager; };
60 
63  virtual void tick();
64 
67  virtual void startMonitoring(const DtUUID&, bool radarCoverage2D = true, bool radarCoverage3D = true, int responseId = 0);
68 
70  virtual void stopMonitoring(const DtUUID&);
71 
73  virtual void terrainClosed();
74 
75 protected:
77  virtual DtSensorFanWalker::IntersectionInformation intersectionTest(
78  const DtVector& start, const DtVector& end, bool altitudeMSL, double highResRadius);
79 
81  static void simObjectAboutToBeRemoved(const DtVrfObject * msg, void * usr);
82  virtual void processSimObjectAboutToBeRemoved(const DtVrfObject* msg);
83 
87  static void radarCoverageInformationCallback(DtSimMessage* msg, void* usr);
88  virtual void processRadarCoverageInformation(DtSimInterfaceMessage* msg);
90 
92  virtual void getRadarGeometry(DtObjectSensorDescriptor* desc, RadarCoverage& radar) const;
93 
95  virtual void processRadarCoverage();
96 
97  virtual void sendInitialRadarCoverage(RadarCoverage& coverage, int coverageType, int responseId = 0) const;
98 
99  virtual void sendRadarCoverageResults(const RadarCoverageData&, const DtSensorFanWalker*, int coverageType, int responseId = 0) const;
100  virtual DtVector offsetPoint(const DtVector& point, const DtVector& offset) const;
101 
102  virtual bool processRadarCoverage(RadarCoverage& radar, DtSharedVrfObjectReference);
103  virtual void cancelRadarCoverage(RadarCoverage& radar, int coverageType, bool reset = true);
104  virtual void startRadarCoverageCalculations(RadarCoverage& radar, int coverageType);
105  virtual bool radarCoverageNeedsUpdate(RadarCoverage& radar, DtSharedVrfObjectReference) const;
106 
107  static void settingConsumerCallback(const DtSettingsObject* settingsObject, void* usr);
108  virtual void processSettingsConsumer(const DtSettingsObject* settingsObject);
109 
110  virtual PendingRadarCoverageRequest initializeRadarCoverageCalculation2D(const RadarCoverageRequest&);
111  virtual PendingRadarCoverageRequest initializeRadarCoverageCalculation3D(const RadarCoverageRequest&);
112  virtual void removeRadarCoverageCalculation(const DtUUID& uuid, const DtString& radarName, int coverageType);
113  virtual bool processPendingIntersection(PendingRadarCoverageRequest& pending);
114  virtual void clearAllCalculations();
115  virtual void initializeAzimuthAndElevation(const RadarCoverageData& coverage,
116  double& azimuthStart, double& azimuthEnd, double& elevationStart, double& elevationEnd) const;
117 
118  virtual bool coverageCancelled(const DtUUID&, int flag);
119 
120 private:
123 
125  const DtRadarCoverageMonitor & operator=(const DtRadarCoverageMonitor & orig);
126 
127 protected:
129 
131  {
133  : azimuthSweepMinimum(0)
134  , azimuthSweepMaximum(M_2PI)
135  , elevationSweepMinimum(0.)
136  , elevationSweepMaximum(M_PI_2)
137  , azimuthSampleRate(M_DEG2RAD)
138  , elevationSampleRate(M_DEG2RAD)
139  , postSpacing(1000.)
140  , highResRadius(1000)
141  , radarRange(0.)
142  , uuid(DtUUID::nullUUID())
143  {
144  }
145 
147  : azimuthSweepMinimum(orig.azimuthSweepMinimum)
148  , azimuthSweepMaximum(orig.azimuthSweepMaximum)
149  , elevationSweepMinimum(orig.elevationSweepMinimum)
150  , elevationSweepMaximum(orig.elevationSweepMaximum)
151  , radarName(orig.radarName)
152  , azimuthSampleRate(orig.azimuthSampleRate)
153  , elevationSampleRate(orig.elevationSampleRate)
154  , postSpacing(orig.postSpacing)
155  , highResRadius(orig.highResRadius)
156  , radarRange(orig.radarRange)
157  , uuid(orig.uuid)
158  , offset(orig.offset)
159  , currentPosition(orig.currentPosition)
160  , currentOrientation(orig.currentOrientation)
161  {
162  }
163 
164  double radarRange;
171  double postSpacing;
174  DtTaitBryan currentOrientation;
178  };
179 
181  {
184  , movementDelta(1000.)
185  , orientationDelta(M_DEG2RAD)
186  , radarCoverageWaitTime(2.0)
187  , requestTime(0.)
188  {
189  }
190 
192 
193  : RadarCoverageData(orig)
194  , movementDelta(orig.movementDelta)
195  , orientationDelta(orig.orientationDelta)
196  , radarCoverage2D(orig.radarCoverage2D)
197  , radarCoverage3D(orig.radarCoverage3D)
198  , radarCoverageWaitTime(orig.radarCoverageWaitTime)
199  , requestTime(orig.requestTime)
200  {
201  }
202 
206  double requestTime;
207  boost::shared_ptr<DtSensorFanWalker> radarCoverage2D;
208  boost::shared_ptr<DtSensorFanWalker> radarCoverage3D;
209  };
210 
211  struct Monitoring
212  {
214  : referenceCount(1)
215  , removeOnNextRefresh(false)
216  {};
217 
218  Monitoring(const Monitoring& orig)
219  : referenceCount(orig.referenceCount)
220  , vrfObject(orig.vrfObject)
221  , removeOnNextRefresh(orig.removeOnNextRefresh)
222  , radars(orig.radars)
223  {};
224 
225  DtSharedVrfObjectReference vrfObject;
227 
229 
230  std::vector<RadarCoverage> radars;
231  };
232 
233  typedef std::map<DtUUID, Monitoring> MonitoringMap;
235 
237  std::auto_ptr<tbb::tbb_thread> myRadarCoverageThread;
238  typedef tbb::interface5::condition_variable Condition;
239  typedef tbb::mutex ConditionMutex;
240  typedef tbb::interface5::unique_lock<ConditionMutex> ConditionLock;
244  tbb::atomic<bool> myClearPendingIntersections;
245 
247 
249  {
253  };
254 
255  std::vector<RadarCoverageResult> myRadarCoverageResults;
256 
258  {
261  bool cancel;
262  };
263 
264  typedef std::vector<RadarCoverageRequest> RadarCoverageRequests;
266 
269 
270  bool myReset2D;
271  bool myReset3D;
272 
274  {
278  };
279 
280  typedef std::map<DtString, std::vector<PendingRadarCoverageRequest> > PendingRadarCoverageRequests;
281  typedef std::map<DtUUID, PendingRadarCoverageRequests> PendingRadarCoverageRequestsMap;
283 };
284 
UUID is a unique ID wrapper class.
Definition: rwUUID.h:222
double radarCoverageWaitTime
Definition: radarCoverageMonitor.h:205
tbb::mutex ConditionMutex
Definition: radarCoverageMonitor.h:239
double elevationSweepMinimum
Definition: radarCoverageMonitor.h:167
Condition myRadarCoverageCondition
Definition: radarCoverageMonitor.h:241
DtVrfObject is used to represent any type of simulated object (entities, aggregate, control objects) in a VR-Forces application.
Definition: vrfObject.h:215
bool myAltitudeMSL
Definition: radarCoverageMonitor.h:267
int coverageType
Definition: radarCoverageMonitor.h:275
bool myReset3D
Definition: radarCoverageMonitor.h:271
bool cancel
Definition: radarCoverageMonitor.h:261
DtTaitBryan currentOrientation
Definition: radarCoverageMonitor.h:174
double radarRange
Definition: radarCoverageMonitor.h:164
std::map< DtUUID, PendingRadarCoverageRequests > PendingRadarCoverageRequestsMap
Definition: radarCoverageMonitor.h:281
DtRadarCoverageAltitudeSettings myRadarCoverageAltitudeSettings
Definition: radarCoverageMonitor.h:268
double azimuthSweepMaximum
Definition: radarCoverageMonitor.h:166
DtVector currentPosition
Definition: radarCoverageMonitor.h:173
RadarCoverageRequests myRadarCoverageRequests
Definition: radarCoverageMonitor.h:265
boost::shared_ptr< DtSensorFanWalker > radarCoverage2D
Definition: radarCoverageMonitor.h:207
tbb::interface5::condition_variable Condition
Definition: radarCoverageMonitor.h:238
Definition: radarCoverageMonitor.h:130
Definition: radarCoverageMonitor.h:32
DtObjectSensorDescriptor; descriptor for the DtObjectSensor component.
Definition: objectSensorDescriptor.h:27
DtSimInterfaceMessage is used to send a message to the front end or the back end. ...
Definition: simInterfaceMessage.h:32
int referenceCount
Definition: radarCoverageMonitor.h:226
DtString radarName
Definition: radarCoverageMonitor.h:175
RadarCoverageData radarData
Definition: radarCoverageMonitor.h:276
std::vector< RadarCoverageResult > myRadarCoverageResults
Definition: radarCoverageMonitor.h:255
double highResRadius
Definition: radarCoverageMonitor.h:172
std::vector< RadarCoverage > radars
Definition: radarCoverageMonitor.h:230
Monitoring(const Monitoring &orig)
Definition: radarCoverageMonitor.h:218
MonitoringMap myMonitoringMap
Definition: radarCoverageMonitor.h:234
Definition: settingsObject.h:27
DtSharedVrfObjectReference class will allocate an empty DtVrfObjectReference if one is not assigned s...
Definition: vrfObjectReference.h:102
Definition: radarCoverageAltitudeSettings.h:35
tbb::spin_mutex myRadarCoverageAdditionMutex
Definition: radarCoverageMonitor.h:246
double postSpacing
Definition: radarCoverageMonitor.h:171
RadarCoverageData(const RadarCoverageData &orig)
Definition: radarCoverageMonitor.h:146
double azimuthSweepMinimum
Definition: radarCoverageMonitor.h:165
DtSensorFanWalker * walker
Definition: radarCoverageMonitor.h:277
tbb::interface5::unique_lock< ConditionMutex > ConditionLock
Definition: radarCoverageMonitor.h:240
RadarCoverage(const RadarCoverage &orig)
Definition: radarCoverageMonitor.h:191
int coverageType
Definition: radarCoverageMonitor.h:251
#define DT_DLL_vrfobjcore
This file is used to determine how to build.
Definition: vrfobjcoreDefines.h:24
void setSimManager(DtSimManager *simManager)
If the default constructor was used, you can supply a sim manager later; however, if you do...
Definition: radarCoverageMonitor.h:58
int coverageType
Definition: radarCoverageMonitor.h:260
RadarCoverageData()
Definition: radarCoverageMonitor.h:132
DtSimManager * mySimManager
Definition: radarCoverageMonitor.h:128
File: simMsg.h.
Definition: simMessage.h:35
double elevationSweepMaximum
Definition: radarCoverageMonitor.h:168
DtUUID uuid
Definition: radarCoverageMonitor.h:176
std::map< DtString, std::vector< PendingRadarCoverageRequest > > PendingRadarCoverageRequests
Definition: radarCoverageMonitor.h:280
double elevationSampleRate
Definition: radarCoverageMonitor.h:170
Definition: radarCoverageMonitor.h:180
tbb::atomic< bool > myShutdownRadarCoverageThreadFlag
Definition: radarCoverageMonitor.h:243
Definition: radarCoverageMonitor.h:248
DtSensorFanWalker * walker
Definition: radarCoverageMonitor.h:252
RadarCoverageData radar
Definition: radarCoverageMonitor.h:259
RadarCoverageData radarData
Definition: radarCoverageMonitor.h:250
double orientationDelta
Definition: radarCoverageMonitor.h:204
RadarCoverage()
Definition: radarCoverageMonitor.h:182
double azimuthSampleRate
Definition: radarCoverageMonitor.h:169
std::vector< RadarCoverageRequest > RadarCoverageRequests
Definition: radarCoverageMonitor.h:264
PendingRadarCoverageRequestsMap myPendingRadarCoverageRequests
Definition: radarCoverageMonitor.h:282
ConditionMutex myRadarCoverageConditionMutex
Definition: radarCoverageMonitor.h:242
std::auto_ptr< tbb::tbb_thread > myRadarCoverageThread
Member variables used to interact with the radar coverage thread.
Definition: radarCoverageMonitor.h:237
boost::shared_ptr< DtSensorFanWalker > radarCoverage3D
Definition: radarCoverageMonitor.h:208
DT_DLL_DEBUGDRAWRENDERER void init(makVrv::DtDe &de)
Work function for the plugin initialization.
Definition: radarCoverageMonitor.h:273
Definition: sensorFanWalker.h:29
Definition: radarCoverageMonitor.h:257
The simulation engine is controlled by a single,top-level class called the Simulation Manager...
Definition: simManager.h:103
bool myReset2D
Definition: radarCoverageMonitor.h:270
double movementDelta
Definition: radarCoverageMonitor.h:203
Definition: radarCoverageMonitor.h:211
Monitoring()
Definition: radarCoverageMonitor.h:213
voidpf uLong offset
Definition: ioapi.h:42
tbb::atomic< bool > myClearPendingIntersections
Definition: radarCoverageMonitor.h:244
DtVector offset
Definition: radarCoverageMonitor.h:177
double requestTime
Definition: radarCoverageMonitor.h:206
bool removeOnNextRefresh
Definition: radarCoverageMonitor.h:228
Definition: sensorFanWalker.h:32
DtSimManager * simManager() const
Definition: radarCoverageMonitor.h:59
std::map< DtUUID, Monitoring > MonitoringMap
Definition: radarCoverageMonitor.h:233

Document ID: Generated on Tue Sep 21 17:42:52 EDT 2021 from SVN revision 234861
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)