Search in sources :

Example 1 with NURBSpline

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;
}
Also used : ShapeMultiPath(com.graphbuilder.curve.ShapeMultiPath) NURBSpline(com.graphbuilder.curve.NURBSpline) GroupIterator(com.graphbuilder.curve.GroupIterator)

Aggregations

GroupIterator (com.graphbuilder.curve.GroupIterator)1 NURBSpline (com.graphbuilder.curve.NURBSpline)1 ShapeMultiPath (com.graphbuilder.curve.ShapeMultiPath)1