This class is an abstraction for evaluating NURBS curves. It accepts an array of vertices, each of which may be in a different coordinate space (as defined by a
NodePath), as well as an optional knot vector.
This is not related to
CubicCurvesegor any of the ParametricCurve-derived objects in this module. It is a completely parallel implementation of NURBS curves, and will probably eventually replace the whole
PointerTo<NurbsCurveResult> evaluate(NodePath const &rel_to, LMatrix4 const &mat) const
NurbsCurveResultobject that represents the result of applying the knots to all of the current values of the vertices, transformed into the indicated coordinate space.
NurbsCurveResultobject that represents the result of applying the knots to all of the current values of the vertices, transformed into the indicated coordinate space, and then further transformed by the indicated matrix.
PN_stdfloat get_extended_vertex(int i, int d) const
Returns an n-dimensional vertex value. See
set_extended_vertex(). This returns the value set for the indicated dimension, or 0.0 if nothing has been set.
PN_stdfloat get_knot(int i) const
Returns the value of the nth knot.
int get_num_knots(void) const
Returns the number of knot values in the curve. This is based on the number of vertices and the order.
int get_num_segments(void) const
Returns the number of piecewise continuous segments in the curve. This is based on the knot vector.
int get_num_vertices(void) const
Returns the number of control vertices in the curve. This is the number passed to the last call to
LVecBase4 get_vertex(int i, NodePath const &rel_to) const
Returns the nth control vertex of the curve, relative to its indicated coordinate space.
Returns the nth control vertex of the curve, relative to the given coordinate space.
NodePath get_vertex_space(int i, NodePath const &rel_to) const
Returns the coordinate space of the nth control vertex of the curve, expressed as a
Normalizes the knot sequence so that the parametric range of the curve is 0 .. 1.
void output(std::ostream &out) const
void reset(int num_vertices)
Resets all the vertices and knots to their default values, and sets the curve up with the indicated number of vertices. You must then call
set_vertex()repeatedly to fill in all of the vertex values appropriately.
void set_extended_vertex(int i, int d, PN_stdfloat value)
Sets an n-dimensional vertex value. This allows definition of a NURBS surface or curve in a sparse n-dimensional space, typically used for associating additional properties (like color or joint membership) with each vertex of a surface.
The value d is an arbitrary integer value and specifies the dimension of question for this particular vertex. Any number of dimensions may be specified, and they need not be consecutive. If a value for a given dimension is not specified, is it implicitly 0.0.
The value is implicitly scaled by the homogenous weight value–that is, the fourth component of the value passed to
set_vertex(). This means the ordinary vertex must be set first, before the extended vertices can be set.
void set_extended_vertices(int i, int d, PN_stdfloat const values, int num_values)
Simultaneously sets several extended values in the slots d through (d + num_values - 1) from the num_values elements of the indicated array. This is equivalent to calling
set_extended_vertex()num_values times. See
void set_knot(int i, PN_stdfloat knot)
Sets the value of the nth knot. Each knot value should be greater than or equal to the preceding value. If no knot values are set, a default knot vector is supplied.
void set_order(int order)
Sets the order of the curve. This resets the knot vector to the default knot vector for the number of vertices.
The order must be 1, 2, 3, or 4, and the value is one more than the degree of the curve.
void set_vertex(int i, LVecBase3 const &vertex, PN_stdfloat weight = 1.0)
Sets the nth control vertex of the curve, as a vertex in 4-d homogeneous space. In this form, the first three components of the vertex should already have been scaled by the fourth component, which is the homogeneous weight.
Sets the nth control vertex of the curve. This flavor sets the vertex as a 3-d coordinate and a weight; the 3-d coordinate values are implicitly scaled up by the weight factor.
void set_vertex_space(int i, std::string const &space)
This specifies the space as a fixed
NodePath, which is always the same
NodePath. Also see setting the space as a path string, which can specify a different
NodePathfor different instances of the curve.
Sets the coordinate space of the nth control vertex. If this is not specified, or is set to an empty string, the nth control vertex is deemed to be in the coordinate space passed to
This specifies the space as a string, which describes the path to find the node relative to the rel_to
NodePathwhen the curve is evaluated.