VR-Forces 4.2 Class Documentation
DtTerrainProfileWidget.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>
11 #include <vrvUtil/DtVirtualBaseClass.h>
12 #include <vrvCore/DtUniqueID.h>
13 #include <vrvCore/DtStateView.h>
14 #include <vrvCore/DtEntityState.h>
15 #include <vrvCore/DtDisplayUnitsSettingsManager.h>
16 #include <vrvUtil/DtSignalConnectionManager.h>
17 
18 #include <vlpi/entityType.h>
19 
20 #include <qwt_symbol.h>
21 
22 #include <QPixmap>
23 #include <QWidget>
24 
26 #include <vrvUtil/DtUnitConverterCollection.h>
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  DtTerrainProfileWidget(makVrv::DtDe& de, QWidget* parent = NULL, const Qt::WindowFlags& flags = 0);
64 
66  virtual ~DtTerrainProfileWidget();
67 
71  virtual void init();
72 
75  virtual void setDataProvider(DtTerrainProfileDataProvider*);
76 
78  virtual void replot();
79 
81  virtual void setSamplingRate(double);
82  double samplingRate() const;
83 
85  virtual void setMaximumSamplingPoints(int);
86  int maximumSamplingPoints() const;
87 
89  virtual void clearGraph();
90 
93  virtual void setReplotTime(int);
94  int replotTime() const;
95 
98  virtual void setScaleFactor(double);
99  double scaleFactor() const;
100 
102  virtual void suspend();
103 
105  virtual void resume();
106 
108  virtual bool isSuspended() const;
109 
111  virtual void setShowVertices(bool);
112  bool showVertices() const;
113 
115  boost::signal<void ()> signal_ready;
116 
117  protected:
119  virtual void createProfileGraph();
120 
122  virtual void initConnections();
123 
125  virtual bool updateProfileData();
126 
128  virtual void slot_dataUpdated();
129 
131  virtual void slot_dataRemoved();
132 
135  virtual void calculateReplotRanges(std::vector<QPoint>&) const;
136 
139  virtual double calculateLineLength(const std::vector<DtVector>&) const;
140 
142  virtual double calculateSegment(const QPoint& segment, double lineLength);
143 
145  virtual double segmentLength(const QPoint&) const;
146  virtual double segmentLength(int start, int end) const;
147 
149  virtual double terrainHeight(int point) const;
150 
152  virtual double terrainHeight(const DtVector&) const;
153 
155  virtual double lineHeight(int pos) const;
156 
158  virtual void setupLabels();
159 
161  void slot_onUnitChanged(int attribute, int from);
162 
165  virtual double altitudeValueFor(double) const;
166  virtual double distanceValueFor(double) const;
167 
169  virtual void convertAltitudeAndDistance(int newAltitudeUnits, int newDistanceUnits, bool replot = true);
170 
172  virtual void convertAltitudeAndDistance(QVector<QPointF>&, int newAltitudeUnits, int newDistanceUnits) const;
173  virtual void convertAltitudeAndDistance(QwtPlotMarker*, int newAltitudeUnits, int newDistanceUnits) const;
174 
176  virtual void deferredReplot(bool full = true);
177 
179  virtual QwtPlotMarker* addMarker(double x, double y);
180 
182  virtual void setupPointMarkerLabel();
183 
185  virtual void onTerrainProfileSettingsChanged(const DtTerrainProfileSettingsRecord&);
186 
190  virtual void createSymbolTracker();
191 
193  virtual void trackEntity(const DtVector& geocentricPosition, const makVrv::DtStateView<makVrv::DtVrlinkSimulatedEntityState>*);
194 
196  virtual void stopTrackingEntity(makVrv::DtElementID);
197 
199  virtual void clearTrackingSymbols(bool suspended = false);
200 
202  virtual QwtSymbol* symbolFor(const makVrv::DtStateView<makVrv::DtVrlinkSimulatedEntityState>*) const;
203 
206  virtual int linePositionFromLocation(const DtVector& geocentricLocation, QPointF& result) const;
207 
211  virtual int closestPoint(const DtVector& v, double& range, double& totalRange) const;
212 
215  virtual void timedReplot();
216  virtual void replotIfTime();
217 
219  virtual void updateLineVertices(bool replot = true);
220 
221  virtual void resetAltitudeScale(bool replot = true);
222 
224  virtual double elevationAngle(const DtVector& geocentricFrom, const DtVector& geocentricTo) const;
225 
226  protected slots:
229  virtual void plotMouseReleased(const QPointF&);
230 
231  protected:
232  makVrv::DtDe& myDe;
234  makVrv::DtSignalConnectionManager myConnections;
235 
237  std::vector<DtVector> myLinePoints;
238 
241  std::vector<DtVector> myPlotPoints;
242 
245 
248 
250  std::vector<int> mySegmentPoints;
251 
253  QVector<QPointF> myTerrainProfilePoints;
254 
256  QVector<QPointF> myTerrainLinePoints;
257  DtReferenceEllipsoid* myReferenceForConversion;
258 
260  makVrv::DtDisplayUnitsConverter::DistanceUnits myAltitudeUnits;
261  makVrv::DtDisplayUnitsConverter::DistanceUnits myDistanceUnits;
262 
265 
267  bool myReady;
268 
272  QwtPlotMarker* myPointMarker;
273 
275  typedef std::map<makVrv::DtElementID, QwtPlotMarker*> TrackedEntities;
277 
280 
283 
285  double myBuffer;
286 
290  QImage* myVertexImage;
291  std::vector<QwtPlotMarker*> myVertices;
292 
293  public:
295  QVBoxLayout* myMainLayout;
296  QwtPlotCurve* myTerrainLine;
297  QwtPlotCurve* myTerrainProfile;
298  QwtPlotPicker* myPlotPicker;
302  };
303 
306  class DT_DLL_VRFGUICOREQT DtTerrainProfileWidgetCreator : public makVrv::DtVirtualBaseClass
307  {
308  public:
309  DtTerrainProfileWidgetCreator(makVrv::DtDe&);
311 
312  static DtTerrainProfileWidgetCreator& instance(makVrv::DtDe&);
313  static void registerInstance(makVrv::DtDe&, DtTerrainProfileWidgetCreator*);
314 
315  virtual DtTerrainProfileWidget* create(QWidget* parent);
316 
317  protected:
318  makVrv::DtDe& myDe;
319  };
320 
322  class DtQwtSymbol : public QwtSymbol
323  {
324  public:
326  DtQwtSymbol(const QPixmap& pixmap) : QwtSymbol(), myPixmap(pixmap)
327  { setSize(pixmap.size()); setStyle(QwtSymbol::UserStyle); };
328 
329  void setDestroyed(bool b) { myDestroyed = b; };
330  bool destroyed() const { return myDestroyed; };
331 
332  void setEntityType(const DtEntityType& t) { myEntityType = t; };
333  const DtEntityType& entityType() const { return myEntityType; };
334 
335  void setLocation(const DtVector& l) { myLocation = l; };
336  const DtVector& location() const { return myLocation; };
337 
339  virtual void drawSymbols( QPainter *painter, const QPointF *points, int numPoints ) const;
340 
341  void operator=(const DtQwtSymbol& rhs) { QwtSymbol::operator=(rhs); myPixmap = rhs.myPixmap; };
342 
343  protected:
344  QPixmap myPixmap;
345  DtEntityType myEntityType;
348  };
349 }

Document ID: Generated on Sun Nov 24 19:49:21 EST 2013 from SVN revision 133924
Copyright © 2005-2013 VT MÄK. All Rights Reserved (www.mak.com)