title: Picking shapes in Java 3D
body: <p>I need to add drag-drop feature to some shapes (say cylinders) that I have created in my Java3D application. I think I know the basic steps (though vaguely):</p>
  
  <ol>
  <li>Construct a <em>PickCanvas</em> using the current <em>Canvas</em> and the root <em>BranchGroup</em>.</li>
  <li>Set mode of <em>PickCanvas</em> to PickCanvas.GEOMETRY, which according to the documentation is more accurate [ <strong>Doubt</strong>: What is the difference between the various picking modes, i.e. BOUNDS, GEOMETRY, GEOMETRY_INTERSECT_INFO ? It is not clear to me from the documetation. What does picking by geometry really mean? ]</li>
  <li>Set capabilities of objects that I want to pick. [ <strong>Doubt</strong>: What is the difference between these two methods of setting capabilities? -  <code>node.setCapability(Node.ENABLE_PICK_REPORTING)</code> and <code>PickTool.setCapabilities(node, PickTool.INTERSECT_FULL)</code> ? ]</li>
  <li>Add a <em>mouseListener</em> to the canvas.</li>
  <li>In the <em>mousePressed</em> method, I need to identify what object has been clicked, and then take appropriate action.[ <strong>Doubt</strong>: This is the part I am most confused about. It would be very helpful if a detailed answer could be given on how I can I identify what object has been clicked.]</li>
  </ol>
  
  <p>Also, <em>what exactly are PickShapes and how will they affect the picking algorithm ?</em></p>
  
  <p>I am really sorry if I am asking very basic questions, but I've spent the whole day reading the docs and being a beginner, those just aren't enough for me. I'm hard pressed for time and I hope the Stackoverflow community would be generous enough to explain me my doubts with patience. Thanks a lot !</p>
  
  <p>UPDATE: Just to clarify, by drag-and-drop feature, I mean that I want to translate a cylinder from one position on the canvas to some other using the usual left-mouse-press, drag and mouse-release gesture.</p>