/** ** ** @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 #include #include #include 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 & vertexList); void rasterize(qreal tMin, qreal tMax, QList & vertexList); protected: qreal _eps; unsigned int _maxVertexCount; template void exeRasterize( qreal tMin, qreal tMax, List & vertexList ); template void splitSegment( const QPointF & v0 , qreal t0 , const QPointF & v1 , qreal t1 , unsigned int maxVertexCount , List & vertexList ); }; /* PathRasterer */ } } // namespace SituationMap::MathUtils