Initial commit
This commit is contained in:
commit
b7d90b9afe
16245 files changed
+3396666
No files matched your search
+212
@@ -0,0 +1,212 @@
|
||||
/**
|
||||
**
|
||||
** @RDE_HEADER@
|
||||
** Definition of base class for rubberband drawing objects
|
||||
** $Id$
|
||||
** $HeadURL$
|
||||
** $Author$
|
||||
**
|
||||
** -----------------------------------------------------------------------------------------------
|
||||
**
|
||||
** Hardware-Environment: Intel-PC
|
||||
** Software-Environment: Windows 7, Qt 5.4. ArcGIS 10.2.5
|
||||
**
|
||||
** Language ........: C++ 11
|
||||
**
|
||||
** -----------------------------------------------------------------------------------------------
|
||||
**
|
||||
** Author ...........: Jörg Turla, SPD G, Tel. 3132
|
||||
**
|
||||
** -----------------------------------------------------------------------------------------------
|
||||
**
|
||||
** Notes .........:
|
||||
**
|
||||
** 27.03.2015, JT : First edition for use with Qt5
|
||||
**
|
||||
** -----------------------------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
|
||||
#include <QtCore/QObject>
|
||||
|
||||
#include <QtGui/QColor>
|
||||
|
||||
#include <arcgis/MapGraphicsView.h>
|
||||
#include <arcgis/Point.h>
|
||||
|
||||
#include <Common/referenced.h>
|
||||
#include <Common/situation_map_logging.h>
|
||||
|
||||
|
||||
class QGraphicsScene;
|
||||
|
||||
namespace SituationMap { namespace RB
|
||||
{
|
||||
|
||||
Esri::ArcGISRuntime::Point convert(const QPointF &point, const Esri::ArcGISRuntime::SpatialReference& spatialReference);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
@class RubberbandDrawable rubberband_drawable.h
|
||||
@brief Base class of all rubberband drawables and handles for rubberband internal use.
|
||||
*/
|
||||
class RubberbandDrawable : public QObject, public SituationMap::Referenced
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
|
||||
enum class ZBufferPlane
|
||||
{
|
||||
FrameHandle = 10,
|
||||
Drawables = 20,
|
||||
LineHandle = 30,
|
||||
ArrowSymbol = 31,
|
||||
PointHandle = 40,
|
||||
Widget = 100
|
||||
}; /* InputMethode */
|
||||
|
||||
|
||||
/**
|
||||
Manages scene and map coordinates.
|
||||
*/
|
||||
struct RubberbandCoordinate
|
||||
{
|
||||
QPointF _sceneCoordinate;
|
||||
Esri::ArcGISRuntime::Point _mapCoordinate;
|
||||
|
||||
|
||||
RubberbandCoordinate()
|
||||
{}
|
||||
|
||||
explicit RubberbandCoordinate( const QPointF & sceneCoordinate)
|
||||
{
|
||||
updateSceneCoordinate( sceneCoordinate );
|
||||
} /* RubberbandCoordinate */
|
||||
|
||||
explicit RubberbandCoordinate( Esri::ArcGISRuntime::MapGraphicsView * mapView, const QPointF & sceneCoordinate)
|
||||
{
|
||||
updateSceneCoordinate( mapView, sceneCoordinate );
|
||||
} /* RubberbandCoordinate */
|
||||
|
||||
|
||||
explicit RubberbandCoordinate( Esri::ArcGISRuntime::MapGraphicsView * mapView, const Esri::ArcGISRuntime::Point & mapCoordinate)
|
||||
: _mapCoordinate(mapCoordinate)
|
||||
{
|
||||
mapToScene( mapView );
|
||||
} /* RubberbandCoordinate */
|
||||
|
||||
|
||||
inline QPointF mapToScene(Esri::ArcGISRuntime::MapGraphicsView * mapView)
|
||||
{
|
||||
if (!_mapCoordinate.isValid())
|
||||
return QPointF();
|
||||
const QPointF pixelCoordinate = mapView->locationToScreen(_mapCoordinate);
|
||||
_sceneCoordinate = mapView->mapToScene( pixelCoordinate.x(), pixelCoordinate.y() );
|
||||
return _sceneCoordinate;
|
||||
} /* QPointF mapToScene(Esri::ArcGISRuntime::MapGraphicsView * mapView) */
|
||||
|
||||
|
||||
inline void updateSceneCoordinate( Esri::ArcGISRuntime::MapGraphicsView * mapView, const QPointF & sceneCoordinate)
|
||||
{
|
||||
if (mapView)
|
||||
{
|
||||
_sceneCoordinate = sceneCoordinate;
|
||||
QPoint pixelCoordinate = mapView->mapFromScene(sceneCoordinate);
|
||||
_mapCoordinate = mapView->screenToLocation( pixelCoordinate.x(), pixelCoordinate.y() );
|
||||
}
|
||||
else updateSceneCoordinate( sceneCoordinate );
|
||||
} /* void updateSceneCoordinate( Esri::ArcGISRuntime::MapGraphicsView * mapView, const QPointF & sceneCoordinate) */
|
||||
|
||||
|
||||
inline void updateSceneCoordinate( const QPointF & sceneCoordinate )
|
||||
{
|
||||
_sceneCoordinate = sceneCoordinate;
|
||||
_mapCoordinate = Esri::ArcGISRuntime::Point();
|
||||
} /* void updateSceneCoordinate( const QPointF & sceneCoordinate ) */
|
||||
|
||||
bool isNull() const
|
||||
{
|
||||
return _sceneCoordinate.isNull();
|
||||
}
|
||||
|
||||
}; /* RubberbandCoordinate */
|
||||
|
||||
/**
|
||||
@name Construction & Destruction
|
||||
@{
|
||||
*/
|
||||
explicit RubberbandDrawable( QGraphicsView *view );
|
||||
explicit RubberbandDrawable( Esri::ArcGISRuntime::MapGraphicsView * );
|
||||
explicit RubberbandDrawable( Esri::ArcGISRuntime::MapGraphicsView *, QGraphicsScene * );
|
||||
~RubberbandDrawable();
|
||||
/** @} */
|
||||
|
||||
inline bool isVisible() const { return _isVisible; }
|
||||
inline void setVisibility(bool on = true) { _isVisible = on; updateGraphic(); }
|
||||
|
||||
inline void setDrawColor (const QColor & col) { _drawColor = col; updateGraphic(); }
|
||||
inline void setFillColor (const QColor & col) { _fillColor = col; updateGraphic(); }
|
||||
inline void setLineWidth(unsigned int width) { _lineWidth = width; updateGraphic(); }
|
||||
|
||||
inline void zBufferPlane( ZBufferPlane zPlane ) { _zBufferValue = (unsigned int) zPlane; }
|
||||
|
||||
inline void setZValue(qreal zValue) { _zValue = zValue; updateGraphic(); }
|
||||
inline qreal zValue() const { return _zValue; }
|
||||
|
||||
protected:
|
||||
|
||||
QPointer<QGraphicsScene> _scene;
|
||||
QPointer<Esri::ArcGISRuntime::MapGraphicsView> _mapView;
|
||||
|
||||
bool _isVisible;
|
||||
QColor _drawColor;
|
||||
QColor _fillColor;
|
||||
unsigned int _lineWidth;
|
||||
qreal _zBufferValue;
|
||||
qreal _zValue{0}; // combine _zBufferValue and _zValue???
|
||||
|
||||
LOGGER_T _logger;
|
||||
|
||||
#ifdef ADJUST_COORDINATES_EVERY_PAINT_EVENT
|
||||
bool eventFilter(QObject*, QEvent*) override;
|
||||
#endif
|
||||
|
||||
virtual void updateGraphic() = 0;
|
||||
|
||||
void makeLineStyle( bool dottedLine, QPen & lineStyle );
|
||||
|
||||
inline void forceUpdateViewWidget() { _mapView->viewport()->update(); }
|
||||
|
||||
virtual void adjustCoordinates() = 0;
|
||||
virtual void adjustWindow( const QRectF& ) = 0;
|
||||
|
||||
|
||||
QColor transparentFillColor() const
|
||||
{
|
||||
QColor fillColor(_fillColor);
|
||||
|
||||
if (fillColor.alphaF() > 0.85)
|
||||
{
|
||||
fillColor.setAlphaF( fillColor.alphaF()*0.5 );
|
||||
}
|
||||
return fillColor;
|
||||
} // QColor transparentFillColor()
|
||||
|
||||
|
||||
protected slots:
|
||||
|
||||
void onDo_adjustCoordinates();
|
||||
void onDo_adjustWindow(const QRectF & );
|
||||
|
||||
private:
|
||||
|
||||
|
||||
|
||||
void doConnecting();
|
||||
|
||||
}; /* RubberbandDrawable */
|
||||
|
||||
} } /* namespace SituationMap::RB */
|
||||
Reference in new issue
Block a user