use of com.graphbuilder.curve.NURBSpline in project poi by apache.
the class SplineRenderer method createNurbsSpline.
public static ShapeMultiPath createNurbsSpline(ControlPath controlPoints, ValueVector knots, ValueVector weights, int degree) {
double firstKnot = knots.get(0);
final int count = knots.size();
double lastKnot = knots.get(count - 1);
// scale knots to [0, 1] based on first/last knots
for (int i = 0; i < count; i++) {
knots.set((knots.get(i) - firstKnot) / lastKnot, i);
}
// if we don't have enough knots, duplicate the last knot until we do
final int knotsToAdd = controlPoints.numPoints() + degree + 1;
for (int i = count; i < knotsToAdd; i++) {
knots.add(1);
}
GroupIterator gi = new GroupIterator("0:n-1", controlPoints.numPoints());
NURBSpline spline = new NURBSpline(controlPoints, gi);
spline.setDegree(degree);
spline.setKnotVectorType(NURBSpline.NON_UNIFORM);
spline.setKnotVector(knots);
if (weights == null) {
spline.setUseWeightVector(false);
} else {
spline.setWeightVector(weights);
}
// now that this is done, add it to the path
ShapeMultiPath shape = new ShapeMultiPath();
shape.setFlatness(0.01);
spline.appendTo(shape);
return shape;
}
Aggregations