mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/terrain/PickBehavior.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2 Copyright @ 1999-2003, The Institute for Genomic Research (TIGR).
2 26 Feb 07 jari 3 All rights reserved.
2 26 Feb 07 jari 4 */
2 26 Feb 07 jari 5 /*
2 26 Feb 07 jari 6  * $RCSfile: PickBehavior.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.3 $
2 26 Feb 07 jari 8  * $Date: 2005/03/10 20:33:21 $
2 26 Feb 07 jari 9  * $Author: braistedj $
2 26 Feb 07 jari 10  * $State: Exp $
2 26 Feb 07 jari 11  */
2 26 Feb 07 jari 12 package org.tigr.microarray.mev.cluster.gui.impl.terrain;
2 26 Feb 07 jari 13
2 26 Feb 07 jari 14 import java.awt.AWTEvent;
2 26 Feb 07 jari 15 import java.awt.event.MouseEvent;
2 26 Feb 07 jari 16 import java.util.Enumeration;
2 26 Feb 07 jari 17
2 26 Feb 07 jari 18 import javax.media.j3d.Behavior;
2 26 Feb 07 jari 19 import javax.media.j3d.Bounds;
2 26 Feb 07 jari 20 import javax.media.j3d.BranchGroup;
2 26 Feb 07 jari 21 import javax.media.j3d.Canvas3D;
2 26 Feb 07 jari 22 import javax.media.j3d.WakeupCriterion;
2 26 Feb 07 jari 23 import javax.media.j3d.WakeupOnAWTEvent;
2 26 Feb 07 jari 24 import javax.media.j3d.WakeupOr;
2 26 Feb 07 jari 25
2 26 Feb 07 jari 26 import com.sun.j3d.utils.picking.PickCanvas;
2 26 Feb 07 jari 27 import com.sun.j3d.utils.picking.PickTool;
2 26 Feb 07 jari 28
2 26 Feb 07 jari 29 public class PickBehavior extends Behavior {
2 26 Feb 07 jari 30
2 26 Feb 07 jari 31     private PickCanvas pickCanvas;
2 26 Feb 07 jari 32     private PickListener listener;
2 26 Feb 07 jari 33     private WakeupOr wakeupCondition;
2 26 Feb 07 jari 34
2 26 Feb 07 jari 35     public PickBehavior(BranchGroup branchgroup, Canvas3D canvas3d, Bounds bounds) {
2 26 Feb 07 jari 36         this.pickCanvas = new PickCanvas(canvas3d, branchgroup);
2 26 Feb 07 jari 37         this.pickCanvas.setTolerance(1f);
2 26 Feb 07 jari 38         this.pickCanvas.setMode(PickTool.GEOMETRY_INTERSECT_INFO);
2 26 Feb 07 jari 39         setSchedulingBounds(bounds);
2 26 Feb 07 jari 40     }
2 26 Feb 07 jari 41
2 26 Feb 07 jari 42     public void setTolerance(float value) {
2 26 Feb 07 jari 43         this.pickCanvas.setTolerance(value);
2 26 Feb 07 jari 44     }
2 26 Feb 07 jari 45
2 26 Feb 07 jari 46     public float getTolerance() {
2 26 Feb 07 jari 47         return this.pickCanvas.getTolerance();
2 26 Feb 07 jari 48     }
2 26 Feb 07 jari 49
2 26 Feb 07 jari 50     public void initialize() {
2 26 Feb 07 jari 51         WakeupCriterion[] conditions = new WakeupCriterion[3];
2 26 Feb 07 jari 52         conditions[0] = new WakeupOnAWTEvent(MouseEvent.MOUSE_RELEASED);
2 26 Feb 07 jari 53         conditions[1] = new WakeupOnAWTEvent(MouseEvent.MOUSE_PRESSED);
2 26 Feb 07 jari 54         conditions[2] = new WakeupOnAWTEvent(MouseEvent.MOUSE_DRAGGED);
2 26 Feb 07 jari 55         this.wakeupCondition = new WakeupOr(conditions);
2 26 Feb 07 jari 56         wakeupOn(this.wakeupCondition);
2 26 Feb 07 jari 57     }
2 26 Feb 07 jari 58
2 26 Feb 07 jari 59     public void setPickListener(PickListener listener) {
2 26 Feb 07 jari 60         this.listener = listener;
2 26 Feb 07 jari 61     }
2 26 Feb 07 jari 62
2 26 Feb 07 jari 63     public void processStimulus(Enumeration enumeration) {
2 26 Feb 07 jari 64         while (enumeration.hasMoreElements()) {
2 26 Feb 07 jari 65             WakeupCriterion wakeupcriterion = (WakeupCriterion)enumeration.nextElement();
2 26 Feb 07 jari 66             if (wakeupcriterion instanceof WakeupOnAWTEvent) {
2 26 Feb 07 jari 67                 AWTEvent[] events = ((WakeupOnAWTEvent)wakeupcriterion).getAWTEvent();
2 26 Feb 07 jari 68                 if (events.length > 0) {
2 26 Feb 07 jari 69                     for (int i=0; i<events.length-1; i++)
2 26 Feb 07 jari 70                         if (events[i].getID() != events[i+1].getID())
2 26 Feb 07 jari 71                             processMouseEvent((MouseEvent)events[i]);
2 26 Feb 07 jari 72                     processMouseEvent((MouseEvent)events[events.length-1]);
2 26 Feb 07 jari 73                 }
2 26 Feb 07 jari 74             }
2 26 Feb 07 jari 75         }
2 26 Feb 07 jari 76         wakeupOn(this.wakeupCondition);
2 26 Feb 07 jari 77     }
2 26 Feb 07 jari 78
2 26 Feb 07 jari 79     private void processMouseEvent(MouseEvent event) {
2 26 Feb 07 jari 80         if (this.listener == null)
2 26 Feb 07 jari 81             return;
2 26 Feb 07 jari 82         switch (event.getID()) {
2 26 Feb 07 jari 83         case MouseEvent.MOUSE_PRESSED:
2 26 Feb 07 jari 84             this.listener.onMousePressed(event, this.pickCanvas);
2 26 Feb 07 jari 85             break;
2 26 Feb 07 jari 86         case MouseEvent.MOUSE_RELEASED:
2 26 Feb 07 jari 87             this.listener.onMouseReleased(event, this.pickCanvas);
2 26 Feb 07 jari 88             break;
2 26 Feb 07 jari 89         case MouseEvent.MOUSE_DRAGGED:
2 26 Feb 07 jari 90             this.listener.onMouseDragged(event, this.pickCanvas);
2 26 Feb 07 jari 91             break;
2 26 Feb 07 jari 92         }
2 26 Feb 07 jari 93     }
2 26 Feb 07 jari 94 }