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

This is a set of zero or more ParametricCurves, which may or may not be related. More...

#include "parametricCurveCollection.h"

Inheritance diagram for ParametricCurveCollection:
ReferenceCount MemoryBase

Public Member Functions

void add_curve (ParametricCurve *curve)
 Adds a new ParametricCurve to the collection. More...
 
void add_curve (ParametricCurve *curve, int index)
 Adds a new ParametricCurve to the collection at the indicated index. More...
 
int add_curves (PandaNode *node)
 Adds all the curves found in the scene graph rooted at the given node. More...
 
bool adjust_hpr (PN_stdfloat t, PN_stdfloat h, PN_stdfloat p, PN_stdfloat r)
 Adjust the HPR curve at the indicated time to the new value. More...
 
bool adjust_hpr (PN_stdfloat t, const LVecBase3 &xyz)
 Adjust the HPR curve at the indicated time to the new value. More...
 
bool adjust_xyz (PN_stdfloat t, PN_stdfloat x, PN_stdfloat y, PN_stdfloat z)
 Adjust the XYZ curve at the indicated time to the new value. More...
 
bool adjust_xyz (PN_stdfloat t, const LVecBase3 &xyz)
 Adjust the XYZ curve at the indicated time to the new value. More...
 
void clear ()
 Removes all ParametricCurves from the collection. More...
 
void clear_timewarps ()
 Removes all the timewarp curves from the collection. More...
 
bool evaluate (PN_stdfloat t, LVecBase3 &xyz, LVecBase3 &hpr) const
 Computes the position and rotation represented by the first XYZ and HPR curves in the collection at the given point t, after t has been modified by all the timewarp curves in the collection applied in sequence, from back to front. More...
 
bool evaluate (PN_stdfloat t, LMatrix4 &result, CoordinateSystem cs=CS_default) const
 Computes the transform matrix representing translation to the position indicated by the first XYZ curve in the collection and the rotation indicated by the first HPR curve in the collection, after t has been modified by all the timewarp curves in the collection applied in sequence, from back to front. More...
 
bool evaluate_hpr (PN_stdfloat t, LVecBase3 &hpr) const
 Computes only the HPR part of the curves. More...
 
PN_stdfloat evaluate_t (PN_stdfloat t) const
 Determines the value of t that should be passed to the XYZ and HPR curves, after applying the given value of t to all the timewarps. More...
 
bool evaluate_xyz (PN_stdfloat t, LVecBase3 &xyz) const
 Computes only the XYZ part of the curves. More...
 
void face_forward (PN_stdfloat segments_per_unit)
 Discards the existing HPR curve and generates a new one that looks in the direction of travel along the XYZ curve, based on the XYZ curve's tangent at each point. More...
 
ParametricCurveget_curve (int index) const
 Returns the nth ParametricCurve in the collection. More...
 
ParametricCurveget_default_curve () const
 If there is an XYZ curve in the collection, returns it; otherwise, returns the first curve whose type is unspecified. More...
 
ParametricCurveget_hpr_curve () const
 Returns the first HPR curve in the collection, if any, or NULL if there are none. More...
 
PN_stdfloat get_max_t () const
 Returns the maximum T value associated with the last* curve in the collection. More...
 
int get_num_curves () const
 Returns the number of ParametricCurves in the collection. More...
 
int get_num_timewarps () const
 Returns the number of timewarp curves in the collection. More...
 
ParametricCurveget_timewarp_curve (int n) const
 Returns the nth timewarp curve in the collection. More...
 
ParametricCurveget_xyz_curve () const
 Returns the first XYZ curve in the collection, if any, or NULL if there are none. More...
 
bool has_curve (ParametricCurve *curve) const
 Returns true if the indicated ParametricCurve appears in this collection, false otherwise. More...
 
void make_even (PN_stdfloat max_t, PN_stdfloat segments_per_unit)
 Discards all existing timewarp curves and recomputes a new timewarp curve that maps distance along the curve to parametric time, so that the distance between any two points in parametric time is proportional to the approximate distance of those same two points along the XYZ curve. More...
 
 MAKE_SEQ (get_curves, get_num_curves, get_curve)
 
 MAKE_SEQ (get_timewarp_curves, get_num_timewarps, get_timewarp_curve)
 
void output (ostream &out) const
 Writes a brief one-line description of the ParametricCurveCollection to the indicated output stream. More...
 
int r_add_curves (PandaNode *node)
 The recursive implementation of add_curves(). More...
 
