Add option to round transformation matrix values
This commit is contained in:
+36
-9
@@ -33,20 +33,47 @@ ol.dom.setTransform = function(element, value) {
|
|||||||
/**
|
/**
|
||||||
* @param {Element} element Element.
|
* @param {Element} element Element.
|
||||||
* @param {goog.vec.Mat4.AnyType} transform Matrix.
|
* @param {goog.vec.Mat4.AnyType} transform Matrix.
|
||||||
|
* @param {number=} opt_precision Precision.
|
||||||
*/
|
*/
|
||||||
ol.dom.transformElement2D = function(element, transform) {
|
ol.dom.transformElement2D = function(element, transform, opt_precision) {
|
||||||
// using matrix() causes gaps in Chrome and Firefox on Mac OS X, so prefer
|
// using matrix() causes gaps in Chrome and Firefox on Mac OS X, so prefer
|
||||||
// matrix3d()
|
// matrix3d()
|
||||||
|
var i;
|
||||||
if (ol.dom.BrowserFeature.CAN_USE_CSS_TRANSFORM3D) {
|
if (ol.dom.BrowserFeature.CAN_USE_CSS_TRANSFORM3D) {
|
||||||
ol.dom.setTransform(element, 'matrix3d(' + transform.join(',') + ')');
|
var value3D;
|
||||||
|
if (goog.isDef(opt_precision)) {
|
||||||
|
/** @type {Array.<string>} */
|
||||||
|
var strings3D = new Array(16);
|
||||||
|
for (i = 0; i < 16; ++i) {
|
||||||
|
strings3D[i] = transform[i].toFixed(opt_precision);
|
||||||
|
}
|
||||||
|
value3D = strings3D.join(',');
|
||||||
|
} else {
|
||||||
|
value3D = transform.join(',');
|
||||||
|
}
|
||||||
|
ol.dom.setTransform(element, 'matrix3d(' + value3D + ')');
|
||||||
} else if (ol.dom.BrowserFeature.CAN_USE_CSS_TRANSFORM) {
|
} else if (ol.dom.BrowserFeature.CAN_USE_CSS_TRANSFORM) {
|
||||||
ol.dom.setTransform(element, 'matrix(' +
|
/** @type {Array.<number>} */
|
||||||
goog.vec.Mat4.getElement(transform, 0, 0) + ',' +
|
var transform2D = [
|
||||||
goog.vec.Mat4.getElement(transform, 1, 0) + ',' +
|
goog.vec.Mat4.getElement(transform, 0, 0),
|
||||||
goog.vec.Mat4.getElement(transform, 0, 1) + ',' +
|
goog.vec.Mat4.getElement(transform, 1, 0),
|
||||||
goog.vec.Mat4.getElement(transform, 1, 1) + ',' +
|
goog.vec.Mat4.getElement(transform, 0, 1),
|
||||||
goog.vec.Mat4.getElement(transform, 0, 3) + ',' +
|
goog.vec.Mat4.getElement(transform, 1, 1),
|
||||||
goog.vec.Mat4.getElement(transform, 1, 3) + ')');
|
goog.vec.Mat4.getElement(transform, 0, 3),
|
||||||
|
goog.vec.Mat4.getElement(transform, 1, 3)
|
||||||
|
];
|
||||||
|
var value2D;
|
||||||
|
if (goog.isDef(opt_precision)) {
|
||||||
|
/** @type {Array.<string>} */
|
||||||
|
var strings2D = new Array(6);
|
||||||
|
for (i = 0; i < 6; ++i) {
|
||||||
|
strings2D[i] = transform2D[i].toFixed(opt_precision);
|
||||||
|
}
|
||||||
|
value2D = strings2D.join(',');
|
||||||
|
} else {
|
||||||
|
value2D = transform2D.join(',');
|
||||||
|
}
|
||||||
|
ol.dom.setTransform(element, 'matrix(' + value2D + ')');
|
||||||
} else if (ol.dom.BrowserFeature.CAN_USE_MATRIX_FILTER) {
|
} else if (ol.dom.BrowserFeature.CAN_USE_MATRIX_FILTER) {
|
||||||
// http://msdn.microsoft.com/en-us/library/ms533014%28VS.85,loband%29.aspx
|
// http://msdn.microsoft.com/en-us/library/ms533014%28VS.85,loband%29.aspx
|
||||||
goog.asserts.assert(false); // FIXME
|
goog.asserts.assert(false); // FIXME
|
||||||
|
|||||||
Reference in New Issue
Block a user