Panda3D
|
This class is an abstraction for evaluating NURBS curves. More...
#include "nurbsCurveEvaluator.h"
Public Types | |
typedef pvector< LPoint3 > | Vert3Array |
typedef epvector< LVecBase4 > | Vert4Array |
Public Member Functions | |
PN_stdfloat | get_extended_vertex (int i, int d) const |
Returns an n-dimensional vertex value. More... | |
PN_stdfloat | get_knot (int i) const |
Returns the value of the nth knot. More... | |
int | get_num_knots () const |
Returns the number of knot values in the curve. More... | |
int | get_num_segments () const |
Returns the number of piecewise continuous segments in the curve. More... | |
int | get_num_vertices () const |
Returns the number of control vertices in the curve. More... | |
int | get_order () const |
Returns the order of the curve as set by a previous call to set_order(). More... | |
const LVecBase4 & | get_vertex (int i) const |
Returns the nth control vertex of the curve, relative to its indicated coordinate space. More... | |
LVecBase4 | get_vertex (int i, const NodePath &rel_to) const |
Returns the nth control vertex of the curve, relative to the given coordinate space. More... | |
NodePath | get_vertex_space (int i, const NodePath &rel_to) const |
Returns the coordinate space of the nth control vertex of the curve, expressed as a NodePath. More... | |
void | get_vertices (Vert4Array &verts, const NodePath &rel_to) const |
void | get_vertices (Vert3Array &verts, const NodePath &rel_to) const |
MAKE_SEQ (get_vertices, get_num_vertices, get_vertex) | |
MAKE_SEQ (get_knots, get_num_knots, get_knot) | |
void | normalize_knots () |
Normalizes the knot sequence so that the parametric range of the curve is 0 . More... | |
void | output (ostream &out) const |
PT (NurbsCurveResult) evaluate(const NodePath &rel_to | |
PT (NurbsCurveResult) evaluate(const NodePath &rel_to | |
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. More... | |
void | set_extended_vertex (int i, int d, PN_stdfloat value) |
Sets an n-dimensional vertex value. More... | |
void | set_extended_vertices (int i, int d, const PN_stdfloat 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. More... | |
void | set_knot (int i, PN_stdfloat knot) |
Sets the value of the nth knot. More... | |
void | set_order (int order) |
Sets the order of the curve. More... | |
void | set_vertex (int i, const LVecBase4 &vertex) |
Sets the nth control vertex of the curve, as a vertex in 4-d homogeneous space. More... | |
void | set_vertex (int i, const LVecBase3 &vertex, PN_stdfloat weight=1.0) |
Sets the nth control vertex of the curve. More... | |
void | set_vertex_space (int i, const NodePath &space) |
Sets the coordinate space of the nth control vertex. More... | |
void | set_vertex_space (int i, const string &space) |
Sets the coordinate space of the nth control vertex. More... | |
![]() | |
int | get_ref_count () const |
Returns the current reference count. More... | |
WeakReferenceList * | get_weak_list () const |
Returns the WeakReferenceList associated with this ReferenceCount object. More... | |
bool | has_weak_list () const |
Returns true if this particular ReferenceCount object has a WeakReferenceList created, false otherwise. More... | |
void | local_object () |
This function should be called, once, immediately after creating a new instance of some ReferenceCount-derived object on the stack. More... | |
void | ref () const |
Explicitly increments the reference count. More... | |
bool | test_ref_count_integrity () const |
Does some easy checks to make sure that the reference count isn't completely bogus. More... | |
bool | test_ref_count_nonzero () const |
Does some easy checks to make sure that the reference count isn't zero, or completely bogus. More... | |
virtual bool | unref () const |
Explicitly decrements the reference count. More... | |
void | weak_ref (WeakPointerToVoid *ptv) |
Adds the indicated PointerToVoid as a weak reference to this object. More... | |
void | weak_unref (WeakPointerToVoid *ptv) |
Removes the indicated PointerToVoid as a weak reference to this object. More... | |
Public Attributes | |
const LMatrix4 &mat | const |
Additional Inherited Members | |
![]() | |
static TypeHandle | get_class_type () |
static void | init_type () |
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 NurbsCurve, CubicCurveseg or 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 ParametricCurve class hierarchy.
Definition at line 44 of file nurbsCurveEvaluator.h.
|
inline |
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.
Definition at line 191 of file nurbsCurveEvaluator.I.
References get_num_knots().
Referenced by set_extended_vertex().
PN_stdfloat NurbsCurveEvaluator::get_knot | ( | int | i | ) | const |
Returns the value of the nth knot.
Definition at line 116 of file nurbsCurveEvaluator.cxx.
References normalize_knots().
Referenced by set_knot().
|
inline |
Returns the number of knot values in the curve.
This is based on the number of vertices and the order.
Definition at line 203 of file nurbsCurveEvaluator.I.
References get_num_segments().
Referenced by get_extended_vertex(), and normalize_knots().
|
inline |
Returns the number of piecewise continuous segments in the curve.
This is based on the knot vector.
Definition at line 214 of file nurbsCurveEvaluator.I.
References NurbsBasisVector::get_num_segments().
Referenced by get_num_knots().
|
inline |
Returns the number of control vertices in the curve.
This is the number passed to the last call to reset().
Definition at line 52 of file nurbsCurveEvaluator.I.
References set_vertex().
Referenced by BulletSoftBodyNode::get_closest_node_index(), get_order(), and normalize_knots().
|
inline |
Returns the order of the curve as set by a previous call to set_order().
Definition at line 40 of file nurbsCurveEvaluator.I.
References get_num_vertices().
Referenced by set_order().
|
inline |
Returns the nth control vertex of the curve, relative to its indicated coordinate space.
Definition at line 92 of file nurbsCurveEvaluator.I.
References LVecBase4f::zero().
Referenced by normalize_knots(), and set_vertex().
Returns the nth control vertex of the curve, relative to the given coordinate space.
Definition at line 104 of file nurbsCurveEvaluator.I.
References set_vertex_space(), and LVecBase4f::zero().
Returns the coordinate space of the nth control vertex of the curve, expressed as a NodePath.
Definition at line 66 of file nurbsCurveEvaluator.cxx.
References set_extended_vertices().
Referenced by reset().
void NurbsCurveEvaluator::normalize_knots | ( | ) |
Normalizes the knot sequence so that the parametric range of the curve is 0 .
. 1.
Definition at line 131 of file nurbsCurveEvaluator.cxx.
References NurbsBasisVector::append_segment(), NurbsBasisVector::clear(), get_num_knots(), get_num_vertices(), and get_vertex().
Referenced by get_knot().
void NurbsCurveEvaluator::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.
Definition at line 48 of file nurbsCurveEvaluator.cxx.
References get_vertex_space().
|
inline |
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.
Definition at line 177 of file nurbsCurveEvaluator.I.
References get_extended_vertex().
Referenced by set_vertex_space().
void NurbsCurveEvaluator::set_extended_vertices | ( | int | i, |
int | d, | ||
const PN_stdfloat | 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 set_extended_vertex().
Definition at line 84 of file nurbsCurveEvaluator.cxx.
References set_knot().
Referenced by get_vertex_space().
void NurbsCurveEvaluator::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.
Definition at line 102 of file nurbsCurveEvaluator.cxx.
References get_knot().
Referenced by set_extended_vertices().
|
inline |
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.
Definition at line 27 of file nurbsCurveEvaluator.I.
References get_order().
|
inline |
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.
Definition at line 66 of file nurbsCurveEvaluator.I.
Referenced by get_num_vertices().
|
inline |
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.
Definition at line 80 of file nurbsCurveEvaluator.I.
References get_vertex().
|
inline |
Sets the coordinate space of the nth control vertex.
If this is not specified, or is set to an empty NodePath, the nth control vertex is deemed to be in the coordinate space passed to evaluate().
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 NodePath for different instances of the curve.
Definition at line 131 of file nurbsCurveEvaluator.I.
Referenced by get_vertex().
|
inline |
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 evaluate().
This specifies the space as a string, which describes the path to find the node relative to the rel_to NodePath when the curve is evaluated.
Definition at line 149 of file nurbsCurveEvaluator.I.
References set_extended_vertex().