mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/dam/OpenBehavior.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2 Copyright @ 1999-2005, 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: OpenBehavior.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.2 $
2 26 Feb 07 jari 8  * $Date: 2006/02/23 20:59:49 $
2 26 Feb 07 jari 9  * $Author: caliente $
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.dam;
2 26 Feb 07 jari 13
2 26 Feb 07 jari 14 import java.awt.event.KeyEvent;
2 26 Feb 07 jari 15 import java.util.Enumeration;
2 26 Feb 07 jari 16
2 26 Feb 07 jari 17 import javax.media.j3d.Behavior;
2 26 Feb 07 jari 18 import javax.media.j3d.Transform3D;
2 26 Feb 07 jari 19 import javax.media.j3d.TransformGroup;
2 26 Feb 07 jari 20 import javax.media.j3d.WakeupCriterion;
2 26 Feb 07 jari 21 import javax.media.j3d.WakeupOnAWTEvent;
2 26 Feb 07 jari 22 import javax.media.j3d.WakeupOnElapsedFrames;
2 26 Feb 07 jari 23
2 26 Feb 07 jari 24 public class OpenBehavior extends Behavior {
2 26 Feb 07 jari 25     private TransformGroup targetTG;
2 26 Feb 07 jari 26     private WakeupCriterion wakeupNextFrame;
2 26 Feb 07 jari 27     private WakeupCriterion AWTEventCondition;
2 26 Feb 07 jari 28     private Transform3D t3D = new Transform3D();
2 26 Feb 07 jari 29     private Transform3D actualTr = new Transform3D();
2 26 Feb 07 jari 30     private double doorAngle, stepAngle;
2 26 Feb 07 jari 31     private int mode = 0;
2 26 Feb 07 jari 32     
2 26 Feb 07 jari 33     /**
2 26 Feb 07 jari 34      * Constructs an <code>OpenBehavior</code> for specified target.
2 26 Feb 07 jari 35      */
2 26 Feb 07 jari 36     OpenBehavior(TransformGroup targetTG){
2 26 Feb 07 jari 37   this.targetTG = targetTG;
2 26 Feb 07 jari 38   AWTEventCondition = new WakeupOnAWTEvent(KeyEvent.KEY_PRESSED);
2 26 Feb 07 jari 39   wakeupNextFrame = new WakeupOnElapsedFrames(0);
2 26 Feb 07 jari 40     }
2 26 Feb 07 jari 41     
2 26 Feb 07 jari 42     /**
2 26 Feb 07 jari 43      * Initializes wake up condition.
2 26 Feb 07 jari 44      */
2 26 Feb 07 jari 45     public void initialize() {
2 26 Feb 07 jari 46   this.wakeupOn(AWTEventCondition);
2 26 Feb 07 jari 47   doorAngle = 0.0;
2 26 Feb 07 jari 48   stepAngle = 0.0;
2 26 Feb 07 jari 49     }
2 26 Feb 07 jari 50     
2 26 Feb 07 jari 51     /**
2 26 Feb 07 jari 52      * Process keyboard events.
2 26 Feb 07 jari 53      */
2 26 Feb 07 jari 54     public void processStimulus(Enumeration criteria) {
2 26 Feb 07 jari 55   if (criteria.nextElement().equals(AWTEventCondition)) {
2 26 Feb 07 jari 56       mode = -1;
2 26 Feb 07 jari 57       switch (((KeyEvent)((WakeupOnAWTEvent)AWTEventCondition).getAWTEvent()[0]).getKeyCode()) {
2 26 Feb 07 jari 58     case KeyEvent.VK_X: mode = 0; break;
2 26 Feb 07 jari 59     case KeyEvent.VK_Y: mode = 1; break;
2 26 Feb 07 jari 60     case KeyEvent.VK_Z: mode = 2; break;
2 26 Feb 07 jari 61     case KeyEvent.VK_RIGHT: mode = 1; break;
2 26 Feb 07 jari 62     case KeyEvent.VK_DOWN: mode = 0; break;
2 26 Feb 07 jari 63     case KeyEvent.VK_LEFT: mode = 3; break;
2 26 Feb 07 jari 64     case KeyEvent.VK_UP: mode = 4; break;
2 26 Feb 07 jari 65     default:;
2 26 Feb 07 jari 66       }
2 26 Feb 07 jari 67   }
2 26 Feb 07 jari 68   if (mode != -1) {
2 26 Feb 07 jari 69       if (doorAngle < Math.PI/2.0) {
2 26 Feb 07 jari 70     stepAngle = Math.PI/20.0;
2 26 Feb 07 jari 71     doorAngle += Math.PI/20.0;
2 26 Feb 07 jari 72     if (doorAngle > (Math.PI/2.0)) {
2 26 Feb 07 jari 73         doorAngle = (Math.PI/2.0);
2 26 Feb 07 jari 74     }
2 26 Feb 07 jari 75     targetTG.getTransform(actualTr);
2 26 Feb 07 jari 76     switch (mode) {
2 26 Feb 07 jari 77         case 0:
2 26 Feb 07 jari 78       t3D.rotX(stepAngle);
2 26 Feb 07 jari 79       break;
2 26 Feb 07 jari 80         case 1:
2 26 Feb 07 jari 81       t3D.rotY(stepAngle);
2 26 Feb 07 jari 82       break;
2 26 Feb 07 jari 83         case 2:
2 26 Feb 07 jari 84       t3D.rotZ(stepAngle);
2 26 Feb 07 jari 85       break;
2 26 Feb 07 jari 86         case 3:
2 26 Feb 07 jari 87       stepAngle = -Math.PI/20.0;
2 26 Feb 07 jari 88       t3D.rotY(stepAngle);
2 26 Feb 07 jari 89       break;
2 26 Feb 07 jari 90         case 4:
2 26 Feb 07 jari 91       stepAngle = -Math.PI/20.0;
2 26 Feb 07 jari 92       t3D.rotX(stepAngle);
2 26 Feb 07 jari 93       break;
2 26 Feb 07 jari 94         default: {}
2 26 Feb 07 jari 95     }
2 26 Feb 07 jari 96     t3D.mul(actualTr);
2 26 Feb 07 jari 97     targetTG.setTransform(t3D);
2 26 Feb 07 jari 98     wakeupOn(wakeupNextFrame);
2 26 Feb 07 jari 99       } else {
2 26 Feb 07 jari 100     doorAngle = 0.0;
2 26 Feb 07 jari 101     wakeupOn(AWTEventCondition);
2 26 Feb 07 jari 102       }
2 26 Feb 07 jari 103   } else {
2 26 Feb 07 jari 104       doorAngle = 0.0;
2 26 Feb 07 jari 105       wakeupOn(AWTEventCondition);
2 26 Feb 07 jari 106   }
2 26 Feb 07 jari 107     }
2 26 Feb 07 jari 108 }