@Override public Overlay getActiveOverlay(final ImageDisplay disp) { for (final DataView view : disp) { if (view.isSelected() && view instanceof OverlayView) { return ((OverlayView) view).getData(); } } return null; }
@SuppressWarnings("unused") private Overlay getActiveOverlay() { final ImageDisplay activeDisplay = imageDisplayService.getActiveImageDisplay(); if (activeDisplay == null) return null; final List<DataView> views = activeDisplay; for (DataView view : views) { if (view.isSelected() && (view instanceof OverlayView)) return ((OverlayView) view).getData(); } return null; }
@Override public void updateFigure(final OverlayView view, final EllipseFigure figure) { super.updateFigure(view, figure); final EllipseOverlay overlay = downcastOverlay(view.getData()); final double centerX = overlay.getOrigin(0); final double centerY = overlay.getOrigin(1); final double radiusX = overlay.getRadius(0); final double radiusY = overlay.getRadius(1); figure.setBounds(new Point2D.Double(centerX - radiusX, centerY - radiusY), new Point2D.Double(centerX + radiusX, centerY + radiusY)); }
@Override public void updateOverlay(final BezierFigure figure, final OverlayView view) { super.updateOverlay(figure, view); assert view.getData() instanceof GeneralPathOverlay; final GeneralPathOverlay gpo = (GeneralPathOverlay) view.getData(); final GeneralPathRegionOfInterest gpr = gpo.getRegionOfInterest(); gpr.reset(); for (int i = 0; i < figure.getNodeCount(); i++) { final Node n = figure.getNode(i); if (i == 0) gpr.moveTo(n.x[0], n.y[0]); else gpr.lineTo(n.x[0], n.y[0]); } gpo.update(); }
@Override public void updateFigure(final OverlayView view, final LineFigure figure) { super.updateFigure(view, figure); final LineFigure lineFigure = figure; final Overlay overlay = view.getData(); assert overlay instanceof LineOverlay; final LineOverlay lineOverlay = (LineOverlay) overlay; final double pt1X = lineOverlay.getLineStart(0); final double pt1Y = lineOverlay.getLineStart(1); final double pt2X = lineOverlay.getLineEnd(0); final double pt2Y = lineOverlay.getLineEnd(1); lineFigure.setStartPoint(new Point2D.Double(pt1X, pt1Y)); lineFigure.setEndPoint(new Point2D.Double(pt2X, pt2Y)); }
@Override public void updateFigure(final OverlayView view, final RectangleFigure figure) { super.updateFigure(view, figure); final RectangleOverlay overlay = downcastOverlay(view.getData()); final double x0 = overlay.getOrigin(0); final double y0 = overlay.getOrigin(1); final double w = overlay.getExtent(0); final double h = overlay.getExtent(1); final Point2D.Double anch = new Point2D.Double(x0, y0); final Point2D.Double lead = new Point2D.Double(x0 + w, y0 + h); figure.setBounds(anch, lead); }
@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 GeneralPathFigure figure) { super.updateFigure(view, figure); final GeneralPathOverlay overlay = downcastOverlay(view.getData()); final GeneralPathRegionOfInterest roi = overlay.getRegionOfInterest(); figure.setGeneralPath(roi.getGeneralPath()); }
@Override public void updateOverlay(final F figure, final OverlayView view) { final Color strokeColor = figure.get(AttributeKeys.STROKE_COLOR); final Overlay overlay = view.getData(); overlay.setLineColor(AWTColors.getColorRGB(strokeColor)); // The line style is intentionally omitted here because it is ambiguous and // because there is no UI for setting it by the JHotDraw UI. // FIXME - is this next line dangerous for drawing attributes? width could // conceivably be 0. overlay.setLineWidth(figure.get(AttributeKeys.STROKE_WIDTH)); final Color fillColor = figure.get(AttributeKeys.FILL_COLOR); overlay.setFillColor(AWTColors.getColorRGB(fillColor)); overlay.setAlpha(fillColor.getAlpha()); }
@Override public void updateFigure(final OverlayView view, final PointFigure figure) { super.updateFigure(view, figure); final PointFigure pointFigure = figure; final Overlay overlay = view.getData(); assert overlay instanceof PointOverlay; final PointOverlay pointOverlay = (PointOverlay) overlay; pointFigure.setFillColor(pointOverlay.getFillColor()); pointFigure.setLineColor(pointOverlay.getLineColor()); pointFigure.setPoints(pointOverlay.getPoints()); }
@Override public void updateOverlay(final GeneralPathFigure figure, final OverlayView view) { super.updateOverlay(figure, view); final GeneralPathOverlay overlay = downcastOverlay(view.getData()); final GeneralPathRegionOfInterest roi = overlay.getRegionOfInterest(); roi.reset(); BezierPathFunctions.addToRegionOfInterest(figure.getGeneralPath() .getPathIterator(null), roi); overlay.update(); }
@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); } } }
@Override public void updateOverlay(final PointFigure figure, final OverlayView view) { final Overlay overlay = view.getData(); assert overlay instanceof PointOverlay; final PointOverlay pointOverlay = (PointOverlay) overlay; // do not let call to super.updateOverlay() mess with drawing attributes // so save colors final ColorRGB fillColor = overlay.getFillColor(); final ColorRGB lineColor = overlay.getLineColor(); // call super in case it initializes anything of importance super.updateOverlay(figure, view); // and restore colors to what we really want pointOverlay.setFillColor(fillColor); pointOverlay.setLineColor(lineColor); // set points pointOverlay.setPoints(figure.getPoints()); pointOverlay.update(); }
@Override public void updateOverlay(final AngleFigure figure, final OverlayView overlayView) { super.updateOverlay(figure, overlayView); final Overlay overlay = overlayView.getData(); assert overlay instanceof AngleOverlay; final AngleOverlay angleOverlay = (AngleOverlay) overlay; Point2D.Double figPt; final double[] ovPt = new double[angleOverlay.numDimensions()]; figPt = figure.getEndPoint1(); ovPt[0] = figPt.x; ovPt[1] = figPt.y; for (int i = 0; i < ovPt.length; i++) angleOverlay.setPoint1(ovPt[i], i); figPt = figure.getCenterPoint(); ovPt[0] = figPt.x; ovPt[1] = figPt.y; for (int i = 0; i < ovPt.length; i++) angleOverlay.setCenter(ovPt[i], i); figPt = figure.getEndPoint2(); ovPt[0] = figPt.x; ovPt[1] = figPt.y; for (int i = 0; i < ovPt.length; i++) angleOverlay.setPoint2(ovPt[i], i); angleOverlay.update(); }
@Override public void updateFigure(final OverlayView overlayView, final AngleFigure figure) { super.updateFigure(overlayView, figure); final Overlay overlay = overlayView.getData(); assert overlay instanceof AngleOverlay; final AngleOverlay angleOverlay = (AngleOverlay) overlay; double ptX, ptY; ptX = angleOverlay.getPoint1(0); ptY = angleOverlay.getPoint1(1); figure.setEndPoint1(ptX, ptY); ptX = angleOverlay.getCenter(0); ptY = angleOverlay.getCenter(1); figure.setCenterPoint(ptX, ptY); ptX = angleOverlay.getPoint2(0); ptY = angleOverlay.getPoint2(1); figure.setEndPoint2(ptX, ptY); }
/** * When a tool creates an overlay, add the overlay/figure combo to an * {@link OverlayFigureView}. */ @EventHandler protected void onEvent(final FigureCreatedEvent event) { final ImageDisplay display = event.getDisplay(); if (display != getDisplay()) return; // not this canvas's display final OverlayView overlay = event.getView(); for (int i = 0; i < display.numDimensions(); i++) { final AxisType axisType = display.axis(i).type(); if (axisType.isXY()) continue; if (overlay.getData().dimensionIndex(axisType) < 0) { overlay.setPosition(display.getLongPosition(axisType), axisType); } } if (drawingView.getSelectedFigures().contains(event.getFigure())) { overlay.setSelected(true); } final OverlayFigureView figureView = new OverlayFigureView(displayViewer, overlay, event.getFigure()); figureViews.add(figureView); display.add(overlay); display.update(); }
@Override public void updateOverlay(final RectangleFigure figure, final OverlayView view) { super.updateOverlay(figure, view); final RectangleOverlay overlay = downcastOverlay(view.getData()); final Rectangle2D.Double bounds = figure.getBounds(); final double x = bounds.getMinX(); final double y = bounds.getMinY(); final double w = bounds.getWidth(); final double h = bounds.getHeight(); overlay.setOrigin(x, 0); overlay.setOrigin(y, 1); overlay.setExtent(w, 0); overlay.setExtent(h, 1); overlay.update(); toolService.reportRectangle(x, y, w, h); }
@Override public void updateOverlay(final EllipseFigure figure, final OverlayView view) { super.updateOverlay(figure, view); final EllipseOverlay overlay = downcastOverlay(view.getData()); final Rectangle2D.Double bounds = figure.getBounds(); final double x = bounds.getMinX(); final double y = bounds.getMinY(); final double w = bounds.getWidth(); final double h = bounds.getHeight(); overlay.setOrigin(x + w / 2, 0); overlay.setOrigin(y + h / 2, 1); overlay.setRadius(w / 2, 0); overlay.setRadius(h / 2, 1); overlay.update(); toolService.reportRectangle(x, y, w, h); }
@Override public void updateOverlay(final LineFigure figure, final OverlayView view) { super.updateOverlay(figure, view); final LineFigure line = figure; final Overlay overlay = view.getData(); assert overlay instanceof LineOverlay; final LineOverlay lineOverlay = (LineOverlay) overlay; final Node startNode = line.getNode(0); final double x1 = startNode.getControlPoint(0).x; final double y1 = startNode.getControlPoint(0).y; lineOverlay.setLineStart(x1, 0); lineOverlay.setLineStart(y1, 1); final Node endNode = line.getNode(1); final double x2 = endNode.getControlPoint(0).x; final double y2 = endNode.getControlPoint(0).y; lineOverlay.setLineEnd(x2, 0); lineOverlay.setLineEnd(y2, 1); lineOverlay.update(); toolService.reportLine(x1, y1, x2, y2); }
final PolygonOverlay poverlay = downcastOverlay(view.getData()); final PolygonRegionOfInterest roi = poverlay.getRegionOfInterest(); final int nodeCount = figure.getNodeCount();