public void drawScale(Graphics2D g2d, Rectangle bound, float fontHeight) { ImageElement image = view2DPane.getImage(); RenderedImage source = view2DPane.getSourceImage(); if (source == null) { return; } double zoomFactor = view2DPane.getViewModel().getViewScale(); double scale = image.getPixelSize() / zoomFactor; double scaleSizex = ajustShowScale( scale, (int) Math.min(zoomFactor * source.getWidth() * image.getRescaleX(), bound.width / 2.0)); if (showBottomScale & scaleSizex > 30.0d) { Unit[] unit = {image.getPixelSpacingUnit()}; String str = ajustLengthDisplay(scaleSizex * scale, unit); g2d.setPaint(color); g2d.setStroke(new BasicStroke(1.0F)); g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setPaint(Color.black); double posx = bound.width / 2.0 - scaleSizex / 2.0; double posy = bound.height - border - 1.5; // -1.5 for outline Line2D line = new Line2D.Double(posx, posy, posx + scaleSizex, posy); g2d.draw(getOutLine(line)); line.setLine(posx, posy - 15.0, posx, posy); g2d.draw(getOutLine(line)); line.setLine(posx + scaleSizex, posy - 15.0, posx + scaleSizex, posy); g2d.draw(getOutLine(line)); int divisor = str.indexOf("5") == -1 ? str.indexOf("2") == -1 ? 10 : 2 : 5; // $NON-NLS-1$ //$NON-NLS-2$ double divSquare = scaleSizex / divisor; for (int i = 1; i < divisor; i++) { line.setLine(posx + divSquare * i, posy, posx + divSquare * i, posy - 10.0); g2d.draw(getOutLine(line)); } if (divSquare > 90) { double secondSquare = divSquare / 10.0; for (int i = 0; i < divisor; i++) { for (int k = 1; k < 10; k++) { double secBar = posx + divSquare * i + secondSquare * k; line.setLine(secBar, posy, secBar, posy - 5.0); g2d.draw(getOutLine(line)); } } } g2d.setPaint(Color.white); line.setLine(posx, posy, posx + scaleSizex, posy); g2d.draw(line); line.setLine(posx, posy - 15.0, posx, posy); g2d.draw(line); line.setLine(posx + scaleSizex, posy - 15.0, posx + scaleSizex, posy); g2d.draw(line); for (int i = 0; i < divisor; i++) { line.setLine(posx + divSquare * i, posy, posx + divSquare * i, posy - 10.0); g2d.draw(line); } if (divSquare > 90) { double secondSquare = divSquare / 10.0; for (int i = 0; i < divisor; i++) { for (int k = 1; k < 10; k++) { double secBar = posx + divSquare * i + secondSquare * k; line.setLine(secBar, posy, secBar, posy - 5.0); g2d.draw(line); } } } g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_DEFAULT); String pixSizeDesc = image.getPixelSizeCalibrationDescription(); if (pixSizeDesc != null) { GraphicLabel.paintFontOutline( g2d, pixSizeDesc, (float) (posx + scaleSizex + 5), (float) posy - fontHeight); } str += " " + unit[0].getAbbreviation(); // $NON-NLS-1$ GraphicLabel.paintFontOutline(g2d, str, (float) (posx + scaleSizex + 5), (float) posy); } double scaleSizeY = ajustShowScale( scale, (int) Math.min( zoomFactor * source.getHeight() * image.getRescaleY(), bound.height / 2.0)); if (scaleSizeY > 30.0d) { Unit[] unit = {image.getPixelSpacingUnit()}; String str = ajustLengthDisplay(scaleSizeY * scale, unit); g2d.setPaint(color); g2d.setStroke(new BasicStroke(1.0F)); g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setPaint(Color.black); double posx = border + 20; double posy = bound.height / 2.0 - scaleSizeY / 2.0; Line2D line = new Line2D.Double(posx, posy, posx, posy + scaleSizeY); g2d.draw(getOutLine(line)); line.setLine(posx, posy, posx + 15, posy); g2d.draw(getOutLine(line)); line.setLine(posx, posy + scaleSizeY, posx + 15, posy + scaleSizeY); g2d.draw(getOutLine(line)); int divisor = str.indexOf("5") == -1 ? str.indexOf("2") == -1 ? 10 : 2 : 5; // $NON-NLS-1$ //$NON-NLS-2$ double divSquare = scaleSizeY / divisor; for (int i = 0; i < divisor; i++) { line.setLine(posx, posy + divSquare * i, posx + 10.0, posy + divSquare * i); g2d.draw(getOutLine(line)); } if (divSquare > 90) { double secondSquare = divSquare / 10.0; for (int i = 0; i < divisor; i++) { for (int k = 1; k < 10; k++) { double secBar = posy + divSquare * i + secondSquare * k; line.setLine(posx, secBar, posx + 5.0, secBar); g2d.draw(getOutLine(line)); } } } g2d.setPaint(Color.white); line.setLine(posx, posy, posx, posy + scaleSizeY); g2d.draw(line); line.setLine(posx, posy, posx + 15, posy); g2d.draw(line); line.setLine(posx, posy + scaleSizeY, posx + 15, posy + scaleSizeY); g2d.draw(line); for (int i = 0; i < divisor; i++) { line.setLine(posx, posy + divSquare * i, posx + 10.0, posy + divSquare * i); g2d.draw(line); } if (divSquare > 90) { double secondSquare = divSquare / 10.0; for (int i = 0; i < divisor; i++) { for (int k = 1; k < 10; k++) { double secBar = posy + divSquare * i + secondSquare * k; line.setLine(posx, secBar, posx + 5.0, secBar); g2d.draw(line); } } } g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_DEFAULT); GraphicLabel.paintFontOutline( g2d, str + " " + unit[0].getAbbreviation(), (int) posx, (int) (posy - 5)); // $NON-NLS-1$ } }