示例#1
0
  public TreeMap getItem(Point point) {
    Rectangle rect = getClientArea();
    double extent = Math.min(rect.width, rect.height) * frame.scale;

    // normalized coordinates in the interval [0,1)
    double x0 = (point.x - (rect.x - frame.offsetX)) / extent;
    double y0 = (point.y - (rect.y - frame.offsetY)) / extent;

    if (x0 > 1.0 || x0 < 0) return null;
    if (y0 > 1.0 || y0 < 0) return null;

    TreeMap tree = treeMap;
    while (extent > 128 && tree != null && tree.getNetblock().getCIDR() < 32) {
      x0 *= 16;
      y0 *= 16;
      int xi = (int) x0;
      int yi = (int) y0;
      x0 -= xi;
      y0 -= yi;
      IPv4Netblock subnet = curve.getSubNetblock(tree.getNetblock(), yi * 16 + xi);
      tree = tree.getSubTree(subnet);
      extent = extent / 16;
    }
    return tree;
  }
示例#2
0
  public Rectangle getItemBounds(TreeMap subtree) {
    Rectangle rect = getClientArea();
    int x = rect.x - (int) frame.offsetX;
    int y = rect.y - (int) frame.offsetY;
    int extent = (int) (Math.min(rect.width, rect.height) * frame.scale);

    TreeMap tree = treeMap;
    while (!tree.getNetblock().equals(subtree.getNetblock())) {
      int h = curve.getIndex(tree.getNetblock(), subtree.getNetblock());
      int xi = h % 16;
      int yi = h / 16;
      x = x + (xi * extent / 16);
      y = y + (yi * extent / 16);
      extent = extent / 16;
      tree = tree.getSubTree(subtree.getNetblock());
    }
    return new Rectangle(x, y, extent, extent);
  }