1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 package ffx.ui.behaviors;
39
40 import static org.apache.commons.math3.util.FastMath.abs;
41
42 import java.awt.AWTEvent;
43 import java.awt.event.MouseEvent;
44 import java.util.Iterator;
45 import org.jogamp.java3d.Behavior;
46 import org.jogamp.java3d.Transform3D;
47 import org.jogamp.java3d.TransformGroup;
48 import org.jogamp.java3d.WakeupCriterion;
49 import org.jogamp.java3d.WakeupOnAWTEvent;
50 import org.jogamp.vecmath.Vector3d;
51
52
53
54
55
56
57 public class MouseTranslate extends MouseBehavior {
58
59 private static Vector3d zero3d = new Vector3d(0.0, 0.0, 0.0);
60 private double xFactor = 0.05;
61 private double yFactor = 0.05;
62 private Vector3d translation = new Vector3d();
63 private MouseBehaviorCallback callback = null;
64 private int mouseButton = MouseEvent.BUTTON3_DOWN_MASK;
65 private int doneID = 0;
66
67
68
69
70
71
72
73 public MouseTranslate(int flags, TransformGroup VPTG) {
74 super(flags, VPTG);
75 }
76
77
78
79
80
81
82
83
84
85
86 public MouseTranslate(int flags, TransformGroup VPTG, Behavior behavior, int postID, int dID) {
87 super(flags, VPTG, behavior, postID);
88 doneID = dID;
89 }
90
91
92
93
94
95
96
97
98 public double getXFactor() {
99 return xFactor;
100 }
101
102
103
104
105
106
107
108
109 public double getYFactor() {
110 return yFactor;
111 }
112
113
114 public void initialize() {
115 super.initialize();
116 if ((flags & INVERT_INPUT) == INVERT_INPUT) {
117 invert = true;
118 xFactor *= -1;
119 yFactor *= -1;
120 }
121 }
122
123
124 public void processStimulus(Iterator<WakeupCriterion> criteria) {
125 while (criteria.hasNext()) {
126 WakeupCriterion wakeup = criteria.next();
127 if (wakeup instanceof WakeupOnAWTEvent) {
128 AWTEvent[] event = ((WakeupOnAWTEvent) wakeup).getAWTEvent();
129 for (AWTEvent awtEvent : event) {
130 MouseEvent mevent = (MouseEvent) awtEvent;
131 processMouseEvent(mevent);
132 int id = awtEvent.getID();
133 int mod = mevent.getModifiersEx();
134 boolean rightButton = ((mod & mouseButton) == mouseButton);
135 if (!rightButton) {
136 rightButton = ((mod & MouseEvent.SHIFT_DOWN_MASK) == MouseEvent.SHIFT_DOWN_MASK);
137 }
138 if ((id == MouseEvent.MOUSE_DRAGGED) && rightButton && transformGroup != null) {
139 x = ((MouseEvent) awtEvent).getX();
140 y = ((MouseEvent) awtEvent).getY();
141 int dx = x - xLast;
142 int dy = y - yLast;
143 if ((!reset) && ((abs(dy) < 50) && (abs(dx) < 50))) {
144 transformGroup.getTransform(currXform);
145 Transform3D VPTG_T3D = new Transform3D();
146 ViewerTG.getTransform(VPTG_T3D);
147 VPTG_T3D.setTranslation(zero3d);
148 VPTG_T3D.invert();
149 currXform.mul(VPTG_T3D, currXform);
150 translation.x = dx * xFactor;
151 translation.y = -dy * yFactor;
152 transformX.set(translation);
153 if (invert) {
154 currXform.mul(currXform, transformX);
155 } else {
156 currXform.mul(transformX, currXform);
157 }
158 VPTG_T3D.invert();
159 currXform.mul(VPTG_T3D, currXform);
160 transformGroup.setTransform(currXform);
161 transformChanged(currXform);
162 if (callback != null) {
163 callback.transformChanged(MouseBehaviorCallback.TRANSLATE, currXform);
164 }
165 } else {
166 reset = false;
167 }
168 xLast = x;
169 yLast = y;
170 }
171 if (id == MouseEvent.MOUSE_PRESSED) {
172 xLast = ((MouseEvent) awtEvent).getX();
173 yLast = ((MouseEvent) awtEvent).getY();
174 } else if (id == MouseEvent.MOUSE_RELEASED) {
175 setTransformGroup(null);
176 }
177 }
178 }
179 }
180 if (transformGroup != null) {
181 wakeupOn(mouseCriterion);
182 } else {
183 mouseButton = MouseEvent.BUTTON3_DOWN_MASK;
184 postId(doneID);
185 wakeupOn(postCriterion);
186 }
187 }
188
189
190
191
192
193
194
195
196 public void setFactor(double factor) {
197 xFactor = yFactor = factor;
198 }
199
200
201
202
203
204
205
206
207
208 public void setFactor(double xFactor, double yFactor) {
209 this.xFactor = xFactor;
210 this.yFactor = yFactor;
211 }
212
213
214
215
216
217
218 public void setMouseButton(int button) {
219 mouseButton = button;
220 }
221
222
223
224
225
226
227
228
229
230 public void setupCallback(MouseBehaviorCallback c) {
231 callback = c;
232 }
233
234
235
236
237
238
239 public void transformChanged(Transform3D transform) {}
240 }