![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2012 MaK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 00006 #pragma once 00007 00008 #include <vrfGuiCoreQt/vrfGuiCoreQt.h> 00009 00010 #include <vrvUtil/signalslib.h> 00011 #include <vrvUtil/DtVirtualBaseClass.h> 00012 #include <vrvCore/DtUniqueID.h> 00013 #include <vrvCore/DtStateView.h> 00014 #include <vrvCore/DtEntityState.h> 00015 #include <vrvCore/DtDisplayUnitsSettingsManager.h> 00016 #include <vrvUtil/DtSignalConnectionManager.h> 00017 00018 #include <vlpi/entityType.h> 00019 00020 #include <qwt_symbol.h> 00021 00022 #include <QPixmap> 00023 #include <QWidget> 00024 00026 #include <vrvUtil/DtUnitConverterCollection.h> 00027 00028 class QwtPlotPicker; 00029 class QwtPlot; 00030 class QVBoxLayout; 00031 class QwtPlotCurve; 00032 class DtReferenceEllipsoid; 00033 class QLabel; 00034 class QwtPlotMarker; 00035 class QTime; 00036 class QImage; 00037 00038 namespace makVrf 00039 { 00040 class DtTerrainProfileDataProvider; 00041 class DtTerrainProfileSettingsRecord; 00042 class DtSymbolTracker; 00043 class DtQwtSymbol; 00044 00057 class DT_DLL_VRFGUICOREQT DtTerrainProfileWidget : public QWidget 00058 { 00059 Q_OBJECT 00060 00061 public: 00063 DtTerrainProfileWidget(makVrv::DtDe& de, QWidget* parent = NULL, const Qt::WindowFlags& flags = 0); 00064 00066 virtual ~DtTerrainProfileWidget(); 00067 00071 virtual void init(); 00072 00075 virtual void setDataProvider(DtTerrainProfileDataProvider*); 00076 00078 virtual void replot(); 00079 00081 virtual void setSamplingRate(double); 00082 double samplingRate() const; 00083 00085 virtual void setMaximumSamplingPoints(int); 00086 int maximumSamplingPoints() const; 00087 00089 virtual void clearGraph(); 00090 00093 virtual void setReplotTime(int); 00094 int replotTime() const; 00095 00098 virtual void setScaleFactor(double); 00099 double scaleFactor() const; 00100 00102 virtual void suspend(); 00103 00105 virtual void resume(); 00106 00108 virtual bool isSuspended() const; 00109 00111 virtual void setShowVertices(bool); 00112 bool showVertices() const; 00113 00115 boost::signal<void ()> signal_ready; 00116 00117 protected: 00119 virtual void createProfileGraph(); 00120 00122 virtual void initConnections(); 00123 00125 virtual bool updateProfileData(); 00126 00128 virtual void slot_dataUpdated(); 00129 00131 virtual void slot_dataRemoved(); 00132 00135 virtual void calculateReplotRanges(std::vector<QPoint>&) const; 00136 00139 virtual double calculateLineLength(const std::vector<DtVector>&) const; 00140 00142 virtual double calculateSegment(const QPoint& segment, double lineLength); 00143 00145 virtual double segmentLength(const QPoint&) const; 00146 virtual double segmentLength(int start, int end) const; 00147 00149 virtual double terrainHeight(int point) const; 00150 00152 virtual double terrainHeight(const DtVector&) const; 00153 00155 virtual double lineHeight(int pos) const; 00156 00158 virtual void setupLabels(); 00159 00161 void slot_onUnitChanged(int attribute, int from); 00162 00165 virtual double altitudeValueFor(double) const; 00166 virtual double distanceValueFor(double) const; 00167 00169 virtual void convertAltitudeAndDistance(int newAltitudeUnits, int newDistanceUnits, bool replot = true); 00170 00172 virtual void convertAltitudeAndDistance(QVector<QPointF>&, int newAltitudeUnits, int newDistanceUnits) const; 00173 virtual void convertAltitudeAndDistance(QwtPlotMarker*, int newAltitudeUnits, int newDistanceUnits) const; 00174 00176 virtual void deferredReplot(bool full = true); 00177 00179 virtual QwtPlotMarker* addMarker(double x, double y); 00180 00182 virtual void setupPointMarkerLabel(); 00183 00185 virtual void onTerrainProfileSettingsChanged(const DtTerrainProfileSettingsRecord&); 00186 00190 virtual void createSymbolTracker(); 00191 00193 virtual void trackEntity(const DtVector& geocentricPosition, const makVrv::DtStateView<makVrv::DtVrlinkSimulatedEntityState>*); 00194 00196 virtual void stopTrackingEntity(makVrv::DtElementID); 00197 00199 virtual void clearTrackingSymbols(bool suspended = false); 00200 00202 virtual QwtSymbol* symbolFor(const makVrv::DtStateView<makVrv::DtVrlinkSimulatedEntityState>*) const; 00203 00206 virtual int linePositionFromLocation(const DtVector& geocentricLocation, QPointF& result) const; 00207 00211 virtual int closestPoint(const DtVector& v, double& range, double& totalRange) const; 00212 00215 virtual void timedReplot(); 00216 virtual void replotIfTime(); 00217 00219 virtual void updateLineVertices(bool replot = true); 00220 00221 virtual void resetAltitudeScale(bool replot = true); 00222 00223 protected slots: 00226 virtual void plotMouseReleased(const QPointF&); 00227 00228 protected: 00229 makVrv::DtDe& myDe; 00230 DtTerrainProfileDataProvider* myDataProvider; 00231 makVrv::DtSignalConnectionManager myConnections; 00232 00234 std::vector<DtVector> myLinePoints; 00235 00238 std::vector<DtVector> myPlotPoints; 00239 00241 double mySamplingRate; 00242 00244 int myMaximumSamplingPoints; 00245 00247 std::vector<int> mySegmentPoints; 00248 00250 QVector<QPointF> myTerrainProfilePoints; 00251 00253 QVector<QPointF> myTerrainLinePoints; 00254 DtReferenceEllipsoid* myReferenceForConversion; 00255 00257 makVrv::DtDisplayUnitsConverter::DistanceUnits myAltitudeUnits; 00258 makVrv::DtDisplayUnitsConverter::DistanceUnits myDistanceUnits; 00259 00261 DtVector myPointMarkerLocation; 00262 00264 bool myReady; 00265 00268 DtSymbolTracker* mySymbolTracker; 00269 QwtPlotMarker* myPointMarker; 00270 00272 typedef std::map<makVrv::DtElementID, QwtPlotMarker*> TrackedEntities; 00273 TrackedEntities myTrackedEntities; 00274 00275 QTime* myReplotTimer; 00276 int myReplotTime; 00277 00278 double myMinimumHeight; 00279 double myMaximumHeight; 00280 00281 double myScaleFactor; 00282 double myBuffer; 00283 00284 bool mySuspended; 00285 bool myReplotting; 00286 bool myShowVertices; 00287 QImage* myVertexImage; 00288 std::vector<QwtPlotMarker*> myVertices; 00289 00290 public: 00291 QwtPlot* myTerrainProfileGraph; 00292 QVBoxLayout* myMainLayout; 00293 QwtPlotCurve* myTerrainLine; 00294 QwtPlotCurve* myTerrainProfile; 00295 QwtPlotPicker* myPlotPicker; 00296 QLabel* mySelectedPointLabel; 00297 QLabel* mySelectedPoint; 00298 bool myFirstPlot; 00299 }; 00300 00303 class DT_DLL_VRFGUICOREQT DtTerrainProfileWidgetCreator : public makVrv::DtVirtualBaseClass 00304 { 00305 public: 00306 DtTerrainProfileWidgetCreator(makVrv::DtDe&); 00307 virtual ~DtTerrainProfileWidgetCreator(); 00308 00309 static DtTerrainProfileWidgetCreator& instance(makVrv::DtDe&); 00310 static void registerInstance(makVrv::DtDe&, DtTerrainProfileWidgetCreator*); 00311 00312 virtual DtTerrainProfileWidget* create(QWidget* parent); 00313 00314 protected: 00315 makVrv::DtDe& myDe; 00316 }; 00317 00319 class DtQwtSymbol : public QwtSymbol 00320 { 00321 public: 00322 DtQwtSymbol() : QwtSymbol(), myDestroyed(false) {}; 00323 DtQwtSymbol(const QPixmap& pixmap) : QwtSymbol(), myPixmap(pixmap) 00324 { setSize(pixmap.size()); setStyle(QwtSymbol::UserStyle); }; 00325 00326 void setDestroyed(bool b) { myDestroyed = b; }; 00327 bool destroyed() const { return myDestroyed; }; 00328 00329 void setEntityType(const DtEntityType& t) { myEntityType = t; }; 00330 const DtEntityType& entityType() const { return myEntityType; }; 00331 00332 void setLocation(const DtVector& l) { myLocation = l; }; 00333 const DtVector& location() const { return myLocation; }; 00334 00336 virtual void drawSymbols( QPainter *painter, const QPointF *points, int numPoints ) const; 00337 00338 void operator=(const DtQwtSymbol& rhs) { QwtSymbol::operator=(rhs); myPixmap = rhs.myPixmap; }; 00339 00340 protected: 00341 QPixmap myPixmap; 00342 DtEntityType myEntityType; 00343 bool myDestroyed; 00344 DtVector myLocation; 00345 }; 00346 }