# ParametricCurve

class ParametricCurve

Bases: `PandaNode`

A virtual base class for parametric curves. This encapsulates all curves in 3-d space defined for a single parameter t in the range [0,get_max_t()].

Inheritance diagram

virtual bool adjust_point(PN_stdfloat t, PN_stdfloat px, PN_stdfloat py, PN_stdfloat pz)

Recomputes the curve such that it passes through the point (px, py, pz) at time t, but keeps the same tangent value at that point.

virtual bool adjust_pt(PN_stdfloat t, PN_stdfloat px, PN_stdfloat py, PN_stdfloat pz, PN_stdfloat tx, PN_stdfloat ty, PN_stdfloat tz)

Recomputes the curve such that it passes through the point (px, py, pz) with the tangent (tx, ty, tz).

virtual bool adjust_tangent(PN_stdfloat t, PN_stdfloat tx, PN_stdfloat ty, PN_stdfloat tz)

Recomputes the curve such that it has the tangent (tx, ty, tz) at time t, but keeps the same position at the point.

PN_stdfloat calc_length(void) const
PN_stdfloat calc_length(PN_stdfloat from, PN_stdfloat to) const

Approximates the length of the entire curve to within a few decimal places.

Approximates the length of the curve segment from parametric time ‘from’ to time ‘to’.

PN_stdfloat find_length(PN_stdfloat start_t, PN_stdfloat length_offset) const

Returns the parametric value corresponding to the indicated distance along the curve from the starting parametric value.

This is the inverse of calc_length(): rather than determining the length along the curve between two parametric points, it determines the position in parametric time of a point n units along the curve.

The search distance must not be negative.

virtual bool get_2ndtangent(PN_stdfloat t, LVecBase3 &tangent2) const = 0
static TypeHandle get_class_type(void)
int get_curve_type(void) const

Returns the flag indicating the use to which the curve is intended to be put.

virtual PN_stdfloat get_max_t(void) const

Returns the upper bound of t for the entire curve. The curve is defined in the range 0.0f <= t <= get_max_t(). This base class function always returns 1.0f; derived classes might override this to return something else.

int get_num_dimensions(void) const

Returns the number of significant dimensions in the curve’s vertices, as set by a previous call to `set_num_dimensions()`. This is only a hint as to how the curve is intended to be used; the actual number of dimensions of any curve is always three.

virtual bool get_point(PN_stdfloat t, LVecBase3 &point) const = 0
virtual bool get_pt(PN_stdfloat t, LVecBase3 &point, LVecBase3 &tangent) const = 0
virtual bool get_tangent(PN_stdfloat t, LVecBase3 &tangent) const = 0
virtual bool is_valid(void) const

Returns true if the curve is defined. This base class function always returns true; derived classes might override this to sometimes return false.

virtual bool recompute(void)

Recalculates the curve, if necessary. Returns true if the resulting curve is valid, false otherwise.

void set_curve_type(int type)

Sets the flag indicating the use to which the curve is intended to be put. This flag is optional and only serves to provide a hint to the egg reader and writer code; it has no effect on the curve’s behavior.

Setting the curve type also sets the num_dimensions to 3 or 1 according to the type.

THis flag may have one of the values PCT_XYZ, PCT_HPR, or PCT_T.

void set_num_dimensions(int num)

Specifies the number of significant dimensions in the curve’s vertices. This should be one of 1, 2, or 3. Normally, XYZ and HPR curves have three dimensions; time curves should always have one dimension. This only serves as a hint to the mopath editor, and also controls how the curve is written out.

virtual bool stitch(ParametricCurve const *a, ParametricCurve const *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’.

Returns true if successful, false on failure or if the curve type does not support stitching.

bool write_egg(Filename filename, CoordinateSystem cs = ::CS_default)
bool write_egg(std::ostream &out, Filename const &filename, CoordinateSystem cs)

Writes an egg description of the nurbs curve to the specified output file. Returns true if the file is successfully written.

Writes an egg description of the nurbs curve to the specified output stream. Returns true if the file is successfully written.