⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tmousebehavior.java

📁 使用java实现applet插件
💻 JAVA
字号:
package JavaTerrain;

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.media.j3d.*;
import javax.vecmath.*;


public class TMouseBehavior extends Behavior {

       //=== CONSTANTS ==========================================================================

        private final Vector3f STD_DIR   = new Vector3f(0.0f, 0.0f, -1.0f);
        private final Vector3d NULL_VECT = new Vector3d();



       //=== VARIABLES ==========================================================================

        private TransformGroup ViewTG    = null;                // TG to be modified
	private Tevi           TheApplet = null;                // if !null call special method

        private WakeupCriterion[] MouseEvents = new WakeupCriterion[4];

        private WakeupOr MouseCriterion;

        private Transform3D ViewT3D    = new Transform3D();     // view transform
        private Transform3D TransformX = new Transform3D();     // x-axis multiplier
        private Transform3D TransformY = new Transform3D();     // y-axis multiplier

        private Vector3d    VectBak    = new Vector3d();        // save translation


        private int XLast = -1, YLast = -1;                     // keep track of movement

        private float Factor = 0.008f;                          // specifies x- and y-dir.

        private boolean ForceT3DRead  = true;                   // view dir. changed externally
        private boolean Invert        = false;                  // invert mouse up/down



       //=== METHODS ============================================================================

	public TMouseBehavior() {
	
	        super();
	}

        public TMouseBehavior(TransformGroup tg, float factor) {

                super();

                init(tg, factor, Invert);
        }

        public TMouseBehavior(TransformGroup tg, boolean inv) {

                super();

 		init(tg, Factor, inv);
        }

        public TMouseBehavior(TransformGroup tg, float factor, boolean inv) {

                super();

 		init(tg, factor, inv);
        }

	

        private void init(TransformGroup tg, float factor, boolean inv) {

                ViewTG = tg;
                Factor = factor;
                Invert = inv;
	}



	public void setSelectROIMode(Tevi t) {

                TheApplet = t;
	}
	
	

	public void setup(TransformGroup tg, float factor, boolean inv) {
	
	        init(tg, factor, inv);
	}



        public void initialize() {

                MouseEvents[0] = new WakeupOnAWTEvent(MouseEvent.MOUSE_DRAGGED );
                MouseEvents[1] = new WakeupOnAWTEvent(MouseEvent.MOUSE_MOVED   );
                MouseEvents[2] = new WakeupOnAWTEvent(MouseEvent.MOUSE_PRESSED );
                MouseEvents[3] = new WakeupOnAWTEvent(MouseEvent.MOUSE_RELEASED);

                MouseCriterion = new WakeupOr(MouseEvents);

                wakeupOn(MouseCriterion);
        }



        public void processStimulus (Enumeration criteria) {

                WakeupCriterion wakeup;

                AWTEvent[] events;
                MouseEvent evt;


                while (criteria.hasMoreElements()) {

                        wakeup = (WakeupCriterion) criteria.nextElement();

                        if (wakeup instanceof WakeupOnAWTEvent) {

                                events = ((WakeupOnAWTEvent)wakeup).getAWTEvent();

                                if (events.length > 0) {

                                        evt = (MouseEvent) events[events.length-1];
                                        doProcess(evt);
                                }
                        }
                }

                wakeupOn(MouseCriterion);
        }



        private void doProcess(MouseEvent evt) {

                int id = evt.getID();

                if ((ViewTG != null) && (id == MouseEvent.MOUSE_DRAGGED)) {

                       //--- get coordinates -----------------

                        int x = evt.getX();
                        int y = evt.getY();


                       //--- prevent view jump ---------------

                        if (XLast == -1) {  XLast = x;  }
                        if (YLast == -1) {  YLast = y;  }


                       //--- set angles ----------------------

                        int dx = (x - XLast);
                        int dy = (y - YLast);

                        float xAngle = (float) dx * Factor;
                        float yAngle = (float) dy * Factor;

                        if (Invert) {  yAngle = -yAngle;  }

                        TransformX.rotX(-yAngle);
                        TransformY.rotY(-xAngle);


                       //--- set new transformation ----------

                        ViewTG.getTransform(ViewT3D);

                        ViewT3D.get(VectBak);

                        ViewT3D.setTranslation(NULL_VECT);

                        ViewT3D.mul(TransformX);
                        ViewT3D.mul(TransformY);

                        ViewT3D.setTranslation(VectBak);


                       //--- save coordinates ----------------

                        XLast = x;
                        YLast = y;
                }
                else if ((ViewTG != null) && (id == MouseEvent.MOUSE_RELEASED)) {

                        XLast = YLast = -1;
                }
                else if (id == MouseEvent.MOUSE_PRESSED) {

                        if (TheApplet != null) {  

			        TheApplet.selectROI2(evt.getX(), evt.getY());

				TheApplet = null;
	                }
                }
        }



        public void getDir(Vector3f v3f) {

                if (ForceT3DRead) {

                        ViewTG.getTransform(ViewT3D);
                        ForceT3DRead = false;
                }

                ViewT3D.transform(STD_DIR, v3f);
        }



        public void forceT3DRead() {  ForceT3DRead = true;               }
        public void toggleInvert() {  Invert = (Invert) ? false : true;  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -