ts::BSpline ts::BSpline::insertKnot(const ts::rational u, const size_t n) const { ts::BSpline bs; size_t k; const tsError err = ts_bspline_insert_knot(&bspline, u, n, &bs.bspline, &k); if (err < 0) throw std::runtime_error(ts_enum_str(err)); return bs; }
/******************************************************** * * * Modify these lines for experimenting. * * * ********************************************************/ void setup() { size_t k; tsReal mid; ts_bspline_new( 3, /* number of control points */ 3, /* dimension of each point */ 2, /* degree of spline */ TS_CLAMPED, /* used to hit first and last control point */ &spline, /* the spline to setup */ NULL); /* Setup control points. */ ts_bspline_control_points(&spline, &ctrlp, NULL); ctrlp[0] = -1.0f; ctrlp[1] = 1.0f; ctrlp[2] = 0.0f; ctrlp[3] = 1.0f; ctrlp[4] = 1.0f; ctrlp[5] = 0.0f; ctrlp[6] = 1.0f; ctrlp[7] = -1.0f; ctrlp[8] = 0.0f; ts_bspline_set_control_points(&spline, ctrlp, NULL); free(ctrlp); for (i = 0; i < 3; i++) B[i] = ctrlp[i+3]; ts_bspline_knots(&spline, &knots, NULL); mid = (knots[ts_bspline_num_knots(&spline)- 1] - knots[0]) /2; free(knots); ts_bspline_insert_knot(&spline, mid, 1, &spline, &k, NULL); ts_bspline_control_points(&spline, &ctrlp, NULL); ts_bspline_knots(&spline, &knots, NULL); A = ctrlp; D = ctrlp + 3; E = ctrlp + 6; C = ctrlp + 9; for (i = 0; i < 3; i++) { v[i] = B[i] - A[i]; w[i] = B[i] - C[i]; } }