VR-Forces 4.0.4 Class Documentation
include/vrfGuiCoreQt/DtTerrainProfileWidget.h
Go to the documentation of this file.
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 }

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)