bool recompute ()
 Ensures all the curves are freshly computed and up-to-date. More...
 
void register_drawer (ParametricCurveDrawer *drawer)
 Registers a Drawer with this curve collection that will automatically be updated whenever the collection is modified, so that the visible representation of the curve is kept up to date. More...
 
bool remove_curve (ParametricCurve *curve)
 Removes the indicated ParametricCurve from the collection. More...
 
void remove_curve (int index)
 Removes the indicated ParametricCurve from the collection, by its index number. More...
 
void reset_max_t (PN_stdfloat max_t)
 Adjusts the apparent length of the curve by applying a new timewarp that maps the range [0..max_t] to the range [0..get_max_t()]. More...
 
bool stitch (const ParametricCurveCollection *a, const ParametricCurveCollection *b)
 Regenerates this curve as one long curve: the first curve connected end-to-end with the second one. More...
 
void unregister_drawer (ParametricCurveDrawer *drawer)
 Removes a previously registered drawer from the list of automatically-refreshed drawers. More...
 
void write (ostream &out, int indent_level=0) const
 Writes a complete multi-line description of the ParametricCurveCollection to the indicated output stream. More...
 
bool write_egg (Filename filename, CoordinateSystem cs=CS_default)
 Writes an egg description of all the nurbs curves in the collection to the specified output file. More...
 
bool write_egg (ostream &out, const Filename &filename, CoordinateSystem cs)
 Writes an egg description of all the nurbs curves in the collection to the specified output stream. More...
 
- Public Member Functions inherited from ReferenceCount
int get_ref_count () const
 Returns the current reference count. More...
 
WeakReferenceListget_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...
 

Additional Inherited Members

- Static Public Member Functions inherited from ReferenceCount
static TypeHandle get_class_type ()
 
static void init_type ()
 

Detailed Description

This is a set of zero or more ParametricCurves, which may or may not be related.

If they are related, the set should contain no more than one XYZ curve, no more than one HPR curve, and zero or more Timewarp curves, which can then be evaluated as a unit to return a single transformation matrix for a given unit of time.

Definition at line 41 of file parametricCurveCollection.h.

Member Function Documentation

◆ add_curve() [1/2]

void ParametricCurveCollection::add_curve ( ParametricCurve curve)

Adds a new ParametricCurve to the collection.

Definition at line 40 of file parametricCurveCollection.cxx.

Referenced by face_forward(), make_even(), reset_max_t(), and stitch().

◆ add_curve() [2/2]

void ParametricCurveCollection::add_curve ( ParametricCurve curve,
int  index 
)

Adds a new ParametricCurve to the collection at the indicated index.

Definition at line 53 of file parametricCurveCollection.cxx.

References add_curves().

◆ add_curves()

int ParametricCurveCollection::add_curves ( PandaNode node)

Adds all the curves found in the scene graph rooted at the given node.

Returns the number of curves found.

Definition at line 68 of file parametricCurveCollection.cxx.

References r_add_curves(), and remove_curve().

Referenced by add_curve().

◆ adjust_hpr() [1/2]

bool ParametricCurveCollection::adjust_hpr ( PN_stdfloat  t,
PN_stdfloat  h,
PN_stdfloat  p,
PN_stdfloat  r 
)
inline

Adjust the HPR curve at the indicated time to the new value.

The curve shape will change correspondingly. Returns true if successful, false if unable to make the adjustment for some reason.

Definition at line 108 of file parametricCurveCollection.I.

Referenced by adjust_xyz().

◆ adjust_hpr() [2/2]

bool ParametricCurveCollection::adjust_hpr ( PN_stdfloat  t,
const LVecBase3 hpr 
)

Adjust the HPR curve at the indicated time to the new value.

The curve shape will change correspondingly. Returns true if successful, false if unable to make the adjustment for some reason.

Definition at line 632 of file parametricCurveCollection.cxx.

References ParametricCurve::adjust_point(), evaluate_t(), get_hpr_curve(), get_max_t(), and recompute().

◆ adjust_xyz() [1/2]

bool ParametricCurveCollection::adjust_xyz ( PN_stdfloat  t,
PN_stdfloat  x,
PN_stdfloat  y,
PN_stdfloat  z 
)
inline

Adjust the XYZ curve at the indicated time to the new value.

The curve shape will change correspondingly. Returns true if successful, false if unable to make the adjustment for some reason.

Definition at line 95 of file parametricCurveCollection.I.

