QGIS API Documentation 3.41.0-Master (af5edcb665c)
Loading...
Searching...
No Matches
Bezier3D.h
Go to the documentation of this file.
1/***************************************************************************
2 Bezier3D.h - description
3 -------------------
4 copyright : (C) 2004 by Marco Hugentobler
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
33class ANALYSIS_EXPORT Bezier3D : public ParametricLine
34{
35 protected:
36 public:
37 Bezier3D() = default;
39 Bezier3D( ParametricLine *par, QVector<QgsPoint *> *controlpoly );
40
42 void add( ParametricLine *pl SIP_TRANSFER ) override;
44 void calcFirstDer( float t, Vector3D *v SIP_OUT ) override;
46 void calcSecDer( float t, Vector3D *v SIP_OUT ) override;
47 //virtual QgsPoint calcPoint(float t);
49 void calcPoint( float t, QgsPoint *p SIP_OUT ) override;
51 void changeDirection() override;
52 //virtual void draw(QPainter* p);
53 //virtual bool intersects(ParametricLine* pal);
55 void remove( int i ) override;
57 const QgsPoint *getControlPoint( int number ) const override;
59 const QVector<QgsPoint *> *getControlPoly() const override;
61 int getDegree() const override;
63 ParametricLine *getParent() const override;
65 void setParent( ParametricLine *par ) override;
67 void setControlPoly( QVector<QgsPoint *> *cp ) override;
68};
69
70#ifndef SIP_RUN
71
72//-----------------------------------------------constructors, destructor and assignment operator------------------------------
73
74inline Bezier3D::Bezier3D( ParametricLine *parent, QVector<QgsPoint *> *controlpoly )
75 : ParametricLine( parent, controlpoly )
76{
77 mDegree = mControlPoly->count() - 1;
78}
79
80//----------------------------------------------invalid methods add and remove (because of inheritance from ParametricLine)
81
82inline void Bezier3D::add( ParametricLine *pl )
83{
84 Q_UNUSED( pl )
85 QgsDebugError( QStringLiteral( "Error!!!!! A Bezier-curve can not be parent of a ParametricLine." ) );
86}
87
88inline void Bezier3D::remove( int i )
89{
90 Q_UNUSED( i )
91 QgsDebugError( QStringLiteral( "Error!!!!! A Bezier-curve has no children to remove." ) );
92}
93
94//-----------------------------------------------setters and getters---------------------------------------------------------------
95
96inline const QgsPoint *Bezier3D::getControlPoint( int number ) const
97{
98 return ( *mControlPoly )[number - 1];
99}
100
101inline const QVector<QgsPoint *> *Bezier3D::getControlPoly() const
102{
103 return mControlPoly;
104}
105
106inline int Bezier3D::getDegree() const
107{
108 return mDegree;
109}
110
112{
113 return mParent;
114}
115
117{
118 mParent = par;
119}
120
121inline void Bezier3D::setControlPoly( QVector<QgsPoint *> *cp )
122{
123 mControlPoly = cp;
124 mDegree = mControlPoly->count() - 1;
125}
126
127#endif
128
129#endif
Class Bezier3D represents a bezier curve, represented by control points.
Definition Bezier3D.h:34
void remove(int i) override
Do not use this method, since a Bezier curve does not consist of other curves.
Definition Bezier3D.h:88
void add(ParametricLine *pl) override
Do not use this method, since a Bezier curve does not consist of other curves.
Definition Bezier3D.h:82
const QgsPoint * getControlPoint(int number) const override
Returns a control point.
Definition Bezier3D.h:96
Bezier3D()=default
const QVector< QgsPoint * > * getControlPoly() const override
Returns a pointer to the control polygon.
Definition Bezier3D.h:101
ParametricLine * getParent() const override
Returns the parent.
Definition Bezier3D.h:111
void setParent(ParametricLine *par) override
Sets the parent.
Definition Bezier3D.h:116
int getDegree() const override
Returns the degree of the curve.
Definition Bezier3D.h:106
void setControlPoly(QVector< QgsPoint * > *cp) override
Sets the control polygon.
Definition Bezier3D.h:121
ParametricLine is an Interface for parametric lines.
virtual const QVector< QgsPoint * > * getControlPoly() const =0
virtual void setParent(ParametricLine *paral)=0
virtual void remove(int i)=0
int mDegree
Degree of the parametric Line.
virtual void changeDirection()=0
virtual int getDegree() const =0
virtual void calcSecDer(float t, Vector3D *v)=0
virtual void add(ParametricLine *pl)=0
virtual const QgsPoint * getControlPoint(int number) const =0
ParametricLine * mParent
Pointer to the parent object. If there isn't one, mParent is 0.
virtual void calcFirstDer(float t, Vector3D *v)=0
virtual void setControlPoly(QVector< QgsPoint * > *cp)=0
QVector< QgsPoint * > * mControlPoly
MControlPoly stores the points of the control polygon.
virtual ParametricLine * getParent() const =0
virtual void calcPoint(float t, QgsPoint *p)=0
Point geometry type, with support for z-dimension and m-values.
Definition qgspoint.h:49
Class Vector3D represents a 3D-Vector, capable to store x-,y- and z-coordinates in double values.
Definition Vector3D.h:36
#define SIP_TRANSFER
Definition qgis_sip.h:36
#define SIP_OUT
Definition qgis_sip.h:58
#define QgsDebugError(str)
Definition qgslogger.h:38