Tulip 5.7.1
Large graphs analysis and drawing
Loading...
Searching...
No Matches
GlBezierCurve.h
1/*
2 *
3 * This file is part of Tulip (https://tulip.labri.fr)
4 *
5 * Authors: David Auber and the Tulip development Team
6 * from LaBRI, University of Bordeaux
7 *
8 * Tulip is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU Lesser General Public License
10 * as published by the Free Software Foundation, either version 3
11 * of the License, or (at your option) any later version.
12 *
13 * Tulip is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16 * See the GNU General Public License for more details.
17 *
18 */
19
20#ifndef GLBEZIERCURVE_H_
21#define GLBEZIERCURVE_H_
22
23#include <tulip/AbstractGlCurve.h>
24
25namespace tlp {
26
27/**
28 * @ingroup OpenGL
29 * @brief A class to draw Bezier curves
30 *
31 * This class allows to draw Bezier curves defined by an arbitrary number of control points.
32 * Bezier curves are named after their inventor, Dr. Pierre Bezier. He was an engineer with the
33 * Renault car company and set out in the early 1960's to develop a curve formulation which would
34 * lend itself to shape design.
35 * Bezier curves are widely used in computer graphics to model smooth curves. A Bezier curve is
36 * completely contained in the convex hull of its control points and passes through its first and
37 * last control points. The curve is also always tangent to the first and last convex hull polygon
38 * segments.
39 * In addition, the curve shape tends to follow the polygon shape.
40 *
41 */
42class TLP_GL_SCOPE GlBezierCurve : public AbstractGlCurve {
43
44public:
46
47 /**
48 * @brief GlBezierCurve constructor
49 *
50 * @param controlPoints a vector of control points (size must be greater or equal to 2)
51 * @param startColor the color at the start of the curve
52 * @param endColor the color at the end of the curve
53 * @param startSize the width at the start of the curve
54 * @param endSize the width at the end of the curve
55 * @param nbCurvePoints the number of curve points to generate
56 */
57 GlBezierCurve(const std::vector<Coord> &controlPoints, const Color &startColor,
58 const Color &endColor, const float &startSize, const float &endSize,
59 const unsigned int nbCurvePoints = 200);
60
61 ~GlBezierCurve() override;
62
63 void drawCurve(std::vector<Coord> &controlPoints, const Color &startColor, const Color &endColor,
64 const float startSize, const float endSize,
65 const unsigned int nbCurvePoints = 200) override;
66
67protected:
68 Coord computeCurvePointOnCPU(const std::vector<Coord> &controlPoints, float t) override;
69
70 void computeCurvePointsOnCPU(const std::vector<Coord> &controlPoints,
71 std::vector<Coord> &curvePoints,
72 unsigned int nbCurvePoints) override;
73
74 std::string genCurveVertexShaderSpecificCode();
75};
76} // namespace tlp
77#endif /* GLBEZIERCURVE_H_ */
A class to draw Bezier curves.
Definition: GlBezierCurve.h:42
GlBezierCurve(const std::vector< Coord > &controlPoints, const Color &startColor, const Color &endColor, const float &startSize, const float &endSize, const unsigned int nbCurvePoints=200)
GlBezierCurve constructor.