2

我需要将拖放功能添加到我在 Java3D 应用程序中创建的一些形状(比如圆柱体)。我想我知道基本步骤(虽然含糊不清):

  1. 使用当前Canvas和根BranchGroup构造一个PickCanvas
  2. 将 PickCanvas 的模式设置为PickCanvas.GEOMETRY,根据文档更准确 [疑问:各种拾取模式有什么区别,即 BOUNDS、GEOMETRY、GEOMETRY_INTERSECT_INFO ?从文档中我不清楚。几何挑选的真正含义是什么?]
  3. 设置我要选择的对象的功能。[疑问:这两种设置能力的方法有什么区别?- node.setCapability(Node.ENABLE_PICK_REPORTING)PickTool.setCapabilities(node, PickTool.INTERSECT_FULL)?]
  4. mouseListener添加到画布。
  5. mousePressed方法中,我需要确定单击了哪个对象,然后采取适当的操作。[怀疑:这是我最困惑的部分。如果可以就如何识别已单击的对象给出详细答案,那将非常有帮助。]

另外,PickShapes 到底是什么,它们将如何影响拾取算法?

如果我问的是非常基本的问题,我真的很抱歉,但是我花了一整天的时间阅读文档并成为初学者,这些对我来说还不够。我时间紧迫,我希望 Stackoverflow 社区足够慷慨,耐心地解释我的疑虑。非常感谢 !

更新:为了澄清一下,通过拖放功能,我的意思是我想使用通常的鼠标左键、拖动和鼠标释放手势将一个圆柱体从画布上的一个位置转换到另一个位置。

4

1 回答 1

0

要平移(和旋转)形状,请使用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);
}
于 2012-12-03T16:43:56.597 回答