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())); } } ... ...