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.manipulation;
21
22 import javax.media.j3d.Transform3D;
23 import javax.media.j3d.TransformGroup;
24 import javax.vecmath.*;
25
26 /***
27 *
28 * @author Carlos da Silva dos Santos, Fábio Roberto de Miranda
29 * @version 23/05/2003
30 */
31 class TransTGAdapter implements TranslatableObject{
32
33 private TransformGroup transTG;
34 private Transform3D transform3D = new Transform3D();
35 private Transform3D tempT3D = new Transform3D();
36
37 /*** Holds the TransformGroup localToVworld transform. */
38 private Transform3D tgLocalToVworld = new Transform3D();
39
40 /*** Holds the total transformation, given by:
41 * (TransformGroup localToVworld transform)*(TransformGroup internal transform) */
42 private Transform3D totalT3D = new Transform3D();
43
44 TransTGAdapter(){
45
46 }
47
48 TransTGAdapter(TransformGroup transTG){
49 this();
50 this.transTG = transTG;
51 }
52
53 void setTransformGroup(TransformGroup tg){
54 this.transTG = tg;
55 }
56
57 public boolean isLive(){
58 if(this.transTG==null) return false;
59 else return transTG.isLive();
60 }
61
62 public void translate(Vector3d translation){
63 /* this method works as follows:
64 The new value of the total transformation is calculated.
65 The total transformation is given by:
66 totalT3D = tgLocalToVworld*transform3D
67 Therefore:
68 transform3D = (tgLocalToVworld^-1)*totalT3D
69 */
70 // puts total transformation in totalT3D
71 getLocalToVworld(totalT3D);
72 // sets new translation, leaving rotation and scale
73 // intact
74 totalT3D.setTranslation(translation);
75 // puts inverse of tgLocalToVworld in tempT3D
76 tempT3D.invert(tgLocalToVworld);
77 // transform3D receives (tgLocalToVworld^-1)*totalT3D
78 transform3D.mul(tempT3D,totalT3D);
79 transTG.setTransform(transform3D);
80 }
81
82 public void getLocalToVworld(Transform3D localToVworld){
83 transTG.getLocalToVworld(tgLocalToVworld);
84 transTG.getTransform(tempT3D);
85 tempT3D.mul(tgLocalToVworld,tempT3D);
86 localToVworld.set(tempT3D);
87 }
88
89 }
This page was automatically generated by Maven