文档



JavaFX:使用JavaFX图形
7 选择(发布8)

PickResult对象的方法

在您的代码中创建了PickResult对象后,您可以使用以下方法来处理从处理事件的类传递的信息。

示例7-2 PickResult方法

// 返回相交的节点。如果没有与任何节点相交并且选择了场景,则返回null。
public final Node getIntersectedNode()

// 返回相交节点的本地坐标中的相交点。如果没有选择节点,则返回与离子平面相交的点。
public final Point3D getIntersectedPoint()

// 返回相机位置与相交点之间的相交距离
public final double getIntersectedDistance()

// 返回相交节点的相交面,如果节点没有用户指定的面或在边界上选择,则返回FACE_UNDEFINED。
public final int getIntersectedFace()
 
// 返回相交3D形状的相交纹理坐标。如果选择的目标不是Shape3D或pickOnBounds==true,则返回null。
// 返回表示相交纹理坐标的新Point2D
public final Point2D getIntersectedTexCoord()

PickResult的示例用法

示例7-3展示了如何使用PickResult对象和方法。这些代码片段是PickMesh3DSample应用程序的一部分,该应用程序演示了如何访问PickResult对象中的信息。下载PickMesh3DSample.zip NetBeans项目文件并运行示例。当您将鼠标悬停在网格上时,将在叠加层中显示有关鼠标位置的信息。您可以按下"L"键在填充和线框之间切换绘制模式,以查看组成网格的每个面。

示例7-3使用PickResult的代码示例

...
EventHandler<MouseEvent> moveHandler = new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                PickResult res = event.getPickResult();
                setState(res);
                event.consume();
            }
...
...
final void setState(PickResult result) {
        if (result.getIntersectedNode() == null) {
            data.setText("场景\n\n"
                    + point3DToString(result.getIntersectedPoint()) + "\n"
                    + point2DToString(result.getIntersectedTexCoord()) + "\n"
                    + result.getIntersectedFace() + "\n"
                    + String.format("%.1f", result.getIntersectedDistance()));
        } else {
            data.setText(result.getIntersectedNode().getId() + "\n"
                    + getCullFace(result.getIntersectedNode()) + "\n"
                    + point3DToString(result.getIntersectedPoint()) + "\n"
                    + point2DToString(result.getIntersectedTexCoord()) + "\n"
                    + result.getIntersectedFace() + "\n"
                    + String.format("%.1f", result.getIntersectedDistance()));
        }
    }
...
...
关闭窗口

目录

JavaFX: 使用JavaFX图形

展开 折叠