References adjust_hpr().

Referenced by evaluate_hpr(), and evaluate_t().

◆ adjust_xyz() [2/2]

bool ParametricCurveCollection::adjust_xyz ( PN_stdfloat  t,
const LVecBase3 xyz 
)

Adjust the XYZ curve at the indicated time to the new value.

The curve shape will change correspondingly. Returns true if successful, false if unable to make the adjustment for some reason.

Definition at line 610 of file parametricCurveCollection.cxx.

References adjust_hpr(), ParametricCurve::adjust_point(), evaluate_t(), get_max_t(), and get_xyz_curve().

◆ clear()

void ParametricCurveCollection::clear ( )

Removes all ParametricCurves from the collection.

Definition at line 142 of file parametricCurveCollection.cxx.

References clear_timewarps().

Referenced by has_curve(), and stitch().

◆ clear_timewarps()

void ParametricCurveCollection::clear_timewarps ( )

Removes all the timewarp curves from the collection.

Definition at line 159 of file parametricCurveCollection.cxx.

References ParametricCurve::get_curve_type(), and get_xyz_curve().

Referenced by clear(), and make_even().

◆ evaluate() [1/2]

bool ParametricCurveCollection::evaluate ( PN_stdfloat  t,
LVecBase3 xyz,
LVecBase3 hpr 
) const

Computes the position and rotation represented by the first XYZ and HPR curves in the collection at the given point t, after t has been modified by all the timewarp curves in the collection applied in sequence, from back to front.

Returns true if the point is valid (i.e. t is within the bounds indicated by all the timewarp curves and within the bounds of the curves themselves), or false otherwise.

Definition at line 486 of file parametricCurveCollection.cxx.

References ParametricCurve::get_curve_type().

Referenced by evaluate(), evaluate_hpr(), evaluate_xyz(), reset_max_t(), and CurveFitter::sample().

◆ evaluate() [2/2]

bool ParametricCurveCollection::evaluate ( PN_stdfloat  t,
LMatrix4 result,
CoordinateSystem  cs = CS_default 
) const

Computes the transform matrix representing translation to the position indicated by the first XYZ curve in the collection and the rotation indicated by the first HPR curve in the collection, after t has been modified by all the timewarp curves in the collection applied in sequence, from back to front.

Returns true if the point is valid (i.e. t is within the bounds indicated by all the timewarp curves and within the bounds of the curves themselves), or false otherwise.

Definition at line 558 of file parametricCurveCollection.cxx.

References evaluate(), and evaluate_t().

◆ evaluate_hpr()

bool ParametricCurveCollection::evaluate_hpr ( PN_stdfloat  t,
LVecBase3 hpr 
) const
inline

Computes only the HPR part of the curves.

See evaluate().

Definition at line 81 of file parametricCurveCollection.I.

References adjust_xyz(), and evaluate().

Referenced by evaluate_xyz().

◆ evaluate_t()

PN_stdfloat ParametricCurveCollection::evaluate_t ( PN_stdfloat  t) const

Determines the value of t that should be passed to the XYZ and HPR curves, after applying the given value of t to all the timewarps.

Return -1.0f if the value of t exceeds one of the timewarps' ranges.

Definition at line 582 of file parametricCurveCollection.cxx.

References adjust_xyz(), and ParametricCurve::get_curve_type().

Referenced by adjust_hpr(), adjust_xyz(), evaluate(), and unregister_drawer().

◆ evaluate_xyz()

bool ParametricCurveCollection::evaluate_xyz ( PN_stdfloat  t,
LVecBase3 xyz 
) const
inline

Computes only the XYZ part of the curves.

See evaluate().

Definition at line 69 of file parametricCurveCollection.I.

References evaluate(), and evaluate_hpr().

Referenced by get_max_t().

◆ face_forward()

void ParametricCurveCollection::face_forward ( PN_stdfloat  segments_per_unit)

Discards the existing HPR curve and generates a new one that looks in the direction of travel along the XYZ curve, based on the XYZ curve's tangent at each point.

Definition at line 390 of file parametricCurveCollection.cxx.

References add_curve(), CurveFitter::add_hpr(), CurveFitter::compute_tangents(), ParametricCurve::get_curve_type(), get_max_t(), get_xyz_curve(), reset_max_t(), and CurveFitter::wrap_hpr().

Referenced by make_even().

◆ get_curve()

ParametricCurve * ParametricCurveCollection::get_curve ( int  index) const
inline

