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