VR-Forces 5.0.2 Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
sensorFanWalker.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2018 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 #pragma once
6 
8 #include <boost/function.hpp>
9 #include <matrix/vlVector.h>
10 #include <matrix/vlMath.h>
11 #include <vlutil/vlPerformanceStats.h>
12 
13 #include <set>
14 #include <map>
15 
24 
25 class DtSensorFanWalker;
26 
27 typedef DtSensorFanWalker* (*DtSensorFanWalkerCreatorFcn)();
28 
30 {
31 public:
33  {
34  IntersectionInformation() : intersects(false), dataAvailable(true), altitudeChecked(-1) {};
36  intersects(orig.intersects), dataAvailable(orig.dataAvailable), startPoint(orig.startPoint), endPoint(orig.endPoint),
37  intersectionPoint(orig.intersectionPoint), altitudeChecked(orig.altitudeChecked) {};
38 
39  bool intersects;
45  };
46 
49  typedef boost::function<IntersectionInformation (const DtVector& start, const DtVector& end, bool altitudeMSL)> SensorFanWalkerFunction;
50 
51 public:
54 
57 
58  virtual ~DtSensorFanWalker();
59 
62  virtual void setBreakAfterTime(double);
63  double breakAfterTime() const
64  {
65  return myBreakAfterTime;
66  }
67 
69  virtual void setPrintStats(bool);
70  bool printStats() const
71  {
72  return myPrintStats;
73  }
74 
75  double azimuthRange() const
76  {
77  return fabs(myAzimuthEnd - myAzimuthStart);
78  }
79 
80  double azimuthStart() const
81  {
82  return myAzimuthStart;
83  }
84 
85  double azimuthEnd() const
86  {
87  return myAzimuthEnd;
88  }
89 
91  virtual bool isComplete() const;
92 
95  static DtSensorFanWalker* create();
96 
97  static DtSensorFanWalkerCreatorFcn sensorFanWalkerCreatorFcn();
98  static void setSensorFanWalkerCreatorFcn(DtSensorFanWalkerCreatorFcn);
99 
110  virtual void init(const DtVector& start, double radius, double circleRadianSamplingRate,
111  double sensorFanLineSamplingRate, const std::set<double>& altitudes, double azimuthStart = 0., double azimuthEnd = M_2PI, bool altitudeMSL = true);
112 
122  virtual void init(const DtVector& start, double radius, double circleRadianSamplingRate, double azimuthStart = 0., double azimuthEnd = M_2PI,
123  double elevationRate = M_DEG2RAD, double elevationStart = 0., double elevationEnd = M_PI_2);
124 
128  virtual bool walk(SensorFanWalkerFunction, bool continueIfUnavailable = false);
129 
132  typedef std::vector<IntersectionInformation> Result;
133  typedef std::map<int, Result> Results;
134 
135  const Results& results() const
136  {
137  return myResults;
138  }
139 
140  virtual void resetStartingSpoke();
141 
142  int startingSpoke() const
143  {
144  return myStartingSpoke;
145  }
146 
147  int onSpoke() const
148  {
149  return myOnSpoke;
150  }
151 
152  double elevationRate() const
153  {
154  return myElevationRate;
155  }
156 
157  double elevationStart() const
158  {
159  return myElevationStart;
160  }
161 
162  double elevationEnd() const
163  {
164  return myElevationEnd;
165  }
166 
168  void setElevationRanges(double s, double e)
169  {
170  myElevationStart = s;
171  myElevationEnd = e;
172  }
173 
174  void setAzimuthRanges(double s, double e)
175  {
176  myAzimuthStart = s;
177  myAzimuthEnd = e;
178  }
179 
181  virtual void updateStartingSpoke()
182  {
183  myStartingSpoke = myOnSpoke;
184  }
185 
187  virtual DtSensorFanWalker* clone() const;
188 
190  static double calculateDistance(const DtVector& start, const DtVector& end);
191  static DtVector calculateEndPointFromRadian(const DtVector& start, double radius, double rad = 0);
192 
193  virtual void addNew(int onSpoke, const IntersectionInformation&);
194 
197  virtual void reset();
198 
199  virtual void printStatistics();
200 
203  virtual void setRecordIntersectionPointAsEndPoint(bool);
205  {
206  return mySetRecordIntersectionPointAsEndPoint;
207  }
208 
210  virtual void setStopOnFirstClearView(bool);
211  bool stopOnFirstClearView() const
212  {
213  return myStopOnFirstClearView;
214  }
215 
218  virtual void setCalculateAsDome(bool);
219  bool calculateAsDome() const
220  {
221  return myCalculateAsDome;
222  }
223 
224  static DtVector calculatePointFromElevationAngle(const DtVector& geocentricStart, double radius, double azimuth, double elevation);
225 
227  virtual void copyResultsOf(const DtSensorFanWalker&);
228 
230  virtual void setCalculationsHaveBegun(bool);
232  {
233  return myCalculationsHaveBegun;
234  }
235 
236 protected:
238  double myRadius;
241  std::set<double> myAltitudes;
242 
244 
247 
248  std::vector<int> myAlongSpoke;
251 
259 
263 
269  double myAzimuthEnd;
274 };
275 
bool calculationsHaveBegun() const
Definition: sensorFanWalker.h:231
bool printStats() const
Definition: sensorFanWalker.h:70
double myLastStatPrint
Definition: sensorFanWalker.h:253
double azimuthRange() const
Definition: sensorFanWalker.h:75
double myRadius
Definition: sensorFanWalker.h:238
double myElevationStart
Definition: sensorFanWalker.h:271
bool dataAvailable
Definition: sensorFanWalker.h:40
DtTimedSection myPagingTimeTimer
Definition: sensorFanWalker.h:255
boost::function< IntersectionInformation(const DtVector &start, const DtVector &end, bool altitudeMSL)> SensorFanWalkerFunction
If the altitude is not MSL, the function must do an additional height check at the location and adjus...
Definition: sensorFanWalker.h:49
virtual void updateStartingSpoke()
Call this routine when you have sent off a chunk of data and need to move the counter to the next spo...
Definition: sensorFanWalker.h:181
int myPointsAlongLine
Definition: sensorFanWalker.h:249
IntersectionInformation(const IntersectionInformation &orig)
Definition: sensorFanWalker.h:35
bool calculateAsDome() const
Definition: sensorFanWalker.h:219
std::map< int, Result > Results
Definition: sensorFanWalker.h:133
double myWaitingForPageTime
Definition: sensorFanWalker.h:252
DtVector myStart
Definition: sensorFanWalker.h:237
std::set< double > myAltitudes
Definition: sensorFanWalker.h:241
static DtSensorFanWalkerCreatorFcn theSensorFanWalkerCreatorFcn
Definition: sensorFanWalker.h:243
bool myCalculationsHaveBegun
Definition: sensorFanWalker.h:267
int myOnSpoke
Definition: sensorFanWalker.h:246
std::vector< IntersectionInformation > Result
The result map is, by segment (i.e. number of lines along the circle) and step point along that line...
Definition: sensorFanWalker.h:132
IntersectionInformation()
Definition: sensorFanWalker.h:34
void setAzimuthRanges(double s, double e)
Definition: sensorFanWalker.h:174
DtVector intersectionPoint
Definition: sensorFanWalker.h:43
bool myCalculateAsDome
Definition: sensorFanWalker.h:266
int myStartingSpoke
Definition: sensorFanWalker.h:262
Results myResults
Definition: sensorFanWalker.h:245
bool stopOnFirstClearView() const
Definition: sensorFanWalker.h:211
bool myPrintStats
Definition: sensorFanWalker.h:257
double myAzimuthStart
Definition: sensorFanWalker.h:268
double myBreakAfterTime
Definition: sensorFanWalker.h:260
int myTotalSpokes
Definition: sensorFanWalker.h:250
double mySensorFanLineSamplingRate
Definition: sensorFanWalker.h:240
double myTimeSinceLastBreak
Definition: sensorFanWalker.h:261
int startingSpoke() const
Definition: sensorFanWalker.h:142
const Results & results() const
Definition: sensorFanWalker.h:135
std::vector< int > myAlongSpoke
Definition: sensorFanWalker.h:248
bool myStopOnFirstClearView
Definition: sensorFanWalker.h:265
double myElevationRate
Definition: sensorFanWalker.h:270
double myElevationEnd
Definition: sensorFanWalker.h:272
DtVector endPoint
Definition: sensorFanWalker.h:42
double elevationEnd() const
Definition: sensorFanWalker.h:162
double altitudeChecked
In geocentric.
Definition: sensorFanWalker.h:44
DT_DLL_DEBUGDRAWRENDERER void init(makVrv::DtDe &de)
Work function for the plugin initialization.
double myCurrentElevation
Definition: sensorFanWalker.h:273
double azimuthStart() const
Definition: sensorFanWalker.h:80
Definition: sensorFanWalker.h:29
#define DT_DLL_vrfutil
This file is used to determine how to build Disable inconsistent dll linkage warning Visual Studio 6...
Definition: vrfutilDefines.h:34
bool recordIntersectionPointAsEndPoint() const
Definition: sensorFanWalker.h:204
double elevationRate() const
Definition: sensorFanWalker.h:152
double myCircleRadianSamplingRate
Definition: sensorFanWalker.h:239
DT_DLL_vrfutil bool intersects(const DtVector &localPoint1, const DtVector &localPoint2, const DtLocalVertexList &localVertexList, const Coordinate_System &coordinateSystem)
Returns true if the line segment localPoint1-localPoint2 intersects any line segment in localVert...
double azimuthEnd() const
Definition: sensorFanWalker.h:85
DtSensorFanWalker *(* DtSensorFanWalkerCreatorFcn)()
Definition: sensorFanWalker.h:27
bool mySetRecordIntersectionPointAsEndPoint
Definition: sensorFanWalker.h:264
double elevationStart() const
Definition: sensorFanWalker.h:157
double myAzimuthEnd
Definition: sensorFanWalker.h:269
DtVector startPoint
Definition: sensorFanWalker.h:41
void setElevationRanges(double s, double e)
Sets ranges without re-initializing.
Definition: sensorFanWalker.h:168
int onSpoke() const
Definition: sensorFanWalker.h:147
bool myAltitudeMSL
Definition: sensorFanWalker.h:258
Definition: sensorFanWalker.h:32
double myIntersectionTime
Definition: sensorFanWalker.h:254
bool myPagedLastTime
Definition: sensorFanWalker.h:256
double breakAfterTime() const
Definition: sensorFanWalker.h:63

Document ID: Generated on Sun Dec 4 20:22:03 EST 2022 from SVN revision 249613
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)