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}