return Geom.length(xa, ya, xc, yc);
/** * Returns the length of the path. * * @param flatness the flatness used to approximate the length. */ public double getLengthOfPath(double flatness) { double len = 0; PathIterator i = generalPath.getPathIterator(new AffineTransform(), flatness); double[] coords = new double[6]; double prevX = coords[0]; double prevY = coords[1]; i.next(); for (; !i.isDone(); i.next()) { i.currentSegment(coords); len += Geom.length(prevX, prevY, coords[0], coords[1]); prevX = coords[0]; prevY = coords[1]; } return len; }
@Override public void trackStart(Point anchor, int modifiersEx) { location = new Point(anchor.x, anchor.y); restoreData = getOwner().getTransformRestoreData(); transform = new AffineTransform(); center = getCenter(); Point2D.Double anchorPoint = view.viewToDrawing(anchor); startTheta = Geom.angle(center.x, center.y, anchorPoint.x, anchorPoint.y); startLength = Geom.length(center.x, center.y, anchorPoint.x, anchorPoint.y); }
/** * Joins two segments into one if the given Point2D.Double hits a node * of the bezier path. * @return the index of the joined segment or -1 if no segment was joined. */ public int joinSegments(Point2D.Double join, double tolerance) { for (int i = 0; i < size(); i++) { Node p = get(i); if (Geom.length(p.x[0], p.y[0], join.x, join.y) < tolerance) { remove(i); return i; } } return -1; }
@Override public void trackStart(Point anchor, int modifiersEx) { location = new Point(anchor.x, anchor.y); restoreData = getBezierFigure().getTransformRestoreData(); transform = new AffineTransform(); center = getBezierFigure().getCenter(); Point2D.Double anchorPoint = view.viewToDrawing(anchor); startTheta = Geom.angle(center.x, center.y, anchorPoint.x, anchorPoint.y); startLength = Geom.length(center.x, center.y, anchorPoint.x, anchorPoint.y); }
private Point2D.Double getOrigin() { // find a nice place to put handle // Need to pick a place that will not overlap with point handle // and is internal to polygon int handlesize = getHandlesize(); // Try for one handlesize step away from outermost toward center Point2D.Double outer = getBezierFigure().getOutermostPoint(); Point2D.Double ctr = getBezierFigure().getCenter(); double len = Geom.length(outer.x, outer.y, ctr.x, ctr.y); if (len == 0) { // best we can do? return new Point2D.Double(outer.x - handlesize/2, outer.y + handlesize/2); } double u = handlesize / len; if (u > 1.0) { // best we can do? return new Point2D.Double((outer.x * 3 + ctr.x)/4, (outer.y * 3 + ctr.y)/4); } else { return new Point2D.Double(outer.x * (1.0 - u) + ctr.x * u, outer.y * (1.0 - u) + ctr.y * u); } } @Override
@Override public void trackStep(Point anchor, Point lead, int modifiersEx) { location = new Point(lead.x, lead.y); Point2D.Double leadPoint = view.viewToDrawing(lead); double stepTheta = Geom.angle(center.x, center.y, leadPoint.x, leadPoint.y); double stepLength = Geom.length(center.x, center.y, leadPoint.x, leadPoint.y); double scaleFactor = (modifiersEx & (InputEvent.ALT_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK)) != 0 ? 1d : stepLength / startLength; transform.setToIdentity(); transform.translate(center.x, center.y); transform.scale(scaleFactor, scaleFactor); transform.rotate(stepTheta - startTheta); transform.translate(-center.x, -center.y); getOwner().willChange(); getOwner().restoreTransformTo(restoreData); getOwner().transform(transform); getOwner().changed(); } /*
for (; !i.isDone(); i.next()) { i.currentSegment(coords); double segLen = Geom.length(prevX, prevY, coords[0], coords[1]); if (pos + segLen >= relativeLen) {
if (v1.mask == 0 && v2.mask == 0) { if (Geom.lineContainsPoint(v1.x[0], v1.y[0], v2.x[0], v2.y[0], find.x, find.y, flatness)) { relativeLen += Geom.length(v1.x[0], v1.y[0], find.x, find.y); return relativeLen / len; } else { relativeLen += Geom.length(v1.x[0], v1.y[0], v2.x[0], v2.y[0]); tempPath.invalidatePath(); if (tempPath.outlineContains(find, flatness)) { relativeLen += Geom.length(v1.x[0], v1.y[0], find.x, find.y); return relativeLen / len; } else { relativeLen += Geom.length(v1.x[0], v1.y[0], v2.x[0], v2.y[0]); if (v1.mask == 0 && v2.mask == 0) { if (Geom.lineContainsPoint(v1.x[0], v1.y[0], v2.x[0], v2.y[0], find.x, find.y, flatness)) { relativeLen += Geom.length(v1.x[0], v1.y[0], find.x, find.y); return relativeLen / len; tempPath.invalidatePath(); if (tempPath.outlineContains(find, flatness)) { relativeLen += Geom.length(v1.x[0], v1.y[0], find.x, find.y); return relativeLen / len;
double lineLength = Geom.length(p0.getControlPoint(0), pp); cappedPath.set(0, 0, Geom.cap(pp, p0.getControlPoint(0), -Math.min(radius, lineLength))); double lineLength = Geom.length(p0.getControlPoint(0), pp); cappedPath.set(cappedPath.size() - 1, 0, Geom.cap(pp, p0.getControlPoint(0), -Math.min(radius, lineLength)));