import com.sun.j3d.utils.picking.*;
import com.sun.j3d.utils.universe.SimpleUniverse;
import com.sun.j3d.utils.geometry.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import java.awt.event.*;
import java.awt.*;
public class Pick extends MouseAdapter {
private PickCanvas pickCanvas;
public Pick() {
Frame frame = new Frame("Box and Sphere");
GraphicsConfiguration config = SimpleUniverse
.getPreferredConfiguration();
Canvas3D canvas = new Canvas3D(config);
canvas.setSize(400, 400);
SimpleUniverse universe = new SimpleUniverse(canvas);
BranchGroup group = new BranchGroup();
// create a color cube
Vector3f vector = new Vector3f(-0.3f, 0.0f, 0.0f);
Transform3D transform = new Transform3D();
transform.setTranslation(vector);
TransformGroup transformGroup = new TransformGroup(transform);
ColorCube cube = new ColorCube(0.3);
transformGroup.addChild(cube);
group.addChild(transformGroup);
// create a sphere
Vector3f vector2 = new Vector3f(+0.3f, 0.0f, 0.0f);
Transform3D transform2 = new Transform3D();
transform2.setTranslation(vector2);
TransformGroup transformGroup2 = new TransformGroup(transform2);
Appearance appearance = new Appearance();
appearance.setPolygonAttributes(new PolygonAttributes(
PolygonAttributes.POLYGON_LINE, PolygonAttributes.CULL_BACK,
0.0f));
Sphere sphere = new Sphere(0.3f, appearance);
transformGroup2.addChild(sphere);
group.addChild(transformGroup2);
universe.getViewingPlatform().setNominalViewingTransform();
universe.addBranchGraph(group);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent winEvent) {
System.exit(0);
}
});
frame.add(canvas);
//frame.add("Center", canvas);
pickCanvas = new PickCanvas(canvas, group);
pickCanvas.setMode(PickCanvas.BOUNDS);
canvas.addMouseListener(this);
frame.pack();
//frame.show();
frame.setVisible(true);
}
public static void main(String[] args) {
new Pick();
}
@Override
public void mouseClicked(MouseEvent e) {
pickCanvas.setShapeLocation(e);
PickResult result = pickCanvas.pickClosest();
if (result == null) {
System.out.println("Nothing picked");
}
else {
Primitive p = (Primitive) result.getNode(PickResult.PRIMITIVE);
Shape3D s = (Shape3D) result.getNode(PickResult.SHAPE3D);
if (p != null) {
System.out.println(p.getClass().getName());
}
else if (s != null) {
System.out.println(s.getClass().getName());
}
else {
System.out.println("null");
}
}
}
}