BezierCurve.h
1 /******************************************************************************
2 
3  (c) 2004-2014 Scientific Computation Research Center,
4  Rensselaer Polytechnic Institute. All rights reserved.
5 
6  The LICENSE-SCOREC file included with this distribution describes the terms
7  of the SCOREC Non-Commercial License this program is distributed under.
8 
9 *******************************************************************************/
10 #ifndef BEZIERCURVE_H
11 #define BEZIERCURVE_H
12 
13 #include <iostream>
14 #include <vector>
15 #include <string>
16 #include "ParametricCurve.h"
17 
21 
22  public:
23 
25  virtual ~BezierCurve()
26  {
27  }
28 
30  inline int subdiv(double in_param,
31  Point3d * out_left_xyz,
32  Point3d * out_right_xyz)
33  {
34  return v_subdiv(in_param, out_left_xyz, out_right_xyz);
35  }
36 
38  inline bool is_ctrl_pts_colinear()
39  {
40  return v_is_ctrl_pts_colinear();
41  }
42 
44  void get_all_ctrl_pts(Point3d * out_ctrl_pts);
45 
47  void get_ctrl_pt(int index, Point3d & out_pt);
48 
49  private:
51  virtual int v_eval(double in_param, Point3d & out_xyz);
52 
54  virtual int v_deriv1(double in_param, Point3d & out_xyz);
55 
57  virtual bool v_is_ctrl_pts_colinear()
58  {
59  return false;
60  }
61 
63  virtual int v_subdiv(double in_param, Point3d * out_left_xyz, Point3d * out_right_xyz) = 0;
64 
65  protected:
66 
68  Point3d * m_ctrl_pts_;
69 
71  void checkInputParam(double in_t)
72  {
74  assert( in_t >= 0.0 && in_t <= 1.0 );
75  }
76 
77 };
78 
79 
82 class BezierCurve1 : public BezierCurve {
83 
84  public:
85 
86  BezierCurve1(Point3d in_P0,
87  Point3d in_P1);
88 
89  ~BezierCurve1();
90 
91  private:
92  BezierCurve1();
93  virtual int v_order(void);
94  virtual int v_subdiv(double in_param,
95  Point3d * out_left_xyz,
96  Point3d * out_right_xyz);
97  virtual bool v_is_ctrl_pts_colinear();
98 
99 };
100 
102 class BezierCurve2 : public BezierCurve {
103 
104  public:
105 
106  BezierCurve2(Point3d in_P0,
107  Point3d in_P1,
108  Point3d in_P2);
109 
110  ~BezierCurve2();
111 
112  private:
113  BezierCurve2();
114  virtual int v_order(void);
115  virtual int v_subdiv(double in_param,
116  Point3d * out_left_xyz,
117  Point3d * out_right_xyz);
118  virtual bool v_is_ctrl_pts_colinear();
119 
120 };
121 
123 class BezierCurve3 : public BezierCurve {
124 
125  public:
126 
127  BezierCurve3(Point3d in_P0,
128  Point3d in_P1,
129  Point3d in_P2,
130  Point3d in_P3);
131 
132  ~BezierCurve3();
133 
134 
135  private:
136  BezierCurve3();
137  virtual int v_order(void) ;
138  virtual int v_subdiv(double in_param,
139  Point3d * out_left_xyz,
140  Point3d * out_right_xyz);
141 };
142 
144 class BezierCurve4 : public BezierCurve {
145 
146  public:
147 
148  BezierCurve4(Point3d in_P0,
149  Point3d in_P1,
150  Point3d in_P2,
151  Point3d in_P3,
152  Point3d in_P4);
153 
154  ~BezierCurve4();
155 
156  private:
157 
158  BezierCurve4();
159  virtual int v_order(void) ;
160  virtual int v_subdiv(double in_param,
161  Point3d * out_left_xyz,
162  Point3d * out_right_xyz);
163 };
164 
168 class BezierCurve5 : public BezierCurve {
169  public:
171  BezierCurve5(Point3d in_P0,
172  Point3d in_P1,
173  Point3d in_P2,
174  Point3d in_P3,
175  Point3d in_P4,
176  Point3d in_P5);
178  ~BezierCurve5();
179 
180  private:
182  BezierCurve5();
183  virtual int v_order(void) ;
184  virtual int v_subdiv(double in_param,
185  Point3d * out_left_xyz,
186  Point3d * out_right_xyz);
187 };
188 #endif //BEZIERCURVE_H
189 
~BezierCurve5()
dtor
Definition: BezierCurve.cc:298
BezierCurve1()
1st order bezier curve
Definition: BezierCurve.cc:56
interface class for all parametric curves The parametric curves use the same coordinate system as the...
Definition: ParametricCurve.h:18
BezierCurve5()
default ctor – disabled
Definition: BezierCurve.cc:303
int subdiv(double in_param, Point3d *out_left_xyz, Point3d *out_right_xyz)
interface function to perform Bezier curve sub-division
Definition: BezierCurve.h:30
BezierCurve2()
2nd order bezier curve
Definition: BezierCurve.cc:103
1st order bezier curve
Definition: BezierCurve.h:82
void get_ctrl_pt(int index, Point3d &out_pt)
get the i'th control point of the curve
Definition: BezierCurve.cc:23
virtual int v_subdiv(double in_param, Point3d *out_left_xyz, Point3d *out_right_xyz)
calculates sub-division and returns new sub-curves
Definition: BezierCurve.cc:77
An implementation of 5th order bezier curve.
Definition: BezierCurve.h:168
virtual bool v_is_ctrl_pts_colinear()
return if all control points are co-linear
Definition: BezierCurve.cc:95
virtual int v_subdiv(double in_param, Point3d *out_left_xyz, Point3d *out_right_xyz)
calculates sub-division and returns new sub-curves
Definition: BezierCurve.cc:126
2nd order bezier curve
Definition: BezierCurve.h:102
virtual bool v_is_ctrl_pts_colinear()
return if all control points are co-linear
Definition: BezierCurve.cc:144
virtual bool v_is_ctrl_pts_colinear()
return if all control points are co-linear
Definition: BezierCurve.h:57
void checkInputParam(double in_t)
check if input parameter is within range
Definition: BezierCurve.h:71
virtual int v_deriv1(double in_param, Point3d &out_xyz)
evaluate first derivatives w.r.t. param coord
Definition: BezierCurve.cc:43
void get_all_ctrl_pts(Point3d *out_ctrl_pts)
get all the control points of the curve
Definition: BezierCurve.cc:16
virtual int v_eval(double in_param, Point3d &out_xyz)
evaluate Cartesian coordinates based on input param coord
Definition: BezierCurve.cc:29
virtual int v_subdiv(double in_param, Point3d *out_left_xyz, Point3d *out_right_xyz)
calculates sub-division and returns new sub-curves
Definition: BezierCurve.cc:190
BezierCurve3()
3rd order bezier curve
Definition: BezierCurve.cc:165
virtual int v_subdiv(double in_param, Point3d *out_left_xyz, Point3d *out_right_xyz)=0
calculates sub-division and returns new sub-curves
virtual int v_subdiv(double in_param, Point3d *out_left_xyz, Point3d *out_right_xyz)
calculates sub-division and returns new sub-curves
Definition: BezierCurve.cc:242
virtual int v_subdiv(double in_param, Point3d *out_left_xyz, Point3d *out_right_xyz)
Definition: BezierCurve.cc:314
3rd order bezier curve
Definition: BezierCurve.h:123
Point3d * m_ctrl_pts_
control point data container
Definition: BezierCurve.h:68
bool is_ctrl_pts_colinear()
returns if the control points are colinear
Definition: BezierCurve.h:38
virtual ~BezierCurve()
destructor
Definition: BezierCurve.h:25
4th order bezier curve
Definition: BezierCurve.h:144
abstract base class and interface for bezier curves
Definition: BezierCurve.h:20