17INLINE NurbsSurfaceResult::
18~NurbsSurfaceResult() {
26 return _u_basis.get_start_t();
34 return _u_basis.get_end_t();
42 return _v_basis.get_start_t();
50 return _v_basis.get_end_t();
59eval_point(PN_stdfloat u, PN_stdfloat v, LVecBase3 &point) {
60 int ui = find_u_segment(u);
61 int vi = find_v_segment(v);
62 if (ui == -1 || vi == -1) {
77eval_normal(PN_stdfloat u, PN_stdfloat v, LVecBase3 &normal) {
78 int ui = find_u_segment(u);
79 int vi = find_v_segment(v);
80 if (ui == -1 || vi == -1) {
95 int ui = find_u_segment(u);
96 int vi = find_v_segment(v);
97 if (ui == -1 || vi == -1) {
102 _v_basis.scale_t(vi, v), d);
114 int ui = find_u_segment(u);
115 int vi = find_v_segment(v);
116 if (ui == -1 || vi == -1) {
121 _v_basis.scale_t(vi, v), d, result,
133 return _u_basis.get_num_segments();
143 return _v_basis.get_num_segments();
153 return u * (_u_basis.get_to(ui) - _u_basis.get_from(ui)) + _u_basis.get_from(ui);
163 return v * (_v_basis.get_to(vi) - _v_basis.get_from(vi)) + _v_basis.get_from(vi);
171INLINE
int NurbsSurfaceResult::
172verti(
int ui,
int vi)
const {
173 return ui * _num_v_vertices + vi;
181INLINE
int NurbsSurfaceResult::
182segi(
int ui,
int vi)
const {
183 return ui * _v_basis.get_num_segments() + vi;
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...
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.
bool eval_normal(PN_stdfloat u, PN_stdfloat v, LVecBase3 &normal)
Computes the normal to the surface at the indicated point in parametric time.
PN_stdfloat get_start_u() const
Returns the first legal value of u on the surface.
int get_num_u_segments() const
Returns the number of piecewise continuous segments within the surface in the U direction.
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 eva...
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 s...
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 s...
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 eva...
PN_stdfloat get_start_v() const
Returns the first legal value of v on the surface.
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.
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.
PN_stdfloat get_end_u() const
Returns the last legal value of u on the surface.
PN_stdfloat get_end_v() const
Returns the last legal value of v on the surface.
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.
int get_num_v_segments() const
Returns the number of piecewise continuous segments within the surface in the V direction.