Branch data Line data Source code
1 : : /*************************************************************************** 2 : : Bezier3D.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 BEZIER3D_H 18 : : #define BEZIER3D_H 19 : : 20 : : #include "ParametricLine.h" 21 : : #include "qgslogger.h" 22 : : #include "qgis_analysis.h" 23 : : 24 : : #define SIP_NO_FILE 25 : : 26 : : /** 27 : : * \ingroup analysis 28 : : * \brief Class Bezier3D represents a bezier curve, represented by control points. 29 : : * 30 : : * Parameter t is running from 0 to 1. The class is capable to calculate the curve point and the first two derivatives belonging to it. 31 : : * \note Not available in Python bindings 32 : : */ 33 : 0 : class ANALYSIS_EXPORT Bezier3D: public ParametricLine 34 : : { 35 : : protected: 36 : : 37 : : public: 38 : : //! Default constructor 39 : : Bezier3D() = default; 40 : : //! Constructor, par is a pointer to the parent, controlpoly a controlpolygon 41 : : Bezier3D( ParametricLine *par, QVector<QgsPoint *> *controlpoly ); 42 : : 43 : : //! Do not use this method, since a Bezier curve does not consist of other curves 44 : : void add( ParametricLine *pl SIP_TRANSFER ) override; 45 : : //! Calculates the first derivative and assigns it to v 46 : : void calcFirstDer( float t, Vector3D *v SIP_OUT ) override; 47 : : //! Calculates the second derivative and assigns it to v 48 : : void calcSecDer( float t, Vector3D *v SIP_OUT ) override; 49 : : //virtual QgsPoint calcPoint(float t); 50 : : //! Calculates the point on the curve and assigns it to p 51 : : void calcPoint( float t, QgsPoint *p SIP_OUT ) override; 52 : : //! Changes the order of control points 53 : : void changeDirection() override; 54 : : //virtual void draw(QPainter* p); 55 : : //virtual bool intersects(ParametricLine* pal); 56 : : //! Do not use this method, since a Bezier curve does not consist of other curves 57 : : void remove( int i ) override; 58 : : //! Returns a control point 59 : : const QgsPoint *getControlPoint( int number ) const override; 60 : : //! Returns a pointer to the control polygon 61 : : const QVector<QgsPoint *> *getControlPoly() const override; 62 : : //! Returns the degree of the curve 63 : : int getDegree() const override; 64 : : //! Returns the parent 65 : : ParametricLine *getParent() const override; 66 : : //! Sets the parent 67 : : void setParent( ParametricLine *par ) override; 68 : : //! Sets the control polygon 69 : : void setControlPoly( QVector<QgsPoint *> *cp ) override; 70 : : 71 : : }; 72 : : 73 : : #ifndef SIP_RUN 74 : : 75 : : //-----------------------------------------------constructors, destructor and assignment operator------------------------------ 76 : : 77 : : inline Bezier3D::Bezier3D( ParametricLine *parent, QVector<QgsPoint *> *controlpoly ) : ParametricLine( parent, controlpoly ) 78 : : { 79 : : mDegree = mControlPoly->count() - 1; 80 : : } 81 : : 82 : : //----------------------------------------------invalid methods add and remove (because of inheritance from ParametricLine) 83 : : 84 : 0 : inline void Bezier3D::add( ParametricLine *pl ) 85 : : { 86 : : Q_UNUSED( pl ) 87 : 0 : QgsDebugMsg( QStringLiteral( "Error!!!!! A Bezier-curve can not be parent of a ParametricLine." ) ); 88 : 0 : } 89 : : 90 : 0 : inline void Bezier3D::remove( int i ) 91 : : { 92 : : Q_UNUSED( i ) 93 : 0 : QgsDebugMsg( QStringLiteral( "Error!!!!! A Bezier-curve has no children to remove." ) ); 94 : 0 : } 95 : : 96 : : //-----------------------------------------------setters and getters--------------------------------------------------------------- 97 : : 98 : 0 : inline const QgsPoint *Bezier3D::getControlPoint( int number ) const 99 : : { 100 : 0 : return ( *mControlPoly )[number - 1]; 101 : : } 102 : : 103 : 0 : inline const QVector<QgsPoint *> *Bezier3D::getControlPoly() const 104 : : { 105 : 0 : return mControlPoly; 106 : : } 107 : : 108 : 0 : inline int Bezier3D::getDegree() const 109 : : { 110 : 0 : return mDegree; 111 : : } 112 : : 113 : 0 : inline ParametricLine *Bezier3D::getParent() const 114 : : { 115 : 0 : return mParent; 116 : : } 117 : : 118 : 0 : inline void Bezier3D::setParent( ParametricLine *par ) 119 : : { 120 : 0 : mParent = par; 121 : 0 : } 122 : : 123 : 0 : inline void Bezier3D::setControlPoly( QVector<QgsPoint *> *cp ) 124 : : { 125 : 0 : mControlPoly = cp; 126 : 0 : mDegree = mControlPoly->count() - 1; 127 : 0 : } 128 : : 129 : : #endif 130 : : 131 : : #endif 132 : :