1 package org.simantics.g3d.property;
\r
3 import javax.vecmath.AxisAngle4d;
\r
4 import javax.vecmath.Quat4d;
\r
5 import javax.vecmath.Vector3d;
\r
7 import org.simantics.g3d.Activator;
\r
8 import org.simantics.g3d.math.EulerTools;
\r
9 import org.simantics.g3d.math.EulerTools.Order;
\r
10 import org.simantics.g3d.math.MathTools;
\r
11 import org.simantics.g3d.preferences.PreferenceConstants;
\r
13 public class QuatPropertyManipulator implements PropertyManipulator {
\r
15 ValueProvider provider;
\r
16 protected Object input;
\r
18 enum EditType {QUATERNION,AXIS_ANGLE,EULER};
\r
20 EditType type = EditType.QUATERNION;
\r
24 Object editValue = null;
\r
26 public QuatPropertyManipulator(ValueProvider provider, Object input) {
\r
27 this.provider = provider;
\r
30 String set = Activator.getDefault().getPreferenceStore().getString(PreferenceConstants.ORIENTATION_PRESENTATION);
\r
31 if ("quat".equals(set)) {
\r
32 type = EditType.QUATERNION;
\r
33 } else if ("aa".equals(set)) {
\r
34 type = EditType.AXIS_ANGLE;
\r
35 } else if ("euler".equals(set)) {
\r
36 type = EditType.EULER;
\r
37 String eulerOrder = Activator.getDefault().getPreferenceStore().getString(PreferenceConstants.EULER_ANGLE_ORDER);
\r
38 order = Order.valueOf(eulerOrder);
\r
45 public String getDescription(int i) {
\r
70 return order.toString().substring(i, i+1);
\r
78 public int getValueCount() {
\r
93 public String getValue(int i) {
\r
95 Quat4d q = (Quat4d) provider.getValue(input);
\r
100 q = (Quat4d)editValue;
\r
117 aa = (AxisAngle4d)editValue;
\r
119 aa = new AxisAngle4d();
\r
129 d = MathTools.radToDeg(aa.angle);
\r
135 aa = (Vector3d)editValue;
\r
137 aa = EulerTools.getEulerFromQuat(order, q);//MathTools.getEuler(q);
\r
144 d = MathTools.radToDeg(d);
\r
150 return Double.toString(d);
\r
151 } catch (Exception e) {
\r
159 public String setValue(String value, int i) {
\r
161 Double d = Double.parseDouble(value);
\r
162 Quat4d q = (Quat4d) provider.getValue(input);
\r
166 q = (Quat4d)editValue;
\r
182 aa = (AxisAngle4d) editValue;
\r
184 aa = new AxisAngle4d();
\r
194 aa.angle = MathTools.degToRad(d);
\r
196 MathTools.getQuat(aa,q);
\r
202 e = (Vector3d)editValue;
\r
204 e = EulerTools.getEulerFromQuat(order, q);//MathTools.getEuler(q);
\r
205 d = MathTools.degToRad(d);
\r
212 q = EulerTools.getQuatFromEuler(order, e);//MathTools.getQuat(e);
\r
219 } catch (Exception e) {
\r
220 return e.getMessage();
\r
225 protected void setValue(Quat4d q) throws Exception {
\r
226 provider.setValue(input, q);
\r
229 private void storeEditValue() {
\r
231 Quat4d q = (Quat4d) provider.getValue(input);
\r
237 AxisAngle4d aa = new AxisAngle4d();
\r
242 Vector3d e = EulerTools.getEulerFromQuat(order, q);
\r
246 } catch (Exception e) {
\r
252 public boolean getEditMode() {
\r
257 public void setEditMode(boolean b) {
\r