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); }
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; }
/** * 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; }