Javafx 从AnchorPane获取可见元素

Javafx 从AnchorPane获取可见元素,javafx,bounds,Javafx,Bounds,我正在开发一个JavaFX应用程序,用户可以在其中缩放和拖动元素(所有元素都包含在AnchorPane中)。其中一些元素是简单的线条,我需要有一个像尺子一样的东西,它有不同的父元素,即使用户缩放或拖动提到的主播,它也可以粘贴在屏幕上的相同位置。我几乎所有的东西都在工作,但我有一个问题,我需要知道用户可以看到来自AnchorPane的哪些线(就像用户缩放和拖动AnchorPane一样,有些线不再可见)。以下是我尝试过的(不起作用…) private List getVisibleVerticalL

我正在开发一个JavaFX应用程序,用户可以在其中缩放和拖动元素(所有元素都包含在AnchorPane中)。其中一些元素是简单的线条,我需要有一个像尺子一样的东西,它有不同的父元素,即使用户缩放或拖动提到的主播,它也可以粘贴在屏幕上的相同位置。我几乎所有的东西都在工作,但我有一个问题,我需要知道用户可以看到来自AnchorPane的哪些线(就像用户缩放和拖动AnchorPane一样,有些线不再可见)。以下是我尝试过的(不起作用…)

private List getVisibleVerticalLinesXCoordonate(){
List xCoordonatesOfVisibleVerticalLines=new ArrayList();
List visibleNodes=new ArrayList();
Bounds Bounds=rulerParent.getBoundsInLocal();
Bounds paneBounds=rulerParent.localToScene(边界);
用于(节点n:GridVerticalline){
Bounds nodeBounds=n.getBoundsInParent();
if(窗格块相交(节点块)){
可视节点。添加(n);
}
}
用于(节点:visibleNodes){
Bounds newBounds=getRelative(节点);
xCoordonatesOfVisibleVerticalLines.add(newBounds.getMinX());
}
System.out.println(Arrays.asList(xCoordonatesOfVisibleVerticalLines));
返回XcoordonatesofVisibleVerticalline;
}
私有边界getRelative(节点){
返回rulerParent.sceneToLocal(node.localToScene(node.getBoundsInLocal());
}
因此,
rulerParent
是屏幕上固定的内容(根本不是缩放或拖动)。在我从锚网中得到可见的线之后,我得到了相对于rulerParent的线的x坐标,这样我就可以将标尺线与锚网中的线对齐。 问题是这并没有返回实际的可见线


我不需要看到整条线就能看得见,这就是为什么我使用相交……如果线条的任何部分是可见的,我需要它。

这是关于如何处理缩放和拖动操作尝试使用
视口
而不是使用
视口
进行缩放,您可以知道
视口的平移X和Y坐标,这是
锚网的可见X和Y坐标

我看不到视口属性或方法为AnchorPane您可以将AnchorPane放置在滚动窗格中并使用其视口您可以获得线条的X和Y以及可见部分的X和Y并进行比较
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()));
    }