Panda3D
Public Member Functions | Static Public Member Functions | Public Attributes | Protected Member Functions

NurbsCurveEvaluator Class Reference

This class is an abstraction for evaluating NURBS curves. More...

#include "nurbsCurveEvaluator.h"

Inheritance diagram for NurbsCurveEvaluator:
ReferenceCount MemoryBase

List of all members.

Public Member Functions

float get_extended_vertex (int i, int d) const
 Returns an n-dimensional vertex value.
float get_knot (int i) const
 Returns the value of the nth knot.
int get_num_knots () const
 Returns the number of knot values in the curve.
int get_num_segments () const
 Returns the number of piecewise continuous segments in the curve.
int get_num_vertices () const
 Returns the number of control vertices in the curve.
int get_order () const
 Returns the order of the curve as set by a previous call to set_order().
int get_ref_count () const
 Returns the current reference count.
const LVecBase4fget_vertex (int i) const
 Returns the nth control vertex of the curve, relative to its indicated coordinate space.
LVecBase4f get_vertex (int i, const NodePath &rel_to) const
 Returns the nth control vertex of the curve, relative to the given coordinate space.
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.
void get_vertices (pvector< LVecBase4f > &verts, const NodePath &rel_to) const
 Fills the indicated vector with the set of vertices in the curve, transformed to the given space.
void get_vertices (pvector< LPoint3f > &verts, const NodePath &rel_to) const
 Fills the indicated vector with the set of vertices in the curve, transformed to the given space.
WeakReferenceListget_weak_list () const
 Returns the WeakReferenceList associated with this ReferenceCount object.
bool has_weak_list () const
 Returns true if this particular ReferenceCount object has a WeakReferenceList created, false otherwise.
void local_object ()
 This function should be called, once, immediately after creating a new instance of some ReferenceCount-derived object on the stack.
 MAKE_SEQ (get_knots, get_num_knots, get_knot)
 MAKE_SEQ (get_vertices, get_num_vertices, get_vertex)
void normalize_knots ()
 Normalizes the knot sequence so that the parametric range of the curve is 0 .
