VR-Forces 4.5 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
terrainProfileWidget.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2012 MaK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
6 #pragma once
7 
9 
10 #include <vrvUtil/signalslib.h>
12 #include <vrvCore/DtUniqueID.h>
13 #include <vrvCore/DtStateView.h>
14 #include <vrvCore/DtEntityState.h>
17 
18 #include <vlpi/entityType.h>
19 
20 #include <qwt_symbol.h>
21 
22 #include <QPixmap>
23 #include <QWidget>
24 
27 
28 class QwtPlotPicker;
29 class QwtPlot;
30 class QVBoxLayout;
31 class QwtPlotCurve;
32 class DtReferenceEllipsoid;
33 class QLabel;
34 class QwtPlotMarker;
35 class QTime;
36 class QImage;
37 
38 namespace makVrf
39 {
40  class DtTerrainProfileDataProvider;
41  class DtTerrainProfileSettingsRecord;
42  class DtSymbolTracker;
43  class DtQwtSymbol;
44 
58  {
59  Q_OBJECT
60 
61  public:
63  {
64  FullReplot = 0x00000001,
65  ReplotPoints = 0x00000002,
66  UpdateGraphOnly = 0x00000004
67  };
68 
70  DtTerrainProfileWidget(makVrv::DtDe& de, QWidget* parent = NULL, const Qt::WindowFlags& flags = 0);
71 
73  virtual ~DtTerrainProfileWidget();
74 
78  virtual void init();
79 
82  virtual void setDataProvider(DtTerrainProfileDataProvider*);
83 
85  virtual void replot();
86 
88  virtual void setSamplingRate(double);
89  double samplingRate() const;
90 
92  virtual void setMaximumSamplingPoints(int);
93  int maximumSamplingPoints() const;
94 
96  virtual void clearGraph();
97 
100  virtual void setReplotTime(int);
101  int replotTime() const;
102 
105  virtual void setScaleFactor(double);
106  double scaleFactor() const;
107 
109  virtual void suspend();
110 
112  virtual void resume();
113 
115  virtual bool isSuspended() const;
116 
118  virtual void setShowVertices(bool);
119  bool showVertices() const;
120 
122  virtual void setSuspendForMovement(bool);
123  virtual bool suspendForMovement() const;
124 
126  virtual void setDistanceMoveTolerance(double);
127  virtual double distanceMoveTolerance() const;
128 
130  boost::signal<void ()> signal_ready;
131 
132  protected:
134  virtual void createProfileGraph();
135 
137  virtual void initConnections();
138 
140  virtual bool updateProfileData();
141 
143  virtual void slot_dataUpdated();
144 
146  virtual void slot_dataRemoved();
147 
150  virtual void calculateReplotRanges(std::vector<QPoint>&) const;
151 
154  virtual double calculateLineLength(const std::vector<DtVector>&) const;
155 
157  virtual double calculateSegment(const QPoint& segment, double lineLength);
158 
160  virtual double segmentLength(const QPoint&) const;
161  virtual double segmentLength(int start, int end) const;
162 
164  virtual double terrainHeight(int point) const;
165 
167  virtual double terrainHeight(const DtVector&) const;
168 
170  virtual double lineHeight(int pos) const;
171 
173  virtual void setupLabels();
174 
176  void slot_onUnitChanged(int attribute, int from);
177 
180  virtual double altitudeValueFor(double) const;
181  virtual double distanceValueFor(double) const;
182 
184  virtual void convertAltitudeAndDistance(int newAltitudeUnits, int newDistanceUnits, bool replot = true);
185 
187  virtual void convertAltitudeAndDistance(QVector<QPointF>&, int newAltitudeUnits, int newDistanceUnits) const;
188  virtual void convertAltitudeAndDistance(QwtPlotMarker*, int newAltitudeUnits, int newDistanceUnits) const;
189 
191  virtual void deferredReplot(int flag = FullReplot);
192 
194  virtual QwtPlotMarker* addMarker(double x, double y);
195 
197  virtual void setupPointMarkerLabel();
198 
200  virtual void onTerrainProfileSettingsChanged(const DtTerrainProfileSettingsRecord&);
201 
205  virtual void createSymbolTracker();
206 
208  virtual void trackEntity(const DtVector& geocentricPosition, const makVrv::DtStateView<makVrv::DtVrlinkSimulatedEntityState>*);
209 
211  virtual void stopTrackingEntity(makVrv::DtElementID);
212 
214  virtual void clearTrackingSymbols(bool suspended = false);
215 
218 
221  virtual int linePositionFromLocation(const DtVector& geocentricLocation, QPointF& result, bool trackedItem = false) const;
222 
226  virtual int closestPoint(const DtVector& v, double& range, double& totalRange, bool trackedItem = false) const;
227 
230  virtual void timedReplot();
231  virtual void replotIfTime();
232 
234  virtual void updateLineVertices(bool replot = true);
235 
236  virtual void resetAltitudeScale(bool replot = true);
237 
239  virtual double elevationAngle(const DtVector& geocentricFrom, const DtVector& geocentricTo) const;
240 
241  protected slots:
244  virtual void plotMouseReleased(const QPointF&);
245 
246  protected:
250 
252  std::vector<DtVector> myLinePoints;
253 
256  std::vector<DtVector> myPlotPoints;
257 
260 
263 
265  std::vector<int> mySegmentPoints;
266 
268  QVector<QPointF> myTerrainProfilePoints;
269 
271  QVector<QPointF> myTerrainLinePoints;
272  DtReferenceEllipsoid* myReferenceForConversion;
273 
277 
280 
282  bool myReady;
283 
287  QwtPlotMarker* myPointMarker;
288 
290  typedef std::map<makVrv::DtElementID, QwtPlotMarker*> TrackedEntities;
292 
295 
298 
300  double myBuffer;
301 
305  QImage* myVertexImage;
306  std::vector<QwtPlotMarker*> myVertices;
309 
310  typedef std::map<makVrv::DtUniqueID, DtVector> WaitingForPlot;
316 
317  public:
319  QVBoxLayout* myMainLayout;
320  QwtPlotCurve* myTerrainLine;
321  QwtPlotCurve* myTerrainProfile;
322  QwtPlotPicker* myPlotPicker;
325  };
326 
330  {
331  public:
334 
335  static DtTerrainProfileWidgetCreator& instance(makVrv::DtDe&);
336  static void registerInstance(makVrv::DtDe&, DtTerrainProfileWidgetCreator*);
337 
338  virtual DtTerrainProfileWidget* create(QWidget* parent);
339 
340  protected:
342  };
343 
345  class DtQwtSymbol : public QwtSymbol
346  {
347  public:
349  DtQwtSymbol(const QPixmap& pixmap) : QwtSymbol(), myDestroyed(false)
350  { setPixmap(pixmap); setSize(pixmap.size()); };
351 
352  void setDestroyed(bool b) { myDestroyed = b; };
353  bool destroyed() const { return myDestroyed; };
354 
355  void setEntityType(const DtEntityType& t) { myEntityType = t; };
356  const DtEntityType& entityType() const { return myEntityType; };
357 
358  void setLocation(const DtVector& l) { myLocation = l; };
359  const DtVector& location() const { return myLocation; };
360 
361  protected:
362  DtEntityType myEntityType;
365  };
366 }

Document ID: Generated on Thu Mar 23 18:54:12 EDT 2017 from SVN revision 174804
Copyright © 2005-2017 VT MÄK. All Rights Reserved (www.mak.com)