/** ** ** @RDE_HEADER@ ** Definition of rubberband class to define multi point feature geometry ** $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 .........: ** ** 17.06.2015, JT : First edition for use with Qt5 ** ** ----------------------------------------------------------------------------------------------- */ #include "rubberband_smooth_line.h" #include "rubberband_point_handle.h" #include "drawable_smooth_path.h" #include "rubberband_internal.h" namespace SituationMap { namespace RB { struct RubberbandSmoothLine::InternalData { SituationMap::RefPointer _smoothLineItem; }; /* RubberbandSmoothLine::InternalData*/ RubberbandSmoothLine::RubberbandSmoothLine( SituationMap::Map * map, QObject * parent ) : RubberbandMultiPointFeature(map,true,parent), _internal( new InternalData() ) { } /* RubberbandSmoothLine::RubberbandSmoothLine */ RubberbandSmoothLine::~RubberbandSmoothLine() { delete _internal; } /* RubberbandSmoothLine::~RubberbandSmoothLine */ void RubberbandSmoothLine::update() { QVector vertexVector; vertexVector.reserve( Rubberband::_internal->_handleList.size() ); for (auto handle : qAsConst(Rubberband::_internal->_handleList)) { RubberbandPointHandle * pointHandlePtr = dynamic_cast(handle.get()); if (pointHandlePtr) { vertexVector.append( pointHandlePtr -> getCoordinate() ); } } if (vertexVector.size() > 2) { if (!_internal->_smoothLineItem) { _internal->_smoothLineItem = new DrawableSmoothPath( Rubberband::_internal->_mapView ); } _internal->_smoothLineItem -> enableClosedLine( isClosedEnabled() ); _internal->_smoothLineItem -> setDrawColor( _drawColor ); _internal->_smoothLineItem -> setFillColor( _fillColor ); _internal->_smoothLineItem -> setVisibility( true ); _internal->_smoothLineItem -> setPath( vertexVector ); } else if (_internal->_smoothLineItem) _internal->_smoothLineItem->setVisibility( false ); RubberbandMultiPointFeature::update(); } /* RubberbandSmoothLine::update */ } } /* namespace SituationMap::RB */