View Javadoc
1 /***************************************************************************** 2 * Virtual Mockup for Machine Vision 3 * Copyright (C) 2001-2003 Fabio R. de Miranda, João E. Kogler Jr., 4 * Carlos S. Santos. 5 * Virtual Mockup for Machine Vision Project funded by SENAC-SP 6 * 7 * Permission is granted to redistribute and/or modify this 8 * software under the terms of the GNU Lesser General Public 9 * License as published by the Free Software Foundation; either 10 * version 2.1 of the License, or (at your option) any later version. 11 * 12 * This software is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Lesser General Public License (http://www.gnu.org/copyleft/lesser.html) 16 * for more details. 17 * 18 *****************************************************************************/ 19 20 package camera3d; 21 22 import com.sun.j3d.utils.geometry.*; 23 import javax.media.j3d.*; 24 import javax.vecmath.*; 25 import java.awt.Font; 26 import camera3d.test.NodeTester; 27 28 /*** 29 * An axis system (XYZ) representation. 30 * @author Fábio Roberto de Miranda 31 * @version 1.0 32 */ 33 public class Axis { 34 35 /*** root BranchGroup for the whole axis*/ 36 private BranchGroup axisBG; 37 38 /*** BranchGroup that directly holds axis geometry. It is made dettachable so axis can be hidden */ 39 BranchGroup secondaryBG; 40 41 /*** isAttached will be true when secondaryBG is attached to axisBG*/ 42 boolean isAttached = true; 43 44 /*** root TransformGroup for the axis*/ 45 TransformGroup axisTG; 46 47 /*** 48 * The axis themselves 49 */ 50 Shape3D axisShape; 51 52 /* The Labels "X", "Y" and "Z" that will be at the extremities of the axes 53 */ 54 /* Uncomment this some day in hope that more than one view can see the same 55 * OrientedShape3D - Fabio 24-04-2002 */ 56 /* 57 OrientedShape3D xShape; 58 OrientedShape3D yShape; 59 OrientedShape3D zShape; 60 */ 61 // 62 63 Shape3D xShape; 64 Shape3D yShape; 65 Shape3D zShape; 66 67 /* Displacements for x, y and z shapes of characters*/ 68 TransformGroup xTG; 69 TransformGroup yTG; 70 TransformGroup zTG; 71 72 /* LineArrays to hold line segments 73 */ 74 LineArray xGeometry; 75 LineArray yGeometry; 76 LineArray zGeometry; 77 78 /* LineAttributes common to all LineArrays */ 79 LineAttributes lineAttributes; 80 81 /* PolygonAttributes valid for axis labels */ 82 PolygonAttributes polygonAttributes; 83 84 /* ColoringAttributes valid for axis labels */ 85 ColoringAttributes coloringAttributes; 86 87 88 /* Appearance node common to all shape3Ds*/ 89 Appearance appearance = new Appearance(); 90 Material material = new Material(); 91 92 /* Font3d used to write axis labels*/ 93 //Font3D font3d = new Font3D(new Font("Arial", Font.BOLD, 1), new FontExtrusion()); 94 Font3D font3d = new Font3D(Font.decode("Arial-BOLD-1"), new FontExtrusion()); 95 96 97 Color3f defaultColor = new Color3f(0.0f, 0.1f, 0.5f); 98 Color3f selectedColor = new Color3f(1.0f, 0.0f, 0.0f); 99 100 Color3f red = new Color3f(1.f, 0.f, 0.f); 101 Color3f green = new Color3f(0.f, 1.f, 0.f); 102 Color3f blue = new Color3f(0.f, 0.f, 1.f); 103 104 /* The point around which, in their local coordinate systems, X, Y and Z labels will rotate*/ 105 Point3f centerP3f = new Point3f(0.0f, 0.0f, 0.0f); 106 107 Transform3D tempT3D = new Transform3D(); 108 109 public Axis() { 110 axisShape = new Shape3D(); 111 appearance = new Appearance(); 112 axisBG = new BranchGroup(); 113 secondaryBG = new BranchGroup(); 114 axisTG = new TransformGroup(); 115 secondaryBG.addChild(axisTG); 116 axisBG.addChild(secondaryBG); 117 //appearance.setMaterial(material); 118 material.setDiffuseColor(defaultColor); 119 material.setAmbientColor(defaultColor); 120 material.setSpecularColor(defaultColor); 121 122 123 polygonAttributes = new PolygonAttributes(PolygonAttributes.POLYGON_FILL, PolygonAttributes.CULL_BACK, 0.5f); 124 appearance.setPolygonAttributes(polygonAttributes); 125 coloringAttributes = new ColoringAttributes(defaultColor, ColoringAttributes.SHADE_FLAT); 126 appearance.setColoringAttributes(coloringAttributes); 127 128 129 xTG = new TransformGroup(); 130 yTG = new TransformGroup(); 131 zTG = new TransformGroup(); 132 133 axisBG.setCapability(BranchGroup.ALLOW_CHILDREN_READ); 134 axisBG.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE); 135 axisBG.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND); 136 axisTG.setCapability(BranchGroup.ALLOW_CHILDREN_READ); 137 axisTG.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE); 138 axisTG.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); 139 axisTG.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); 140 141 secondaryBG.setCapability(BranchGroup.ALLOW_CHILDREN_READ); 142 secondaryBG.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE); 143 secondaryBG.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND); 144 secondaryBG.setCapability(BranchGroup.ALLOW_DETACH); 145 146 xTG.setCapability(BranchGroup.ALLOW_CHILDREN_READ); 147 xTG.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE); 148 xTG.setCapability(Node.ALLOW_LOCAL_TO_VWORLD_READ); 149 150 yTG.setCapability(BranchGroup.ALLOW_CHILDREN_READ); 151 yTG.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE); 152 yTG.setCapability(Node.ALLOW_LOCAL_TO_VWORLD_READ); 153 154 zTG.setCapability(BranchGroup.ALLOW_CHILDREN_READ); 155 zTG.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE); 156 zTG.setCapability(Node.ALLOW_LOCAL_TO_VWORLD_READ); 157 158 Vector3f tempVec3f = new Vector3f(); 159 Transform3D tempT3D = new Transform3D(); 160 161 /* If this scale factor is not set labels tend to get too big */ 162 tempT3D.setScale(0.22); 163 164 /* Sets up line attributes and adds it to appearance */ 165 lineAttributes = new LineAttributes(3, LineAttributes.PATTERN_SOLID, false); 166 appearance.setLineAttributes(lineAttributes); 167 168 axisShape.setAppearance(appearance); 169 axisShape.setCapability(Shape3D.ALLOW_GEOMETRY_READ); 170 axisShape.setCapability(Shape3D.ALLOW_GEOMETRY_WRITE); 171 axisShape.setCapability(Node.ALLOW_LOCAL_TO_VWORLD_READ); 172 173 174 /* X axis */ 175 xGeometry = new LineArray(2, LineArray.COORDINATES|LineArray.COLOR_3); 176 xGeometry.setCapability(LineArray.ALLOW_COLOR_READ); 177 xGeometry.setCapability(LineArray.ALLOW_COLOR_WRITE); 178 double[][] xCoordinates = new double[][]{{0.0, 0.0, 0.0},{1.0, 0.0, 0.0}}; 179 for (int i=0; i<xCoordinates.length; i++){ 180 xGeometry.setCoordinate(i, xCoordinates[i]); 181 //xGeometry.setColor(i, defaultColor); 182 xGeometry.setColor(i, red); 183 } 184 axisShape.addGeometry(xGeometry); 185 axisShape.setAppearance(appearance); 186 Text3D xText = new Text3D(font3d, "X"); 187 188 // Construtor para quando nenhum orientedShape3D funcionar 189 xShape = new Shape3D(xText, appearance); 190 //xShape = new OrientedShape3D(xText, appearance, OrientedShape3D.ROTATE_ABOUT_POINT, centerP3f); 191 //xShape.setConstantScaleEnable(true); 192 xShape.setAppearance(appearance); 193 tempVec3f.x = 1.f; 194 tempVec3f.y = 0.f; 195 tempVec3f.z = 0.f; 196 tempT3D.setTranslation(tempVec3f); 197 xTG.setTransform(tempT3D); 198 xTG.addChild(xShape); 199 xShape.setCapability(xShape.ALLOW_GEOMETRY_READ); 200 xShape.setCapability(Node.ALLOW_LOCAL_TO_VWORLD_READ); 201 xShape.setCapability(OrientedShape3D.ALLOW_SCALE_READ); 202 // 203 204 /* Y axis */ 205 yGeometry = new LineArray(2, LineArray.COORDINATES|LineArray.COLOR_3); 206 yGeometry.setCapability(LineArray.ALLOW_COLOR_READ); 207 yGeometry.setCapability(LineArray.ALLOW_COLOR_WRITE); 208 double[][] yCoordinates = new double[][]{{0.0, 0.0, 0.0},{0.0, 1.0, 0.0}}; 209 for (int i=0; i<yCoordinates.length; i++){ 210 yGeometry.setCoordinate(i, yCoordinates[i]); 211 //yGeometry.setColor(i, defaultColor); 212 yGeometry.setColor(i, green); 213 } 214 axisShape.addGeometry(yGeometry); 215 216 Text3D yText = new Text3D(font3d, "Y"); 217 yShape = new Shape3D(yText, appearance); 218 //yShape = new OrientedShape3D(yText, appearance, OrientedShape3D.ROTATE_ABOUT_POINT, centerP3f); 219 //yShape.setConstantScaleEnable(true); 220 tempVec3f.x = 0.f; 221 tempVec3f.y = 1.f; 222 tempVec3f.z = 0.f; 223 tempT3D.setTranslation(tempVec3f); 224 yTG.setTransform(tempT3D); 225 yTG.addChild(yShape); 226 yShape.setCapability(xShape.ALLOW_GEOMETRY_READ); 227 yShape.setCapability(Node.ALLOW_LOCAL_TO_VWORLD_READ); 228 // 229 230 /* Z axis */ 231 zGeometry = new LineArray(2, LineArray.COORDINATES|LineArray.COLOR_3); 232 zGeometry.setCapability(LineArray.ALLOW_COLOR_READ); 233 zGeometry.setCapability(LineArray.ALLOW_COLOR_WRITE); 234 double[][] zCoordinates = new double[][]{{0.0, 0.0, 0.0},{0.0, 0.0, 1.0}}; 235 for (int i=0; i<zCoordinates.length; i++){ 236 zGeometry.setCoordinate(i, zCoordinates[i]); 237 //zGeometry.setColor(i, defaultColor); 238 zGeometry.setColor(i, blue); 239 } 240 axisShape.addGeometry(zGeometry); 241 242 Text3D zText = new Text3D(font3d, "Z"); 243 zShape = new Shape3D(zText, appearance); 244 //zShape = new OrientedShape3D(zText, appearance, OrientedShape3D.ROTATE_ABOUT_POINT, centerP3f); 245 //zShape.setConstantScaleEnable(true); 246 tempVec3f.x = 0.f; 247 tempVec3f.y = 0.f; 248 tempVec3f.z = 1.f; 249 tempT3D.setTranslation(tempVec3f); 250 zTG.setTransform(tempT3D); 251 zTG.addChild(zShape); 252 zShape.setCapability(xShape.ALLOW_GEOMETRY_READ); 253 zShape.setCapability(Node.ALLOW_LOCAL_TO_VWORLD_READ); 254 255 // 256 257 xShape.setAppearance(appearance); 258 yShape.setAppearance(appearance); 259 zShape.setAppearance(appearance); 260 261 axisTG.addChild(xTG); 262 axisTG.addChild(yTG); 263 axisTG.addChild(zTG); 264 axisTG.addChild(axisShape); 265 266 axisBG.setPickable(false); 267 axisBG.compile(); 268 269 } 270 271 /*** 272 * Returns root branch group under which is attached axis geometry. 273 */ 274 public BranchGroup getRootGroup(){ 275 return this.axisBG; 276 } 277 278 /*** 279 * Controls visibility of the axis representation. 280 */ 281 public void setVisible(boolean visible){ 282 ///Commented on 21-03-2002 while tracking a SingularMatrixException 283 ///double size = DimensionsManager.getDimensionsManager().getAxisSize();/- 284 ///this.setSize(size); 285 if (visible == true){ 286 if (isAttached){ 287 // do nothing 288 } else { 289 // attach 290 attachBG(); 291 } 292 } else { 293 if (isAttached){ 294 //detach 295 detachBG(); 296 } else { 297 // do nothing 298 } 299 } 300 } 301 302 void detachBG(){ 303 secondaryBG.detach(); 304 isAttached = false; 305 } 306 307 void attachBG(){ 308 axisBG.addChild(secondaryBG); 309 isAttached = true; 310 } 311 312 /*** 313 * Tests the Axis class by creating a simple virtual universe and adding an Axis 314 * to it. 315 * 316 */ 317 public static void main(String[] args) { 318 String[] fontNames = java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames(); 319 System.out.println("Available font names:"); 320 for (int i=0; i<fontNames.length; i++){ 321 System.out.println(fontNames[i]); 322 } 323 Axis axis = new Axis(); 324 NodeTester tester = new NodeTester(); 325 tester.add(axis.getRootGroup()); 326 } 327 328 /*** 329 * Sets the length of the axis representation (the three axis have the same length). 330 */ 331 public void setSize(double size){ 332 tempT3D.setScale(size); 333 this.axisTG.setTransform(tempT3D); 334 } 335 336 /*** 337 * Returns the length of the axis representation (the three axis have the same length). 338 */ 339 public double getSize(){ 340 this.axisTG.getTransform(tempT3D); 341 return tempT3D.getScale(); 342 } 343 344 345 }

This page was automatically generated by Maven