2012-12-02 65 views
1

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

  1. 使用当前画布和根BranchGroup构建PickCanvas
  2. PickCanvas到PickCanvas.GEOMETRY,其根据文档设置模式是更准确的[怀疑:是什么的各种拾取模式之间的差异,即边界内,几何形状,GEOMETRY_INTERSECT_INFO?从文件中我不清楚。几何学挑选真的意味着什么? ]
  3. 设置我想要选择的对象的功能。 [疑问:这两种设置功能的方法有什么区别? - node.setCapability(Node.ENABLE_PICK_REPORTING)PickTool.setCapabilities(node, PickTool.INTERSECT_FULL)? ]
  4. 在画布上添加一个mouseListener
  5. mousePressed方法中,我需要确定哪个对象被点击了,然后采取适当的动作。[疑问:这是我最困惑的部分。如果一个详细的解答能对我怎么能确定我已经点击了什么对象给予这将是非常有益的。]

此外,到底有什么PickShapes以及它们将如何影响采摘算法?

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

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

回答

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