    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}