95 lines
2.9 KiB
Objective-C
Executable File
95 lines
2.9 KiB
Objective-C
Executable File
/**
|
|
**
|
|
** @RDE_HEADER@
|
|
** Rasterize functional path geometries to polylines
|
|
** $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 .........:
|
|
**
|
|
** 12.08.2015, JT : First edition for use with Qt5
|
|
**
|
|
** -----------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
|
|
#include <QtCore/QPoint>
|
|
#include <QtCore/QVector>
|
|
#include <QtCore/QList>
|
|
#include <situation_map_export.h>
|
|
|
|
namespace SituationMap { namespace MathUtils
|
|
{
|
|
|
|
/**
|
|
@class PathRasterer path_rasterer.h
|
|
@brief Base class to rasterize parametric functions, like splines
|
|
|
|
Base class to rasterize parametric functions, like splines, with an interval halving method
|
|
to approximate the function by a discrete polyline.
|
|
|
|
@see Ellipse, Spline, SmoothLine, HermiteSpline, BezierSpline
|
|
*/
|
|
class SITUATIONMAP_EXPORT PathRasterer
|
|
{
|
|
public:
|
|
|
|
PathRasterer();
|
|
virtual ~PathRasterer() = default;
|
|
|
|
/**
|
|
Defines a threshold values to decide ending convergence
|
|
*/
|
|
inline void epsilon( qreal eps ) { _eps = eps; }
|
|
|
|
/**
|
|
Defines the maximum of calculated verticies if \c epsilon doesn't terminate the convergence operation
|
|
*/
|
|
inline void maxVertexCount(unsigned int max) { _maxVertexCount = max; }
|
|
|
|
/**
|
|
Method to override to define the parametric function
|
|
*/
|
|
virtual void function( qreal t, QPointF & result ) = 0;
|
|
|
|
/**
|
|
Creating a vertex vector with an interval halving method to approximate a parametric function by a polyline
|
|
*/
|
|
void rasterize(qreal tMin, qreal tMax, QVector<QPointF> & vertexList);
|
|
|
|
void rasterize(qreal tMin, qreal tMax, QList<QPointF> & vertexList);
|
|
|
|
protected:
|
|
|
|
qreal _eps;
|
|
unsigned int _maxVertexCount;
|
|
|
|
template<class List> void exeRasterize( qreal tMin, qreal tMax, List & vertexList );
|
|
|
|
template<class List> void splitSegment( const QPointF & v0
|
|
, qreal t0
|
|
, const QPointF & v1
|
|
, qreal t1
|
|
, unsigned int maxVertexCount
|
|
, List & vertexList );
|
|
|
|
}; /* PathRasterer */
|
|
|
|
} } // namespace SituationMap::MathUtils
|