2012-12-02 94 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); 
}