我需要为我在 Java3D 应用程序中创建的某些形状(例如圆柱体)添加拖放功能。我想我知道基本步骤(虽然含糊不清):
- 使用当前 Canvas 和根 BranchGroup 构造一个 PickCanvas。
- 将 PickCanvas 的模式设置为 PickCanvas.GEOMETRY,根据文档,这更准确[ 疑问:各种拾取模式之间有什么区别,即 BOUNDS,几何,GEOMETRY_INTERSECT_INFO ?从文档中我不清楚。几何采摘的真正含义是什么? ]
- 设置我想要挑选的对象的能力。 [ 疑问:这两种设置能力的方式有什么区别? -
node.setCapability(Node.ENABLE_PICK_REPORTING)
和PickTool.setCapabilities(node, PickTool.INTERSECT_FULL)
? ] - 在 Canvas 上添加一个mouseListener。
- 在mousePressed 方法中,我需要识别点击了什么对象,然后采取适当的行动。[ 疑问:这是我最困惑的部分.如果能详细回答我如何识别已单击的对象,那将非常有帮助。]
此外,PickShapes 到底是什么,它们将如何影响拾取算法?
如果我问的是非常基本的问题,我真的很抱歉,但我花了一整天的时间阅读文档并成为初学者,这些对我来说还不够。时间紧迫,希望Stackoverflow社区能慷慨解囊,耐心解答我的疑惑。非常感谢!
更新:澄清一下,通过拖放功能,我的意思是我想使用通常的鼠标左键按下、拖动和鼠标释放手势将圆柱体从 Canvas 上的一个位置平移到另一个位置.
最佳答案
要平移(和旋转)形状,请使用 MouseBehavior类。例如,对于以下内容,鼠标左键旋转,右键平移。
public Test()
{
SimpleUniverse universe = new SimpleUniverse();
BranchGroup group = new BranchGroup();
TransformGroup rootTransformGroup = new TransformGroup();
group.addChild(rootTransformGroup);
rootTransformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
rootTransformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
ColorCube colorCube = new ColorCube(.3);
rootTransformGroup.addChild(colorCube);
BoundingSphere boundingSphere = new BoundingSphere(new Point3d(0, 0, 0), 1000);
MouseRotate mouseRotate = new MouseRotate();
mouseRotate.setTransformGroup(rootTransformGroup);
mouseRotate.setSchedulingBounds(boundingSphere);
group.addChild(mouseRotate);
MouseTranslate mouseTrans = new MouseTranslate();
mouseTrans.setTransformGroup(rootTransformGroup);
mouseTrans.setSchedulingBounds(boundingSphere);
group.addChild(mouseTrans);
universe.getViewingPlatform().setNominalViewingTransform();
universe.addBranchGraph(group);
}
关于java - 在 Java 3D 中拾取形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13669365/