001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.plugins.streetside.cubemap;
003
004/**
005 * @author Dub
006 */
007
008import javafx.scene.Group;
009import javafx.scene.transform.Rotate;
010import javafx.scene.transform.Scale;
011import javafx.scene.transform.Translate;
012
013@SuppressWarnings("restriction")
014public class CameraTransformer extends Group {
015
016        public enum RotateOrder {
017                XYZ, XZY, YXZ, YZX, ZXY, ZYX
018        }
019
020        public Translate t = new Translate();
021        public Translate p = new Translate();
022        public Translate ip = new Translate();
023        public Rotate rx = new Rotate();
024        {
025                rx.setAxis(Rotate.X_AXIS);
026        }
027        public Rotate ry = new Rotate();
028        {
029                ry.setAxis(Rotate.Y_AXIS);
030        }
031        public Rotate rz = new Rotate();
032        {
033                rz.setAxis(Rotate.Z_AXIS);
034        }
035        public Scale s = new Scale();
036
037        public CameraTransformer() {
038                super();
039                getTransforms().addAll(t, rz, ry, rx, s);
040        }
041
042        public CameraTransformer(CameraTransformer.RotateOrder rotateOrder) {
043                super();
044                switch (rotateOrder) {
045                case XYZ:
046                        getTransforms().addAll(t, p, rz, ry, rx, s, ip);
047                        break;
048                case XZY:
049                        getTransforms().addAll(t, p, ry, rz, rx, s, ip);
050                        break;
051                case YXZ:
052                        getTransforms().addAll(t, p, rz, rx, ry, s, ip);
053                        break;
054                case YZX:
055                        getTransforms().addAll(t, p, rx, rz, ry, s, ip); // For Camera
056                        break;
057                case ZXY:
058                        getTransforms().addAll(t, p, ry, rx, rz, s, ip);
059                        break;
060                case ZYX:
061                        getTransforms().addAll(t, p, rx, ry, rz, s, ip);
062                        break;
063                }
064        }
065
066        public void setTranslate(double x, double y, double z) {
067                t.setX(x);
068                t.setY(y);
069                t.setZ(z);
070        }
071
072        public void setTranslate(double x, double y) {
073                t.setX(x);
074                t.setY(y);
075        }
076
077        public void setTx(double x) {
078                t.setX(x);
079        }
080
081        public void setTy(double y) {
082                t.setY(y);
083        }
084
085        public void setTz(double z) {
086                t.setZ(z);
087        }
088
089        public void setRotate(double x, double y, double z) {
090                rx.setAngle(x);
091                ry.setAngle(y);
092                rz.setAngle(z);
093        }
094
095        public void setRotateX(double x) {
096                rx.setAngle(x);
097        }
098
099        public void setRotateY(double y) {
100                ry.setAngle(y);
101        }
102
103        public void setRotateZ(double z) {
104                rz.setAngle(z);
105        }
106
107        public void setRx(double x) {
108                rx.setAngle(x);
109        }
110
111        public void setRy(double y) {
112                ry.setAngle(y);
113        }
114
115        public void setRz(double z) {
116                rz.setAngle(z);
117        }
118
119        public void setScale(double scaleFactor) {
120                s.setX(scaleFactor);
121                s.setY(scaleFactor);
122                s.setZ(scaleFactor);
123        }
124
125        public void setScale(double x, double y, double z) {
126                s.setX(x);
127                s.setY(y);
128                s.setZ(z);
129        }
130
131        public void setSx(double x) {
132                s.setX(x);
133        }
134
135        public void setSy(double y) {
136                s.setY(y);
137        }
138
139        public void setSz(double z) {
140                s.setZ(z);
141        }
142
143        public void setPivot(double x, double y, double z) {
144                p.setX(x);
145                p.setY(y);
146                p.setZ(z);
147                ip.setX(-x);
148                ip.setY(-y);
149                ip.setZ(-z);
150        }
151
152        public void reset() {
153                t.setX(0.0);
154                t.setY(0.0);
155                t.setZ(0.0);
156                rx.setAngle(0.0);
157                ry.setAngle(0.0);
158                rz.setAngle(0.0);
159                s.setX(1.0);
160                s.setY(1.0);
161                s.setZ(1.0);
162                p.setX(0.0);
163                p.setY(0.0);
164                p.setZ(0.0);
165                ip.setX(0.0);
166                ip.setY(0.0);
167                ip.setZ(0.0);
168        }
169
170        public void resetTSP() {
171                t.setX(0.0);
172                t.setY(0.0);
173                t.setZ(0.0);
174                s.setX(1.0);
175                s.setY(1.0);
176                s.setZ(1.0);
177                p.setX(0.0);
178                p.setY(0.0);
179                p.setZ(0.0);
180                ip.setX(0.0);
181                ip.setY(0.0);
182                ip.setZ(0.0);
183        }
184}