VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties 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 
8 #if !defined(Q_MOC_RUN)
10 
11 
13 #include <vrvCore/DtUniqueID.h>
14 #include <vrvCore/DtStateView.h>
15 #include <vrvCore/DtEntityState.h>
18 
21 #endif
22 
23 #include <vlpi/entityType.h>
24 
25 #include <QtGui/QPixmap>
26 #include <QtWidgets/QWidget>
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 class DtSimMessage;
38 class QwtSymbol;
39 
40 namespace makVrf
41 {
42  class DtTerrainProfileDataProvider;
43  class DtTerrainProfileSettingsRecord;
44  class DtSymbolTracker;
45  class DtTerrainProfileSymbol;
46 
60  {
61  Q_OBJECT
62 
63  public:
65  {
66  FullReplot = 0x00000001,
67  ReplotPoints = 0x00000002,
68  UpdateGraphOnly = 0x00000004
69  };
70 
72  {
75  DisplayVerticesOnly
76  };
77 
79  DtTerrainProfileWidget(makVrv::DtDe& de, QWidget* parent = NULL, const Qt::WindowFlags& flags = 0);
80 
82  virtual ~DtTerrainProfileWidget();
83 
87  virtual void init();
88 
91  virtual void setDataProvider(DtTerrainProfileDataProvider*);
92 
94  virtual void replot();
95 
97  virtual void setSamplingRate(double);
98  double samplingRate() const;
99 
101  virtual void setMaximumSamplingPoints(int);
102  int maximumSamplingPoints() const;
103 
104  virtual void setUseBackendForProfile(bool);
105  bool useBackendForProfile() const
106  {
107  return myUseBackendForProfile;
108  }
109 
110  bool replotting() const
111  {
112  return myReplotting;
113  }
114 
116  virtual void clearGraph();
117 
119  virtual bool backendCanBeUsedForProfileData() const;
120 
122  virtual bool allDataFromFrontEnd() const;
123 
125  virtual bool allDataFromBackEnd() const;
126 
128  virtual void labelDataForTerrainProfilePosition(const QPointF& pos, const DtVector& geoc, double distanceOnLine, double height, int soilType = 0);
129 
132  virtual void setReplotTime(int);
133  int replotTime() const;
134 
137  virtual void setScaleFactor(double);
138  double scaleFactor() const;
139 
141  virtual void suspend();
142 
144  virtual void resume();
145 
147  virtual bool isSuspended() const;
148 
150  virtual void setShowVertices(bool);
151  bool showVertices() const;
152 
154  virtual void setShowVertexNumbers(bool);
155  bool showVertexNumbers() const;
156 
158  virtual void setSuspendForMovement(bool);
159  virtual bool suspendForMovement() const;
160 
162  virtual void setDistanceMoveTolerance(double);
163  virtual double distanceMoveTolerance() const;
164 
166  virtual QString dataStatus() const;
167 
169  virtual void requestPlotPointsIfNeeded(bool force = false);
170 
171  virtual void setLineStyle(LineSampleStyle sampleDisplay, Qt::PenStyle style, unsigned size);
172 
175  virtual void setDisplayOnBehalfOf(const std::set<makVrv::DtUniqueID>&);
176  const std::set<makVrv::DtUniqueID>& displayOnBehalfOf() const
177  {
178  return myDisplayOnBehalfOf;
179  }
180 
182  boost::signals2::signal<void ()> signal_ready;
183 
185  boost::signals2::signal<void ()> signal_dataStatusChanged;
186 
188  boost::signals2::signal<void (int)> signal_replotted;
189 
190  protected:
192  virtual void createProfileGraph();
193 
195  virtual void initConnections();
196 
198  virtual bool updateProfileData();
199 
201  virtual void slot_dataUpdated();
202 
204  virtual void slot_dataRemoved();
205 
208  virtual void calculateReplotRanges(std::vector<QPoint>&) const;
209 
212  virtual double calculateLineLength(const std::vector<DtVector>&) const;
213 
215  virtual double calculateSegment(const QPoint& segment, double lineLength);
216 
218  virtual double segmentLength(const QPoint&) const;
219  virtual double segmentLength(int start, int end) const;
220 
222  virtual double terrainHeight(const DtVector&, int position = -1) const;
223 
225  virtual double lineHeight(int pos) const;
226 
228  virtual void setupLabels();
229 
231  virtual void slot_onUnitChanged(const makVrv::DtUnicode& category, const makVrv::DtUnicode& type, int to, int from);
232 
235  virtual double altitudeValueFor(double) const;
236  virtual double distanceValueFor(double) const;
237 
240  virtual double altitudeFromDisplayValue(double) const;
241  virtual double distanceFromDisplayValue(double) const;
242 
244  virtual void convertAltitudeAndDistance(int newAltitudeUnits, int newDistanceUnits, bool replot = true);
245 
247  virtual void convertAltitudeAndDistance(QVector<QPointF>&, int newAltitudeUnits, int newDistanceUnits) const;
248  virtual void convertAltitudeAndDistance(QwtPlotMarker*, int newAltitudeUnits, int newDistanceUnits) const;
249 
251  virtual void deferredReplot(int flag = FullReplot);
252 
254  virtual QwtPlotMarker* addMarker(double x, double y);
255 
257  virtual void setupPointMarkerLabel();
258 
260  virtual void onTerrainProfileSettingsChanged(const DtTerrainProfileSettingsRecord&);
261 
265  virtual void createSymbolTracker();
266 
268  virtual void trackEntity(const DtVector& geocentricPosition, const makVrv::DtStateView<makVrv::DtVrlinkSimulatedEntityState>*);
269 
271  virtual void stopTrackingEntity(makVrv::DtElementID);
272 
274  virtual void clearTrackingSymbols(bool suspended = false);
275 
278 
281  virtual int linePositionFromLocation(const DtVector& geocentricLocation, QPointF& result, bool trackedItem = false) const;
282 
284  virtual int locationFromPlotPosition(const QPointF& result, DtVector& geocentricLocation) const;
285 
289  virtual int closestPoint(const DtVector& v, double& range, double& totalRange, bool trackedItem = false) const;
290 
293  virtual void timedReplot();
294  virtual void replotIfTime();
295 
297  virtual void updateLineVertices(bool replot = true);
298 
299  virtual void resetAltitudeScale(bool replot = true);
300 
302  virtual double elevationAngle(const DtVector& geocentricFrom, const DtVector& geocentricTo) const;
303 
304  virtual void slot_defaultIconListChanged();
305 
306  virtual void slot_dataFrozenStateChanged(bool);
307 
308  virtual void processIntersectionResponse(DtSimMessage* msg);
309  virtual void processPointMarkerResponse(DtSimMessage* msg);
310 
311  virtual void cancelTerrainInformationRequest();
312 
313  virtual void requestPointMarkerInformation(const DtVector&);
314 
315  protected slots:
318  virtual void plotMouseReleased(const QPointF&);
319 
320  protected:
324 
326  std::vector<DtVector> myLinePoints;
327 
330  std::vector<DtVector> myPlotPoints;
331 
334 
337 
339  std::vector<int> mySegmentPoints;
340 
342  QVector<QPointF> myTerrainProfilePoints;
343 
345  std::vector<DtVector> myTerrainDatabasePoints;
346 
348  QVector<QPointF> myTerrainLineSamplePoints;
349 
350  QVector<QPointF> myTerrainLineDisplayPoints;
351 
352  DtReferenceEllipsoid* myReferenceForConversion;
353 
357 
365 
367  bool myReady;
368 
372  QwtPlotMarker* myPointMarker;
373 
375  typedef std::map<makVrv::DtElementID, QwtPlotMarker*> TrackedEntities;
377 
380 
383 
385  double myBuffer;
386 
391  QImage* myVertexImage;
392  std::vector<QwtPlotMarker*> myVertices;
395 
396  typedef std::map<makVrv::DtUniqueID, DtVector> WaitingForPlot;
402 
404 
406 
408  std::map<int, DtVector> myReceivedTerrainProfileInformationFor;
409 
411  unsigned myLinePenSize;
413 
414  std::set<makVrv::DtUniqueID> myDisplayOnBehalfOf;
415 
416  public:
418  QVBoxLayout* myMainLayout;
419  QwtPlotCurve* myTerrainLine;
420  QwtPlotCurve* myTerrainProfile;
425  };
426 
430  {
431  public:
434 
435  static DtTerrainProfileWidgetCreator& instance(makVrv::DtDe&);
436  static void registerInstance(makVrv::DtDe&, DtTerrainProfileWidgetCreator*);
437 
438  virtual DtTerrainProfileWidget* create(QWidget* parent);
439 
440  protected:
442  };
443 }
std::vector< DtVector > myPlotPoints
The points that were last used to plot the graph. These will be used with the current line points to ...
Definition: terrainProfileWidget.h:330
QPointF myPointMarkerPosition
Definition: terrainProfileWidget.h:363
DtTerrainProfileDataProvider * myDataProvider
Definition: terrainProfileWidget.h:322
Contains makVrf::DtSymbolTracker class.
Definition: symbolTracker.h:39
double myPointMarkerCurrentHeight
Definition: terrainProfileWidget.h:362
Virtual base class. Allows for RTTI and proper virtual destruction. Used by Creators, Factories, Providers, Assemblers and User Interfaces.
Definition: DtVirtualBaseClass.h:19
A unicode string. DtUnicode stores a UTF-16 encoded unicode string. Code Point, a Unicode character...
Definition: DtUnicode.h:33
WaitingForPlot myWaitingForPlot
Definition: terrainProfileWidget.h:397
DtSymbolTracker * mySymbolTracker
Class that will be used to track symbols within a particular distance to the given line...
Definition: terrainProfileWidget.h:371
bool myFirstPlot
Definition: terrainProfileWidget.h:393
static QColor theTerrainProfileLineColor
Definition: terrainProfileWidget.h:424
boost::signals2::signal< void()> signal_dataStatusChanged
Signal sent when the status of the data has changed.
Definition: terrainProfileWidget.h:185
boost::signals2::signal< void(int)> signal_replotted
Signal when the graph has been replotted.
Definition: terrainProfileWidget.h:188
bool replotting() const
Definition: terrainProfileWidget.h:110
makVrv::DtDe & myDe
Definition: terrainProfileWidget.h:321
bool useBackendForProfile() const
Definition: terrainProfileWidget.h:105
QwtPlotCurve * myTerrainProfile
Definition: terrainProfileWidget.h:420
const std::set< makVrv::DtUniqueID > & displayOnBehalfOf() const
Definition: terrainProfileWidget.h:176
makVrv::DtSignalConnectionManager myDataProviderConnections
Definition: terrainProfileWidget.h:405
makVrv::DtSignalConnectionManager myConnections
Definition: terrainProfileWidget.h:323
voidpf void uLong size
Definition: ioapi.h:39
bool myResuming
Definition: terrainProfileWidget.h:394
Contains makVrv::DtStateView class.
QwtPlotPicker * myPlotPicker
Definition: terrainProfileWidget.h:421
QVBoxLayout * myMainLayout
Definition: terrainProfileWidget.h:418
double myBuffer
Definition: terrainProfileWidget.h:385
Contains the DtUnitConverterCollection class declaration.
std::vector< DtVector > myLinePoints
Points are in geocentric.
Definition: terrainProfileWidget.h:326
std::set< makVrv::DtUniqueID > myDisplayOnBehalfOf
Definition: terrainProfileWidget.h:414
QLabel * mySelectedPointLabel
Definition: terrainProfileWidget.h:422
QLabel * mySelectedPoint
Definition: terrainProfileWidget.h:423
double myScaleFactor
Definition: terrainProfileWidget.h:384
double mySamplingRate
Test the length of the line every N meters along the line.
Definition: terrainProfileWidget.h:333
DtUniqueID DtElementID
The ElementID is a specific type of unique ID used to represent VR-Vantage uniquely defined elements...
Definition: DtUniqueID.h:23
Creator used to create a terrain profile widget. Use registerInstance to replace with your new creato...
Definition: terrainProfileWidget.h:429
Contains the DtDisplayUnitsSettingsManager class declaration.
DistanceUnits
Enumeration of the different distance units.
Definition: DtDisplayUnitsSettingsRecord.h:57
makVrv::DtDisplayUnitsConverter::DistanceUnits myDistanceUnits
Definition: terrainProfileWidget.h:356
QwtPlotCurve * myTerrainLine
Definition: terrainProfileWidget.h:419
DtVector myPointMarkerLocation
Geocentric location of point marker. Used for labels.
Definition: terrainProfileWidget.h:359
TrackedEntities myTrackedEntities
Definition: terrainProfileWidget.h:376
This class will display a terrain profile graph, which is the graph of a distance over a line and the...
Definition: terrainProfileWidget.h:59
Contains makVrv::DtVirtualBaseClass class.
std::vector< DtVector > myTerrainDatabasePoints
The points used for terrain intersection.
Definition: terrainProfileWidget.h:345
double myPointMarkerDistanceAlongLine
Definition: terrainProfileWidget.h:361
DtReferenceEllipsoid * myReferenceForConversion
Definition: terrainProfileWidget.h:352
bool myReplotting
Definition: terrainProfileWidget.h:388
int myTerrainInformationRequestId
Definition: terrainProfileWidget.h:407
PenStyle
Definition: DtTacticalGraphicUtilities.h:71
File: simMsg.h.
Definition: simMessage.h:35
int myMaximumSamplingPoints
Maximum number of points to check.
Definition: terrainProfileWidget.h:336
QVector< QPointF > myTerrainLineDisplayPoints
Definition: terrainProfileWidget.h:350
std::map< makVrv::DtUniqueID, DtVector > WaitingForPlot
Definition: terrainProfileWidget.h:396
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:20
bool myTrackHistory
Definition: terrainProfileWidget.h:401
std::vector< QwtPlotMarker * > myVertices
Definition: terrainProfileWidget.h:392
Contains makVrv::DtVrlinkSimulatedEntityState class.
bool mySuspended
Definition: terrainProfileWidget.h:387
makVrv::DtDe & myDe
Definition: terrainProfileWidget.h:441
QwtPlotMarker * myPointMarker
Definition: terrainProfileWidget.h:372
#define DT_DLL_VRFGUICOMMONQT
Definition: vrfGuiCommonQt.h:20
LineSampleStyle
Definition: terrainProfileWidget.h:71
QTime * myReplotTimer
Definition: terrainProfileWidget.h:378
QVector< QPointF > myTerrainLineSamplePoints
The points used for the line that is being used to sample the terrain segment.
Definition: terrainProfileWidget.h:348
int myPointMarkerSoilType
Definition: terrainProfileWidget.h:360
LineSampleStyle myLineSampleDisplay
Definition: terrainProfileWidget.h:412
bool myShowVertices
Definition: terrainProfileWidget.h:389
Base class to provide boost signal/slot management.
int myPointMarkerRequestId
Definition: terrainProfileWidget.h:364
QwtPlot * myTerrainProfileGraph
Definition: terrainProfileWidget.h:417
DT_DLL_DEBUGDRAWRENDERER void init(makVrv::DtDe &de)
Work function for the plugin initialization.
QImage * myVertexImage
Definition: terrainProfileWidget.h:391
Qt::PenStyle myLinePenStyle
Definition: terrainProfileWidget.h:410
double myDistanceMoveTolerance
Definition: terrainProfileWidget.h:399
boost::signals2::signal< void()> signal_ready
Signal only once when graph is ready to show (at least two points)
Definition: terrainProfileWidget.h:182
Contains makVrv::DtUniqueID type.
unsigned myLinePenSize
Definition: terrainProfileWidget.h:411
bool myReady
Set to true when the graph is ready to display.
Definition: terrainProfileWidget.h:367
std::map< makVrv::DtElementID, QwtPlotMarker * > TrackedEntities
Map of plot markers for entities being tracked.
Definition: terrainProfileWidget.h:375
The DtDe is the core component of any VR-Vantage application. It owns a DtRenderer, DtDeCommunicator, as well as a DtDisplay and other things.
Definition: DtDe.h:72
int myReplotFlag
Definition: terrainProfileWidget.h:400
Contains makVrf::DtTerrainProfileSettingsRecord class. This class holds options for terrain profiles...
Definition: terrainProfileSettingsRecord.h:26
std::map< int, DtVector > myReceivedTerrainProfileInformationFor
Definition: terrainProfileWidget.h:408
double myMaximumHeight
Definition: terrainProfileWidget.h:382
Contains the makVrf::DtTerrainProfileDataProvider class. This class is a common base class for all ob...
Definition: terrainProfileDataProvider.h:41
bool myShowVertexNumbers
Definition: terrainProfileWidget.h:390
makVrv::DtDisplayUnitsConverter::DistanceUnits myAltitudeUnits
Current units for distance and altitude. Used to check to see if units need to be changed...
Definition: terrainProfileWidget.h:355
ReplotFlag
Definition: terrainProfileWidget.h:64
QVector< QPointF > myTerrainProfilePoints
The points used to plot the terrain profile.
Definition: terrainProfileWidget.h:342
bool mySuspendForMovement
Definition: terrainProfileWidget.h:398
std::vector< int > mySegmentPoints
For each segment, the number of plot points on the terrain represented by that segment.
Definition: terrainProfileWidget.h:339
int myReplotTime
Definition: terrainProfileWidget.h:379
double myMinimumHeight
Definition: terrainProfileWidget.h:381
bool myUseBackendForProfile
Definition: terrainProfileWidget.h:403

Document ID: Generated on Wed Mar 27 22:49:11 EDT 2024 from SVN revision 264633
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)