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.