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) 2024 MaK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
6 #pragma once
7 
8 #if !defined(Q_MOC_RUN)
11 
13 #include <vrvCore/DtUniqueID.h>
14 
17 
20 #endif
21 
22 #include <vlpi/entityType.h>
23 
24 #include <QtGui/QPixmap>
25 #include <QtWidgets/QWidget>
26 
27 class QwtPlotPicker;
28 class QwtPlot;
29 class QVBoxLayout;
30 class QwtPlotCurve;
31 class DtReferenceEllipsoid;
32 class QLabel;
33 class QwtPlotMarker;
34 class QTime;
35 class QImage;
36 class DtSimMessage;
37 class QwtSymbol;
38 
39 namespace makVrf
40 {
41  class DtTerrainProfileDataProvider;
42  class DtTerrainProfileSettingsRecord;
43  class DtSymbolTracker;
44  class DtTerrainProfileSymbol;
45 
59  {
60  Q_OBJECT
61 
62  public:
64  {
65  FullReplot = 0x00000001,
66  ReplotPoints = 0x00000002,
67  UpdateGraphOnly = 0x00000004
68  };
69 
71  {
74  DisplayVerticesOnly
75  };
76 
78  DtTerrainProfileWidget(makVrv::DtDe& de, QWidget* parent = NULL, const Qt::WindowFlags& flags = 0);
79 
81  virtual ~DtTerrainProfileWidget() override;
82 
86  virtual void init();
87 
90  virtual void setDataProvider(DtTerrainProfileDataProvider*);
91 
93  virtual void replot();
94 
96  virtual void setSamplingRate(double);
97  double samplingRate() const;
98 
100  virtual void setMaximumSamplingPoints(int);
101  int maximumSamplingPoints() const;
102 
103  virtual void setUseBackendForProfile(bool);
104  bool useBackendForProfile() const
105  {
106  return myUseBackendForProfile;
107  }
108 
109  bool replotting() const
110  {
111  return myReplotting;
112  }
113 
115  virtual void clearGraph();
116 
118  virtual bool backendCanBeUsedForProfileData() const;
119 
121  virtual bool allDataFromFrontEnd() const;
122 
124  virtual bool allDataFromBackEnd() const;
125 
127  virtual void labelDataForTerrainProfilePosition(const QPointF& pos, const DtVector& geoc, double distanceOnLine, double height, int soilType = 0);
128 
129  bool hasVertices() const
130  {
131  return (myVertices.size() != 0);
132  }
133 
136  virtual void setReplotTime(int);
137  int replotTime() const;
138 
141  virtual void setScaleFactor(double);
142  double scaleFactor() const;
143 
145  virtual void suspend();
146 
148  virtual void resume();
149 
151  virtual bool isSuspended() const;
152 
154  virtual void setShowVertices(bool);
155  bool showVertices() const;
156 
158  virtual void setShowVertexNumbers(bool);
159  bool showVertexNumbers() const;
160 
162  virtual void setSuspendForMovement(bool);
163  virtual bool suspendForMovement() const;
164 
166  virtual void setDistanceMoveTolerance(double);
167  virtual double distanceMoveTolerance() const;
168 
170  virtual QString dataStatus() const;
171 
173  virtual void requestPlotPointsIfNeeded(bool force = false);
174 
175  virtual void setLineStyle(LineSampleStyle sampleDisplay, Qt::PenStyle style, unsigned size);
176 
179  virtual void setDisplayOnBehalfOf(const std::set<makVrv::DtUniqueID>&);
180  const std::set<makVrv::DtUniqueID>& displayOnBehalfOf() const
181  {
182  return myDisplayOnBehalfOf;
183  }
184 
186  boost::signals2::signal<void ()> signal_ready;
187 
189  boost::signals2::signal<void ()> signal_dataStatusChanged;
190 
192  boost::signals2::signal<void (int)> signal_replotted;
193 
194  protected:
196  virtual void createProfileGraph();
197 
199  virtual void initConnections();
200 
202  virtual bool updateProfileData();
203 
205  virtual void slot_dataUpdated();
206 
208  virtual void slot_dataRemoved();
209 
212  virtual void calculateReplotRanges(std::vector<QPoint>&) const;
213 
216  virtual double calculateLineLength(const std::vector<DtVector>&) const;
217 
219  virtual double calculateSegment(const QPoint& segment, double lineLength);
220 
222  virtual double segmentLength(const QPoint&) const;
223  virtual double segmentLength(int start, int end) const;
224 
226  virtual double terrainHeight(const DtVector&, int position = -1) const;
227 
229  virtual double lineHeight(int pos) const;
230 
232  virtual void setupLabels();
233 
235  virtual void slot_onUnitChanged(const makVrv::DtUnicode& category, const makVrv::DtUnicode& type, int to, int from);
236 
239  virtual double altitudeValueFor(double) const;
240  virtual double distanceValueFor(double) const;
241 
244  virtual double altitudeFromDisplayValue(double) const;
245  virtual double distanceFromDisplayValue(double) const;
246 
248  virtual void convertAltitudeAndDistance(int newAltitudeUnits, int newDistanceUnits, bool replot = true);
249 
251  virtual void convertAltitudeAndDistance(QVector<QPointF>&, int newAltitudeUnits, int newDistanceUnits) const;
252  virtual void convertAltitudeAndDistance(QwtPlotMarker*, int newAltitudeUnits, int newDistanceUnits) const;
253 
255  virtual void deferredReplot(int flag = FullReplot);
256 
258  virtual QwtPlotMarker* addMarker(double x, double y);
259 
261  virtual void setupPointMarkerLabel();
262 
264  virtual void onTerrainProfileSettingsChanged(const DtTerrainProfileSettingsRecord&);
265 
269  virtual void createSymbolTracker();
270 
272  virtual void trackEntity(const DtVector& geocentricPosition, DtSimObjectReference);
273 
275  virtual void stopTrackingEntity(makVrv::DtElementID);
276 
278  virtual void clearTrackingSymbols(bool suspended = false);
279 
281  virtual QwtSymbol* symbolFor(DtSimObjectReference) const;
282 
285  virtual int linePositionFromLocation(const DtVector& geocentricLocation, QPointF& result, bool trackedItem = false) const;
286 
288  virtual int locationFromPlotPosition(const QPointF& result, DtVector& geocentricLocation) const;
289 
293  virtual int closestPoint(const DtVector& v, double& range, double& totalRange, bool trackedItem = false) const;
294 
297  virtual void timedReplot();
298  virtual void replotIfTime();
299 
301  virtual void updateLineVertices(bool replot = true);
302 
303  virtual void resetAltitudeScale(bool replot = true);
304 
306  virtual double elevationAngle(const DtVector& geocentricFrom, const DtVector& geocentricTo) const;
307 
308  virtual void slot_defaultIconListChanged();
309 
310  virtual void slot_dataFrozenStateChanged(bool);
311 
312  virtual void processIntersectionResponse(DtSimMessage* msg);
313  virtual void processPointMarkerResponse(DtSimMessage* msg);
314 
315  virtual void cancelTerrainInformationRequest();
316 
317  virtual void requestPointMarkerInformation(const DtVector&);
318 
319  protected slots:
322  virtual void plotMouseReleased(const QPointF&);
323 
324  protected:
328 
330  std::vector<DtVector> myLinePoints;
331 
334  std::vector<DtVector> myPlotPoints;
335 
338 
341 
343  std::vector<int> mySegmentPoints;
344 
346  QVector<QPointF> myTerrainProfilePoints;
347 
349  std::vector<DtVector> myTerrainDatabasePoints;
350 
352  QVector<QPointF> myTerrainLineSamplePoints;
353 
354  QVector<QPointF> myTerrainLineDisplayPoints;
355 
356  DtReferenceEllipsoid* myReferenceForConversion;
357 
361 
369 
371  bool myReady;
372 
376  QwtPlotMarker* myPointMarker;
377 
379  typedef std::map<makVrv::DtElementID, QwtPlotMarker*> TrackedEntities;
381 
384 
387 
389  double myBuffer;
390 
395  QImage* myVertexImage;
396  std::vector<QwtPlotMarker*> myVertices;
399 
400  typedef std::map<makVrv::DtUniqueID, DtVector> WaitingForPlot;
406 
408 
410 
412  std::map<int, DtVector> myReceivedTerrainProfileInformationFor;
413 
415  unsigned myLinePenSize;
417 
418  std::set<makVrv::DtUniqueID> myDisplayOnBehalfOf;
419 
420  public:
422  QVBoxLayout* myMainLayout;
423  QwtPlotCurve* myTerrainLine;
424  QwtPlotCurve* myTerrainProfile;
429  };
430 
434  {
435  public:
437  virtual ~DtTerrainProfileWidgetCreator() override;
438 
439  static DtTerrainProfileWidgetCreator& instance(makVrv::DtDe&);
440  static void registerInstance(makVrv::DtDe&, DtTerrainProfileWidgetCreator*);
441 
442  virtual DtTerrainProfileWidget* create(QWidget* parent);
443 
444  protected:
446  };
447 }
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:334
QPointF myPointMarkerPosition
Definition: terrainProfileWidget.h:367
DtTerrainProfileDataProvider * myDataProvider
Definition: terrainProfileWidget.h:326
Contains makVrf::DtSymbolTracker class.
Definition: symbolTracker.h:39
double myPointMarkerCurrentHeight
Definition: terrainProfileWidget.h:366
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:401
DtSymbolTracker * mySymbolTracker
Class that will be used to track symbols within a particular distance to the given line...
Definition: terrainProfileWidget.h:375
bool myFirstPlot
Definition: terrainProfileWidget.h:397
static QColor theTerrainProfileLineColor
Definition: terrainProfileWidget.h:428
boost::signals2::signal< void()> signal_dataStatusChanged
Signal sent when the status of the data has changed.
Definition: terrainProfileWidget.h:189
boost::signals2::signal< void(int)> signal_replotted
Signal when the graph has been replotted.
Definition: terrainProfileWidget.h:192
bool replotting() const
Definition: terrainProfileWidget.h:109
makVrv::DtDe & myDe
Definition: terrainProfileWidget.h:325
bool useBackendForProfile() const
Definition: terrainProfileWidget.h:104
QwtPlotCurve * myTerrainProfile
Definition: terrainProfileWidget.h:424
const std::set< makVrv::DtUniqueID > & displayOnBehalfOf() const
Definition: terrainProfileWidget.h:180
makVrv::DtSignalConnectionManager myDataProviderConnections
Definition: terrainProfileWidget.h:409
makVrv::DtSignalConnectionManager myConnections
Definition: terrainProfileWidget.h:327
voidpf void uLong size
Definition: ioapi.h:39
bool myResuming
Definition: terrainProfileWidget.h:398
QwtPlotPicker * myPlotPicker
Definition: terrainProfileWidget.h:425
QVBoxLayout * myMainLayout
Definition: terrainProfileWidget.h:422
double myBuffer
Definition: terrainProfileWidget.h:389
Contains the DtUnitConverterCollection class declaration.
std::vector< DtVector > myLinePoints
Points are in geocentric.
Definition: terrainProfileWidget.h:330
std::set< makVrv::DtUniqueID > myDisplayOnBehalfOf
Definition: terrainProfileWidget.h:418
QLabel * mySelectedPointLabel
Definition: terrainProfileWidget.h:426
QLabel * mySelectedPoint
Definition: terrainProfileWidget.h:427
double myScaleFactor
Definition: terrainProfileWidget.h:388
bool hasVertices() const
Definition: terrainProfileWidget.h:129
double mySamplingRate
Test the length of the line every N meters along the line.
Definition: terrainProfileWidget.h:337
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:433
Contains the DtDisplayUnitsSettingsManager class declaration.
DistanceUnits
Enumeration of the different distance units.
Definition: DtDisplayUnitsSettingsRecord.h:57
makVrv::DtDisplayUnitsConverter::DistanceUnits myDistanceUnits
Definition: terrainProfileWidget.h:360
QwtPlotCurve * myTerrainLine
Definition: terrainProfileWidget.h:423
DtVector myPointMarkerLocation
Geocentric location of point marker. Used for labels.
Definition: terrainProfileWidget.h:363
TrackedEntities myTrackedEntities
Definition: terrainProfileWidget.h:380
This class will display a terrain profile graph, which is the graph of a distance over a line and the...
Definition: terrainProfileWidget.h:58
Contains makVrv::DtVirtualBaseClass class.
std::vector< DtVector > myTerrainDatabasePoints
The points used for terrain intersection.
Definition: terrainProfileWidget.h:349
double myPointMarkerDistanceAlongLine
Definition: terrainProfileWidget.h:365
DtReferenceEllipsoid * myReferenceForConversion
Definition: terrainProfileWidget.h:356
bool myReplotting
Definition: terrainProfileWidget.h:392
int myTerrainInformationRequestId
Definition: terrainProfileWidget.h:411
PenStyle
Definition: DtTacticalGraphicUtilities.h:71
File: simMsg.h.
Definition: simMessage.h:35
int myMaximumSamplingPoints
Maximum number of points to check.
Definition: terrainProfileWidget.h:340
QVector< QPointF > myTerrainLineDisplayPoints
Definition: terrainProfileWidget.h:354
std::map< makVrv::DtUniqueID, DtVector > WaitingForPlot
Definition: terrainProfileWidget.h:400
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:20
bool myTrackHistory
Definition: terrainProfileWidget.h:405
std::vector< QwtPlotMarker * > myVertices
Definition: terrainProfileWidget.h:396
bool mySuspended
Definition: terrainProfileWidget.h:391
makVrv::DtDe & myDe
Definition: terrainProfileWidget.h:445
QwtPlotMarker * myPointMarker
Definition: terrainProfileWidget.h:376
#define DT_DLL_VRFGUICOMMONQT
Definition: vrfGuiCommonQt.h:20
LineSampleStyle
Definition: terrainProfileWidget.h:70
QTime * myReplotTimer
Definition: terrainProfileWidget.h:382
QVector< QPointF > myTerrainLineSamplePoints
The points used for the line that is being used to sample the terrain segment.
Definition: terrainProfileWidget.h:352
int myPointMarkerSoilType
Definition: terrainProfileWidget.h:364
LineSampleStyle myLineSampleDisplay
Definition: terrainProfileWidget.h:416
bool myShowVertices
Definition: terrainProfileWidget.h:393
Base class to provide boost signal/slot management.
int myPointMarkerRequestId
Definition: terrainProfileWidget.h:368
QwtPlot * myTerrainProfileGraph
Definition: terrainProfileWidget.h:421
DT_DLL_DEBUGDRAWRENDERER void init(makVrv::DtDe &de)
Work function for the plugin initialization.
QImage * myVertexImage
Definition: terrainProfileWidget.h:395
Qt::PenStyle myLinePenStyle
Definition: terrainProfileWidget.h:414
double myDistanceMoveTolerance
Definition: terrainProfileWidget.h:403
boost::signals2::signal< void()> signal_ready
Signal only once when graph is ready to show (at least two points)
Definition: terrainProfileWidget.h:186
Contains makVrv::DtUniqueID type.
unsigned myLinePenSize
Definition: terrainProfileWidget.h:415
bool myReady
Set to true when the graph is ready to display.
Definition: terrainProfileWidget.h:371
std::map< makVrv::DtElementID, QwtPlotMarker * > TrackedEntities
Map of plot markers for entities being tracked.
Definition: terrainProfileWidget.h:379
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:76
int myReplotFlag
Definition: terrainProfileWidget.h:404
Contains makVrf::DtTerrainProfileSettingsRecord class. This class holds options for terrain profiles...
Definition: terrainProfileSettingsRecord.h:26
std::map< int, DtVector > myReceivedTerrainProfileInformationFor
Definition: terrainProfileWidget.h:412
double myMaximumHeight
Definition: terrainProfileWidget.h:386
Contains the makVrf::DtTerrainProfileDataProvider class. This class is a common base class for all ob...
Definition: terrainProfileDataProvider.h:41
bool myShowVertexNumbers
Definition: terrainProfileWidget.h:394
makVrv::DtDisplayUnitsConverter::DistanceUnits myAltitudeUnits
Current units for distance and altitude. Used to check to see if units need to be changed...
Definition: terrainProfileWidget.h:359
ReplotFlag
Definition: terrainProfileWidget.h:63
QVector< QPointF > myTerrainProfilePoints
The points used to plot the terrain profile.
Definition: terrainProfileWidget.h:346
bool mySuspendForMovement
Definition: terrainProfileWidget.h:402
std::vector< int > mySegmentPoints
For each segment, the number of plot points on the terrain represented by that segment.
Definition: terrainProfileWidget.h:343
int myReplotTime
Definition: terrainProfileWidget.h:383
double myMinimumHeight
Definition: terrainProfileWidget.h:385
bool myUseBackendForProfile
Definition: terrainProfileWidget.h:407

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)