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;
}
Exemple #2
0
/********************************************************
*                                                       *
* 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];
	}
}