예제 #1
0
  public Rectangle2D getBounds2D() {
    StringTokenizer tokens = new StringTokenizer(getRenderString(), "\n");

    int noLines = tokens.countTokens();

    double height = (theFont.getSize2D() * noLines) + 5;
    double width = 0;

    while (tokens.hasMoreTokens()) {
      double l = theFont.getSize2D() * tokens.nextToken().length() * (5.0 / 8.0);
      if (l > width) width = l;
    }

    double parX;
    double parY;
    if (parent instanceof State) {
      parX = ((State) parent).getX();
      parY = ((State) parent).getY();
    } else if (parent instanceof Transition) {
      parX = ((Transition) parent).getMiddle().getX(); // dummy
      parY = ((Transition) parent).getMiddle().getY(); // dummy
    } else {
      parX = 0;
      parY = 0;
    }

    double mx = parX + offsetX;
    double my = parY + offsetY - 10;

    double tx = parX + width + offsetX;
    double ty = parY + height + offsetY - 10;

    return new Rectangle2D.Double(mx, my, tx - mx, ty - my);
  }
예제 #2
0
  public void workOutMinsAndMaxs() {
    StringTokenizer tokens = new StringTokenizer(getRenderString(), "\n");

    int noLines = tokens.countTokens();

    double height = (theFont.getSize2D() * noLines) + 5;
    double width = 0;

    while (tokens.hasMoreTokens()) {
      double l = theFont.getSize2D() * tokens.nextToken().length() * (5.0 / 8.0);
      if (l > width) width = l;
    }

    double parX;
    double parY;
    if (parent instanceof State) {
      parX = ((State) parent).getX();
      parY = ((State) parent).getY();
    } else if (parent instanceof Transition) {
      parX = ((Transition) parent).getMiddle().getX(); // dummy
      parY = ((Transition) parent).getMiddle().getY(); // dummy
    } else {
      parX = 0;
      parY = 0;
    }

    minX = parX + offsetX - 5;
    minY = parY + offsetY - 25;

    maxX = parX + width + offsetX + 5;
    maxY = parY + height + offsetY - 5;
  }
예제 #3
0
  /**
   * This method calculates whether a given "Hot area" rectangle intersects with this label and
   * returns the result. The aim of this method is that it can be used to detect whether the
   * position of the mouse is colliding with the label.
   *
   * @param rect A "Hot area" which we are looking for the collision to lie in.
   * @return the result of the collision.
   */
  public boolean intersects(Rectangle2D rect) {
    intersects = new ArrayList();
    if (!getString().equals("")) {
      double parX;
      double parY;
      if (parent instanceof State) {
        parX = ((State) parent).getX();
        parY = ((State) parent).getY();
      } else if (parent instanceof Transition) {
        parX = ((Transition) parent).getMiddle().getX(); // dummy
        parY = ((Transition) parent).getMiddle().getY(); // dummy
      } else {
        parX = 0;
        parY = 0;
      }

      double x = parX + offsetX;
      double y = parY + offsetY - 5;
      StringTokenizer tokens;
      String pre = "";
      if (lineLabels) {
        pre = getName() + ": ";
      }

      tokens = new StringTokenizer(pre + getRenderString(), "\n");

      int i = 0;
      boolean collides = false;
      while (tokens.hasMoreTokens() && !collides) {
        String str = tokens.nextToken().trim();
        // System.out.println("str = \""+str+"\"");
        double height = theFont.getSize2D();
        double width = theFont.getSize2D() * str.length() * (5.0 / 8.0);
        intersects.add(new Rectangle2D.Double(x, y + (i * (height + 1.75) - 2), width, height));
        collides =
            (new Rectangle2D.Double(x, y + (i * (height + 1.75) - 2), width, height))
                .intersects(rect);
        i++;
      }
      return collides;
    } else return false;
  }