NurbsSurfaceResult
-
class NurbsSurfaceResult
Bases:
ReferenceCount
The result of a
NurbsSurfaceEvaluator
. This object represents a surface in a particular coordinate space. It can return the point and/or normal to the surface at any point.Inheritance diagram
-
NurbsSurfaceResult(NurbsSurfaceResult 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.
-
PN_stdfloat eval_extended_point(PN_stdfloat u, PN_stdfloat v, int d)
Evaluates the surface in n-dimensional space according to the extended vertices associated with the surface in the indicated dimension.
-
bool eval_extended_points(PN_stdfloat u, PN_stdfloat v, 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_normal(PN_stdfloat u, PN_stdfloat v, LVecBase3 &normal)
Computes the normal to the surface at the indicated point in parametric time. This normal vector will not necessarily be normalized, and could be zero. See also
eval_point()
.
-
bool eval_point(PN_stdfloat u, PN_stdfloat v, LVecBase3 &point)
Computes the point on the surface corresponding to the indicated value in parametric time. Returns true if the u, v values are valid, false otherwise.
-
PN_stdfloat eval_segment_extended_point(int ui, int vi, PN_stdfloat u, PN_stdfloat v, int d) const
Evaluates the surface in n-dimensional space according to the extended vertices associated with the surface in the indicated dimension.
-
void eval_segment_extended_points(int ui, int vi, PN_stdfloat u, PN_stdfloat v, 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_normal(int ui, int vi, PN_stdfloat u, PN_stdfloat v, LVecBase3 &normal) const
As
eval_segment_point
, but computes the normal to the surface at the indicated point. The normal vector will not necessarily be normalized, and could be zero.
-
void eval_segment_point(int ui, int vi, PN_stdfloat u, PN_stdfloat v, LVecBase3 &point) const
Evaluates the point on the surface corresponding to the indicated value in parametric time within the indicated surface segment. u and v should be in the range [0, 1].
The surface is internally represented as a number of connected (or possibly unconnected) piecewise continuous segments. The exact number of segments for a particular surface depends on the knot vector, and is returned by get_num_segments(). Normally,
eval_point()
is used to evaluate a point along the continuous surface, but when you care more about local continuity, you can use eval_segment_point() to evaluate the points along each segment.
-
PN_stdfloat get_end_u(void) const
Returns the last legal value of u on the surface.
-
PN_stdfloat get_end_v(void) const
Returns the last legal value of v on the surface.
-
int get_num_u_segments(void) const
Returns the number of piecewise continuous segments within the surface in the U direction. This number is usually not important unless you plan to call
eval_segment_point()
.
-
int get_num_v_segments(void) const
Returns the number of piecewise continuous segments within the surface in the V direction. This number is usually not important unless you plan to call
eval_segment_point()
.
-
PN_stdfloat get_segment_u(int ui, PN_stdfloat u) const
Accepts a u value in the range [0, 1], and assumed to be relative to the indicated segment (as in
eval_segment_point()
), and returns the corresponding u value in the entire surface (as ineval_point()
).
-
PN_stdfloat get_segment_v(int vi, PN_stdfloat v) const
Accepts a v value in the range [0, 1], and assumed to be relative to the indicated segment (as in
eval_segment_point()
), and returns the corresponding v value in the entire surface (as ineval_point()
).
-
PN_stdfloat get_start_u(void) const
Returns the first legal value of u on the surface. Usually this is 0.0.
-
PN_stdfloat get_start_v(void) const
Returns the first legal value of v on the surface. Usually this is 0.0.
-
NurbsSurfaceResult(NurbsSurfaceResult const&) = default