20 #ifndef KJB_gr_spline_H
21 #define KJB_gr_spline_H
30 #ifdef KJB_HAVE_OPENGL
35 class Opengl_nurbs_object
38 Opengl_nurbs_object();
39 Opengl_nurbs_object(GLUnurbsObj* nobj);
40 Opengl_nurbs_object(
const Opengl_nurbs_object& src);
41 virtual ~Opengl_nurbs_object();
43 Opengl_nurbs_object& operator=(
const Opengl_nurbs_object& nobj);
45 void set(GLUnurbsObj* nobj);
46 GLUnurbsObj*
get()
const {
return _my_nobj; }
48 static GLvoid _nurbs_error (
GLenum errorCode);
50 static GLUnurbsObj* _nobj;
51 static int _nobj_ref_count;
53 mutable GLUnurbsObj* _my_nobj;
56 class Opengl_nurbs_callable :
57 public Opengl_callable,
58 public virtual Cloneable
61 Opengl_nurbs_callable(
GLenum type = 0);
62 Opengl_nurbs_callable(
const Opengl_nurbs_callable& src);
63 virtual ~Opengl_nurbs_callable();
65 virtual Opengl_nurbs_callable& operator=(
const Opengl_nurbs_callable& src);
66 virtual Opengl_nurbs_callable* clone()
const = 0;
69 void set_nurbs_object(GLUnurbsObj* nobj);
71 GLUnurbsObj* get_nurbs_object()
const;
73 virtual void gl_call()
const = 0;
75 mutable Opengl_nurbs_object _nobj;
80 class Nurbs_trim_curve
83 virtual void trim()
const = 0;
86 class Gl_nurbs_curve :
public Nurbs_curve,
87 public Opengl_nurbs_callable,
88 public Nurbs_trim_curve,
89 public Generic_renderable
97 std::vector<Vector> ctl_points,
99 Gl_nurbs_curve(
const Gl_nurbs_curve& src);
100 virtual ~Gl_nurbs_curve(){}
102 Gl_nurbs_curve& operator=(
const Gl_nurbs_curve& src);
103 Gl_nurbs_curve* clone()
const;
105 virtual void gl_call()
const;
107 virtual void solid_render()
const {gl_call();}
109 virtual void trim()
const {gl_call();}
113 class Gl_nurbs_surface :
114 public Nurbs_surface,
115 public Opengl_nurbs_callable,
116 public Generic_renderable
122 const float* knots_s,
124 const float* knots_t,
127 const std::vector<std::vector<Vector> >& ctl_points,
128 GLenum type = GL_MAP2_VERTEX_3);
130 Gl_nurbs_surface(
const Gl_nurbs_surface& src);
131 virtual ~Gl_nurbs_surface(){}
133 void init(std::vector<float>& pts,
const std::vector<std::vector<kjb::Vector> >& ctl_points);
135 Gl_nurbs_surface& operator=(
const Gl_nurbs_surface& src);
136 Gl_nurbs_surface* clone()
const;
138 virtual void gl_call()
const;
140 virtual void wire_render()
const;
141 virtual void solid_render()
const {gl_call();}
144 mutable std::vector< float > _ctl_points_flat;
147 class Gl_bezier_curve :
149 public Opengl_nurbs_callable,
150 public Generic_renderable
153 Gl_bezier_curve(
int degree = 3,
int dimension = 3,
GLenum type = GL_MAP1_VERTEX_3);
154 Gl_bezier_curve(
const Gl_bezier_curve& src);
155 virtual ~Gl_bezier_curve() {}
157 Gl_bezier_curve& operator=(
const Gl_bezier_curve& src);
158 Gl_bezier_curve* clone()
const;
160 Gl_nurbs_curve to_gl_nurbs()
const;
162 virtual void gl_call()
const;
164 virtual void solid_render()
const {gl_call();}
170 class Gl_polybezier_curve :
171 public Polybezier_curve,
172 public Opengl_nurbs_callable,
173 public Generic_renderable
176 Gl_polybezier_curve(
int dimension = 3,
GLenum type = GL_MAP1_VERTEX_3);
177 Gl_polybezier_curve(
const Gl_polybezier_curve& src);
178 virtual ~Gl_polybezier_curve() {}
180 Gl_polybezier_curve& operator=(
const Gl_polybezier_curve& src);
181 virtual Gl_polybezier_curve* clone()
const {
return new Gl_polybezier_curve(*
this);}
183 virtual Gl_nurbs_curve to_gl_nurbs()
const;
185 virtual void gl_call()
const;
187 virtual void solid_render()
const {gl_call();}
Definitions of spline classes.
Abstract class to render this object with GL.
Abstract class to clone this object.
Definition for the Vector class, a thin wrapper on the KJB Vector struct and its related functionalit...