    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}