Files
qt5-legatus-legacy/Lts/Viewer/SituationMap/MathUtils/path_rasterer.h
T
2026-08-13 18:33:10 +02:00

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