Hi Marianne,
I've attached a behavior to pick points and get their index in the PointArray.
Here is the piece of code that does this:
MouseEvent event = (MouseEvent)events[events.length-1];
int id = event.getID();
int mod = event.getModifiers();
x = event.getX();
y = event.getY();
pickCanvas.setShapeLocation(x, y);
Point3d eyePos = pickCanvas.getStartPosition();
PickResult pickResult = pickCanvas.pickClosest();
PickIntersection pickIntersection =
pickResult.getClosestIntersection(eyePos);
int[] indices = pickIntersection.getPrimitiveVertexIndices();
System.err.println("Index of point picked: " + String.valueOf(indices[0]));
--
Renoir Sewjee
Software Engineer
ISS International (Welkom)
Tel: +27 (0)57 912 2702
Fax: +27 (0)57 912 2652
--
/**
* Picks a point out of a PointArray using a mouse mouse press.
*
*/
import java.awt.AWTEvent;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import java.awt.event.InputEvent;
import java.util.Enumeration;
import java.util.ArrayList;
import com.sun.j3d.utils.picking.PickCanvas;
import com.sun.j3d.utils.picking.PickResult;
import com.sun.j3d.utils.picking.PickIntersection;
import javax.media.j3d.Behavior;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.WakeupOnAWTEvent;
import javax.media.j3d.WakeupCriterion;
import javax.media.j3d.Canvas3D;
import javax.vecmath.Point3d;
import java.util.ArrayList;
import java.util.Iterator;
import com.sun.j3d.utils.picking.PickTool;
public class PointPicker extends Behavior
{
protected PickCanvas pickCanvas;
protected WakeupOnAWTEvent wakeupCriterion;
protected int x;
protected int y;
public EventPicker(Canvas3D canvas, BranchGroup scene)
{
pickCanvas = new PickCanvas(canvas, scene);
pickCanvas.setTolerance(3.0f);
pickCanvas.setMode(PickCanvas.GEOMETRY_INTERSECT_INFO);
}
public void initialize()
{
wakeupCriterion = new WakeupOnAWTEvent(MouseEvent.MOUSE_PRESSED);
wakeupOn(wakeupCriterion);
}
public void processStimulus(Enumeration criteria)
{
while (criteria.hasMoreElements())
{
WakeupCriterion wakeup = (WakeupCriterion)criteria.nextElement();
if (wakeup instanceof WakeupOnAWTEvent)
{
AWTEvent[] events = ((WakeupOnAWTEvent)wakeup).getAWTEvent();
if (events.length > 0 && events[events.length-1] instanceof
MouseEvent)
{
MouseEvent event = (MouseEvent)events[events.length-1];
int id = event.getID();
int mod = event.getModifiers();
x = event.getX();
y = event.getY();
pickCanvas.setShapeLocation(x, y);
Point3d eyePos = pickCanvas.getStartPosition();
PickResult pickResult = pickCanvas.pickClosest();
PickIntersection pickIntersection =
pickResult.getClosestIntersection(eyePos);
int[] indices =
pickIntersection.getPrimitiveVertexIndices();
System.err.println("Index of point picked: " +
String.valueOf(indices[0]));
}
}
}
wakeupOn(wakeupCriterion);
}
}