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