/** * Is the given sprite visible in the given area. * * @param sprite The sprite to check. * @param X1 The min abscissa of the area. * @param Y1 The min ordinate of the area. * @param X2 The max abscissa of the area. * @param Y2 The max ordinate of the area. * @return True if the node lies in the given area. */ protected boolean isSpriteIn(GraphicSprite sprite, double X1, double Y1, double X2, double Y2) { if (sprite.isAttachedToNode() && nodeInvisible.contains(sprite.getNodeAttachment().getId())) { return false; } else if (sprite.isAttachedToEdge() && !isEdgeVisible(sprite.getEdgeAttachment())) { return false; } else { Values size = sprite.getStyle().getSize(); double w2 = metrics.lengthToPx(size, 0) / 2; double h2 = size.size() > 1 ? metrics.lengthToPx(size, 1) / 2 : w2; Point2D.Double src = spritePositionPx(sprite); // new Point2D.Double( // sprite.getX(), // sprite.getY() ); // Tx.transform( src, src ); double x1 = src.x - w2; double x2 = src.x + w2; double y1 = src.y - h2; double y2 = src.y + h2; if (x2 < X1) return false; if (y2 < Y1) return false; if (x1 > X2) return false; if (y1 > Y2) return false; return true; } }
/** * Check if a sprite contains the given point (x,y). * * @param elt The sprite. * @param x The point abscissa. * @param y The point ordinate. * @return True if (x,y) is in the given element. */ protected boolean spriteContains(GraphicElement elt, double x, double y) { Values size = elt.getStyle().getSize(); double w2 = metrics.lengthToPx(size, 0) / 2; double h2 = size.size() > 1 ? metrics.lengthToPx(size, 1) / 2 : w2; Point2D.Double dst = spritePositionPx((GraphicSprite) elt); // new // Point2D.Double( // elt.getX(), // elt.getY() // ); // Point2D.Double dst = new Point2D.Double(); // Tx.transform( src, dst ); dst.x -= metrics.viewport[0]; dst.y -= metrics.viewport[1]; double x1 = dst.x - w2; double x2 = dst.x + w2; double y1 = dst.y - h2; double y2 = dst.y + h2; if (x < x1) return false; if (y < y1) return false; if (x > x2) return false; if (y > y2) return false; return true; }
/** * Is the given node visible in the given area. * * @param node The node to check. * @param X1 The min abscissa of the area. * @param Y1 The min ordinate of the area. * @param X2 The max abscissa of the area. * @param Y2 The max ordinate of the area. * @return True if the node lies in the given area. */ protected boolean isNodeIn(GraphicNode node, double X1, double Y1, double X2, double Y2) { Values size = node.getStyle().getSize(); double w2 = metrics.lengthToPx(size, 0) / 2; double h2 = size.size() > 1 ? metrics.lengthToPx(size, 1) / 2 : w2; Point2D.Double src = new Point2D.Double(node.getX(), node.getY()); boolean vis = true; Tx.transform(src, src); double x1 = src.x - w2; double x2 = src.x + w2; double y1 = src.y - h2; double y2 = src.y + h2; if (x2 < X1) vis = false; else if (y2 < Y1) vis = false; else if (x1 > X2) vis = false; else if (y1 > Y2) vis = false; return vis; }