Panda3D
Public Member Functions | List of all members
NurbsCurveEvaluator Class Reference

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. More...

Inheritance diagram for NurbsCurveEvaluator:
ReferenceCount MemoryBase

Public Member Functions

 __init__ ()
 
NurbsCurveResult evaluate (const NodePath rel_to)
 Returns a NurbsCurveResult object that represents the result of applying the knots to all of the current values of the vertices, transformed into the indicated coordinate space. More...
 
NurbsCurveResult evaluate (const NodePath rel_to, const LMatrix4 mat)
 Returns a NurbsCurveResult object 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. More...
 
float getExtendedVertex (int i, int d)
 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. More...
 
float getKnot (int i)
 Returns the value of the nth knot. More...
 
list getKnots ()
 
int getNumKnots ()
 Returns the number of knot values in the curve. This is based on the number of vertices and the order. More...
 
int getNumSegments ()
 Returns the number of piecewise continuous segments in the curve. This is based on the knot vector. More...
 
int getNumVertices ()
 Returns the number of control vertices in the curve. This is the number passed to the last call to reset(). More...
 
int getOrder ()
 Returns the order of the curve as set by a previous call to set_order(). More...
 
const LVecBase4 getVertex (int i)
 Returns the nth control vertex of the curve, relative to its indicated coordinate space. More...
 
LVecBase4 getVertex (int i, const NodePath rel_to)
 Returns the nth control vertex of the curve, relative to the given coordinate space. More...
 
NodePath getVertexSpace (int i, const NodePath rel_to)
 Returns the coordinate space of the nth control vertex of the curve, expressed as a NodePath. More...
 
list getVertices ()
 
 normalizeKnots ()
 Normalizes the knot sequence so that the parametric range of the curve is 0 .. 1. More...
 
 output (Ostream out)
 
 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. More...
 
 setExtendedVertex (int i, int d, float 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. More...
 
 setKnot (int i, float 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. More...
 
 setOrder (int order)
 Sets the order of the curve. This resets the knot vector to the default knot vector for the number of vertices. More...
 
 setVertex (int i, const LVecBase3 vertex, float 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. More...
 
 setVertex (int i, const LVecBase4 vertex)
 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. More...
 
 setVertexSpace (int i, const NodePath space)
 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(). More...
 
 setVertexSpace (int i, str space)
 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(). More...
 
- Public Member Functions inherited from ReferenceCount
int getRefCount ()
 Returns the current reference count. More...
 
 ref ()
 Explicitly increments the reference count. User code should avoid using ref() and unref() directly, which can result in missed reference counts. Instead, let a PointerTo object manage the reference counting automatically. More...
 
bool testRefCountIntegrity ()
 Does some easy checks to make sure that the reference count isn't completely bogus. Returns true if ok, false otherwise. More...
 
bool testRefCountNonzero ()
 Does some easy checks to make sure that the reference count isn't zero, or completely bogus. Returns true if ok, false otherwise. More...
 
bool unref ()
 Explicitly decrements the reference count. Note that the object will not be implicitly deleted by unref() simply because the reference count drops to zero. (Having a member function delete itself is problematic.) However, see the helper function unref_delete(). More...
 

Additional Inherited Members

- Static Public Member Functions inherited from ReferenceCount
static TypeHandle getClassType ()
 

Detailed Description

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.

Member Function Documentation

◆ __init__()

__init__ ( )

◆ evaluate() [1/2]

NurbsCurveResult evaluate ( const NodePath  rel_to)

Returns a NurbsCurveResult object that represents the result of applying the knots to all of the current values of the vertices, transformed into the indicated coordinate space.

◆ evaluate() [2/2]

NurbsCurveResult evaluate ( const NodePath  rel_to,
const LMatrix4  mat 
)

Returns a NurbsCurveResult object 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.

◆ getExtendedVertex()

float getExtendedVertex ( int  i,
int  d 
)

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.

◆ getKnot()

float getKnot ( int  i)

Returns the value of the nth knot.

◆ getKnots()

list getKnots ( )

◆ getNumKnots()

int getNumKnots ( )

Returns the number of knot values in the curve. This is based on the number of vertices and the order.

◆ getNumSegments()

int getNumSegments ( )

Returns the number of piecewise continuous segments in the curve. This is based on the knot vector.

◆ getNumVertices()

int getNumVertices ( )

Returns the number of control vertices in the curve. This is the number passed to the last call to reset().

◆ getOrder()

int getOrder ( )

Returns the order of the curve as set by a previous call to set_order().

◆ getVertex() [1/2]

const LVecBase4 getVertex ( int  i)

Returns the nth control vertex of the curve, relative to its indicated coordinate space.

◆ getVertex() [2/2]

LVecBase4 getVertex ( int  i,
const NodePath  rel_to 
)

Returns the nth control vertex of the curve, relative to the given coordinate space.

◆ getVertexSpace()

NodePath getVertexSpace ( int  i,
const NodePath  rel_to 
)

Returns the coordinate space of the nth control vertex of the curve, expressed as a NodePath.

◆ getVertices()

list getVertices ( )

◆ normalizeKnots()

normalizeKnots ( )

Normalizes the knot sequence so that the parametric range of the curve is 0 .. 1.

◆ output()

output ( Ostream  out)

◆ reset()

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.

◆ setExtendedVertex()

setExtendedVertex ( int  i,
int  d,
float  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.

◆ setKnot()

setKnot ( int  i,
float  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.

◆ setOrder()

setOrder ( 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.

◆ setVertex() [1/2]

setVertex ( int  i,
const LVecBase3  vertex,
float  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.

◆ setVertex() [2/2]

setVertex ( int  i,
const LVecBase4  vertex 
)

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.

◆ setVertexSpace() [1/2]

setVertexSpace ( int  i,
const NodePath  space 
)

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.

◆ setVertexSpace() [2/2]

setVertexSpace ( int  i,
str  space 
)

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.