Files
qt5-legatus-legacy/Lts/Viewer/SituationMap/Rubberbands/rubberband_smooth_line.cpp
T
2026-08-13 18:33:10 +02:00

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 */