Branch data Line data Source code
1 : : /*************************************************************************** 2 : : TriDecorator.h - description 3 : : ------------------- 4 : : copyright : (C) 2004 by Marco Hugentobler 5 : : email : mhugent@geo.unizh.ch 6 : : ***************************************************************************/ 7 : : 8 : : /*************************************************************************** 9 : : * * 10 : : * This program is free software; you can redistribute it and/or modify * 11 : : * it under the terms of the GNU General Public License as published by * 12 : : * the Free Software Foundation; either version 2 of the License, or * 13 : : * (at your option) any later version. * 14 : : * * 15 : : ***************************************************************************/ 16 : : 17 : : #ifndef TRIDECORATOR_H 18 : : #define TRIDECORATOR_H 19 : : 20 : : #include "qgstriangulation.h" 21 : : #include "qgis_sip.h" 22 : : #include "qgis_analysis.h" 23 : : 24 : : #define SIP_NO_FILE 25 : : 26 : : /** 27 : : * \ingroup analysis 28 : : * \brief Decorator class for Triangulations (s. Decorator pattern in Gamma et al.). 29 : : * \note Not available in Python bindings. 30 : : */ 31 : 0 : class ANALYSIS_EXPORT TriDecorator : public QgsTriangulation 32 : : { 33 : : public: 34 : : //! Constructor for TriDecorator 35 : 0 : TriDecorator() = default; 36 : : //! Constructor for TriDecorator with an existing triangulation 37 : : explicit TriDecorator( QgsTriangulation *t ); 38 : : void addLine( const QVector< QgsPoint> &points, QgsInterpolator::SourceType lineType ) override; 39 : : int addPoint( const QgsPoint &p ) override; 40 : : //! Adds an association to a triangulation 41 : : virtual void addTriangulation( QgsTriangulation *t ); 42 : : //! Performs a consistency check, remove this later 43 : : void performConsistencyTest() override; 44 : : bool calcNormal( double x, double y, QgsPoint &result SIP_OUT ) override; 45 : : bool calcPoint( double x, double y, QgsPoint &result SIP_OUT ) override; 46 : : QgsPoint *point( int i ) const override; 47 : : int pointsCount() const override; 48 : : bool triangleVertices( double x, double y, QgsPoint &p1 SIP_OUT, int &n1 SIP_OUT, QgsPoint &p2 SIP_OUT, int &n2 SIP_OUT, QgsPoint &p3 SIP_OUT, int &n3 SIP_OUT ) override; 49 : : bool triangleVertices( double x, double y, QgsPoint &p1 SIP_OUT, QgsPoint &p2 SIP_OUT, QgsPoint &p3 SIP_OUT ) override; 50 : : int oppositePoint( int p1, int p2 ) override; 51 : : QList<int> surroundingTriangles( int pointno ) override; 52 : : double xMax() const override; 53 : : double xMin() const override; 54 : : double yMax() const override; 55 : : double yMin() const override; 56 : : void setForcedCrossBehavior( QgsTriangulation::ForcedCrossBehavior b ) override; 57 : : void setTriangleInterpolator( TriangleInterpolator *interpolator ) override; 58 : : void eliminateHorizontalTriangles() override; 59 : : void ruppertRefinement() override; 60 : : bool pointInside( double x, double y ) override; 61 : : bool swapEdge( double x, double y ) override; 62 : : QList<int> pointsAroundEdge( double x, double y ) override; 63 : : protected: 64 : : //! Association with a Triangulation object 65 : 0 : QgsTriangulation *mTIN = nullptr; 66 : : }; 67 : : 68 : : #ifndef SIP_RUN 69 : : 70 : : inline TriDecorator::TriDecorator( QgsTriangulation *t ) 71 : : : mTIN( t ) 72 : : { 73 : : 74 : : } 75 : : 76 : 0 : inline void TriDecorator::addTriangulation( QgsTriangulation *t ) 77 : : { 78 : 0 : mTIN = t; 79 : 0 : } 80 : : 81 : : #endif 82 : : #endif 83 : :