# panda3d.core.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,:meth:~ParametricCurve.getMaxT].

Inheritance diagram

isValid() → bool

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

getMaxT() → float

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

setCurveType(type: int) → None

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.

getCurveType() → int

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

setNumDimensions(num: int) → None

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.

getNumDimensions() → int

Returns the number of significant dimensions in the curve’s vertices, as set by a previous call to setNumDimensions(). 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.

calcLength() → float

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

calcLength(from: float, to: float) → float

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

findLength(start_t: float, length_offset: float) → float

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

This is the inverse of calcLength(): 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.

getPoint(t: float, point: LVecBase3) → bool
getTangent(t: float, tangent: LVecBase3) → bool
getPt(t: float, point: LVecBase3, tangent: LVecBase3) → bool
get2ndtangent(t: float, tangent2: LVecBase3) → bool
adjustPoint(t: float, px: float, py: float, pz: float) → bool

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.

adjustTangent(t: float, tx: float, ty: float, tz: float) → bool

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

adjustPt(t: float, px: float, py: float, pz: float, tx: float, ty: float, tz: float) → bool

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

recompute() → bool

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

stitch(a: ParametricCurve, b: ParametricCurve) → bool

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.

writeEgg(filename: Filename, cs: CoordinateSystem) → bool

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

writeEgg(out: ostream, filename: Filename, cs: CoordinateSystem) → bool

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

static getClassType() → TypeHandle
Return type

TypeHandle