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

Reply via email to