@Override public void draw(Graphics2D g) { if (createdFigure != null && // anchor != null && // mouseLocation != null &&// getView() == creationView) { g.setColor(Color.BLACK); g.setStroke(new BasicStroke(1f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 0f, new float[]{1f, 5f}, 0f)); g.drawLine(anchor.x, anchor.y, mouseLocation.x, mouseLocation.y); if (!isWorking && createdFigure.isClosed() && createdFigure.getNodeCount() > 1) { Point p = creationView.drawingToView(createdFigure.getStartPoint()); g.drawLine(mouseLocation.x, mouseLocation.y, p.x, p.y); } } }
@Override public void mouseMoved(MouseEvent evt) { if (createdFigure != null && anchor != null && mouseLocation != null) { if (evt.getSource() == creationView) { Rectangle r = new Rectangle(anchor); r.add(mouseLocation); r.add(evt.getPoint()); if (createdFigure.isClosed() && createdFigure.getNodeCount() > 0) { r.add(creationView.drawingToView(createdFigure.getStartPoint())); } r.grow(1, 1); fireAreaInvalidated(r); mouseLocation = evt.getPoint(); } } }
@Override protected void drawFill(Graphics2D g) { if (isClosed() || get(UNCLOSED_PATH_FILLED)) { double grow = AttributeKeys.getPerpendicularFillGrowth(this); if (grow == 0d) { g.fill(path); } else { GrowStroke gs = new GrowStroke(grow, AttributeKeys.getStrokeTotalWidth(this) * get(STROKE_MITER_LIMIT)); g.fill(gs.createStrokedShape(path)); } } }
@Override protected void drawStroke(Graphics2D g) { if (isClosed()) { double grow = AttributeKeys.getPerpendicularDrawGrowth(this); if (grow == 0d) { g.draw(path); } else { GrowStroke gs = new GrowStroke(grow, AttributeKeys.getStrokeTotalWidth(this) * get(STROKE_MITER_LIMIT)); g.draw(gs.createStrokedShape(path)); } } else { g.draw(getCappedPath()); } drawCaps(g); }
@Override public Collection<Handle> createSecondaryHandles() { BezierFigure f = getOwner(); LinkedList<Handle> list = new LinkedList<Handle>(); BezierPath.Node v = f.getNode(index); if ((v.mask & BezierPath.C1_MASK) != 0 && (index != 0 || f.isClosed())) { list.add(new BezierControlPointHandle(f, index, 1, getTransformOwner())); } if ((v.mask & BezierPath.C2_MASK) != 0 && (index < f.getNodeCount() - 1 || f.isClosed())) { list.add(new BezierControlPointHandle(f, index, 2, getTransformOwner())); } if (index > 0 || f.isClosed()) { int i = (index == 0) ? f.getNodeCount() - 1 : index - 1; v = f.getNode(i); if ((v.mask & BezierPath.C2_MASK) != 0) { list.add(new BezierControlPointHandle(f, i, 2, getTransformOwner())); } } if (index < f.getNodeCount() - 1 || f.isClosed()) { int i = (index == f.getNodeCount() - 1) ? 0 : index + 1; v = f.getNode(i); if ((v.mask & BezierPath.C1_MASK) != 0) { list.add(new BezierControlPointHandle(f, i, 1, getTransformOwner())); } } return list; }
BezierPath.Node v = f.getNode(index); if ((v.mask & BezierPath.C1_MASK) != 0 && (index != 0 || f.isClosed())) { list.add(new BezierControlPointHandle(f, index, 1)); || f.isClosed())) { list.add(new BezierControlPointHandle(f, index, 2)); if (index > 0 || f.isClosed()) { int i = (index == 0) ? f.getNodeCount() - 1 : index - 1; v = f.getNode(i); if (index < f.getNodeCount() - 2 || f.isClosed()) { int i = (index == f.getNodeCount() - 1) ? 0 : index + 1; v = f.getNode(i);
public Point2D.Double chop(Point2D.Double p) { if (isClosed()) { double grow = AttributeKeys.getPerpendicularHitGrowth(this); if (grow == 0d) { return path.chop(p); } else { GrowStroke gs = new GrowStroke(grow, AttributeKeys.getStrokeTotalWidth(this) * get(STROKE_MITER_LIMIT)); return Geom.chop(gs.createStrokedShape(path), p); } } else { return path.chop(p); } }
@Override public void deactivate(DrawingEditor editor) { super.deactivate(editor); getView().setCursor(Cursor.getDefaultCursor()); if (createdFigure != null) { if (anchor != null && mouseLocation != null) { Rectangle r = new Rectangle(anchor); r.add(mouseLocation); if (createdFigure.getNodeCount() > 0 && createdFigure.isClosed()) { r.add(getView().drawingToView(createdFigure.getStartPoint())); } fireAreaInvalidated(r); } finishCreation(createdFigure, creationView); createdFigure = null; } }
@Override public boolean contains(Point2D.Double p) { double tolerance = Math.max(2f, AttributeKeys.getStrokeTotalWidth(this) / 2d); if (isClosed() || get(FILL_COLOR) != null && get(UNCLOSED_PATH_FILLED)) { if (path.contains(p)) { return true; return true; } else { if (isClosed()) { return false; if (!isClosed()) { if (getCappedPath().outlineContains(p, tolerance)) { return true;
(index > 0 && index < f.getNodeCount() - 1 || f.isClosed())) { drawCircle(g, handleStrokeColor, handleFillColor); } else {
if (bezier.isClosed()) { writePolygonElement(parent, path); } else {
(modifiersEx & InputEvent.BUTTON2_MASK) == 0) { f.willChange(); if (index > 0 && index < f.getNodeCount() || f.isClosed()) { newValue.mask = (newValue.mask + 3) % 4; } else if (index == 0) {
if (bezier.isClosed()) { writePolygonElement(parent, path); } else {
protected void writePoints(DOMOutput out) throws IOException { out.openElement("points"); if (isClosed()) { out.addAttribute("closed", true); } for (int i = 0, n = getNodeCount(); i < n; i++) { BezierPath.Node node = getNode(i); out.openElement("p"); out.addAttribute("mask", node.mask, 0); out.addAttribute("colinear", true); out.addAttribute("x", node.x[0]); out.addAttribute("y", node.y[0]); out.addAttribute("c1x", node.x[1], node.x[0]); out.addAttribute("c1y", node.y[1], node.y[0]); out.addAttribute("c2x", node.x[2], node.x[0]); out.addAttribute("c2y", node.y[2], node.y[0]); out.closeElement(); } out.closeElement(); }
BezierFigure f = getOwner(); int size = f.getNodeCount(); boolean isClosed = f.isClosed(); Color fillColor; Color strokeColor;
if (cappedPath == null) { cappedPath = (BezierPath) path.clone(); if (isClosed()) { cappedPath.setClosed(true); } else {