Ejemplo n.º 1
0
  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$
    }
  }