This demo features four new java.awt.Strokes, and it discusses the MouseSmoothing interface to smooth out the jagged edges in mouse paths.
The strokes are all pretty self-explanatory if you look at their constructors. For example the BristleStroke can be used as follows:
float width = 3; float thickness = .5f; long randomSeed = 0; Stroke s = new BristleStroke(width, thickness, randomSeed); graphics2D.setStroke(s);
To smooth out jagged user mouse input you can call:
MouseSmoothing s = new BasicMouseSmoothing();
for (Point2D p : mousePoints) {
s.add((float)p.getX(), (float)p.getY(), 0);
}
Shape smoothedShape = s.getShape();
The BristleStroke splatters tiny shapes (like shrapnel) over your path. The frequency of the shapes is a little greater in the middle of the stroke, and it tapers off towards the edges ‐ depending on the thickness you've designated.
The BrushStroke uses a MeasuredShape to break up the original path into small sections and paint them in streaks.
The CalligraphyStroke emulates a fixed-angle nib tracing a shape.
The CharcoalStroke starts with another Stroke (by default a BasicStroke) and inserts cracks at a fixed angle into that shape.
java.awt.Strokes include:
The MouseSmoothing interface models a class that smooths out incoming mouse data:
public interface MouseSmoothing {
public void add(float x,float y,long t);
public void reset();
public GeneralPath getShape();
public void getShape(GeneralPath path);
public boolean isEmpty();
}
The smoothing toggle in this demo uses the BasicMouseSmoothing class to smooth out your drawings, or (when disabled) it renders the points exactly as the MouseEvents capture them.
The BasicMouseSmoothing class tries to simplify the incoming points and, through trial and error, approximate Bézier curves that are a reasonable fit for the incoming user mouse points.