# ParametricCurve

```from panda3d.core import ParametricCurve
```
class ParametricCurve

Bases:

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

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.

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

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.

calcLength()

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

calcLength(from: float, to: float)

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

findLength(start_t: float, length_offset: float)

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.

get2ndtangent(t: float, tangent2: LVecBase3) bool
static getClassType()
getCurveType() int

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

getMaxT()

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.

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.

getPoint(t: float, point: LVecBase3) bool
getPt(t: float, point: LVecBase3, tangent: LVecBase3) bool
getTangent(t: float, tangent: LVecBase3) bool
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.

recompute() bool

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

setCurveType(type: int)

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.

setNumDimensions(num: int)

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.

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.