Returns the nth ParametricCurve in the collection.

Definition at line 41 of file parametricCurveCollection.I.

References get_max_t().

Referenced by get_num_curves().

◆ get_default_curve()

ParametricCurve * ParametricCurveCollection::get_default_curve ( ) const

If there is an XYZ curve in the collection, returns it; otherwise, returns the first curve whose type is unspecified.

Returns NULL if no curve meets the criteria.

Definition at line 244 of file parametricCurveCollection.cxx.

References ParametricCurve::get_curve_type(), get_num_timewarps(), and get_xyz_curve().

Referenced by get_hpr_curve().

◆ get_hpr_curve()

ParametricCurve * ParametricCurveCollection::get_hpr_curve ( ) const

Returns the first HPR curve in the collection, if any, or NULL if there are none.

Definition at line 224 of file parametricCurveCollection.cxx.

References ParametricCurve::get_curve_type(), and get_default_curve().

Referenced by adjust_hpr(), get_xyz_curve(), CurveFitter::sample(), and stitch().

◆ get_max_t()

PN_stdfloat ParametricCurveCollection::get_max_t ( ) const
inline

Returns the maximum T value associated with the last* curve in the collection.

Normally, this will be either the XYZ or HPR curve, or a timewarp curve.

Definition at line 55 of file parametricCurveCollection.I.

References evaluate_xyz().

Referenced by adjust_hpr(), adjust_xyz(), face_forward(), get_curve(), reset_max_t(), and CurveFitter::sample().

◆ get_num_curves()

int ParametricCurveCollection::get_num_curves ( ) const
inline

Returns the number of ParametricCurves in the collection.

Definition at line 31 of file parametricCurveCollection.I.

References get_curve().

Referenced by CurveFitter::compute_tangents(), and output().

◆ get_num_timewarps()

int ParametricCurveCollection::get_num_timewarps ( ) const

Returns the number of timewarp curves in the collection.

Definition at line 267 of file parametricCurveCollection.cxx.

References ParametricCurve::get_curve_type(), and get_timewarp_curve().

Referenced by get_default_curve().

◆ get_timewarp_curve()

ParametricCurve * ParametricCurveCollection::get_timewarp_curve ( int  n) const

Returns the nth timewarp curve in the collection.

Definition at line 287 of file parametricCurveCollection.cxx.

References ParametricCurve::get_curve_type(), and make_even().

Referenced by get_num_timewarps().

◆ get_xyz_curve()

ParametricCurve * ParametricCurveCollection::get_xyz_curve ( ) const

Returns the first XYZ curve in the collection, if any, or NULL if there are none.

Definition at line 206 of file parametricCurveCollection.cxx.

References ParametricCurve::get_curve_type(), and get_hpr_curve().

Referenced by adjust_xyz(), clear_timewarps(), face_forward(), get_default_curve(), make_even(), CurveFitter::sample(), and stitch().

◆ has_curve()

bool ParametricCurveCollection::has_curve ( ParametricCurve curve) const

Returns true if the indicated ParametricCurve appears in this collection, false otherwise.

Definition at line 126 of file parametricCurveCollection.cxx.

References clear().

Referenced by remove_curve().

◆ make_even()

void ParametricCurveCollection::make_even ( PN_stdfloat  max_t,
PN_stdfloat  segments_per_unit 
)

Discards all existing timewarp curves and recomputes a new timewarp curve that maps distance along the curve to parametric time, so that the distance between any two points in parametric time is proportional to the approximate distance of those same two points along the XYZ curve.

segments_per_unit represents the number of segments to take per each unit of parametric time of the original XYZ curve.

The new timewarp curve (and thus, the apparent range of the collection) will range from 0 to max_t.

Definition at line 320 of file parametricCurveCollection.cxx.

References add_curve(), CurveFitter::add_xyz(), ParametricCurve::calc_length(), clear_timewarps(), CurveFitter::compute_tangents(), face_forward(), ParametricCurve::find_length(), ParametricCurve::get_max_t(), get_xyz_curve(), and ParametricCurve::set_curve_type().

Referenced by get_timewarp_curve().

◆ output()

void ParametricCurveCollection::output ( ostream &  out) const

Writes a brief one-line description of the ParametricCurveCollection to the indicated output stream.

Definition at line 716 of file parametricCurveCollection.cxx.

References get_num_curves(), and write().

Referenced by stitch().

◆ r_add_curves()

