我正在开发一个JavaFX应用程序,用户可以在其中缩放和拖动元素(所有元素都包含在锚具中)。其中一些元素是简单的线,我需要一个像尺子一样的东西,它有不同的父元素,即使用户缩放或拖动提到的锚具,也可以将其粘贴在屏幕上的相同位置。我几乎所有的东西都在工作,但我有一个问题,我需要知道用户可以看到来自锚网的哪些线(就像用户缩放和拖动锚网一样,一些线不再可见)。以下是我尝试的(不起作用…)
private List<Double> getVisibleVerticalLinesXCoordonate() {
List<Double> xCoordonatesOfVisibleVerticalLines = new ArrayList<>();
List<Node> visibleNodes = new ArrayList<>();
Bounds bounds = rulerParent.getBoundsInLocal();
Bounds paneBounds = rulerParent.localToScene(bounds);
for (Node n : gridVerticalLines) {
Bounds nodeBounds = n.getBoundsInParent();
if (paneBounds.intersects(nodeBounds)) {
visibleNodes.add(n);
}
}
for (Node node : visibleNodes) {
Bounds newBounds = getRelative(node);
xCoordonatesOfVisibleVerticalLines.add(newBounds.getMinX());
}
System.out.println(Arrays.asList(xCoordonatesOfVisibleVerticalLines));
return xCoordonatesOfVisibleVerticalLines;
}
private Bounds getRelative(Node node) {
return rulerParent.sceneToLocal(node.localToScene(node.getBoundsInLocal()));
}
rulerParent
问题是,这并没有返回实际的可见线。。。
我不需要看到整条线就认为它是可见的,这就是为什么我使用intersect。。。如果一条线的任何部分可见,我需要它。