void operator delete (void *ptr)
void operator delete (void *ptr, void *)
void operator delete[] (void *, void *)
void operator delete[] (void *ptr)
void * operator new (size_t size)
void * operator new (size_t size, void *ptr)
void * operator new[] (size_t size, void *ptr)
void * operator new[] (size_t size)
void output (ostream &out) const
 PT (NurbsCurveResult) evaluate(const NodePath &rel_to
 PT (NurbsCurveResult) evaluate(const NodePath &rel_to
void ref () const
 Explicitly increments the reference count.
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.
void set_extended_vertex (int i, int d, float value)
 Sets an n-dimensional vertex value.
void set_extended_vertices (int i, int d, const float 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.
void set_knot (int i, float knot)
 Sets the value of the nth knot.
void set_order (int order)
 Sets the order of the curve.
void set_vertex (int i, const LVecBase3f &vertex, float weight=1.0)
 Sets the nth control vertex of the curve.
void set_vertex (int i, const LVecBase4f &vertex)
 Sets the nth control vertex of the curve, as a vertex in 4-d homogeneous space.
void set_vertex_space (int i, const string &space)
 Sets the coordinate space of the nth control vertex.
void set_vertex_space (int i, const NodePath &space)
 Sets the coordinate space of the nth control vertex.
bool test_ref_count_integrity () const
 Does some easy checks to make sure that the reference count isn't completely bogus.
bool test_ref_count_nonzero () const
 Does some easy checks to make sure that the reference count isn't zero, or completely bogus.
virtual bool unref () const
 Explicitly decrements the reference count.
void weak_ref (WeakPointerToVoid *ptv)
 Adds the indicated PointerToVoid as a weak reference to this object.
void weak_unref (WeakPointerToVoid *ptv)
 Removes the indicated PointerToVoid as a weak reference to this object.

Static Public Member Functions

static TypeHandle get_class_type ()
static void init_type ()

Public Attributes

const LMatrix4f &mat const

Protected Member Functions

bool do_test_ref_count_integrity () const
 Does some easy checks to make sure that the reference count isn't completely bogus.
bool do_test_ref_count_nonzero () const
 Returns true if the reference count is nonzero, false otherwise.

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.

Definition at line 43 of file nurbsCurveEvaluator.h.


Member Function Documentation

bool ReferenceCount::do_test_ref_count_integrity ( ) const [protected, inherited]

Does some easy checks to make sure that the reference count isn't completely bogus.

Returns true if ok, false otherwise.

Reimplemented in NodeReferenceCount, CachedTypedWritableReferenceCount, and NodeCachedReferenceCount.

Definition at line 29 of file referenceCount.cxx.

Referenced by ReferenceCount::do_test_ref_count_nonzero(), and ReferenceCount::test_ref_count_integrity().

bool ReferenceCount::do_test_ref_count_nonzero ( ) const [protected, inherited]

Returns true if the reference count is nonzero, false otherwise.

Definition at line 56 of file referenceCount.cxx.

References ReferenceCount::do_test_ref_count_integrity().

Referenced by ReferenceCount::test_ref_count_nonzero().

float NurbsCurveEvaluator::get_extended_vertex ( int  i,
int  d 
) const [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.

float NurbsCurveEvaluator::get_knot ( int  i) const

Returns the value of the nth knot.

Definition at line 116 of file nurbsCurveEvaluator.cxx.

int NurbsCurveEvaluator::get_num_knots ( ) const [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.

int NurbsCurveEvaluator::get_num_segments ( ) const [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().

int NurbsCurveEvaluator::get_num_vertices ( ) const [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.

Referenced by normalize_knots().

int NurbsCurveEvaluator::get_order ( ) const [inline]

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

Definition at line 40 of file nurbsCurveEvaluator.I.

int ReferenceCount::get_ref_count ( ) const [inline, inherited]
LVecBase4f NurbsCurveEvaluator::get_vertex ( int  i,
const NodePath rel_to 
) const [inline]

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

Definition at line 104 of file nurbsCurveEvaluator.I.

References LVecBase4f::zero().

const LVecBase4f & NurbsCurveEvaluator::get_vertex ( int  i) const [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 get_vertices().

NodePath NurbsCurveEvaluator::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.

Definition at line 66 of file nurbsCurveEvaluator.cxx.

void NurbsCurveEvaluator::get_vertices ( pvector< LVecBase4f > &  verts,
const NodePath rel_to 
) const

Fills the indicated vector with the set of vertices in the curve, transformed to the given space.

This flavor returns the vertices in 4-dimensional homogenous space.

Definition at line 223 of file nurbsCurveEvaluator.cxx.

References get_vertex().

void NurbsCurveEvaluator::get_vertices ( pvector< LPoint3f > &  verts,
const NodePath rel_to 
) const

Fills the indicated vector with the set of vertices in the curve, transformed to the given space.

This flavor returns the vertices in 3-dimensional space.

Definition at line 241 of file nurbsCurveEvaluator.cxx.

References get_vertex().

WeakReferenceList * ReferenceCount::get_weak_list ( ) const [inline, inherited]

Returns the WeakReferenceList associated with this ReferenceCount object.

If there has never been a WeakReferenceList associated with this object, creates one now.

Definition at line 307 of file referenceCount.I.

Referenced by ReferenceCount::weak_ref().

bool ReferenceCount::has_weak_list ( ) const [inline, inherited]

Returns true if this particular ReferenceCount object has a WeakReferenceList created, false otherwise.

In general, this will be true if there was ever a WeakPointerTo created for this object (even if there is not any for it now).

Definition at line 294 of file referenceCount.I.

Referenced by ReferenceCount::weak_unref().

void ReferenceCount::local_object ( ) [inline, inherited]

This function should be called, once, immediately after creating a new instance of some ReferenceCount-derived object on the stack.

This allows the object to be passed to functions that will increment and decrement the object's reference count temporarily, and it will prevent the object from being deleted (inappropriately), when the reference count returns to zero. It actually achieves this by setting a large positive value in the reference count field.

Definition at line 276 of file referenceCount.I.

Referenced by PGTop::cull_callback(), BoundingSphere::extend_by_hexahedron(), AsyncTaskManager::find_task(), AsyncTaskManager::find_tasks(), and AsyncTaskManager::find_tasks_matching().

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 get_num_vertices().

void ReferenceCount::ref ( ) const [inline, inherited]

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.

This function is const, even though it changes the object, because generally fiddling with an object's reference count isn't considered part of fiddling with the object. An object might be const in other ways, but we still need to accurately count the number of references to it.

Definition at line 179 of file referenceCount.I.

References ReferenceCount::test_ref_count_integrity().

Referenced by CachedTypedWritableReferenceCount::cache_ref(), TypedWritable::decode_raw_from_bam_stream(), NodeCachedReferenceCount::node_ref(), NodeReferenceCount::node_ref(), BamCacheRecord::set_data(), CullableObject::set_draw_callback(), and ModelRoot::set_reference().

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.

void NurbsCurveEvaluator::set_extended_vertex ( int  i,
int  d,
float  value 
) [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.

void NurbsCurveEvaluator::set_extended_vertices ( int  i,
int  d,
const float  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.

void NurbsCurveEvaluator::set_knot ( 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.

Definition at line 102 of file nurbsCurveEvaluator.cxx.

void NurbsCurveEvaluator::set_order ( int  order) [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.

void NurbsCurveEvaluator::set_vertex ( int  i,
const LVecBase3f vertex,
float  weight = 1.0 
) [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.

void NurbsCurveEvaluator::set_vertex ( int  i,
const LVecBase4f vertex 
) [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.

void NurbsCurveEvaluator::set_vertex_space ( int  i,
const NodePath space 
) [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.

void NurbsCurveEvaluator::set_vertex_space ( int  i,
const string &  space 
) [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.

bool ReferenceCount::test_ref_count_integrity ( ) const [inline, inherited]
bool ReferenceCount::test_ref_count_nonzero ( ) const [inline, inherited]

Does some easy checks to make sure that the reference count isn't zero, or completely bogus.

Returns true if ok, false otherwise.

Definition at line 252 of file referenceCount.I.

References ReferenceCount::do_test_ref_count_nonzero().

Referenced by CopyOnWritePointer::test_ref_count_nonzero().

bool ReferenceCount::unref ( ) const [inline, virtual, inherited]

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

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.

This function is const, even though it changes the object, because generally fiddling with an object's reference count isn't considered part of fiddling with the object. An object might be const in other ways, but we still need to accurately count the number of references to it.

The return value is true if the new reference count is nonzero, false if it is zero.

Reimplemented in GeomVertexArrayFormat, GeomVertexFormat, InternalName, RenderAttrib, RenderEffects, RenderState, and TransformState.

Definition at line 214 of file referenceCount.I.

References ReferenceCount::test_ref_count_integrity().

Referenced by CachedTypedWritableReferenceCount::cache_unref(), TypedWritable::decode_raw_from_bam_stream(), RenderEffect::finalize(), NodeCachedReferenceCount::node_unref(), NodeReferenceCount::node_unref(), TransformState::unref(), RenderState::unref(), RenderEffects::unref(), RenderAttrib::unref(), InternalName::unref(), GeomVertexFormat::unref(), and GeomVertexArrayFormat::unref().

void ReferenceCount::weak_ref ( WeakPointerToVoid ptv) [inline, inherited]

Adds the indicated PointerToVoid as a weak reference to this object.

Definition at line 321 of file referenceCount.I.

References WeakReferenceList::add_reference(), and ReferenceCount::get_weak_list().

void ReferenceCount::weak_unref ( WeakPointerToVoid ptv) [inline, inherited]

Removes the indicated PointerToVoid as a weak reference to this object.

It must have previously been added via a call to weak_ref().

Definition at line 334 of file referenceCount.I.

References WeakReferenceList::clear_reference(), and ReferenceCount::has_weak_list().


The documentation for this class was generated from the following files:
 All Classes Functions Variables Enumerations