int ParametricCurveCollection::r_add_curves ( PandaNode node)

The recursive implementation of add_curves().

Definition at line 852 of file parametricCurveCollection.cxx.

References PandaNode::get_child(), PandaNode::get_num_children(), TypedObject::is_of_type(), and register_drawer().

Referenced by add_curves(), and write_egg().

◆ recompute()

bool ParametricCurveCollection::recompute ( )

Ensures all the curves are freshly computed and up-to-date.

Returns true if everything is valid, false if at least one curve is incorrect.

Definition at line 653 of file parametricCurveCollection.cxx.

References ParametricCurve::recompute(), and stitch().

Referenced by adjust_hpr().

◆ register_drawer()

void ParametricCurveCollection::register_drawer ( ParametricCurveDrawer *  drawer)

Registers a Drawer with this curve collection that will automatically be updated whenever the collection is modified, so that the visible representation of the curve is kept up to date.

This is called automatically by the ParametricCurveDrawer.

Any number of Drawers may be registered with a particular curve collection.

Definition at line 884 of file parametricCurveCollection.cxx.

References ParametricCurve::register_drawer(), and unregister_drawer().

Referenced by r_add_curves().

◆ remove_curve() [1/2]

bool ParametricCurveCollection::remove_curve ( ParametricCurve curve)

Removes the indicated ParametricCurve from the collection.

Returns true if the curve was removed, false if it was not a member of the collection.

Definition at line 86 of file parametricCurveCollection.cxx.

Referenced by add_curves().

◆ remove_curve() [2/2]

void ParametricCurveCollection::remove_curve ( int  index)

Removes the indicated ParametricCurve from the collection, by its index number.

Definition at line 111 of file parametricCurveCollection.cxx.

References has_curve().

◆ reset_max_t()

void ParametricCurveCollection::reset_max_t ( PN_stdfloat  max_t)

Adjusts the apparent length of the curve by applying a new timewarp that maps the range [0..max_t] to the range [0..get_max_t()].

After this call, the curve collection will contain one more timewarp curve, and get_max_t() will return the given max_t value.

Definition at line 456 of file parametricCurveCollection.cxx.

References add_curve(), evaluate(), and get_max_t().

Referenced by face_forward().

◆ stitch()

bool ParametricCurveCollection::stitch ( const ParametricCurveCollection a,
const ParametricCurveCollection b 
)

Regenerates this curve as one long curve: the first curve connected end-to-end with the second one.

Either a or b may be the same as 'this'. This will lose any timewarps on the input curves.

Returns true if successful, false on failure.

Definition at line 678 of file parametricCurveCollection.cxx.

References add_curve(), clear(), get_hpr_curve(), get_xyz_curve(), output(), and ParametricCurve::set_curve_type().

Referenced by recompute().

◆ unregister_drawer()

void ParametricCurveCollection::unregister_drawer ( ParametricCurveDrawer *  drawer)

Removes a previously registered drawer from the list of automatically-refreshed drawers.

This is called automatically by the ParametricCurveDrawer.

Definition at line 902 of file parametricCurveCollection.cxx.

References evaluate_t(), LVecBase3f::length_squared(), ParametricCurve::register_drawer(), and ParametricCurve::unregister_drawer().

Referenced by register_drawer().

◆ write()

void ParametricCurveCollection::write ( ostream &  out,
int  indent_level = 0 
) const

Writes a complete multi-line description of the ParametricCurveCollection to the indicated output stream.

Definition at line 731 of file parametricCurveCollection.cxx.

References write_egg().

Referenced by output().

◆ write_egg() [1/2]

bool ParametricCurveCollection::write_egg ( Filename  filename,
CoordinateSystem  cs = CS_default 
)

Writes an egg description of all the nurbs curves in the collection to the specified output file.

Returns true if the file is successfully written.

Definition at line 747 of file parametricCurveCollection.cxx.

References Filename::open_write(), and Filename::set_text().

Referenced by write().

◆ write_egg() [2/2]

bool ParametricCurveCollection::write_egg ( ostream &  out,
const Filename filename,
CoordinateSystem  cs 
)

Writes an egg description of all the nurbs curves in the collection to the specified output stream.

Returns true if the file is successfully written.

Definition at line 767 of file parametricCurveCollection.cxx.

References Filename::get_basename_wo_extension(), ParametricCurve::get_curve_type(), Namable::has_name(), r_add_curves(), and ParametricCurve::write_egg().


The documentation for this class was generated from the following files: