/** * Joins two segments into one if the given Point2D.Double hits a node * of the polyline. * @return true if the two segments were joined. * * @param join a Point at a node on the bezier path * @param tolerance a tolerance, tolerance should take into account * the line width, plus 2 divided by the zoom factor. */ public boolean joinSegments(Point2D.Double join, double tolerance) { int i = findSegment(join, tolerance); if (i != -1 && i > 1) { removeNode(i); return true; } return false; }
@Override public void undo() throws CannotUndoException { super.undo(); willChange(); removeNode(index); changed(); } });
@Override public void redo() throws CannotRedoException { super.redo(); view.removeFromSelection(f); f.willChange(); f.removeNode(index); f.changed(); view.addToSelection(f); }
@Override public void redo() throws CannotRedoException { super.redo(); view.removeFromSelection(f); f.willChange(); f.removeNode(index); f.changed(); view.addToSelection(f); }
@Override public void updateFigure(final OverlayView view, final BezierFigure figure) { super.updateFigure(view, figure); assert view.getData() instanceof GeneralPathOverlay; final GeneralPathOverlay gpo = (GeneralPathOverlay) view.getData(); final GeneralPathRegionOfInterest gpr = gpo.getRegionOfInterest(); final PathIterator pi = gpr.getGeneralPath().getPathIterator(null); final int nCount = figure.getNodeCount(); int i = 0; final double[] pos = new double[6]; while (!pi.isDone()) { pi.currentSegment(pos); final Node n = new Node(pos[0], pos[1]); if (i < nCount) figure.getNode(i).setTo(n); else figure.addNode(n); pi.next(); i++; } while (i < figure.getNodeCount()) figure.removeNode(i); }
@Override public void updateFigure(final OverlayView view, final BezierFigure figure) { super.updateFigure(view, figure); final PolygonOverlay polygonOverlay = downcastOverlay(view.getData()); final PolygonRegionOfInterest roi = polygonOverlay.getRegionOfInterest(); final int vertexCount = roi.getVertexCount(); while (figure.getNodeCount() > vertexCount) { figure.removeNode(vertexCount); } for (int i = 0; i < vertexCount; i++) { final RealLocalizable vertex = roi.getVertex(i); final double x = vertex.getDoublePosition(0); final double y = vertex.getDoublePosition(1); if (figure.getNodeCount() == i) { figure.addNode(new Node(x, y)); } else { final Node node = figure.getNode(i); node.mask = 0; Arrays.fill(node.x, x); Arrays.fill(node.y, y); } } }
Rectangle invalidatedArea = getDrawingArea(); f.willChange(); final BezierPath.Node removedNode = f.removeNode(index); f.changed(); fireHandleRequestRemove(invalidatedArea);
Rectangle invalidatedArea = getDrawingArea(); f.willChange(); final BezierPath.Node removedNode = f.removeNode(index); f.changed(); fireHandleRequestRemove(invalidatedArea);