# panda3d.core.NurbsCurveResult¶

class NurbsCurveResult

Bases: ReferenceCount

The result of a NurbsCurveEvaluator. This object represents a curve in a particular coordinate space. It can return the point and/or tangent to the curve at any point.

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.

Inheritance diagram

__init__(param0: NurbsCurveResult) → None
getStartT() → float

Returns the first legal value of t on the curve. Usually this is 0.0.

getEndT() → float

Returns the last legal value of t on the curve.

evalPoint(t: float, point: LVecBase3) → bool

Computes the point on the curve corresponding to the indicated value in parametric time. Returns true if the t value is valid, false otherwise.

evalTangent(t: float, tangent: LVecBase3) → bool

Computes the tangent to the curve at the indicated point in parametric time. This tangent vector will not necessarily be normalized, and could be zero. See also evalPoint().

evalExtendedPoint(t: float, d: int) → float

Evaluates the curve in n-dimensional space according to the extended vertices associated with the curve in the indicated dimension.

evalExtendedPoints(t: float, d: int, result: PN_stdfloat_[], num_values: int) → bool

Simultaneously performs eval_extended_point on a contiguous sequence of dimensions. The dimensions evaluated are d through (d + num_values - 1); the results are filled into the num_values elements in the indicated result array.

getNumSegments() → int

Returns the number of piecewise continuous segments within the curve. This number is usually not important unless you plan to call evalSegmentPoint().

evalSegmentPoint(segment: int, t: float, point: LVecBase3) → None

Evaluates the point on the curve corresponding to the indicated value in parametric time within the indicated curve segment. t should be in the range [0, 1].

The curve is internally represented as a number of connected (or possibly unconnected) piecewise continuous segments. The exact number of segments for a particular curve depends on the knot vector, and is returned by getNumSegments(). Normally, evalPoint() is used to evaluate a point along the continuous curve, but when you care more about local continuity, you can use evalSegmentPoint() to evaluate the points along each segment.

evalSegmentTangent(segment: int, t: float, tangent: LVecBase3) → None

As eval_segment_point, but computes the tangent to the curve at the indicated point. The tangent vector will not necessarily be normalized, and could be zero, particularly at the endpoints.

evalSegmentExtendedPoint(segment: int, t: float, d: int) → float

Evaluates the curve in n-dimensional space according to the extended vertices associated with the curve in the indicated dimension.

evalSegmentExtendedPoints(segment: int, t: float, d: int, result: PN_stdfloat_[], num_values: int) → None

Simultaneously performs eval_extended_point on a contiguous sequence of dimensions. The dimensions evaluated are d through (d + num_values - 1); the results are filled into the num_values elements in the indicated result array.

getSegmentT(segment: int, t: float) → float

Accepts a t value in the range [0, 1], and assumed to be relative to the indicated segment (as in evalSegmentPoint()), and returns the corresponding t value in the entire curve (as in evalPoint()).

adaptiveSample(tolerance: float) → None

Determines the set of subdivisions necessary to approximate the curve with a set of linear segments, no point of which is farther than tolerance units from the actual curve.

After this call, you may walk through the resulting set of samples with getNumSamples(), getSampleT(), and getSamplePoint().

getNumSamples() → int

Returns the number of sample points generated by the previous call to adaptiveSample().

getSampleT(n: int) → float

Returns the t value of the nth sample point generated by the previous call to adaptiveSample().

getSamplePoint(n: int) → LPoint3

Returns the point on the curve of the nth sample point generated by the previous call to adaptiveSample().

For tangents, or extended points, you should use getSampleT() and pass it into evalTangent() or evalExtendedPoint().

Return type

LPoint3

getSampleTs() → list
getSamplePoints() → list