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 wholeParametricCurve
class hierarchy.Inheritance diagram
-
NurbsCurveResult(NurbsCurveResult const&) = default
The constructor automatically builds up the result as the product of the indicated set of basis matrices and the indicated table of control vertex positions.
-
void adaptive_sample(PN_stdfloat tolerance)
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
get_num_samples()
,get_sample_t()
, andget_sample_point()
.
-
PN_stdfloat eval_extended_point(PN_stdfloat t, int d)
Evaluates the curve in n-dimensional space according to the extended vertices associated with the curve in the indicated dimension.
-
bool eval_extended_points(PN_stdfloat t, int d, PN_stdfloat result[], int num_values)
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.
-
bool eval_point(PN_stdfloat t, LVecBase3 &point)
Computes the point on the curve corresponding to the indicated value in parametric time. Returns true if the t value is valid, false otherwise.
-
PN_stdfloat eval_segment_extended_point(int segment, PN_stdfloat t, int d) const
Evaluates the curve in n-dimensional space according to the extended vertices associated with the curve in the indicated dimension.
-
void eval_segment_extended_points(int segment, PN_stdfloat t, int d, PN_stdfloat result[], int num_values) const
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.
-
void eval_segment_point(int segment, PN_stdfloat t, LVecBase3 &point) const
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
get_num_segments()
. Normally,eval_point()
is used to evaluate a point along the continuous curve, but when you care more about local continuity, you can use eval_segment_point() to evaluate the points along each segment.
-
void eval_segment_tangent(int segment, PN_stdfloat t, LVecBase3 &tangent) const
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.
-
bool eval_tangent(PN_stdfloat t, LVecBase3 &tangent)
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
eval_point()
.
-
PN_stdfloat get_end_t(void) const
Returns the last legal value of t on the curve.
-
int get_num_samples(void) const
Returns the number of sample points generated by the previous call to
adaptive_sample()
.
-
int get_num_segments(void) const
Returns the number of piecewise continuous segments within the curve. This number is usually not important unless you plan to call
eval_segment_point()
.
-
LPoint3 const &get_sample_point(int n) const
Returns the point on the curve of the nth sample point generated by the previous call to
adaptive_sample()
.For tangents, or extended points, you should use
get_sample_t()
and pass it intoeval_tangent()
oreval_extended_point()
.
-
PN_stdfloat get_sample_t(int n) const
Returns the t value of the nth sample point generated by the previous call to
adaptive_sample()
.
-
PN_stdfloat get_segment_t(int segment, PN_stdfloat t) const
Accepts a t value in the range [0, 1], and assumed to be relative to the indicated segment (as in
eval_segment_point()
), and returns the corresponding t value in the entire curve (as ineval_point()
).
-
PN_stdfloat get_start_t(void) const
Returns the first legal value of t on the curve. Usually this is 0.0.
-
NurbsCurveResult(NurbsCurveResult const&) = default