diff --git a/src/curves/nurbs_surface.cpp b/src/curves/nurbs_surface.cpp index 80bc066..cf61ed1 100644 --- a/src/curves/nurbs_surface.cpp +++ b/src/curves/nurbs_surface.cpp @@ -23,7 +23,9 @@ Point3D NurbsSurface::evaluate(double u, double v) const { // Evaluate v-direction first: for each u-control row, evaluate B-spline in v std::vector row_results; - BSplineCurve bs_v({}, knots_v_, degree_v_); + // Create BSplineCurve with dummy control points (only knots/degree needed for span/basis) + int nv_pts = static_cast(knots_v_.size()) - degree_v_ - 1; + BSplineCurve bs_v(std::vector(nv_pts > 0 ? nv_pts : 0), knots_v_, degree_v_); int span_v = bs_v.find_span(v); auto Nv = bs_v.basis_functions(v, span_v); @@ -44,7 +46,8 @@ Point3D NurbsSurface::evaluate(double u, double v) const { } // Evaluate u-direction - BSplineCurve bs_u({}, knots_u_, degree_u_); + int nu_pts = static_cast(knots_u_.size()) - degree_u_ - 1; + BSplineCurve bs_u(std::vector(nu_pts > 0 ? nu_pts : 0), knots_u_, degree_u_); int span_u = bs_u.find_span(u); auto Nu = bs_u.basis_functions(u, span_u);