mat.m23 = -(f+n)/(f-n);
return mat;
}
+
+ /**
+ * Round the number to a given number of decimals, if the rounded result contains at least three
+ * zero trailing decimal places within the rounded result.
+ */
+ public static double round(double value, int nsig) {
+ if (Math.abs(value) < NEAR_ZERO)
+ return 0.0;
+
+ int decimals = (int) Math.round(Math.log10(value));
+ int shift = nsig - decimals;
+ double multiplier = Math.pow(10.0, shift);
+ long roundedValue = Math.round(value * multiplier);
+ if (roundedValue % 1000 == 0) {
+ // Rounding results in at least three zeroes at the end
+ return roundedValue / multiplier;
+ } else {
+ // Number was not close to a shorter decimal representation, return it as is
+ return value;
+ }
+ }
}
import java.util.Arrays;
+import org.simantics.g3d.math.MathTools;
+
public class DoubleArrayPropertyManipulator implements PropertyManipulator {
ValueProvider provider;
try {
double[] val = getValue();
if (val == null) return null;
- return Arrays.toString(val);
+ return Double.toString(MathTools.round(val[i], 10));
} catch (Exception e) {
return null;
}
*******************************************************************************/
package org.simantics.g3d.property;
+import org.simantics.g3d.math.MathTools;
+
public class DoubleArrayPropertyManipulator2 implements PropertyManipulator {
ValueProvider provider;
return "New";
if (val.length < i)
return null;
- return Double.toString(val[i]);
+ return Double.toString(MathTools.round(val[i], 10));
} catch (Exception e) {
return null;
}
*******************************************************************************/
package org.simantics.g3d.property;
+import org.simantics.g3d.math.MathTools;
+
public class DoublePropertyManipulator implements PropertyManipulator {
ValueProvider provider;
try {
Object value = provider.getValue(input);
if (value == null) return null;
+ if (value instanceof Double)
+ return Double.toString(MathTools.round((Double)value, 10));
return value.toString();
} catch (Exception e) {
return null;
editMode = b;
if (editMode) {
try {
- editValue = provider.getValue(input).toString();
+ Object value = provider.getValue(input);
+ editValue = value.toString();
} catch (Exception e) {
}
default:\r
break;\r
}\r
- return Double.toString(d);\r
+ return Double.toString(MathTools.round(d, 10));\r
} catch (Exception e) {\r
return null;\r
}\r
import javax.vecmath.Vector3d;
+import org.simantics.g3d.math.MathTools;
+
public class VectorPropertyManipulator implements PropertyManipulator {
ValueProvider provider;
if (v == null)
return null;
if (i == 0)
- return Double.toString(v.x);
+ return Double.toString(MathTools.round(v.x, 10));
if (i == 1)
- return Double.toString(v.y);
+ return Double.toString(MathTools.round(v.y, 10));
if (i == 2)
- return Double.toString(v.z);
+ return Double.toString(MathTools.round(v.z, 10));
return null;
} catch (Exception e) {
return null;