View Javadoc
1 /*** 2 * Virtual Mockup for Machine Vision Copyright (C) 2001-2003 Fabio R. de 3 * Miranda, João E. Kogler Jr., Carlos S. Santos. Virtual Mockup for Machine 4 * Vision Project funded by SENAC-SP Permission is granted to redistribute 5 * and/or modify this software under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either version 2.1 of 7 * the License, or (at your option) any later version. This software is 8 * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 9 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A 10 * PARTICULAR PURPOSE. See the GNU Lesser General Public License 11 * (http://www.gnu.org/copyleft/lesser.html) for more details. 12 */ 13 14 package camera3d.manipulation; 15 import camera3d.Axis; 16 import camera3d.TransformMode; 17 import camera3d.TransformScope; 18 19 import camera3d.test.NodeTester; 20 import com.sun.j3d.utils.geometry.ColorCube; 21 import java.awt.event.*; 22 import javax.media.j3d.*; 23 import javax.vecmath.*; 24 25 /*** 26 *@author Fábio Roberto de Miranda, Carlos da Silva dos Santos 27 *@created November 13, 2003 28 *@version 21/08/2003 29 */ 30 public class TransAdapterTester { 31 32 /*** 33 * Indicates whether the app should run in standalone mode (in its own 34 * window). 35 */ 36 private final boolean isStandalone; 37 /*** 38 * Creates basic Java 3D structure. 39 */ 40 private NodeTester tester; 41 /*** 42 * Cube that will be manipulated. 43 */ 44 private ColorCube cube; 45 /*** 46 * cube TransformGroup. 47 */ 48 private TransformGroup cubeTG; 49 50 /*** 51 * Object which calculates the future coordinates of the manipulated object 52 * based on the position of the mouse cursor. 53 */ 54 private TranslationManipulator manip; 55 56 /*** 57 * Object which receives the coordinates calculated by the manipulator and 58 * then sets a TransformGroup's transformation matrix to reflect the new 59 * coordinates. 60 */ 61 private TransTGAdapter adapter; 62 63 /*** 64 * Visual representation of the cube local coordinate system. 65 */ 66 private Axis cubeAxis; 67 /*** 68 * Visual representation of the virtual world coordinate system. 69 */ 70 private Axis worldAxis; 71 72 // used to displace cube from origin 73 private TransformGroup dummyTG; 74 private Transform3D dummyT3D; 75 76 77 /*** 78 * Creates a Translation Adapter tester that runs as a standalone 79 * application. 80 */ 81 public TransAdapterTester() { 82 this(true); 83 } 84 85 86 /*** 87 * Creates Translation Adapter tester. 88 * 89 *@param isStandalone if true, the tester will run inside its own frame. 90 */ 91 public TransAdapterTester(boolean isStandalone) { 92 this.isStandalone = isStandalone; 93 tester = new NodeTester(isStandalone); 94 95 cube = new ColorCube(); 96 cubeAxis = new Axis(); 97 cubeAxis.setVisible(true); 98 99 dummyT3D = new Transform3D(); 100 dummyT3D.rotZ(Math.PI / 6); 101 dummyT3D.setTranslation(new Vector3d(-1.0, -1.0, -1.0)); 102 103 cubeTG = new TransformGroup(); 104 cubeTG.setTransform(dummyT3D); 105 106 // necessary capabilities so we can read and set the object's 107 // transform at runtime 108 cubeTG.setCapability(Node.ALLOW_LOCAL_TO_VWORLD_READ); 109 cubeTG.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); 110 cubeTG.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); 111 112 cubeTG.addChild(cube); 113 cubeAxis.setSize(3.0); 114 // attachs axis to cube 115 cubeTG.addChild(cubeAxis.getRootGroup()); 116 117 // the adapter will act upon cubeTG 118 adapter = new TransTGAdapter(cubeTG); 119 120 dummyTG = new TransformGroup(); 121 dummyT3D.rotX(Math.PI / 4); 122 dummyT3D.setTranslation(new Vector3d(0, 1, -5.0)); 123 124 dummyTG.setTransform(dummyT3D); 125 dummyTG.addChild(cubeTG); 126 127 worldAxis = new Axis(); 128 worldAxis.setVisible(true); 129 // adds axis to universe at the origin of coordinates 130 tester.add(worldAxis.getRootGroup()); 131 tester.add(dummyTG); 132 133 // manipulator initialization 134 manip = new TranslationManipulator(); 135 // manip will forward the coordinates to adapter 136 manip.setTranslatableObject(adapter); 137 // initially, manipulation will be performed in absolute mode 138 manip.setTransformationMode(TransformMode.ABSOLUTE); 139 // translation will happen in the X axis 140 manip.setTransformationScope(TransformScope.X); 141 manip.setCanvas3D(tester.getCanvas3D()); 142 143 //repositioning the camera 144 dummyT3D.setIdentity(); 145 dummyT3D.setTranslation(new Vector3d(0.0, 1.0, 4.0)); 146 tester.setViewTransform(dummyT3D); 147 148 InternalListener listener = new InternalListener(); 149 // add listeners to canvas so mouse events get forwarded to 150 // the manipulator 151 tester.getCanvas3D().addMouseListener(listener); 152 tester.getCanvas3D().addMouseMotionListener(listener); 153 // keyboard listener to change manipulation parameters at execution 154 tester.getCanvas3D().addKeyListener(new KeybListener()); 155 156 if(isStandalone) { 157 tester.getFrame().setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 158 } 159 } 160 161 162 /*** 163 * Runs tester application. 164 * 165 *@param args The command line arguments 166 */ 167 public static void main(String[] args) { 168 TransAdapterTester taTester = new TransAdapterTester(); 169 } 170 171 172 /*** 173 * Gets the canvas3D attribute of the TransAdapterTester object 174 * 175 *@return The canvas3D value 176 */ 177 public Canvas3D getCanvas3D() { 178 return this.tester.getCanvas3D(); 179 } 180 181 182 /*** 183 * Returns flag indicating whether this object is running inside its own 184 * window. 185 * 186 *@return The standalone value 187 */ 188 public boolean isStandalone() { 189 return this.isStandalone; 190 } 191 192 193 /*** 194 * Description of the Method 195 */ 196 public void cleanup() { 197 tester.cleanup(); 198 } 199 200 201 /*** 202 * Description of the Class 203 * 204 *@author carlos.ssantos 205 *@created November 13, 2003 206 */ 207 class InternalListener extends MouseAdapter implements MouseMotionListener { 208 /*** 209 * Description of the Method 210 * 211 *@param e Description of the Parameter 212 */ 213 public void mouseClicked(MouseEvent e) { 214 //System.out.println("click"); 215 } 216 217 218 /*** 219 * Description of the Method 220 * 221 *@param e Description of the Parameter 222 */ 223 public void mousePressed(MouseEvent e) { 224 // System.out.println("pressed"); 225 // forwards the initial location of the 226 // mouse dragging to the manipulator 227 int mod = e.getModifiers(); 228 if((mod & MouseEvent.BUTTON1_MASK) == MouseEvent.BUTTON1_MASK) { 229 manip.setBeginPoint(e.getX(), e.getY()); 230 } 231 } 232 233 234 /*** 235 * Description of the Method 236 * 237 *@param e Description of the Parameter 238 */ 239 public void mouseDragged(MouseEvent e) { 240 //System.out.println("drag"); 241 int mod = e.getModifiers(); 242 if((mod & MouseEvent.BUTTON1_MASK) == MouseEvent.BUTTON1_MASK) { 243 manip.setCurrentPoint(e.getX(), e.getY()); 244 } 245 } 246 247 248 /*** 249 * Description of the Method 250 * 251 *@param e Description of the Parameter 252 */ 253 public void mouseMoved(MouseEvent e) { 254 //System.out.println("move"); 255 //int mod = e.getModifiers(); 256 //if ((mod&MouseEvent.BUTTON1_MASK)==MouseEvent.BUTTON1_MASK){} 257 } 258 } 259 260 261 /*** 262 * Description of the Class 263 * 264 *@author carlos.ssantos 265 *@created November 13, 2003 266 */ 267 class KeybListener extends KeyAdapter { 268 /*** 269 * Description of the Method 270 * 271 *@param k Description of the Parameter 272 */ 273 public void keyPressed(KeyEvent k) { 274 if(k.getKeyCode() == KeyEvent.VK_X) { 275 manip.setTransformationScope(TransformScope.X); 276 System.out.println("__X AXIS__"); 277 } 278 if(k.getKeyCode() == KeyEvent.VK_Y) { 279 manip.setTransformationScope(TransformScope.Y); 280 System.out.println("__Y AXIS__"); 281 } 282 if(k.getKeyCode() == KeyEvent.VK_Z) { 283 manip.setTransformationScope(TransformScope.Z); 284 System.out.println("__Z AXIS__"); 285 } 286 if(k.getKeyCode() == KeyEvent.VK_A) { 287 manip.setTransformationMode(TransformMode.ABSOLUTE); 288 System.out.println("__ABSOLUTE MODE__"); 289 } 290 if(k.getKeyCode() == KeyEvent.VK_R) { 291 manip.setTransformationMode(TransformMode.RELATIVE); 292 System.out.println("__RELATIVE MODE__"); 293 } 294 } 295 296 297 /*** 298 * Description of the Method 299 * 300 *@param k Description of the Parameter 301 */ 302 public void keyReleased(KeyEvent k) { } 303 } 304 305 }

This page was automatically generated by Maven