VR-Forces 4.7 Class Documentation
 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);
204  bool recordIntersectionPointAsEndPoint() const
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);
231  bool calculationsHaveBegun() const
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 
255  DtTimedSection myPagingTimeTimer;
259 
263 
269  double myAzimuthEnd;
274 };
275 

Document ID: Generated on Fri Apr 26 21:53:14 EDT 2019 from SVN revision 197883
Copyright © 2005-2019 VT MAK. All Rights Reserved (www.mak.com)