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