94 lines
2.8 KiB
C++
Executable File
94 lines
2.8 KiB
C++
Executable File
/**
|
|
**
|
|
** @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<DrawableSmoothPath> _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<RubberbandDrawable::RubberbandCoordinate> vertexVector;
|
|
|
|
vertexVector.reserve( Rubberband::_internal->_handleList.size() );
|
|
|
|
for (auto handle : qAsConst(Rubberband::_internal->_handleList))
|
|
{
|
|
RubberbandPointHandle * pointHandlePtr = dynamic_cast<RubberbandPointHandle*>(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 */
|