Merge pull request #5507 from ahocevar/remove-goog-vec
Remove use of goog.vec.*
This commit is contained in:
+2
-2
@@ -7376,7 +7376,7 @@ olx.view.FitOptions.prototype.maxZoom;
|
|||||||
/**
|
/**
|
||||||
* @typedef {{animate: boolean,
|
* @typedef {{animate: boolean,
|
||||||
* attributions: Object.<string, ol.Attribution>,
|
* attributions: Object.<string, ol.Attribution>,
|
||||||
* coordinateToPixelMatrix: ol.vec.Mat4.Number,
|
* coordinateToPixelTransform: ol.Transform,
|
||||||
* extent: (null|ol.Extent),
|
* extent: (null|ol.Extent),
|
||||||
* focus: ol.Coordinate,
|
* focus: ol.Coordinate,
|
||||||
* index: number,
|
* index: number,
|
||||||
@@ -7384,7 +7384,7 @@ olx.view.FitOptions.prototype.maxZoom;
|
|||||||
* layerStatesArray: Array.<ol.LayerState>,
|
* layerStatesArray: Array.<ol.LayerState>,
|
||||||
* logos: Object.<string, (string|Element)>,
|
* logos: Object.<string, (string|Element)>,
|
||||||
* pixelRatio: number,
|
* pixelRatio: number,
|
||||||
* pixelToCoordinateMatrix: ol.vec.Mat4.Number,
|
* pixelToCoordinateTransform: ol.Transform,
|
||||||
* postRenderFunctions: Array.<ol.PostRenderFunction>,
|
* postRenderFunctions: Array.<ol.PostRenderFunction>,
|
||||||
* size: ol.Size,
|
* size: ol.Size,
|
||||||
* skippedFeatureUids: Object.<string, boolean>,
|
* skippedFeatureUids: Object.<string, boolean>,
|
||||||
|
|||||||
+17
-20
@@ -2,8 +2,15 @@ goog.provide('ol.dom');
|
|||||||
|
|
||||||
goog.require('goog.asserts');
|
goog.require('goog.asserts');
|
||||||
goog.require('goog.userAgent');
|
goog.require('goog.userAgent');
|
||||||
goog.require('goog.vec.Mat4');
|
|
||||||
goog.require('ol');
|
goog.require('ol');
|
||||||
|
goog.require('ol.vec.Mat4');
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type {Array.<number>}
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
ol.dom.tmpMat4_ = ol.vec.Mat4.create();
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -127,7 +134,7 @@ ol.dom.setTransform = function(element, value) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {!Element} element Element.
|
* @param {!Element} element Element.
|
||||||
* @param {goog.vec.Mat4.Number} transform Matrix.
|
* @param {ol.Transform} transform Matrix.
|
||||||
* @param {number=} opt_precision Precision.
|
* @param {number=} opt_precision Precision.
|
||||||
*/
|
*/
|
||||||
ol.dom.transformElement2D = function(element, transform, opt_precision) {
|
ol.dom.transformElement2D = function(element, transform, opt_precision) {
|
||||||
@@ -136,45 +143,35 @@ ol.dom.transformElement2D = function(element, transform, opt_precision) {
|
|||||||
var i;
|
var i;
|
||||||
if (ol.dom.canUseCssTransform3D()) {
|
if (ol.dom.canUseCssTransform3D()) {
|
||||||
var value3D;
|
var value3D;
|
||||||
|
var transform3D = ol.vec.Mat4.fromTransform(ol.dom.tmpMat4_, transform);
|
||||||
if (opt_precision !== undefined) {
|
if (opt_precision !== undefined) {
|
||||||
/** @type {Array.<string>} */
|
/** @type {Array.<string>} */
|
||||||
var strings3D = new Array(16);
|
var strings3D = new Array(16);
|
||||||
for (i = 0; i < 16; ++i) {
|
for (i = 0; i < 16; ++i) {
|
||||||
strings3D[i] = transform[i].toFixed(opt_precision);
|
strings3D[i] = transform3D[i].toFixed(opt_precision);
|
||||||
}
|
}
|
||||||
value3D = strings3D.join(',');
|
value3D = strings3D.join(',');
|
||||||
} else {
|
} else {
|
||||||
value3D = transform.join(',');
|
value3D = transform3D.join(',');
|
||||||
}
|
}
|
||||||
ol.dom.setTransform(element, 'matrix3d(' + value3D + ')');
|
ol.dom.setTransform(element, 'matrix3d(' + value3D + ')');
|
||||||
} else if (ol.dom.canUseCssTransform()) {
|
} else if (ol.dom.canUseCssTransform()) {
|
||||||
/** @type {Array.<number>} */
|
/** @type {string} */
|
||||||
var transform2D = [
|
|
||||||
goog.vec.Mat4.getElement(transform, 0, 0),
|
|
||||||
goog.vec.Mat4.getElement(transform, 1, 0),
|
|
||||||
goog.vec.Mat4.getElement(transform, 0, 1),
|
|
||||||
goog.vec.Mat4.getElement(transform, 1, 1),
|
|
||||||
goog.vec.Mat4.getElement(transform, 0, 3),
|
|
||||||
goog.vec.Mat4.getElement(transform, 1, 3)
|
|
||||||
];
|
|
||||||
var value2D;
|
var value2D;
|
||||||
if (opt_precision !== undefined) {
|
if (opt_precision !== undefined) {
|
||||||
/** @type {Array.<string>} */
|
/** @type {Array.<string>} */
|
||||||
var strings2D = new Array(6);
|
var strings2D = new Array(6);
|
||||||
for (i = 0; i < 6; ++i) {
|
for (i = 0; i < 6; ++i) {
|
||||||
strings2D[i] = transform2D[i].toFixed(opt_precision);
|
strings2D[i] = transform[i].toFixed(opt_precision);
|
||||||
}
|
}
|
||||||
value2D = strings2D.join(',');
|
value2D = strings2D.join(',');
|
||||||
} else {
|
} else {
|
||||||
value2D = transform2D.join(',');
|
value2D = transform.join(',');
|
||||||
}
|
}
|
||||||
ol.dom.setTransform(element, 'matrix(' + value2D + ')');
|
ol.dom.setTransform(element, 'matrix(' + value2D + ')');
|
||||||
} else {
|
} else {
|
||||||
element.style.left =
|
element.style.left = Math.round(transform[4]) + 'px';
|
||||||
Math.round(goog.vec.Mat4.getElement(transform, 0, 3)) + 'px';
|
element.style.top = Math.round(transform[5]) + 'px';
|
||||||
element.style.top =
|
|
||||||
Math.round(goog.vec.Mat4.getElement(transform, 1, 3)) + 'px';
|
|
||||||
|
|
||||||
// TODO: Add scaling here. This isn't quite as simple as multiplying
|
// TODO: Add scaling here. This isn't quite as simple as multiplying
|
||||||
// width/height, because that only changes the container size, not the
|
// width/height, because that only changes the container size, not the
|
||||||
|
|||||||
@@ -1,32 +1,24 @@
|
|||||||
goog.provide('ol.geom.flat.transform');
|
goog.provide('ol.geom.flat.transform');
|
||||||
|
|
||||||
goog.require('goog.vec.Mat4');
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {Array.<number>} flatCoordinates Flat coordinates.
|
* @param {Array.<number>} flatCoordinates Flat coordinates.
|
||||||
* @param {number} offset Offset.
|
* @param {number} offset Offset.
|
||||||
* @param {number} end End.
|
* @param {number} end End.
|
||||||
* @param {number} stride Stride.
|
* @param {number} stride Stride.
|
||||||
* @param {goog.vec.Mat4.Number} transform Transform.
|
* @param {ol.Transform} transform Transform.
|
||||||
* @param {Array.<number>=} opt_dest Destination.
|
* @param {Array.<number>=} opt_dest Destination.
|
||||||
* @return {Array.<number>} Transformed coordinates.
|
* @return {Array.<number>} Transformed coordinates.
|
||||||
*/
|
*/
|
||||||
ol.geom.flat.transform.transform2D = function(flatCoordinates, offset, end, stride, transform, opt_dest) {
|
ol.geom.flat.transform.transform2D = function(flatCoordinates, offset, end, stride, transform, opt_dest) {
|
||||||
var m00 = goog.vec.Mat4.getElement(transform, 0, 0);
|
|
||||||
var m10 = goog.vec.Mat4.getElement(transform, 1, 0);
|
|
||||||
var m01 = goog.vec.Mat4.getElement(transform, 0, 1);
|
|
||||||
var m11 = goog.vec.Mat4.getElement(transform, 1, 1);
|
|
||||||
var m03 = goog.vec.Mat4.getElement(transform, 0, 3);
|
|
||||||
var m13 = goog.vec.Mat4.getElement(transform, 1, 3);
|
|
||||||
var dest = opt_dest ? opt_dest : [];
|
var dest = opt_dest ? opt_dest : [];
|
||||||
var i = 0;
|
var i = 0;
|
||||||
var j;
|
var j;
|
||||||
for (j = offset; j < end; j += stride) {
|
for (j = offset; j < end; j += stride) {
|
||||||
var x = flatCoordinates[j];
|
var x = flatCoordinates[j];
|
||||||
var y = flatCoordinates[j + 1];
|
var y = flatCoordinates[j + 1];
|
||||||
dest[i++] = m00 * x + m01 * y + m03;
|
dest[i++] = transform[0] * x + transform[2] * y + transform[4];
|
||||||
dest[i++] = m10 * x + m11 * y + m13;
|
dest[i++] = transform[1] * x + transform[3] * y + transform[5];
|
||||||
}
|
}
|
||||||
if (opt_dest && dest.length != i) {
|
if (opt_dest && dest.length != i) {
|
||||||
dest.length = i;
|
dest.length = i;
|
||||||
|
|||||||
@@ -294,7 +294,7 @@ ol.geom.SimpleGeometry.prototype.translate = function(deltaX, deltaY) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {ol.geom.SimpleGeometry} simpleGeometry Simple geometry.
|
* @param {ol.geom.SimpleGeometry} simpleGeometry Simple geometry.
|
||||||
* @param {goog.vec.Mat4.Number} transform Transform.
|
* @param {ol.Transform} transform Transform.
|
||||||
* @param {Array.<number>=} opt_dest Destination.
|
* @param {Array.<number>=} opt_dest Destination.
|
||||||
* @return {Array.<number>} Transformed flat coordinates.
|
* @return {Array.<number>} Transformed flat coordinates.
|
||||||
*/
|
*/
|
||||||
|
|||||||
+10
-12
@@ -7,7 +7,6 @@ goog.provide('ol.MapProperty');
|
|||||||
|
|
||||||
goog.require('goog.asserts');
|
goog.require('goog.asserts');
|
||||||
goog.require('goog.async.nextTick');
|
goog.require('goog.async.nextTick');
|
||||||
goog.require('goog.vec.Mat4');
|
|
||||||
goog.require('ol.Collection');
|
goog.require('ol.Collection');
|
||||||
goog.require('ol.CollectionEventType');
|
goog.require('ol.CollectionEventType');
|
||||||
goog.require('ol.MapBrowserEvent');
|
goog.require('ol.MapBrowserEvent');
|
||||||
@@ -34,6 +33,7 @@ goog.require('ol.has');
|
|||||||
goog.require('ol.interaction');
|
goog.require('ol.interaction');
|
||||||
goog.require('ol.layer.Base');
|
goog.require('ol.layer.Base');
|
||||||
goog.require('ol.layer.Group');
|
goog.require('ol.layer.Group');
|
||||||
|
goog.require('ol.transform');
|
||||||
goog.require('ol.object');
|
goog.require('ol.object');
|
||||||
goog.require('ol.proj');
|
goog.require('ol.proj');
|
||||||
goog.require('ol.proj.common');
|
goog.require('ol.proj.common');
|
||||||
@@ -43,7 +43,6 @@ goog.require('ol.renderer.dom.Map');
|
|||||||
goog.require('ol.renderer.webgl.Map');
|
goog.require('ol.renderer.webgl.Map');
|
||||||
goog.require('ol.size');
|
goog.require('ol.size');
|
||||||
goog.require('ol.structs.PriorityQueue');
|
goog.require('ol.structs.PriorityQueue');
|
||||||
goog.require('ol.vec.Mat4');
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -203,15 +202,15 @@ ol.Map = function(options) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {goog.vec.Mat4.Number}
|
* @type {ol.Transform}
|
||||||
*/
|
*/
|
||||||
this.coordinateToPixelMatrix_ = goog.vec.Mat4.createNumber();
|
this.coordinateToPixelTransform_ = ol.transform.create();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {goog.vec.Mat4.Number}
|
* @type {ol.Transform}
|
||||||
*/
|
*/
|
||||||
this.pixelToCoordinateMatrix_ = goog.vec.Mat4.createNumber();
|
this.pixelToCoordinateTransform_ = ol.transform.create();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
@@ -764,8 +763,7 @@ ol.Map.prototype.getCoordinateFromPixel = function(pixel) {
|
|||||||
if (!frameState) {
|
if (!frameState) {
|
||||||
return null;
|
return null;
|
||||||
} else {
|
} else {
|
||||||
var vec2 = pixel.slice();
|
return ol.transform.apply(frameState.pixelToCoordinateTransform, pixel.slice());
|
||||||
return ol.vec.Mat4.multVec2(frameState.pixelToCoordinateMatrix, vec2, vec2);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -853,8 +851,8 @@ ol.Map.prototype.getPixelFromCoordinate = function(coordinate) {
|
|||||||
if (!frameState) {
|
if (!frameState) {
|
||||||
return null;
|
return null;
|
||||||
} else {
|
} else {
|
||||||
var vec2 = coordinate.slice(0, 2);
|
return ol.transform.apply(frameState.coordinateToPixelTransform,
|
||||||
return ol.vec.Mat4.multVec2(frameState.coordinateToPixelMatrix, vec2, vec2);
|
coordinate.slice(0, 2));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1298,7 +1296,7 @@ ol.Map.prototype.renderFrame_ = function(time) {
|
|||||||
frameState = /** @type {olx.FrameState} */ ({
|
frameState = /** @type {olx.FrameState} */ ({
|
||||||
animate: false,
|
animate: false,
|
||||||
attributions: {},
|
attributions: {},
|
||||||
coordinateToPixelMatrix: this.coordinateToPixelMatrix_,
|
coordinateToPixelTransform: this.coordinateToPixelTransform_,
|
||||||
extent: extent,
|
extent: extent,
|
||||||
focus: !this.focus_ ? viewState.center : this.focus_,
|
focus: !this.focus_ ? viewState.center : this.focus_,
|
||||||
index: this.frameIndex_++,
|
index: this.frameIndex_++,
|
||||||
@@ -1306,7 +1304,7 @@ ol.Map.prototype.renderFrame_ = function(time) {
|
|||||||
layerStatesArray: layerStatesArray,
|
layerStatesArray: layerStatesArray,
|
||||||
logos: ol.object.assign({}, this.logos_),
|
logos: ol.object.assign({}, this.logos_),
|
||||||
pixelRatio: this.pixelRatio_,
|
pixelRatio: this.pixelRatio_,
|
||||||
pixelToCoordinateMatrix: this.pixelToCoordinateMatrix_,
|
pixelToCoordinateTransform: this.pixelToCoordinateTransform_,
|
||||||
postRenderFunctions: [],
|
postRenderFunctions: [],
|
||||||
size: size,
|
size: size,
|
||||||
skippedFeatureUids: this.skippedFeatureUids_,
|
skippedFeatureUids: this.skippedFeatureUids_,
|
||||||
|
|||||||
+2
-4
@@ -1,8 +1,7 @@
|
|||||||
goog.provide('ol.render');
|
goog.provide('ol.render');
|
||||||
|
|
||||||
goog.require('goog.vec.Mat4');
|
goog.require('ol.transform');
|
||||||
goog.require('ol.render.canvas.Immediate');
|
goog.require('ol.render.canvas.Immediate');
|
||||||
goog.require('ol.vec.Mat4');
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -37,8 +36,7 @@ ol.render.toContext = function(context, opt_options) {
|
|||||||
canvas.style.height = size[1] + 'px';
|
canvas.style.height = size[1] + 'px';
|
||||||
}
|
}
|
||||||
var extent = [0, 0, canvas.width, canvas.height];
|
var extent = [0, 0, canvas.width, canvas.height];
|
||||||
var transform = ol.vec.Mat4.makeTransform2D(goog.vec.Mat4.createNumber(),
|
var transform = ol.transform.scale(ol.transform.create(), pixelRatio, pixelRatio);
|
||||||
0, 0, pixelRatio, pixelRatio, 0, 0, 0);
|
|
||||||
return new ol.render.canvas.Immediate(context, pixelRatio, extent, transform,
|
return new ol.render.canvas.Immediate(context, pixelRatio, extent, transform,
|
||||||
0);
|
0);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
goog.provide('ol.render.canvas.Immediate');
|
goog.provide('ol.render.canvas.Immediate');
|
||||||
|
|
||||||
goog.require('goog.asserts');
|
goog.require('goog.asserts');
|
||||||
goog.require('goog.vec.Mat4');
|
goog.require('ol.transform');
|
||||||
goog.require('ol.array');
|
goog.require('ol.array');
|
||||||
goog.require('ol.color');
|
goog.require('ol.color');
|
||||||
goog.require('ol.colorlike');
|
goog.require('ol.colorlike');
|
||||||
@@ -15,7 +15,6 @@ goog.require('ol.geom.flat.transform');
|
|||||||
goog.require('ol.has');
|
goog.require('ol.has');
|
||||||
goog.require('ol.render.VectorContext');
|
goog.require('ol.render.VectorContext');
|
||||||
goog.require('ol.render.canvas');
|
goog.require('ol.render.canvas');
|
||||||
goog.require('ol.vec.Mat4');
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -32,7 +31,7 @@ goog.require('ol.vec.Mat4');
|
|||||||
* @param {CanvasRenderingContext2D} context Context.
|
* @param {CanvasRenderingContext2D} context Context.
|
||||||
* @param {number} pixelRatio Pixel ratio.
|
* @param {number} pixelRatio Pixel ratio.
|
||||||
* @param {ol.Extent} extent Extent.
|
* @param {ol.Extent} extent Extent.
|
||||||
* @param {goog.vec.Mat4.Number} transform Transform.
|
* @param {ol.Transform} transform Transform.
|
||||||
* @param {number} viewRotation View rotation.
|
* @param {number} viewRotation View rotation.
|
||||||
* @struct
|
* @struct
|
||||||
*/
|
*/
|
||||||
@@ -59,7 +58,7 @@ ol.render.canvas.Immediate = function(context, pixelRatio, extent, transform, vi
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {goog.vec.Mat4.Number}
|
* @type {ol.Transform}
|
||||||
*/
|
*/
|
||||||
this.transform_ = transform;
|
this.transform_ = transform;
|
||||||
|
|
||||||
@@ -227,9 +226,9 @@ ol.render.canvas.Immediate = function(context, pixelRatio, extent, transform, vi
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {!goog.vec.Mat4.Number}
|
* @type {ol.Transform}
|
||||||
*/
|
*/
|
||||||
this.tmpLocalTransform_ = goog.vec.Mat4.createNumber();
|
this.tmpLocalTransform_ = ol.transform.create();
|
||||||
|
|
||||||
};
|
};
|
||||||
ol.inherits(ol.render.canvas.Immediate, ol.render.VectorContext);
|
ol.inherits(ol.render.canvas.Immediate, ol.render.VectorContext);
|
||||||
@@ -273,16 +272,12 @@ ol.render.canvas.Immediate.prototype.drawImages_ = function(flatCoordinates, off
|
|||||||
if (rotation !== 0 || this.imageScale_ != 1) {
|
if (rotation !== 0 || this.imageScale_ != 1) {
|
||||||
var centerX = x + this.imageAnchorX_;
|
var centerX = x + this.imageAnchorX_;
|
||||||
var centerY = y + this.imageAnchorY_;
|
var centerY = y + this.imageAnchorY_;
|
||||||
ol.vec.Mat4.makeTransform2D(localTransform,
|
ol.transform.compose(localTransform,
|
||||||
centerX, centerY, this.imageScale_, this.imageScale_,
|
centerX, centerY,
|
||||||
rotation, -centerX, -centerY);
|
this.imageScale_, this.imageScale_,
|
||||||
context.setTransform(
|
rotation,
|
||||||
goog.vec.Mat4.getElement(localTransform, 0, 0),
|
-centerX, -centerY);
|
||||||
goog.vec.Mat4.getElement(localTransform, 1, 0),
|
context.setTransform.apply(context, localTransform);
|
||||||
goog.vec.Mat4.getElement(localTransform, 0, 1),
|
|
||||||
goog.vec.Mat4.getElement(localTransform, 1, 1),
|
|
||||||
goog.vec.Mat4.getElement(localTransform, 0, 3),
|
|
||||||
goog.vec.Mat4.getElement(localTransform, 1, 3));
|
|
||||||
}
|
}
|
||||||
context.drawImage(this.image_, this.imageOriginX_, this.imageOriginY_,
|
context.drawImage(this.image_, this.imageOriginX_, this.imageOriginY_,
|
||||||
this.imageWidth_, this.imageHeight_, x, y,
|
this.imageWidth_, this.imageHeight_, x, y,
|
||||||
@@ -326,15 +321,12 @@ ol.render.canvas.Immediate.prototype.drawText_ = function(flatCoordinates, offse
|
|||||||
var x = pixelCoordinates[offset] + this.textOffsetX_;
|
var x = pixelCoordinates[offset] + this.textOffsetX_;
|
||||||
var y = pixelCoordinates[offset + 1] + this.textOffsetY_;
|
var y = pixelCoordinates[offset + 1] + this.textOffsetY_;
|
||||||
if (this.textRotation_ !== 0 || this.textScale_ != 1) {
|
if (this.textRotation_ !== 0 || this.textScale_ != 1) {
|
||||||
var localTransform = ol.vec.Mat4.makeTransform2D(this.tmpLocalTransform_,
|
var localTransform = ol.transform.compose(this.tmpLocalTransform_,
|
||||||
x, y, this.textScale_, this.textScale_, this.textRotation_, -x, -y);
|
x, y,
|
||||||
context.setTransform(
|
this.textScale_, this.textScale_,
|
||||||
goog.vec.Mat4.getElement(localTransform, 0, 0),
|
this.textRotation_,
|
||||||
goog.vec.Mat4.getElement(localTransform, 1, 0),
|
-x, -y);
|
||||||
goog.vec.Mat4.getElement(localTransform, 0, 1),
|
context.setTransform.apply(context, localTransform);
|
||||||
goog.vec.Mat4.getElement(localTransform, 1, 1),
|
|
||||||
goog.vec.Mat4.getElement(localTransform, 0, 3),
|
|
||||||
goog.vec.Mat4.getElement(localTransform, 1, 3));
|
|
||||||
}
|
}
|
||||||
if (this.textStrokeState_) {
|
if (this.textStrokeState_) {
|
||||||
context.strokeText(this.text_, x, y);
|
context.strokeText(this.text_, x, y);
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ goog.provide('ol.render.canvas.ReplayGroup');
|
|||||||
goog.provide('ol.render.canvas.TextReplay');
|
goog.provide('ol.render.canvas.TextReplay');
|
||||||
|
|
||||||
goog.require('goog.asserts');
|
goog.require('goog.asserts');
|
||||||
goog.require('goog.vec.Mat4');
|
goog.require('ol.transform');
|
||||||
goog.require('ol');
|
goog.require('ol');
|
||||||
goog.require('ol.array');
|
goog.require('ol.array');
|
||||||
goog.require('ol.color');
|
goog.require('ol.color');
|
||||||
@@ -24,7 +24,6 @@ goog.require('ol.object');
|
|||||||
goog.require('ol.render.IReplayGroup');
|
goog.require('ol.render.IReplayGroup');
|
||||||
goog.require('ol.render.VectorContext');
|
goog.require('ol.render.VectorContext');
|
||||||
goog.require('ol.render.canvas');
|
goog.require('ol.render.canvas');
|
||||||
goog.require('ol.vec.Mat4');
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -117,9 +116,9 @@ ol.render.canvas.Replay = function(tolerance, maxExtent, resolution) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {goog.vec.Mat4.Number}
|
* @type {ol.Transform}
|
||||||
*/
|
*/
|
||||||
this.renderedTransform_ = goog.vec.Mat4.createNumber();
|
this.renderedTransform_ = ol.transform.create();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @protected
|
* @protected
|
||||||
@@ -135,15 +134,15 @@ ol.render.canvas.Replay = function(tolerance, maxExtent, resolution) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {!goog.vec.Mat4.Number}
|
* @type {ol.Transform}
|
||||||
*/
|
*/
|
||||||
this.tmpLocalTransform_ = goog.vec.Mat4.createNumber();
|
this.tmpLocalTransform_ = ol.transform.create();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {!goog.vec.Mat4.Number}
|
* @type {ol.Transform}
|
||||||
*/
|
*/
|
||||||
this.tmpLocalTransformInv_ = goog.vec.Mat4.createNumber();
|
this.tmpLocalTransformInv_ = ol.transform.create();
|
||||||
};
|
};
|
||||||
ol.inherits(ol.render.canvas.Replay, ol.render.VectorContext);
|
ol.inherits(ol.render.canvas.Replay, ol.render.VectorContext);
|
||||||
|
|
||||||
@@ -223,7 +222,7 @@ ol.render.canvas.Replay.prototype.beginGeometry = function(geometry, feature) {
|
|||||||
* @private
|
* @private
|
||||||
* @param {CanvasRenderingContext2D} context Context.
|
* @param {CanvasRenderingContext2D} context Context.
|
||||||
* @param {number} pixelRatio Pixel ratio.
|
* @param {number} pixelRatio Pixel ratio.
|
||||||
* @param {goog.vec.Mat4.Number} transform Transform.
|
* @param {ol.Transform} transform Transform.
|
||||||
* @param {number} viewRotation View rotation.
|
* @param {number} viewRotation View rotation.
|
||||||
* @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
|
* @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
|
||||||
* to skip.
|
* to skip.
|
||||||
@@ -240,13 +239,13 @@ ol.render.canvas.Replay.prototype.replay_ = function(
|
|||||||
instructions, featureCallback, opt_hitExtent) {
|
instructions, featureCallback, opt_hitExtent) {
|
||||||
/** @type {Array.<number>} */
|
/** @type {Array.<number>} */
|
||||||
var pixelCoordinates;
|
var pixelCoordinates;
|
||||||
if (ol.vec.Mat4.equals2D(transform, this.renderedTransform_)) {
|
if (ol.array.equals(transform, this.renderedTransform_)) {
|
||||||
pixelCoordinates = this.pixelCoordinates_;
|
pixelCoordinates = this.pixelCoordinates_;
|
||||||
} else {
|
} else {
|
||||||
pixelCoordinates = ol.geom.flat.transform.transform2D(
|
pixelCoordinates = ol.geom.flat.transform.transform2D(
|
||||||
this.coordinates, 0, this.coordinates.length, 2,
|
this.coordinates, 0, this.coordinates.length, 2,
|
||||||
transform, this.pixelCoordinates_);
|
transform, this.pixelCoordinates_);
|
||||||
goog.vec.Mat4.setFromArray(this.renderedTransform_, transform);
|
ol.transform.setFromArray(this.renderedTransform_, transform);
|
||||||
goog.asserts.assert(pixelCoordinates === this.pixelCoordinates_,
|
goog.asserts.assert(pixelCoordinates === this.pixelCoordinates_,
|
||||||
'pixelCoordinates should be the same as this.pixelCoordinates_');
|
'pixelCoordinates should be the same as this.pixelCoordinates_');
|
||||||
}
|
}
|
||||||
@@ -332,16 +331,9 @@ ol.render.canvas.Replay.prototype.replay_ = function(
|
|||||||
if (scale != 1 || rotation !== 0) {
|
if (scale != 1 || rotation !== 0) {
|
||||||
var centerX = x + anchorX;
|
var centerX = x + anchorX;
|
||||||
var centerY = y + anchorY;
|
var centerY = y + anchorY;
|
||||||
ol.vec.Mat4.makeTransform2D(
|
ol.transform.compose(localTransform,
|
||||||
localTransform, centerX, centerY, scale, scale,
|
centerX, centerY, scale, scale, rotation, -centerX, -centerY);
|
||||||
rotation, -centerX, -centerY);
|
context.transform.apply(context, localTransform);
|
||||||
context.transform(
|
|
||||||
goog.vec.Mat4.getElement(localTransform, 0, 0),
|
|
||||||
goog.vec.Mat4.getElement(localTransform, 1, 0),
|
|
||||||
goog.vec.Mat4.getElement(localTransform, 0, 1),
|
|
||||||
goog.vec.Mat4.getElement(localTransform, 1, 1),
|
|
||||||
goog.vec.Mat4.getElement(localTransform, 0, 3),
|
|
||||||
goog.vec.Mat4.getElement(localTransform, 1, 3));
|
|
||||||
}
|
}
|
||||||
var alpha = context.globalAlpha;
|
var alpha = context.globalAlpha;
|
||||||
if (opacity != 1) {
|
if (opacity != 1) {
|
||||||
@@ -358,14 +350,8 @@ ol.render.canvas.Replay.prototype.replay_ = function(
|
|||||||
context.globalAlpha = alpha;
|
context.globalAlpha = alpha;
|
||||||
}
|
}
|
||||||
if (scale != 1 || rotation !== 0) {
|
if (scale != 1 || rotation !== 0) {
|
||||||
goog.vec.Mat4.invert(localTransform, localTransformInv);
|
ol.transform.invert(ol.transform.setFromArray(localTransformInv, localTransform));
|
||||||
context.transform(
|
context.transform.apply(context, localTransformInv);
|
||||||
goog.vec.Mat4.getElement(localTransformInv, 0, 0),
|
|
||||||
goog.vec.Mat4.getElement(localTransformInv, 1, 0),
|
|
||||||
goog.vec.Mat4.getElement(localTransformInv, 0, 1),
|
|
||||||
goog.vec.Mat4.getElement(localTransformInv, 1, 1),
|
|
||||||
goog.vec.Mat4.getElement(localTransformInv, 0, 3),
|
|
||||||
goog.vec.Mat4.getElement(localTransformInv, 1, 3));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
++i;
|
++i;
|
||||||
@@ -402,15 +388,8 @@ ol.render.canvas.Replay.prototype.replay_ = function(
|
|||||||
x = pixelCoordinates[d] + offsetX;
|
x = pixelCoordinates[d] + offsetX;
|
||||||
y = pixelCoordinates[d + 1] + offsetY;
|
y = pixelCoordinates[d + 1] + offsetY;
|
||||||
if (scale != 1 || rotation !== 0) {
|
if (scale != 1 || rotation !== 0) {
|
||||||
ol.vec.Mat4.makeTransform2D(
|
ol.transform.compose(localTransform, x, y, scale, scale, rotation, -x, -y);
|
||||||
localTransform, x, y, scale, scale, rotation, -x, -y);
|
context.transform.apply(context, localTransform);
|
||||||
context.transform(
|
|
||||||
goog.vec.Mat4.getElement(localTransform, 0, 0),
|
|
||||||
goog.vec.Mat4.getElement(localTransform, 1, 0),
|
|
||||||
goog.vec.Mat4.getElement(localTransform, 0, 1),
|
|
||||||
goog.vec.Mat4.getElement(localTransform, 1, 1),
|
|
||||||
goog.vec.Mat4.getElement(localTransform, 0, 3),
|
|
||||||
goog.vec.Mat4.getElement(localTransform, 1, 3));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Support multiple lines separated by \n
|
// Support multiple lines separated by \n
|
||||||
@@ -441,14 +420,8 @@ ol.render.canvas.Replay.prototype.replay_ = function(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (scale != 1 || rotation !== 0) {
|
if (scale != 1 || rotation !== 0) {
|
||||||
goog.vec.Mat4.invert(localTransform, localTransformInv);
|
ol.transform.invert(ol.transform.setFromArray(localTransformInv, localTransform));
|
||||||
context.transform(
|
context.transform.apply(context, localTransformInv);
|
||||||
goog.vec.Mat4.getElement(localTransformInv, 0, 0),
|
|
||||||
goog.vec.Mat4.getElement(localTransformInv, 1, 0),
|
|
||||||
goog.vec.Mat4.getElement(localTransformInv, 0, 1),
|
|
||||||
goog.vec.Mat4.getElement(localTransformInv, 1, 1),
|
|
||||||
goog.vec.Mat4.getElement(localTransformInv, 0, 3),
|
|
||||||
goog.vec.Mat4.getElement(localTransformInv, 1, 3));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
++i;
|
++i;
|
||||||
@@ -565,7 +538,7 @@ ol.render.canvas.Replay.prototype.replay_ = function(
|
|||||||
/**
|
/**
|
||||||
* @param {CanvasRenderingContext2D} context Context.
|
* @param {CanvasRenderingContext2D} context Context.
|
||||||
* @param {number} pixelRatio Pixel ratio.
|
* @param {number} pixelRatio Pixel ratio.
|
||||||
* @param {goog.vec.Mat4.Number} transform Transform.
|
* @param {ol.Transform} transform Transform.
|
||||||
* @param {number} viewRotation View rotation.
|
* @param {number} viewRotation View rotation.
|
||||||
* @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
|
* @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
|
||||||
* to skip.
|
* to skip.
|
||||||
@@ -580,7 +553,7 @@ ol.render.canvas.Replay.prototype.replay = function(
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {CanvasRenderingContext2D} context Context.
|
* @param {CanvasRenderingContext2D} context Context.
|
||||||
* @param {goog.vec.Mat4.Number} transform Transform.
|
* @param {ol.Transform} transform Transform.
|
||||||
* @param {number} viewRotation View rotation.
|
* @param {number} viewRotation View rotation.
|
||||||
* @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
|
* @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
|
||||||
* to skip.
|
* to skip.
|
||||||
@@ -1883,9 +1856,9 @@ ol.render.canvas.ReplayGroup = function(
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {!goog.vec.Mat4.Number}
|
* @type {ol.Transform}
|
||||||
*/
|
*/
|
||||||
this.hitDetectionTransform_ = goog.vec.Mat4.createNumber();
|
this.hitDetectionTransform_ = ol.transform.create();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1919,9 +1892,10 @@ ol.render.canvas.ReplayGroup.prototype.finish = function() {
|
|||||||
ol.render.canvas.ReplayGroup.prototype.forEachFeatureAtCoordinate = function(
|
ol.render.canvas.ReplayGroup.prototype.forEachFeatureAtCoordinate = function(
|
||||||
coordinate, resolution, rotation, skippedFeaturesHash, callback) {
|
coordinate, resolution, rotation, skippedFeaturesHash, callback) {
|
||||||
|
|
||||||
var transform = this.hitDetectionTransform_;
|
var transform = ol.transform.compose(this.hitDetectionTransform_,
|
||||||
ol.vec.Mat4.makeTransform2D(transform, 0.5, 0.5,
|
0.5, 0.5,
|
||||||
1 / resolution, -1 / resolution, -rotation,
|
1 / resolution, -1 / resolution,
|
||||||
|
-rotation,
|
||||||
-coordinate[0], -coordinate[1]);
|
-coordinate[0], -coordinate[1]);
|
||||||
|
|
||||||
var context = this.hitDetectionContext_;
|
var context = this.hitDetectionContext_;
|
||||||
@@ -1991,7 +1965,7 @@ ol.render.canvas.ReplayGroup.prototype.isEmpty = function() {
|
|||||||
/**
|
/**
|
||||||
* @param {CanvasRenderingContext2D} context Context.
|
* @param {CanvasRenderingContext2D} context Context.
|
||||||
* @param {number} pixelRatio Pixel ratio.
|
* @param {number} pixelRatio Pixel ratio.
|
||||||
* @param {goog.vec.Mat4.Number} transform Transform.
|
* @param {ol.Transform} transform Transform.
|
||||||
* @param {number} viewRotation View rotation.
|
* @param {number} viewRotation View rotation.
|
||||||
* @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
|
* @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
|
||||||
* to skip.
|
* to skip.
|
||||||
@@ -2044,7 +2018,7 @@ ol.render.canvas.ReplayGroup.prototype.replay = function(context, pixelRatio,
|
|||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @param {CanvasRenderingContext2D} context Context.
|
* @param {CanvasRenderingContext2D} context Context.
|
||||||
* @param {goog.vec.Mat4.Number} transform Transform.
|
* @param {ol.Transform} transform Transform.
|
||||||
* @param {number} viewRotation View rotation.
|
* @param {number} viewRotation View rotation.
|
||||||
* @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
|
* @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
|
||||||
* to skip.
|
* to skip.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ goog.provide('ol.render.webgl.ImageReplay');
|
|||||||
goog.provide('ol.render.webgl.ReplayGroup');
|
goog.provide('ol.render.webgl.ReplayGroup');
|
||||||
|
|
||||||
goog.require('goog.asserts');
|
goog.require('goog.asserts');
|
||||||
goog.require('goog.vec.Mat4');
|
goog.require('ol.transform');
|
||||||
goog.require('ol.extent');
|
goog.require('ol.extent');
|
||||||
goog.require('ol.object');
|
goog.require('ol.object');
|
||||||
goog.require('ol.render.IReplayGroup');
|
goog.require('ol.render.IReplayGroup');
|
||||||
@@ -116,16 +116,16 @@ ol.render.webgl.ImageReplay = function(tolerance, maxExtent) {
|
|||||||
this.opacity_ = undefined;
|
this.opacity_ = undefined;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @type {!goog.vec.Mat4.Number}
|
* @type {ol.Transform}
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
this.offsetRotateMatrix_ = goog.vec.Mat4.createNumberIdentity();
|
this.offsetRotateMatrix_ = ol.transform.create();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @type {!goog.vec.Mat4.Number}
|
* @type {ol.Transform}
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
this.offsetScaleMatrix_ = goog.vec.Mat4.createNumberIdentity();
|
this.offsetScaleMatrix_ = ol.transform.create();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @type {number|undefined}
|
* @type {number|undefined}
|
||||||
@@ -140,10 +140,16 @@ ol.render.webgl.ImageReplay = function(tolerance, maxExtent) {
|
|||||||
this.originY_ = undefined;
|
this.originY_ = undefined;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @type {!goog.vec.Mat4.Number}
|
* @type {ol.Transform}
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
this.projectionMatrix_ = goog.vec.Mat4.createNumberIdentity();
|
this.projectionMatrix_ = ol.transform.create();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type {Array.<number>}
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
this.tmpMat4_ = ol.vec.Mat4.create();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
@@ -552,27 +558,25 @@ ol.render.webgl.ImageReplay.prototype.replay = function(context,
|
|||||||
false, 32, 28);
|
false, 32, 28);
|
||||||
|
|
||||||
// set the "uniform" values
|
// set the "uniform" values
|
||||||
var projectionMatrix = this.projectionMatrix_;
|
var projectionMatrix = ol.transform.reset(this.projectionMatrix_);
|
||||||
ol.vec.Mat4.makeTransform2D(projectionMatrix,
|
ol.transform.scale(projectionMatrix, 2 / (resolution * size[0]), 2 / (resolution * size[1]));
|
||||||
0.0, 0.0,
|
ol.transform.rotate(projectionMatrix, -rotation);
|
||||||
2 / (resolution * size[0]),
|
ol.transform.translate(projectionMatrix, -(center[0] - this.origin_[0]), -(center[1] - this.origin_[1]));
|
||||||
2 / (resolution * size[1]),
|
|
||||||
-rotation,
|
|
||||||
-(center[0] - this.origin_[0]), -(center[1] - this.origin_[1]));
|
|
||||||
|
|
||||||
var offsetScaleMatrix = this.offsetScaleMatrix_;
|
var offsetScaleMatrix = ol.transform.reset(this.offsetScaleMatrix_);
|
||||||
goog.vec.Mat4.makeScale(offsetScaleMatrix, 2 / size[0], 2 / size[1], 1);
|
ol.transform.scale(offsetScaleMatrix, 2 / size[0], 2 / size[1]);
|
||||||
|
|
||||||
var offsetRotateMatrix = this.offsetRotateMatrix_;
|
var offsetRotateMatrix = ol.transform.reset(this.offsetRotateMatrix_);
|
||||||
goog.vec.Mat4.makeIdentity(offsetRotateMatrix);
|
|
||||||
if (rotation !== 0) {
|
if (rotation !== 0) {
|
||||||
goog.vec.Mat4.rotateZ(offsetRotateMatrix, -rotation);
|
ol.transform.rotate(offsetRotateMatrix, -rotation);
|
||||||
}
|
}
|
||||||
|
|
||||||
gl.uniformMatrix4fv(locations.u_projectionMatrix, false, projectionMatrix);
|
gl.uniformMatrix4fv(locations.u_projectionMatrix, false,
|
||||||
gl.uniformMatrix4fv(locations.u_offsetScaleMatrix, false, offsetScaleMatrix);
|
ol.vec.Mat4.fromTransform(this.tmpMat4_, projectionMatrix));
|
||||||
|
gl.uniformMatrix4fv(locations.u_offsetScaleMatrix, false,
|
||||||
|
ol.vec.Mat4.fromTransform(this.tmpMat4_, offsetScaleMatrix));
|
||||||
gl.uniformMatrix4fv(locations.u_offsetRotateMatrix, false,
|
gl.uniformMatrix4fv(locations.u_offsetRotateMatrix, false,
|
||||||
offsetRotateMatrix);
|
ol.vec.Mat4.fromTransform(this.tmpMat4_, offsetRotateMatrix));
|
||||||
gl.uniform1f(locations.u_opacity, opacity);
|
gl.uniform1f(locations.u_opacity, opacity);
|
||||||
|
|
||||||
// draw!
|
// draw!
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
goog.provide('ol.renderer.canvas.ImageLayer');
|
goog.provide('ol.renderer.canvas.ImageLayer');
|
||||||
|
|
||||||
goog.require('goog.asserts');
|
goog.require('goog.asserts');
|
||||||
goog.require('goog.vec.Mat4');
|
goog.require('ol.transform');
|
||||||
goog.require('ol.functions');
|
goog.require('ol.functions');
|
||||||
goog.require('ol.ImageBase');
|
goog.require('ol.ImageBase');
|
||||||
goog.require('ol.ViewHint');
|
goog.require('ol.ViewHint');
|
||||||
@@ -11,7 +11,6 @@ goog.require('ol.layer.Image');
|
|||||||
goog.require('ol.proj');
|
goog.require('ol.proj');
|
||||||
goog.require('ol.renderer.canvas.Layer');
|
goog.require('ol.renderer.canvas.Layer');
|
||||||
goog.require('ol.source.ImageVector');
|
goog.require('ol.source.ImageVector');
|
||||||
goog.require('ol.vec.Mat4');
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -31,13 +30,13 @@ ol.renderer.canvas.ImageLayer = function(imageLayer) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {!goog.vec.Mat4.Number}
|
* @type {ol.Transform}
|
||||||
*/
|
*/
|
||||||
this.imageTransform_ = goog.vec.Mat4.createNumber();
|
this.imageTransform_ = ol.transform.create();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {?goog.vec.Mat4.Number}
|
* @type {?ol.Transform}
|
||||||
*/
|
*/
|
||||||
this.imageTransformInv_ = null;
|
this.imageTransformInv_ = null;
|
||||||
|
|
||||||
@@ -83,9 +82,8 @@ ol.renderer.canvas.ImageLayer.prototype.forEachLayerAtPixel = function(pixel, fr
|
|||||||
if (this.getLayer().getSource() instanceof ol.source.ImageVector) {
|
if (this.getLayer().getSource() instanceof ol.source.ImageVector) {
|
||||||
// for ImageVector sources use the original hit-detection logic,
|
// for ImageVector sources use the original hit-detection logic,
|
||||||
// so that for example also transparent polygons are detected
|
// so that for example also transparent polygons are detected
|
||||||
var coordinate = pixel.slice();
|
var coordinate = ol.transform.apply(
|
||||||
ol.vec.Mat4.multVec2(
|
frameState.pixelToCoordinateTransform, pixel.slice());
|
||||||
frameState.pixelToCoordinateMatrix, coordinate, coordinate);
|
|
||||||
var hasFeature = this.forEachFeatureAtCoordinate(
|
var hasFeature = this.forEachFeatureAtCoordinate(
|
||||||
coordinate, frameState, ol.functions.TRUE, this);
|
coordinate, frameState, ol.functions.TRUE, this);
|
||||||
|
|
||||||
@@ -97,8 +95,7 @@ ol.renderer.canvas.ImageLayer.prototype.forEachLayerAtPixel = function(pixel, fr
|
|||||||
} else {
|
} else {
|
||||||
// for all other image sources directly check the image
|
// for all other image sources directly check the image
|
||||||
if (!this.imageTransformInv_) {
|
if (!this.imageTransformInv_) {
|
||||||
this.imageTransformInv_ = goog.vec.Mat4.createNumber();
|
this.imageTransformInv_ = ol.transform.invert(this.imageTransform_.slice());
|
||||||
goog.vec.Mat4.invert(this.imageTransform_, this.imageTransformInv_);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var pixelOnCanvas =
|
var pixelOnCanvas =
|
||||||
@@ -190,11 +187,12 @@ ol.renderer.canvas.ImageLayer.prototype.prepareFrame = function(frameState, laye
|
|||||||
var imagePixelRatio = image.getPixelRatio();
|
var imagePixelRatio = image.getPixelRatio();
|
||||||
var scale = pixelRatio * imageResolution /
|
var scale = pixelRatio * imageResolution /
|
||||||
(viewResolution * imagePixelRatio);
|
(viewResolution * imagePixelRatio);
|
||||||
ol.vec.Mat4.makeTransform2D(this.imageTransform_,
|
var transform = ol.transform.reset(this.imageTransform_);
|
||||||
|
ol.transform.translate(transform,
|
||||||
pixelRatio * frameState.size[0] / 2,
|
pixelRatio * frameState.size[0] / 2,
|
||||||
pixelRatio * frameState.size[1] / 2,
|
pixelRatio * frameState.size[1] / 2);
|
||||||
scale, scale,
|
ol.transform.scale(transform, scale, scale);
|
||||||
0,
|
ol.transform.translate(transform,
|
||||||
imagePixelRatio * (imageExtent[0] - viewCenter[0]) / imageResolution,
|
imagePixelRatio * (imageExtent[0] - viewCenter[0]) / imageResolution,
|
||||||
imagePixelRatio * (viewCenter[1] - imageExtent[3]) / imageResolution);
|
imagePixelRatio * (viewCenter[1] - imageExtent[3]) / imageResolution);
|
||||||
this.imageTransformInv_ = null;
|
this.imageTransformInv_ = null;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
goog.provide('ol.renderer.canvas.Layer');
|
goog.provide('ol.renderer.canvas.Layer');
|
||||||
|
|
||||||
goog.require('goog.asserts');
|
goog.require('goog.asserts');
|
||||||
goog.require('goog.vec.Mat4');
|
goog.require('ol.transform');
|
||||||
goog.require('ol.extent');
|
goog.require('ol.extent');
|
||||||
goog.require('ol.layer.Layer');
|
goog.require('ol.layer.Layer');
|
||||||
goog.require('ol.render.Event');
|
goog.require('ol.render.Event');
|
||||||
@@ -9,7 +9,6 @@ goog.require('ol.render.EventType');
|
|||||||
goog.require('ol.render.canvas');
|
goog.require('ol.render.canvas');
|
||||||
goog.require('ol.render.canvas.Immediate');
|
goog.require('ol.render.canvas.Immediate');
|
||||||
goog.require('ol.renderer.Layer');
|
goog.require('ol.renderer.Layer');
|
||||||
goog.require('ol.vec.Mat4');
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -23,9 +22,9 @@ ol.renderer.canvas.Layer = function(layer) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {!goog.vec.Mat4.Number}
|
* @type {ol.Transform}
|
||||||
*/
|
*/
|
||||||
this.transform_ = goog.vec.Mat4.createNumber();
|
this.transform_ = ol.transform.create();
|
||||||
|
|
||||||
};
|
};
|
||||||
ol.inherits(ol.renderer.canvas.Layer, ol.renderer.Layer);
|
ol.inherits(ol.renderer.canvas.Layer, ol.renderer.Layer);
|
||||||
@@ -58,14 +57,10 @@ ol.renderer.canvas.Layer.prototype.composeFrame = function(frameState, layerStat
|
|||||||
var bottomRight = ol.extent.getBottomRight(extent);
|
var bottomRight = ol.extent.getBottomRight(extent);
|
||||||
var bottomLeft = ol.extent.getBottomLeft(extent);
|
var bottomLeft = ol.extent.getBottomLeft(extent);
|
||||||
|
|
||||||
ol.vec.Mat4.multVec2(frameState.coordinateToPixelMatrix,
|
ol.transform.apply(frameState.coordinateToPixelTransform, topLeft);
|
||||||
topLeft, topLeft);
|
ol.transform.apply(frameState.coordinateToPixelTransform, topRight);
|
||||||
ol.vec.Mat4.multVec2(frameState.coordinateToPixelMatrix,
|
ol.transform.apply(frameState.coordinateToPixelTransform, bottomRight);
|
||||||
topRight, topRight);
|
ol.transform.apply(frameState.coordinateToPixelTransform, bottomLeft);
|
||||||
ol.vec.Mat4.multVec2(frameState.coordinateToPixelMatrix,
|
|
||||||
bottomRight, bottomRight);
|
|
||||||
ol.vec.Mat4.multVec2(frameState.coordinateToPixelMatrix,
|
|
||||||
bottomLeft, bottomLeft);
|
|
||||||
|
|
||||||
context.save();
|
context.save();
|
||||||
ol.render.canvas.rotateAtOffset(context, -rotation, width / 2, height / 2);
|
ol.render.canvas.rotateAtOffset(context, -rotation, width / 2, height / 2);
|
||||||
@@ -87,10 +82,10 @@ ol.renderer.canvas.Layer.prototype.composeFrame = function(frameState, layerStat
|
|||||||
|
|
||||||
// for performance reasons, context.setTransform is only used
|
// for performance reasons, context.setTransform is only used
|
||||||
// when the view is rotated. see http://jsperf.com/canvas-transform
|
// when the view is rotated. see http://jsperf.com/canvas-transform
|
||||||
var dx = goog.vec.Mat4.getElement(imageTransform, 0, 3);
|
var dx = imageTransform[4];
|
||||||
var dy = goog.vec.Mat4.getElement(imageTransform, 1, 3);
|
var dy = imageTransform[5];
|
||||||
var dw = image.width * goog.vec.Mat4.getElement(imageTransform, 0, 0);
|
var dw = image.width * imageTransform[0];
|
||||||
var dh = image.height * goog.vec.Mat4.getElement(imageTransform, 1, 1);
|
var dh = image.height * imageTransform[3];
|
||||||
context.drawImage(image, 0, 0, +image.width, +image.height,
|
context.drawImage(image, 0, 0, +image.width, +image.height,
|
||||||
Math.round(dx), Math.round(dy), Math.round(dw), Math.round(dh));
|
Math.round(dx), Math.round(dy), Math.round(dw), Math.round(dh));
|
||||||
context.globalAlpha = alpha;
|
context.globalAlpha = alpha;
|
||||||
@@ -109,7 +104,7 @@ ol.renderer.canvas.Layer.prototype.composeFrame = function(frameState, layerStat
|
|||||||
* @param {ol.render.EventType} type Event type.
|
* @param {ol.render.EventType} type Event type.
|
||||||
* @param {CanvasRenderingContext2D} context Context.
|
* @param {CanvasRenderingContext2D} context Context.
|
||||||
* @param {olx.FrameState} frameState Frame state.
|
* @param {olx.FrameState} frameState Frame state.
|
||||||
* @param {goog.vec.Mat4.Number=} opt_transform Transform.
|
* @param {ol.Transform=} opt_transform Transform.
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
ol.renderer.canvas.Layer.prototype.dispatchComposeEvent_ = function(type, context, frameState, opt_transform) {
|
ol.renderer.canvas.Layer.prototype.dispatchComposeEvent_ = function(type, context, frameState, opt_transform) {
|
||||||
@@ -135,7 +130,7 @@ ol.renderer.canvas.Layer.prototype.dispatchComposeEvent_ = function(type, contex
|
|||||||
/**
|
/**
|
||||||
* @param {CanvasRenderingContext2D} context Context.
|
* @param {CanvasRenderingContext2D} context Context.
|
||||||
* @param {olx.FrameState} frameState Frame state.
|
* @param {olx.FrameState} frameState Frame state.
|
||||||
* @param {goog.vec.Mat4.Number=} opt_transform Transform.
|
* @param {ol.Transform=} opt_transform Transform.
|
||||||
* @protected
|
* @protected
|
||||||
*/
|
*/
|
||||||
ol.renderer.canvas.Layer.prototype.dispatchPostComposeEvent = function(context, frameState, opt_transform) {
|
ol.renderer.canvas.Layer.prototype.dispatchPostComposeEvent = function(context, frameState, opt_transform) {
|
||||||
@@ -147,7 +142,7 @@ ol.renderer.canvas.Layer.prototype.dispatchPostComposeEvent = function(context,
|
|||||||
/**
|
/**
|
||||||
* @param {CanvasRenderingContext2D} context Context.
|
* @param {CanvasRenderingContext2D} context Context.
|
||||||
* @param {olx.FrameState} frameState Frame state.
|
* @param {olx.FrameState} frameState Frame state.
|
||||||
* @param {goog.vec.Mat4.Number=} opt_transform Transform.
|
* @param {ol.Transform=} opt_transform Transform.
|
||||||
* @protected
|
* @protected
|
||||||
*/
|
*/
|
||||||
ol.renderer.canvas.Layer.prototype.dispatchPreComposeEvent = function(context, frameState, opt_transform) {
|
ol.renderer.canvas.Layer.prototype.dispatchPreComposeEvent = function(context, frameState, opt_transform) {
|
||||||
@@ -159,7 +154,7 @@ ol.renderer.canvas.Layer.prototype.dispatchPreComposeEvent = function(context, f
|
|||||||
/**
|
/**
|
||||||
* @param {CanvasRenderingContext2D} context Context.
|
* @param {CanvasRenderingContext2D} context Context.
|
||||||
* @param {olx.FrameState} frameState Frame state.
|
* @param {olx.FrameState} frameState Frame state.
|
||||||
* @param {goog.vec.Mat4.Number=} opt_transform Transform.
|
* @param {ol.Transform=} opt_transform Transform.
|
||||||
* @protected
|
* @protected
|
||||||
*/
|
*/
|
||||||
ol.renderer.canvas.Layer.prototype.dispatchRenderEvent = function(context, frameState, opt_transform) {
|
ol.renderer.canvas.Layer.prototype.dispatchRenderEvent = function(context, frameState, opt_transform) {
|
||||||
@@ -175,7 +170,7 @@ ol.renderer.canvas.Layer.prototype.getImage = goog.abstractMethod;
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return {!goog.vec.Mat4.Number} Image transform.
|
* @return {!ol.Transform} Image transform.
|
||||||
*/
|
*/
|
||||||
ol.renderer.canvas.Layer.prototype.getImageTransform = goog.abstractMethod;
|
ol.renderer.canvas.Layer.prototype.getImageTransform = goog.abstractMethod;
|
||||||
|
|
||||||
@@ -184,19 +179,19 @@ ol.renderer.canvas.Layer.prototype.getImageTransform = goog.abstractMethod;
|
|||||||
* @param {olx.FrameState} frameState Frame state.
|
* @param {olx.FrameState} frameState Frame state.
|
||||||
* @param {number} offsetX Offset on the x-axis in view coordinates.
|
* @param {number} offsetX Offset on the x-axis in view coordinates.
|
||||||
* @protected
|
* @protected
|
||||||
* @return {!goog.vec.Mat4.Number} Transform.
|
* @return {!ol.Transform} Transform.
|
||||||
*/
|
*/
|
||||||
ol.renderer.canvas.Layer.prototype.getTransform = function(frameState, offsetX) {
|
ol.renderer.canvas.Layer.prototype.getTransform = function(frameState, offsetX) {
|
||||||
var viewState = frameState.viewState;
|
var viewState = frameState.viewState;
|
||||||
var pixelRatio = frameState.pixelRatio;
|
var pixelRatio = frameState.pixelRatio;
|
||||||
return ol.vec.Mat4.makeTransform2D(this.transform_,
|
var dx1 = pixelRatio * frameState.size[0] / 2;
|
||||||
pixelRatio * frameState.size[0] / 2,
|
var dy1 = pixelRatio * frameState.size[1] / 2;
|
||||||
pixelRatio * frameState.size[1] / 2,
|
var sx = pixelRatio / viewState.resolution;
|
||||||
pixelRatio / viewState.resolution,
|
var sy = -sx;
|
||||||
-pixelRatio / viewState.resolution,
|
var angle = -viewState.rotation;
|
||||||
-viewState.rotation,
|
var dx2 = -viewState.center[0] + offsetX;
|
||||||
-viewState.center[0] + offsetX,
|
var dy2 = -viewState.center[1];
|
||||||
-viewState.center[1]);
|
return ol.transform.compose(this.transform_, dx1, dy1, sx, sy, angle, dx2, dy2);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -210,13 +205,11 @@ ol.renderer.canvas.Layer.prototype.prepareFrame = goog.abstractMethod;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {ol.Pixel} pixelOnMap Pixel.
|
* @param {ol.Pixel} pixelOnMap Pixel.
|
||||||
* @param {goog.vec.Mat4.Number} imageTransformInv The transformation matrix
|
* @param {ol.Transform} imageTransformInv The transformation matrix
|
||||||
* to convert from a map pixel to a canvas pixel.
|
* to convert from a map pixel to a canvas pixel.
|
||||||
* @return {ol.Pixel} The pixel.
|
* @return {ol.Pixel} The pixel.
|
||||||
* @protected
|
* @protected
|
||||||
*/
|
*/
|
||||||
ol.renderer.canvas.Layer.prototype.getPixelOnCanvas = function(pixelOnMap, imageTransformInv) {
|
ol.renderer.canvas.Layer.prototype.getPixelOnCanvas = function(pixelOnMap, imageTransformInv) {
|
||||||
var pixelOnCanvas = [0, 0];
|
return ol.transform.apply(imageTransformInv, pixelOnMap.slice());
|
||||||
ol.vec.Mat4.multVec2(imageTransformInv, pixelOnMap, pixelOnCanvas);
|
|
||||||
return pixelOnCanvas;
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
goog.provide('ol.renderer.canvas.Map');
|
goog.provide('ol.renderer.canvas.Map');
|
||||||
|
|
||||||
goog.require('goog.asserts');
|
goog.require('goog.asserts');
|
||||||
goog.require('goog.vec.Mat4');
|
goog.require('ol.transform');
|
||||||
goog.require('ol');
|
goog.require('ol');
|
||||||
goog.require('ol.RendererType');
|
goog.require('ol.RendererType');
|
||||||
goog.require('ol.array');
|
goog.require('ol.array');
|
||||||
@@ -25,7 +25,6 @@ goog.require('ol.renderer.canvas.TileLayer');
|
|||||||
goog.require('ol.renderer.canvas.VectorLayer');
|
goog.require('ol.renderer.canvas.VectorLayer');
|
||||||
goog.require('ol.renderer.canvas.VectorTileLayer');
|
goog.require('ol.renderer.canvas.VectorTileLayer');
|
||||||
goog.require('ol.source.State');
|
goog.require('ol.source.State');
|
||||||
goog.require('ol.vec.Mat4');
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -63,9 +62,9 @@ ol.renderer.canvas.Map = function(container, map) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {!goog.vec.Mat4.Number}
|
* @type {ol.Transform}
|
||||||
*/
|
*/
|
||||||
this.transform_ = goog.vec.Mat4.createNumber();
|
this.transform_ = ol.transform.create();
|
||||||
|
|
||||||
};
|
};
|
||||||
ol.inherits(ol.renderer.canvas.Map, ol.renderer.Map);
|
ol.inherits(ol.renderer.canvas.Map, ol.renderer.Map);
|
||||||
@@ -118,17 +117,18 @@ ol.renderer.canvas.Map.prototype.dispatchComposeEvent_ = function(type, frameSta
|
|||||||
/**
|
/**
|
||||||
* @param {olx.FrameState} frameState Frame state.
|
* @param {olx.FrameState} frameState Frame state.
|
||||||
* @protected
|
* @protected
|
||||||
* @return {!goog.vec.Mat4.Number} Transform.
|
* @return {!ol.Transform} Transform.
|
||||||
*/
|
*/
|
||||||
ol.renderer.canvas.Map.prototype.getTransform = function(frameState) {
|
ol.renderer.canvas.Map.prototype.getTransform = function(frameState) {
|
||||||
var pixelRatio = frameState.pixelRatio;
|
|
||||||
var viewState = frameState.viewState;
|
var viewState = frameState.viewState;
|
||||||
var resolution = viewState.resolution;
|
var dx1 = this.canvas_.width / 2;
|
||||||
return ol.vec.Mat4.makeTransform2D(this.transform_,
|
var dy1 = this.canvas_.height / 2;
|
||||||
this.canvas_.width / 2, this.canvas_.height / 2,
|
var sx = frameState.pixelRatio / viewState.resolution;
|
||||||
pixelRatio / resolution, -pixelRatio / resolution,
|
var sy = -sx;
|
||||||
-viewState.rotation,
|
var angle = -viewState.rotation;
|
||||||
-viewState.center[0], -viewState.center[1]);
|
var dx2 = -viewState.center[0];
|
||||||
|
var dy2 = -viewState.center[1];
|
||||||
|
return ol.transform.compose(this.transform_, dx1, dy1, sx, sy, angle, dx2, dy2);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
goog.provide('ol.renderer.canvas.TileLayer');
|
goog.provide('ol.renderer.canvas.TileLayer');
|
||||||
|
|
||||||
goog.require('goog.asserts');
|
goog.require('goog.asserts');
|
||||||
goog.require('goog.vec.Mat4');
|
goog.require('ol.transform');
|
||||||
goog.require('ol.TileRange');
|
goog.require('ol.TileRange');
|
||||||
goog.require('ol.TileState');
|
goog.require('ol.TileState');
|
||||||
goog.require('ol.array');
|
goog.require('ol.array');
|
||||||
@@ -13,7 +13,6 @@ goog.require('ol.render.EventType');
|
|||||||
goog.require('ol.renderer.canvas.Layer');
|
goog.require('ol.renderer.canvas.Layer');
|
||||||
goog.require('ol.size');
|
goog.require('ol.size');
|
||||||
goog.require('ol.source.Tile');
|
goog.require('ol.source.Tile');
|
||||||
goog.require('ol.vec.Mat4');
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -51,9 +50,9 @@ ol.renderer.canvas.TileLayer = function(tileLayer) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {!goog.vec.Mat4.Number}
|
* @type {ol.Transform}
|
||||||
*/
|
*/
|
||||||
this.imageTransform_ = goog.vec.Mat4.createNumber();
|
this.imageTransform_ = ol.transform.create();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @protected
|
* @protected
|
||||||
@@ -366,9 +365,11 @@ ol.renderer.canvas.TileLayer.prototype.renderTileImages = function(context, fram
|
|||||||
if (hasRenderListeners) {
|
if (hasRenderListeners) {
|
||||||
var dX = drawOffsetX - offsetX / drawScale + offsetX;
|
var dX = drawOffsetX - offsetX / drawScale + offsetX;
|
||||||
var dY = drawOffsetY - offsetY / drawScale + offsetY;
|
var dY = drawOffsetY - offsetY / drawScale + offsetY;
|
||||||
var imageTransform = ol.vec.Mat4.makeTransform2D(this.imageTransform_,
|
var imageTransform = ol.transform.compose(this.imageTransform_,
|
||||||
drawSize / 2 - dX, drawSize / 2 - dY, pixelScale, -pixelScale,
|
drawSize / 2 - dX, drawSize / 2 - dY,
|
||||||
-rotation, -center[0] + dX / pixelScale, -center[1] - dY / pixelScale);
|
pixelScale, -pixelScale,
|
||||||
|
-rotation,
|
||||||
|
-center[0] + dX / pixelScale, -center[1] - dY / pixelScale);
|
||||||
this.dispatchRenderEvent(renderContext, frameState, imageTransform);
|
this.dispatchRenderEvent(renderContext, frameState, imageTransform);
|
||||||
}
|
}
|
||||||
if (rotation || hasRenderListeners) {
|
if (rotation || hasRenderListeners) {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ goog.provide('ol.renderer.canvas.VectorTileLayer');
|
|||||||
|
|
||||||
goog.require('goog.asserts');
|
goog.require('goog.asserts');
|
||||||
goog.require('ol.events');
|
goog.require('ol.events');
|
||||||
goog.require('goog.vec.Mat4');
|
goog.require('ol.transform');
|
||||||
goog.require('ol.Feature');
|
goog.require('ol.Feature');
|
||||||
goog.require('ol.VectorTile');
|
goog.require('ol.VectorTile');
|
||||||
goog.require('ol.array');
|
goog.require('ol.array');
|
||||||
@@ -17,7 +17,6 @@ goog.require('ol.renderer.canvas.TileLayer');
|
|||||||
goog.require('ol.renderer.vector');
|
goog.require('ol.renderer.vector');
|
||||||
goog.require('ol.size');
|
goog.require('ol.size');
|
||||||
goog.require('ol.source.VectorTile');
|
goog.require('ol.source.VectorTile');
|
||||||
goog.require('ol.vec.Mat4');
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -57,9 +56,9 @@ ol.renderer.canvas.VectorTileLayer = function(layer) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {!goog.vec.Mat4.Number}
|
* @type {ol.Transform}
|
||||||
*/
|
*/
|
||||||
this.tmpTransform_ = goog.vec.Mat4.createNumber();
|
this.tmpTransform_ = ol.transform.create();
|
||||||
|
|
||||||
// Use lower resolution for pure vector rendering. Closest resolution otherwise.
|
// Use lower resolution for pure vector rendering. Closest resolution otherwise.
|
||||||
this.zDirection =
|
this.zDirection =
|
||||||
@@ -148,13 +147,12 @@ ol.renderer.canvas.VectorTileLayer.prototype.renderTileReplays_ = function(
|
|||||||
|
|
||||||
if (pixelSpace) {
|
if (pixelSpace) {
|
||||||
origin = ol.extent.getTopLeft(tileExtent);
|
origin = ol.extent.getTopLeft(tileExtent);
|
||||||
tileTransform = ol.vec.Mat4.makeTransform2D(this.tmpTransform_,
|
tileTransform = ol.transform.reset(this.tmpTransform_);
|
||||||
|
tileTransform = ol.transform.compose(this.tmpTransform_,
|
||||||
offsetX, offsetY,
|
offsetX, offsetY,
|
||||||
pixelScale * tilePixelResolution,
|
pixelScale * tilePixelResolution, pixelScale * tilePixelResolution,
|
||||||
pixelScale * tilePixelResolution,
|
|
||||||
rotation,
|
rotation,
|
||||||
(origin[0] - center[0]) / tilePixelResolution,
|
(origin[0] - center[0]) / tilePixelResolution, (center[1] - origin[1]) / tilePixelResolution);
|
||||||
(center[1] - origin[1]) / tilePixelResolution);
|
|
||||||
} else {
|
} else {
|
||||||
tileTransform = transform;
|
tileTransform = transform;
|
||||||
}
|
}
|
||||||
@@ -426,20 +424,16 @@ ol.renderer.canvas.VectorTileLayer.prototype.renderTileImage_ = function(
|
|||||||
var tilePixelResolution = tileResolution / tilePixelRatio;
|
var tilePixelResolution = tileResolution / tilePixelRatio;
|
||||||
var tileExtent = tileGrid.getTileCoordExtent(
|
var tileExtent = tileGrid.getTileCoordExtent(
|
||||||
tile.getTileCoord(), this.tmpExtent);
|
tile.getTileCoord(), this.tmpExtent);
|
||||||
var tileTransform;
|
var tileTransform = ol.transform.reset(this.tmpTransform_);
|
||||||
if (pixelSpace) {
|
if (pixelSpace) {
|
||||||
tileTransform = ol.vec.Mat4.makeTransform2D(this.tmpTransform_,
|
ol.transform.scale(tileTransform,
|
||||||
0, 0,
|
pixelScale * tilePixelResolution, pixelScale * tilePixelResolution);
|
||||||
pixelScale * tilePixelResolution, pixelScale * tilePixelResolution,
|
ol.transform.translate(tileTransform,
|
||||||
0,
|
|
||||||
-tileSize[0] * tilePixelRatio / 2, -tileSize[1] * tilePixelRatio / 2);
|
-tileSize[0] * tilePixelRatio / 2, -tileSize[1] * tilePixelRatio / 2);
|
||||||
} else {
|
} else {
|
||||||
var tileCenter = ol.extent.getCenter(tileExtent);
|
var tileCenter = ol.extent.getCenter(tileExtent);
|
||||||
tileTransform = ol.vec.Mat4.makeTransform2D(this.tmpTransform_,
|
ol.transform.scale(tileTransform, pixelScale, -pixelScale);
|
||||||
0, 0,
|
ol.transform.translate(tileTransform, -tileCenter[0], -tileCenter[1]);
|
||||||
pixelScale, -pixelScale,
|
|
||||||
0,
|
|
||||||
-tileCenter[0], -tileCenter[1]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
replayState.replayGroup.replay(tileContext, pixelRatio,
|
replayState.replayGroup.replay(tileContext, pixelRatio,
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
goog.provide('ol.renderer.dom.ImageLayer');
|
goog.provide('ol.renderer.dom.ImageLayer');
|
||||||
|
|
||||||
goog.require('goog.asserts');
|
goog.require('goog.asserts');
|
||||||
goog.require('goog.vec.Mat4');
|
goog.require('ol.transform');
|
||||||
goog.require('ol.ImageBase');
|
goog.require('ol.ImageBase');
|
||||||
goog.require('ol.ViewHint');
|
goog.require('ol.ViewHint');
|
||||||
goog.require('ol.dom');
|
goog.require('ol.dom');
|
||||||
@@ -9,7 +9,6 @@ goog.require('ol.extent');
|
|||||||
goog.require('ol.layer.Image');
|
goog.require('ol.layer.Image');
|
||||||
goog.require('ol.proj');
|
goog.require('ol.proj');
|
||||||
goog.require('ol.renderer.dom.Layer');
|
goog.require('ol.renderer.dom.Layer');
|
||||||
goog.require('ol.vec.Mat4');
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -32,9 +31,9 @@ ol.renderer.dom.ImageLayer = function(imageLayer) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {goog.vec.Mat4.Number}
|
* @type {ol.Transform}
|
||||||
*/
|
*/
|
||||||
this.transform_ = goog.vec.Mat4.createNumberIdentity();
|
this.transform_ = ol.transform.create();
|
||||||
|
|
||||||
};
|
};
|
||||||
ol.inherits(ol.renderer.dom.ImageLayer, ol.renderer.dom.Layer);
|
ol.inherits(ol.renderer.dom.ImageLayer, ol.renderer.dom.Layer);
|
||||||
@@ -118,13 +117,14 @@ ol.renderer.dom.ImageLayer.prototype.prepareFrame = function(frameState, layerSt
|
|||||||
if (image) {
|
if (image) {
|
||||||
var imageExtent = image.getExtent();
|
var imageExtent = image.getExtent();
|
||||||
var imageResolution = image.getResolution();
|
var imageResolution = image.getResolution();
|
||||||
var transform = goog.vec.Mat4.createNumber();
|
var transform = ol.transform.create();
|
||||||
ol.vec.Mat4.makeTransform2D(transform,
|
ol.transform.compose(transform,
|
||||||
frameState.size[0] / 2, frameState.size[1] / 2,
|
frameState.size[0] / 2, frameState.size[1] / 2,
|
||||||
imageResolution / viewResolution, imageResolution / viewResolution,
|
imageResolution / viewResolution, imageResolution / viewResolution,
|
||||||
viewRotation,
|
viewRotation,
|
||||||
(imageExtent[0] - viewCenter[0]) / imageResolution,
|
(imageExtent[0] - viewCenter[0]) / imageResolution,
|
||||||
(viewCenter[1] - imageExtent[3]) / imageResolution);
|
(viewCenter[1] - imageExtent[3]) / imageResolution);
|
||||||
|
|
||||||
if (image != this.image_) {
|
if (image != this.image_) {
|
||||||
var imageElement = image.getImage(this);
|
var imageElement = image.getImage(this);
|
||||||
// Bootstrap sets the style max-width: 100% for all images, which breaks
|
// Bootstrap sets the style max-width: 100% for all images, which breaks
|
||||||
@@ -146,12 +146,12 @@ ol.renderer.dom.ImageLayer.prototype.prepareFrame = function(frameState, layerSt
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {goog.vec.Mat4.Number} transform Transform.
|
* @param {ol.Transform} transform Transform.
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
ol.renderer.dom.ImageLayer.prototype.setTransform_ = function(transform) {
|
ol.renderer.dom.ImageLayer.prototype.setTransform_ = function(transform) {
|
||||||
if (!ol.vec.Mat4.equals2D(transform, this.transform_)) {
|
if (!ol.array.equals(transform, this.transform_)) {
|
||||||
ol.dom.transformElement2D(this.target, transform, 6);
|
ol.dom.transformElement2D(this.target, transform, 6);
|
||||||
goog.vec.Mat4.setFromArray(this.transform_, transform);
|
ol.transform.setFromArray(this.transform_, transform);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ goog.require('goog.asserts');
|
|||||||
goog.require('ol.events');
|
goog.require('ol.events');
|
||||||
goog.require('ol.events.Event');
|
goog.require('ol.events.Event');
|
||||||
goog.require('ol.events.EventType');
|
goog.require('ol.events.EventType');
|
||||||
goog.require('goog.vec.Mat4');
|
goog.require('ol.transform');
|
||||||
goog.require('ol');
|
goog.require('ol');
|
||||||
goog.require('ol.RendererType');
|
goog.require('ol.RendererType');
|
||||||
goog.require('ol.array');
|
goog.require('ol.array');
|
||||||
@@ -23,7 +23,6 @@ goog.require('ol.renderer.dom.Layer');
|
|||||||
goog.require('ol.renderer.dom.TileLayer');
|
goog.require('ol.renderer.dom.TileLayer');
|
||||||
goog.require('ol.renderer.dom.VectorLayer');
|
goog.require('ol.renderer.dom.VectorLayer');
|
||||||
goog.require('ol.source.State');
|
goog.require('ol.source.State');
|
||||||
goog.require('ol.vec.Mat4');
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -50,9 +49,9 @@ ol.renderer.dom.Map = function(container, map) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {!goog.vec.Mat4.Number}
|
* @type {ol.Transform}
|
||||||
*/
|
*/
|
||||||
this.transform_ = goog.vec.Mat4.createNumber();
|
this.transform_ = ol.transform.create();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @type {!Element}
|
* @type {!Element}
|
||||||
@@ -124,15 +123,14 @@ ol.renderer.dom.Map.prototype.dispatchComposeEvent_ = function(type, frameState)
|
|||||||
var context = this.context_;
|
var context = this.context_;
|
||||||
var canvas = context.canvas;
|
var canvas = context.canvas;
|
||||||
|
|
||||||
ol.vec.Mat4.makeTransform2D(this.transform_,
|
var transform = ol.transform.compose(this.transform_,
|
||||||
canvas.width / 2,
|
canvas.width / 2, canvas.height / 2,
|
||||||
canvas.height / 2,
|
pixelRatio / viewState.resolution, -pixelRatio / viewState.resolution,
|
||||||
pixelRatio / viewState.resolution,
|
-rotation,
|
||||||
-pixelRatio / viewState.resolution,
|
|
||||||
-viewState.rotation,
|
|
||||||
-viewState.center[0], -viewState.center[1]);
|
-viewState.center[0], -viewState.center[1]);
|
||||||
|
|
||||||
var vectorContext = new ol.render.canvas.Immediate(context, pixelRatio,
|
var vectorContext = new ol.render.canvas.Immediate(context, pixelRatio,
|
||||||
extent, this.transform_, rotation);
|
extent, transform, rotation);
|
||||||
var composeEvent = new ol.render.Event(type, map, vectorContext,
|
var composeEvent = new ol.render.Event(type, map, vectorContext,
|
||||||
frameState, context, null);
|
frameState, context, null);
|
||||||
map.dispatchEvent(composeEvent);
|
map.dispatchEvent(composeEvent);
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
goog.provide('ol.renderer.dom.TileLayer');
|
goog.provide('ol.renderer.dom.TileLayer');
|
||||||
|
|
||||||
goog.require('goog.asserts');
|
goog.require('goog.asserts');
|
||||||
goog.require('goog.vec.Mat4');
|
goog.require('ol.transform');
|
||||||
goog.require('ol');
|
goog.require('ol');
|
||||||
goog.require('ol.TileRange');
|
goog.require('ol.TileRange');
|
||||||
goog.require('ol.TileState');
|
goog.require('ol.TileState');
|
||||||
@@ -16,7 +16,6 @@ goog.require('ol.layer.Tile');
|
|||||||
goog.require('ol.renderer.dom.Layer');
|
goog.require('ol.renderer.dom.Layer');
|
||||||
goog.require('ol.size');
|
goog.require('ol.size');
|
||||||
goog.require('ol.tilegrid.TileGrid');
|
goog.require('ol.tilegrid.TileGrid');
|
||||||
goog.require('ol.vec.Mat4');
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -200,7 +199,7 @@ ol.renderer.dom.TileLayer.prototype.prepareFrame = function(frameState, layerSta
|
|||||||
tileLayerZKeys.sort(ol.array.numberSafeCompareFunction);
|
tileLayerZKeys.sort(ol.array.numberSafeCompareFunction);
|
||||||
|
|
||||||
var i, ii, j, origin, resolution;
|
var i, ii, j, origin, resolution;
|
||||||
var transform = goog.vec.Mat4.createNumber();
|
var transform = ol.transform.create();
|
||||||
for (i = 0, ii = tileLayerZKeys.length; i < ii; ++i) {
|
for (i = 0, ii = tileLayerZKeys.length; i < ii; ++i) {
|
||||||
tileLayerZKey = tileLayerZKeys[i];
|
tileLayerZKey = tileLayerZKeys[i];
|
||||||
tileLayerZ = this.tileLayerZs_[tileLayerZKey];
|
tileLayerZ = this.tileLayerZs_[tileLayerZKey];
|
||||||
@@ -211,13 +210,13 @@ ol.renderer.dom.TileLayer.prototype.prepareFrame = function(frameState, layerSta
|
|||||||
}
|
}
|
||||||
resolution = tileLayerZ.getResolution();
|
resolution = tileLayerZ.getResolution();
|
||||||
origin = tileLayerZ.getOrigin();
|
origin = tileLayerZ.getOrigin();
|
||||||
ol.vec.Mat4.makeTransform2D(transform,
|
|
||||||
|
ol.transform.compose(transform,
|
||||||
frameState.size[0] / 2, frameState.size[1] / 2,
|
frameState.size[0] / 2, frameState.size[1] / 2,
|
||||||
resolution / viewState.resolution,
|
resolution / viewState.resolution, resolution / viewState.resolution,
|
||||||
resolution / viewState.resolution,
|
|
||||||
viewState.rotation,
|
viewState.rotation,
|
||||||
(origin[0] - center[0]) / resolution,
|
(origin[0] - center[0]) / resolution, (center[1] - origin[1]) / resolution);
|
||||||
(center[1] - origin[1]) / resolution);
|
|
||||||
tileLayerZ.setTransform(transform);
|
tileLayerZ.setTransform(transform);
|
||||||
if (tileLayerZKey in newTileLayerZKeys) {
|
if (tileLayerZKey in newTileLayerZKeys) {
|
||||||
for (j = tileLayerZKey - 1; j >= 0; --j) {
|
for (j = tileLayerZKey - 1; j >= 0; --j) {
|
||||||
@@ -314,9 +313,9 @@ ol.renderer.dom.TileLayerZ_ = function(tileGrid, tileCoordOrigin) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {goog.vec.Mat4.Number}
|
* @type {ol.Transform}
|
||||||
*/
|
*/
|
||||||
this.transform_ = goog.vec.Mat4.createNumberIdentity();
|
this.transform_ = ol.transform.create();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
@@ -437,11 +436,11 @@ ol.renderer.dom.TileLayerZ_.prototype.removeTilesOutsideExtent = function(extent
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {goog.vec.Mat4.Number} transform Transform.
|
* @param {ol.Transform} transform Transform.
|
||||||
*/
|
*/
|
||||||
ol.renderer.dom.TileLayerZ_.prototype.setTransform = function(transform) {
|
ol.renderer.dom.TileLayerZ_.prototype.setTransform = function(transform) {
|
||||||
if (!ol.vec.Mat4.equals2D(transform, this.transform_)) {
|
if (!ol.array.equals(transform, this.transform_)) {
|
||||||
ol.dom.transformElement2D(this.target, transform, 6);
|
ol.dom.transformElement2D(this.target, transform, 6);
|
||||||
goog.vec.Mat4.setFromArray(this.transform_, transform);
|
ol.transform.setFromArray(this.transform_, transform);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ goog.provide('ol.renderer.dom.VectorLayer');
|
|||||||
|
|
||||||
goog.require('goog.asserts');
|
goog.require('goog.asserts');
|
||||||
goog.require('ol.events');
|
goog.require('ol.events');
|
||||||
goog.require('goog.vec.Mat4');
|
goog.require('ol.transform');
|
||||||
goog.require('ol.ViewHint');
|
goog.require('ol.ViewHint');
|
||||||
goog.require('ol.dom');
|
goog.require('ol.dom');
|
||||||
goog.require('ol.extent');
|
goog.require('ol.extent');
|
||||||
@@ -13,7 +13,6 @@ goog.require('ol.render.canvas.Immediate');
|
|||||||
goog.require('ol.render.canvas.ReplayGroup');
|
goog.require('ol.render.canvas.ReplayGroup');
|
||||||
goog.require('ol.renderer.dom.Layer');
|
goog.require('ol.renderer.dom.Layer');
|
||||||
goog.require('ol.renderer.vector');
|
goog.require('ol.renderer.vector');
|
||||||
goog.require('ol.vec.Mat4');
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -76,15 +75,15 @@ ol.renderer.dom.VectorLayer = function(vectorLayer) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {goog.vec.Mat4.Number}
|
* @type {ol.Transform}
|
||||||
*/
|
*/
|
||||||
this.transform_ = goog.vec.Mat4.createNumber();
|
this.transform_ = ol.transform.create();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {goog.vec.Mat4.Number}
|
* @type {ol.Transform}
|
||||||
*/
|
*/
|
||||||
this.elementTransform_ = goog.vec.Mat4.createNumber();
|
this.elementTransform_ = ol.transform.create();
|
||||||
|
|
||||||
};
|
};
|
||||||
ol.inherits(ol.renderer.dom.VectorLayer, ol.renderer.dom.Layer);
|
ol.inherits(ol.renderer.dom.VectorLayer, ol.renderer.dom.Layer);
|
||||||
@@ -120,11 +119,9 @@ ol.renderer.dom.VectorLayer.prototype.composeFrame = function(frameState, layerS
|
|||||||
var imageWidth = viewWidth * pixelRatio;
|
var imageWidth = viewWidth * pixelRatio;
|
||||||
var imageHeight = viewHeight * pixelRatio;
|
var imageHeight = viewHeight * pixelRatio;
|
||||||
|
|
||||||
var transform = ol.vec.Mat4.makeTransform2D(this.transform_,
|
var transform = ol.transform.compose(this.transform_,
|
||||||
pixelRatio * viewWidth / 2,
|
pixelRatio * viewWidth / 2, pixelRatio * viewHeight / 2,
|
||||||
pixelRatio * viewHeight / 2,
|
pixelRatio / viewResolution, -pixelRatio / viewResolution,
|
||||||
pixelRatio / viewResolution,
|
|
||||||
-pixelRatio / viewResolution,
|
|
||||||
-viewRotation,
|
-viewRotation,
|
||||||
-viewCenter[0], -viewCenter[1]);
|
-viewCenter[0], -viewCenter[1]);
|
||||||
|
|
||||||
@@ -134,10 +131,9 @@ ol.renderer.dom.VectorLayer.prototype.composeFrame = function(frameState, layerS
|
|||||||
context.canvas.width = imageWidth;
|
context.canvas.width = imageWidth;
|
||||||
context.canvas.height = imageHeight;
|
context.canvas.height = imageHeight;
|
||||||
|
|
||||||
var elementTransform = ol.vec.Mat4.makeTransform2D(this.elementTransform_,
|
var elementTransform = ol.transform.reset(this.elementTransform_);
|
||||||
0, 0,
|
ol.transform.scale(elementTransform, 1 / pixelRatio, 1 / pixelRatio);
|
||||||
1 / pixelRatio, 1 / pixelRatio,
|
ol.transform.translate(elementTransform,
|
||||||
0,
|
|
||||||
-(imageWidth - viewWidth) / 2 * pixelRatio,
|
-(imageWidth - viewWidth) / 2 * pixelRatio,
|
||||||
-(imageHeight - viewHeight) / 2 * pixelRatio);
|
-(imageHeight - viewHeight) / 2 * pixelRatio);
|
||||||
ol.dom.transformElement2D(context.canvas, elementTransform, 6);
|
ol.dom.transformElement2D(context.canvas, elementTransform, 6);
|
||||||
@@ -162,7 +158,7 @@ ol.renderer.dom.VectorLayer.prototype.composeFrame = function(frameState, layerS
|
|||||||
/**
|
/**
|
||||||
* @param {ol.render.EventType} type Event type.
|
* @param {ol.render.EventType} type Event type.
|
||||||
* @param {olx.FrameState} frameState Frame state.
|
* @param {olx.FrameState} frameState Frame state.
|
||||||
* @param {goog.vec.Mat4.Number} transform Transform.
|
* @param {ol.Transform} transform Transform.
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
ol.renderer.dom.VectorLayer.prototype.dispatchEvent_ = function(type, frameState, transform) {
|
ol.renderer.dom.VectorLayer.prototype.dispatchEvent_ = function(type, frameState, transform) {
|
||||||
|
|||||||
@@ -10,10 +10,9 @@ goog.require('ol.Observable');
|
|||||||
goog.require('ol.TileRange');
|
goog.require('ol.TileRange');
|
||||||
goog.require('ol.TileState');
|
goog.require('ol.TileState');
|
||||||
goog.require('ol.layer.Layer');
|
goog.require('ol.layer.Layer');
|
||||||
goog.require('ol.source.Source');
|
goog.require('ol.transform');
|
||||||
goog.require('ol.source.State');
|
goog.require('ol.source.State');
|
||||||
goog.require('ol.source.Tile');
|
goog.require('ol.source.Tile');
|
||||||
goog.require('ol.vec.Mat4');
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -58,9 +57,8 @@ ol.renderer.Layer.prototype.forEachFeatureAtCoordinate = ol.nullFunction;
|
|||||||
* @template S,T
|
* @template S,T
|
||||||
*/
|
*/
|
||||||
ol.renderer.Layer.prototype.forEachLayerAtPixel = function(pixel, frameState, callback, thisArg) {
|
ol.renderer.Layer.prototype.forEachLayerAtPixel = function(pixel, frameState, callback, thisArg) {
|
||||||
var coordinate = pixel.slice();
|
var coordinate = ol.transform.apply(
|
||||||
ol.vec.Mat4.multVec2(
|
frameState.pixelToCoordinateTransform, pixel.slice());
|
||||||
frameState.pixelToCoordinateMatrix, coordinate, coordinate);
|
|
||||||
|
|
||||||
var hasFeature = this.forEachFeatureAtCoordinate(
|
var hasFeature = this.forEachFeatureAtCoordinate(
|
||||||
coordinate, frameState, ol.functions.TRUE, this);
|
coordinate, frameState, ol.functions.TRUE, this);
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ goog.provide('ol.RendererType');
|
|||||||
goog.provide('ol.renderer.Map');
|
goog.provide('ol.renderer.Map');
|
||||||
|
|
||||||
goog.require('goog.asserts');
|
goog.require('goog.asserts');
|
||||||
goog.require('goog.vec.Mat4');
|
goog.require('ol.transform');
|
||||||
goog.require('ol');
|
goog.require('ol');
|
||||||
goog.require('ol.Disposable');
|
goog.require('ol.Disposable');
|
||||||
goog.require('ol.events');
|
goog.require('ol.events');
|
||||||
@@ -12,7 +12,6 @@ goog.require('ol.functions');
|
|||||||
goog.require('ol.layer.Layer');
|
goog.require('ol.layer.Layer');
|
||||||
goog.require('ol.renderer.Layer');
|
goog.require('ol.renderer.Layer');
|
||||||
goog.require('ol.style.IconImageCache');
|
goog.require('ol.style.IconImageCache');
|
||||||
goog.require('ol.vec.Mat4');
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -66,17 +65,19 @@ ol.inherits(ol.renderer.Map, ol.Disposable);
|
|||||||
*/
|
*/
|
||||||
ol.renderer.Map.prototype.calculateMatrices2D = function(frameState) {
|
ol.renderer.Map.prototype.calculateMatrices2D = function(frameState) {
|
||||||
var viewState = frameState.viewState;
|
var viewState = frameState.viewState;
|
||||||
var coordinateToPixelMatrix = frameState.coordinateToPixelMatrix;
|
var coordinateToPixelTransform = frameState.coordinateToPixelTransform;
|
||||||
goog.asserts.assert(coordinateToPixelMatrix,
|
var pixelToCoordinateTransform = frameState.pixelToCoordinateTransform;
|
||||||
'frameState has a coordinateToPixelMatrix');
|
goog.asserts.assert(coordinateToPixelTransform,
|
||||||
ol.vec.Mat4.makeTransform2D(coordinateToPixelMatrix,
|
'frameState has a coordinateToPixelTransform');
|
||||||
|
|
||||||
|
ol.transform.compose(coordinateToPixelTransform,
|
||||||
frameState.size[0] / 2, frameState.size[1] / 2,
|
frameState.size[0] / 2, frameState.size[1] / 2,
|
||||||
1 / viewState.resolution, -1 / viewState.resolution,
|
1 / viewState.resolution, -1 / viewState.resolution,
|
||||||
-viewState.rotation,
|
-viewState.rotation,
|
||||||
-viewState.center[0], -viewState.center[1]);
|
-viewState.center[0], -viewState.center[1]);
|
||||||
var inverted = goog.vec.Mat4.invert(
|
|
||||||
coordinateToPixelMatrix, frameState.pixelToCoordinateMatrix);
|
ol.transform.invert(
|
||||||
goog.asserts.assert(inverted, 'matrix could be inverted');
|
ol.transform.setFromArray(pixelToCoordinateTransform, coordinateToPixelTransform));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
goog.provide('ol.renderer.webgl.ImageLayer');
|
goog.provide('ol.renderer.webgl.ImageLayer');
|
||||||
|
|
||||||
goog.require('goog.asserts');
|
goog.require('goog.asserts');
|
||||||
goog.require('goog.vec.Mat4');
|
goog.require('ol.transform');
|
||||||
goog.require('goog.webgl');
|
goog.require('goog.webgl');
|
||||||
goog.require('ol.ImageBase');
|
goog.require('ol.ImageBase');
|
||||||
goog.require('ol.ViewHint');
|
goog.require('ol.ViewHint');
|
||||||
@@ -12,7 +12,6 @@ goog.require('ol.layer.Image');
|
|||||||
goog.require('ol.proj');
|
goog.require('ol.proj');
|
||||||
goog.require('ol.renderer.webgl.Layer');
|
goog.require('ol.renderer.webgl.Layer');
|
||||||
goog.require('ol.source.ImageVector');
|
goog.require('ol.source.ImageVector');
|
||||||
goog.require('ol.vec.Mat4');
|
|
||||||
goog.require('ol.webgl.Context');
|
goog.require('ol.webgl.Context');
|
||||||
|
|
||||||
|
|
||||||
@@ -41,7 +40,7 @@ ol.renderer.webgl.ImageLayer = function(mapRenderer, imageLayer) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {?goog.vec.Mat4.Number}
|
* @type {?ol.Transform}
|
||||||
*/
|
*/
|
||||||
this.hitTransformationMatrix_ = null;
|
this.hitTransformationMatrix_ = null;
|
||||||
|
|
||||||
@@ -165,9 +164,9 @@ ol.renderer.webgl.ImageLayer.prototype.prepareFrame = function(frameState, layer
|
|||||||
|
|
||||||
// Translate and scale to flip the Y coord.
|
// Translate and scale to flip the Y coord.
|
||||||
var texCoordMatrix = this.texCoordMatrix;
|
var texCoordMatrix = this.texCoordMatrix;
|
||||||
goog.vec.Mat4.makeIdentity(texCoordMatrix);
|
ol.transform.reset(texCoordMatrix);
|
||||||
goog.vec.Mat4.scale(texCoordMatrix, 1, -1, 1);
|
ol.transform.scale(texCoordMatrix, 1, -1);
|
||||||
goog.vec.Mat4.translate(texCoordMatrix, 0, -1, 0);
|
ol.transform.translate(texCoordMatrix, 0, -1);
|
||||||
|
|
||||||
this.image_ = image;
|
this.image_ = image;
|
||||||
this.texture = texture;
|
this.texture = texture;
|
||||||
@@ -197,20 +196,18 @@ ol.renderer.webgl.ImageLayer.prototype.updateProjectionMatrix_ = function(canvas
|
|||||||
var canvasExtentHeight = canvasHeight * viewResolution;
|
var canvasExtentHeight = canvasHeight * viewResolution;
|
||||||
|
|
||||||
var projectionMatrix = this.projectionMatrix;
|
var projectionMatrix = this.projectionMatrix;
|
||||||
goog.vec.Mat4.makeIdentity(projectionMatrix);
|
ol.transform.reset(projectionMatrix);
|
||||||
goog.vec.Mat4.scale(projectionMatrix,
|
ol.transform.scale(projectionMatrix,
|
||||||
pixelRatio * 2 / canvasExtentWidth,
|
pixelRatio * 2 / canvasExtentWidth,
|
||||||
pixelRatio * 2 / canvasExtentHeight, 1);
|
pixelRatio * 2 / canvasExtentHeight);
|
||||||
goog.vec.Mat4.rotateZ(projectionMatrix, -viewRotation);
|
ol.transform.rotate(projectionMatrix, -viewRotation);
|
||||||
goog.vec.Mat4.translate(projectionMatrix,
|
ol.transform.translate(projectionMatrix,
|
||||||
imageExtent[0] - viewCenter[0],
|
imageExtent[0] - viewCenter[0],
|
||||||
imageExtent[1] - viewCenter[1],
|
imageExtent[1] - viewCenter[1]);
|
||||||
0);
|
ol.transform.scale(projectionMatrix,
|
||||||
goog.vec.Mat4.scale(projectionMatrix,
|
|
||||||
(imageExtent[2] - imageExtent[0]) / 2,
|
(imageExtent[2] - imageExtent[0]) / 2,
|
||||||
(imageExtent[3] - imageExtent[1]) / 2,
|
(imageExtent[3] - imageExtent[1]) / 2);
|
||||||
1);
|
ol.transform.translate(projectionMatrix, 1, 1);
|
||||||
goog.vec.Mat4.translate(projectionMatrix, 1, 1, 0);
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -236,9 +233,8 @@ ol.renderer.webgl.ImageLayer.prototype.forEachLayerAtPixel = function(pixel, fra
|
|||||||
if (this.getLayer().getSource() instanceof ol.source.ImageVector) {
|
if (this.getLayer().getSource() instanceof ol.source.ImageVector) {
|
||||||
// for ImageVector sources use the original hit-detection logic,
|
// for ImageVector sources use the original hit-detection logic,
|
||||||
// so that for example also transparent polygons are detected
|
// so that for example also transparent polygons are detected
|
||||||
var coordinate = pixel.slice();
|
var coordinate = ol.transform.apply(
|
||||||
ol.vec.Mat4.multVec2(
|
frameState.pixelToCoordinateTransform, pixel.slice());
|
||||||
frameState.pixelToCoordinateMatrix, coordinate, coordinate);
|
|
||||||
var hasFeature = this.forEachFeatureAtCoordinate(
|
var hasFeature = this.forEachFeatureAtCoordinate(
|
||||||
coordinate, frameState, ol.functions.TRUE, this);
|
coordinate, frameState, ol.functions.TRUE, this);
|
||||||
|
|
||||||
@@ -256,9 +252,8 @@ ol.renderer.webgl.ImageLayer.prototype.forEachLayerAtPixel = function(pixel, fra
|
|||||||
frameState.size, imageSize);
|
frameState.size, imageSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
var pixelOnFrameBuffer = [0, 0];
|
var pixelOnFrameBuffer = ol.transform.apply(
|
||||||
ol.vec.Mat4.multVec2(
|
this.hitTransformationMatrix_, pixel.slice());
|
||||||
this.hitTransformationMatrix_, pixel, pixelOnFrameBuffer);
|
|
||||||
|
|
||||||
if (pixelOnFrameBuffer[0] < 0 || pixelOnFrameBuffer[0] > imageSize[0] ||
|
if (pixelOnFrameBuffer[0] < 0 || pixelOnFrameBuffer[0] > imageSize[0] ||
|
||||||
pixelOnFrameBuffer[1] < 0 || pixelOnFrameBuffer[1] > imageSize[1]) {
|
pixelOnFrameBuffer[1] < 0 || pixelOnFrameBuffer[1] > imageSize[1]) {
|
||||||
@@ -289,37 +284,31 @@ ol.renderer.webgl.ImageLayer.prototype.forEachLayerAtPixel = function(pixel, fra
|
|||||||
* pixel on the map.
|
* pixel on the map.
|
||||||
* @param {ol.Size} mapSize The map size.
|
* @param {ol.Size} mapSize The map size.
|
||||||
* @param {ol.Size} imageSize The image size.
|
* @param {ol.Size} imageSize The image size.
|
||||||
* @return {goog.vec.Mat4.Number} The transformation matrix.
|
* @return {ol.Transform} The transformation matrix.
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
ol.renderer.webgl.ImageLayer.prototype.getHitTransformationMatrix_ = function(mapSize, imageSize) {
|
ol.renderer.webgl.ImageLayer.prototype.getHitTransformationMatrix_ = function(mapSize, imageSize) {
|
||||||
// the first matrix takes a map pixel, flips the y-axis and scales to
|
// the first matrix takes a map pixel, flips the y-axis and scales to
|
||||||
// a range between -1 ... 1
|
// a range between -1 ... 1
|
||||||
var mapCoordMatrix = goog.vec.Mat4.createNumber();
|
var mapCoordTransform = ol.transform.create();
|
||||||
goog.vec.Mat4.makeIdentity(mapCoordMatrix);
|
ol.transform.translate(mapCoordTransform, -1, -1);
|
||||||
goog.vec.Mat4.translate(mapCoordMatrix, -1, -1, 0);
|
ol.transform.scale(mapCoordTransform, 2 / mapSize[0], 2 / mapSize[1]);
|
||||||
goog.vec.Mat4.scale(mapCoordMatrix, 2 / mapSize[0], 2 / mapSize[1], 1);
|
ol.transform.translate(mapCoordTransform, 0, mapSize[1]);
|
||||||
goog.vec.Mat4.translate(mapCoordMatrix, 0, mapSize[1], 0);
|
ol.transform.scale(mapCoordTransform, 1, -1);
|
||||||
goog.vec.Mat4.scale(mapCoordMatrix, 1, -1, 1);
|
|
||||||
|
|
||||||
// the second matrix is the inverse of the projection matrix used in the
|
// the second matrix is the inverse of the projection matrix used in the
|
||||||
// shader for drawing
|
// shader for drawing
|
||||||
var projectionMatrixInv = goog.vec.Mat4.createNumber();
|
var projectionMatrixInv = ol.transform.invert(this.projectionMatrix.slice());
|
||||||
goog.vec.Mat4.invert(this.projectionMatrix, projectionMatrixInv);
|
|
||||||
|
|
||||||
// the third matrix scales to the image dimensions and flips the y-axis again
|
// the third matrix scales to the image dimensions and flips the y-axis again
|
||||||
var imageCoordMatrix = goog.vec.Mat4.createNumber();
|
var transform = ol.transform.create();
|
||||||
goog.vec.Mat4.makeIdentity(imageCoordMatrix);
|
ol.transform.translate(transform, 0, imageSize[1]);
|
||||||
goog.vec.Mat4.translate(imageCoordMatrix, 0, imageSize[1], 0);
|
ol.transform.scale(transform, 1, -1);
|
||||||
goog.vec.Mat4.scale(imageCoordMatrix, 1, -1, 1);
|
ol.transform.scale(transform, imageSize[0] / 2, imageSize[1] / 2);
|
||||||
goog.vec.Mat4.scale(imageCoordMatrix, imageSize[0] / 2, imageSize[1] / 2, 1);
|
ol.transform.translate(transform, 1, 1);
|
||||||
goog.vec.Mat4.translate(imageCoordMatrix, 1, 1, 0);
|
|
||||||
|
|
||||||
var transformMatrix = goog.vec.Mat4.createNumber();
|
ol.transform.multiply(transform, projectionMatrixInv);
|
||||||
goog.vec.Mat4.multMat(
|
ol.transform.multiply(transform, mapCoordTransform);
|
||||||
imageCoordMatrix, projectionMatrixInv, transformMatrix);
|
|
||||||
goog.vec.Mat4.multMat(
|
|
||||||
transformMatrix, mapCoordMatrix, transformMatrix);
|
|
||||||
|
|
||||||
return transformMatrix;
|
return transform;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
goog.provide('ol.renderer.webgl.Layer');
|
goog.provide('ol.renderer.webgl.Layer');
|
||||||
|
|
||||||
goog.require('goog.vec.Mat4');
|
|
||||||
goog.require('goog.webgl');
|
goog.require('goog.webgl');
|
||||||
goog.require('ol.layer.Layer');
|
goog.require('ol.layer.Layer');
|
||||||
|
goog.require('ol.transform');
|
||||||
goog.require('ol.render.Event');
|
goog.require('ol.render.Event');
|
||||||
goog.require('ol.render.EventType');
|
goog.require('ol.render.EventType');
|
||||||
goog.require('ol.render.webgl.Immediate');
|
goog.require('ol.render.webgl.Immediate');
|
||||||
@@ -11,6 +11,7 @@ goog.require('ol.renderer.webgl.map.shader.Default');
|
|||||||
goog.require('ol.renderer.webgl.map.shader.Default.Locations');
|
goog.require('ol.renderer.webgl.map.shader.Default.Locations');
|
||||||
goog.require('ol.renderer.webgl.map.shader.DefaultFragment');
|
goog.require('ol.renderer.webgl.map.shader.DefaultFragment');
|
||||||
goog.require('ol.renderer.webgl.map.shader.DefaultVertex');
|
goog.require('ol.renderer.webgl.map.shader.DefaultVertex');
|
||||||
|
goog.require('ol.vec.Mat4');
|
||||||
goog.require('ol.webgl.Buffer');
|
goog.require('ol.webgl.Buffer');
|
||||||
goog.require('ol.webgl.Context');
|
goog.require('ol.webgl.Context');
|
||||||
|
|
||||||
@@ -62,15 +63,21 @@ ol.renderer.webgl.Layer = function(mapRenderer, layer) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @protected
|
* @protected
|
||||||
* @type {!goog.vec.Mat4.Number}
|
* @type {ol.Transform}
|
||||||
*/
|
*/
|
||||||
this.texCoordMatrix = goog.vec.Mat4.createNumber();
|
this.texCoordMatrix = ol.transform.create();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @protected
|
* @protected
|
||||||
* @type {!goog.vec.Mat4.Number}
|
* @type {ol.Transform}
|
||||||
*/
|
*/
|
||||||
this.projectionMatrix = goog.vec.Mat4.createNumberIdentity();
|
this.projectionMatrix = ol.transform.create();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type {Array.<number>}
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
this.tmpMat4_ = ol.vec.Mat4.create();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
@@ -167,10 +174,10 @@ ol.renderer.webgl.Layer.prototype.composeFrame = function(frameState, layerState
|
|||||||
gl.uniform1i(locations.u_texture, 0);
|
gl.uniform1i(locations.u_texture, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
gl.uniformMatrix4fv(
|
gl.uniformMatrix4fv(locations.u_texCoordMatrix, false,
|
||||||
locations.u_texCoordMatrix, false, this.getTexCoordMatrix());
|
ol.vec.Mat4.fromTransform(this.tmpMat4_, this.getTexCoordMatrix()));
|
||||||
gl.uniformMatrix4fv(locations.u_projectionMatrix, false,
|
gl.uniformMatrix4fv(locations.u_projectionMatrix, false,
|
||||||
this.getProjectionMatrix());
|
ol.vec.Mat4.fromTransform(this.tmpMat4_, this.getProjectionMatrix()));
|
||||||
gl.uniform1f(locations.u_opacity, layerState.opacity);
|
gl.uniform1f(locations.u_opacity, layerState.opacity);
|
||||||
gl.bindTexture(goog.webgl.TEXTURE_2D, this.getTexture());
|
gl.bindTexture(goog.webgl.TEXTURE_2D, this.getTexture());
|
||||||
gl.drawArrays(goog.webgl.TRIANGLE_STRIP, 0, 4);
|
gl.drawArrays(goog.webgl.TRIANGLE_STRIP, 0, 4);
|
||||||
@@ -208,7 +215,7 @@ ol.renderer.webgl.Layer.prototype.dispatchComposeEvent_ = function(type, context
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return {!goog.vec.Mat4.Number} Matrix.
|
* @return {!ol.Transform} Matrix.
|
||||||
*/
|
*/
|
||||||
ol.renderer.webgl.Layer.prototype.getTexCoordMatrix = function() {
|
ol.renderer.webgl.Layer.prototype.getTexCoordMatrix = function() {
|
||||||
return this.texCoordMatrix;
|
return this.texCoordMatrix;
|
||||||
@@ -224,7 +231,7 @@ ol.renderer.webgl.Layer.prototype.getTexture = function() {
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return {!goog.vec.Mat4.Number} Matrix.
|
* @return {!ol.Transform} Matrix.
|
||||||
*/
|
*/
|
||||||
ol.renderer.webgl.Layer.prototype.getProjectionMatrix = function() {
|
ol.renderer.webgl.Layer.prototype.getProjectionMatrix = function() {
|
||||||
return this.projectionMatrix;
|
return this.projectionMatrix;
|
||||||
|
|||||||
@@ -4,8 +4,7 @@
|
|||||||
goog.provide('ol.renderer.webgl.TileLayer');
|
goog.provide('ol.renderer.webgl.TileLayer');
|
||||||
|
|
||||||
goog.require('goog.asserts');
|
goog.require('goog.asserts');
|
||||||
goog.require('goog.vec.Mat4');
|
goog.require('ol.transform');
|
||||||
goog.require('goog.vec.Vec4');
|
|
||||||
goog.require('goog.webgl');
|
goog.require('goog.webgl');
|
||||||
goog.require('ol.TileRange');
|
goog.require('ol.TileRange');
|
||||||
goog.require('ol.TileState');
|
goog.require('ol.TileState');
|
||||||
@@ -18,7 +17,6 @@ goog.require('ol.renderer.webgl.tilelayer.shader.Fragment');
|
|||||||
goog.require('ol.renderer.webgl.tilelayer.shader.Locations');
|
goog.require('ol.renderer.webgl.tilelayer.shader.Locations');
|
||||||
goog.require('ol.renderer.webgl.tilelayer.shader.Vertex');
|
goog.require('ol.renderer.webgl.tilelayer.shader.Vertex');
|
||||||
goog.require('ol.size');
|
goog.require('ol.size');
|
||||||
goog.require('ol.vec.Mat4');
|
|
||||||
goog.require('ol.webgl.Buffer');
|
goog.require('ol.webgl.Buffer');
|
||||||
|
|
||||||
|
|
||||||
@@ -294,22 +292,21 @@ ol.renderer.webgl.TileLayer.prototype.prepareFrame = function(frameState, layerS
|
|||||||
/** @type {Array.<number>} */
|
/** @type {Array.<number>} */
|
||||||
var zs = Object.keys(tilesToDrawByZ).map(Number);
|
var zs = Object.keys(tilesToDrawByZ).map(Number);
|
||||||
zs.sort(ol.array.numberSafeCompareFunction);
|
zs.sort(ol.array.numberSafeCompareFunction);
|
||||||
var u_tileOffset = goog.vec.Vec4.createFloat32();
|
var u_tileOffset = new Float32Array(4);
|
||||||
var i, ii, sx, sy, tileKey, tilesToDraw, tx, ty;
|
var i, ii, tileKey, tilesToDraw;
|
||||||
for (i = 0, ii = zs.length; i < ii; ++i) {
|
for (i = 0, ii = zs.length; i < ii; ++i) {
|
||||||
tilesToDraw = tilesToDrawByZ[zs[i]];
|
tilesToDraw = tilesToDrawByZ[zs[i]];
|
||||||
for (tileKey in tilesToDraw) {
|
for (tileKey in tilesToDraw) {
|
||||||
tile = tilesToDraw[tileKey];
|
tile = tilesToDraw[tileKey];
|
||||||
tileExtent = tileGrid.getTileCoordExtent(tile.tileCoord, tmpExtent);
|
tileExtent = tileGrid.getTileCoordExtent(tile.tileCoord, tmpExtent);
|
||||||
sx = 2 * (tileExtent[2] - tileExtent[0]) /
|
u_tileOffset[0] = 2 * (tileExtent[2] - tileExtent[0]) /
|
||||||
framebufferExtentDimension;
|
framebufferExtentDimension;
|
||||||
sy = 2 * (tileExtent[3] - tileExtent[1]) /
|
u_tileOffset[1] = 2 * (tileExtent[3] - tileExtent[1]) /
|
||||||
framebufferExtentDimension;
|
framebufferExtentDimension;
|
||||||
tx = 2 * (tileExtent[0] - framebufferExtent[0]) /
|
u_tileOffset[2] = 2 * (tileExtent[0] - framebufferExtent[0]) /
|
||||||
framebufferExtentDimension - 1;
|
framebufferExtentDimension - 1;
|
||||||
ty = 2 * (tileExtent[1] - framebufferExtent[1]) /
|
u_tileOffset[3] = 2 * (tileExtent[1] - framebufferExtent[1]) /
|
||||||
framebufferExtentDimension - 1;
|
framebufferExtentDimension - 1;
|
||||||
goog.vec.Vec4.setFromValues(u_tileOffset, sx, sy, tx, ty);
|
|
||||||
gl.uniform4fv(this.locations_.u_tileOffset, u_tileOffset);
|
gl.uniform4fv(this.locations_.u_tileOffset, u_tileOffset);
|
||||||
mapRenderer.bindTileTexture(tile, tilePixelSize,
|
mapRenderer.bindTileTexture(tile, tilePixelSize,
|
||||||
tileGutter * pixelRatio, goog.webgl.LINEAR, goog.webgl.LINEAR);
|
tileGutter * pixelRatio, goog.webgl.LINEAR, goog.webgl.LINEAR);
|
||||||
@@ -354,26 +351,21 @@ ol.renderer.webgl.TileLayer.prototype.prepareFrame = function(frameState, layerS
|
|||||||
this.updateLogos(frameState, tileSource);
|
this.updateLogos(frameState, tileSource);
|
||||||
|
|
||||||
var texCoordMatrix = this.texCoordMatrix;
|
var texCoordMatrix = this.texCoordMatrix;
|
||||||
goog.vec.Mat4.makeIdentity(texCoordMatrix);
|
ol.transform.reset(texCoordMatrix);
|
||||||
goog.vec.Mat4.translate(texCoordMatrix,
|
ol.transform.translate(texCoordMatrix,
|
||||||
(center[0] - framebufferExtent[0]) /
|
(center[0] - framebufferExtent[0]) /
|
||||||
(framebufferExtent[2] - framebufferExtent[0]),
|
(framebufferExtent[2] - framebufferExtent[0]),
|
||||||
(center[1] - framebufferExtent[1]) /
|
(center[1] - framebufferExtent[1]) /
|
||||||
(framebufferExtent[3] - framebufferExtent[1]),
|
(framebufferExtent[3] - framebufferExtent[1]));
|
||||||
0);
|
|
||||||
if (viewState.rotation !== 0) {
|
if (viewState.rotation !== 0) {
|
||||||
goog.vec.Mat4.rotateZ(texCoordMatrix, viewState.rotation);
|
ol.transform.rotate(texCoordMatrix, viewState.rotation);
|
||||||
}
|
}
|
||||||
goog.vec.Mat4.scale(texCoordMatrix,
|
ol.transform.scale(texCoordMatrix,
|
||||||
frameState.size[0] * viewState.resolution /
|
frameState.size[0] * viewState.resolution /
|
||||||
(framebufferExtent[2] - framebufferExtent[0]),
|
(framebufferExtent[2] - framebufferExtent[0]),
|
||||||
frameState.size[1] * viewState.resolution /
|
frameState.size[1] * viewState.resolution /
|
||||||
(framebufferExtent[3] - framebufferExtent[1]),
|
(framebufferExtent[3] - framebufferExtent[1]));
|
||||||
1);
|
ol.transform.translate(texCoordMatrix, -0.5, -0.5);
|
||||||
goog.vec.Mat4.translate(texCoordMatrix,
|
|
||||||
-0.5,
|
|
||||||
-0.5,
|
|
||||||
0);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
@@ -391,9 +383,8 @@ ol.renderer.webgl.TileLayer.prototype.forEachLayerAtPixel = function(pixel, fram
|
|||||||
pixel[0] / frameState.size[0],
|
pixel[0] / frameState.size[0],
|
||||||
(frameState.size[1] - pixel[1]) / frameState.size[1]];
|
(frameState.size[1] - pixel[1]) / frameState.size[1]];
|
||||||
|
|
||||||
var pixelOnFrameBufferScaled = [0, 0];
|
var pixelOnFrameBufferScaled = ol.transform.apply(
|
||||||
ol.vec.Mat4.multVec2(
|
this.texCoordMatrix, pixelOnMapScaled.slice());
|
||||||
this.texCoordMatrix, pixelOnMapScaled, pixelOnFrameBufferScaled);
|
|
||||||
var pixelOnFrameBuffer = [
|
var pixelOnFrameBuffer = [
|
||||||
pixelOnFrameBufferScaled[0] * this.framebufferDimension,
|
pixelOnFrameBufferScaled[0] * this.framebufferDimension,
|
||||||
pixelOnFrameBufferScaled[1] * this.framebufferDimension];
|
pixelOnFrameBufferScaled[1] * this.framebufferDimension];
|
||||||
|
|||||||
@@ -5,10 +5,10 @@ goog.require('ol.events');
|
|||||||
goog.require('ol.ViewHint');
|
goog.require('ol.ViewHint');
|
||||||
goog.require('ol.extent');
|
goog.require('ol.extent');
|
||||||
goog.require('ol.layer.Vector');
|
goog.require('ol.layer.Vector');
|
||||||
|
goog.require('ol.transform');
|
||||||
goog.require('ol.render.webgl.ReplayGroup');
|
goog.require('ol.render.webgl.ReplayGroup');
|
||||||
goog.require('ol.renderer.vector');
|
goog.require('ol.renderer.vector');
|
||||||
goog.require('ol.renderer.webgl.Layer');
|
goog.require('ol.renderer.webgl.Layer');
|
||||||
goog.require('ol.vec.Mat4');
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -154,9 +154,8 @@ ol.renderer.webgl.VectorLayer.prototype.hasFeatureAtCoordinate = function(coordi
|
|||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
ol.renderer.webgl.VectorLayer.prototype.forEachLayerAtPixel = function(pixel, frameState, callback, thisArg) {
|
ol.renderer.webgl.VectorLayer.prototype.forEachLayerAtPixel = function(pixel, frameState, callback, thisArg) {
|
||||||
var coordinate = pixel.slice();
|
var coordinate = ol.transform.apply(
|
||||||
ol.vec.Mat4.multVec2(
|
frameState.pixelToCoordinateTransform, pixel.slice());
|
||||||
frameState.pixelToCoordinateMatrix, coordinate, coordinate);
|
|
||||||
var hasFeature = this.hasFeatureAtCoordinate(coordinate, frameState);
|
var hasFeature = this.hasFeatureAtCoordinate(coordinate, frameState);
|
||||||
|
|
||||||
if (hasFeature) {
|
if (hasFeature) {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ goog.provide('ol.source.ImageVector');
|
|||||||
goog.require('goog.asserts');
|
goog.require('goog.asserts');
|
||||||
goog.require('ol.events');
|
goog.require('ol.events');
|
||||||
goog.require('ol.events.EventType');
|
goog.require('ol.events.EventType');
|
||||||
goog.require('goog.vec.Mat4');
|
goog.require('ol.transform');
|
||||||
goog.require('ol.dom');
|
goog.require('ol.dom');
|
||||||
goog.require('ol.extent');
|
goog.require('ol.extent');
|
||||||
goog.require('ol.render.canvas.ReplayGroup');
|
goog.require('ol.render.canvas.ReplayGroup');
|
||||||
@@ -11,7 +11,6 @@ goog.require('ol.renderer.vector');
|
|||||||
goog.require('ol.source.ImageCanvas');
|
goog.require('ol.source.ImageCanvas');
|
||||||
goog.require('ol.source.Vector');
|
goog.require('ol.source.Vector');
|
||||||
goog.require('ol.style.Style');
|
goog.require('ol.style.Style');
|
||||||
goog.require('ol.vec.Mat4');
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -41,9 +40,9 @@ ol.source.ImageVector = function(options) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {!goog.vec.Mat4.Number}
|
* @type {ol.Transform}
|
||||||
*/
|
*/
|
||||||
this.transform_ = goog.vec.Mat4.createNumber();
|
this.transform_ = ol.transform.create();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
@@ -212,15 +211,18 @@ ol.source.ImageVector.prototype.getStyleFunction = function() {
|
|||||||
* @param {number} resolution Resolution.
|
* @param {number} resolution Resolution.
|
||||||
* @param {number} pixelRatio Pixel ratio.
|
* @param {number} pixelRatio Pixel ratio.
|
||||||
* @param {ol.Size} size Size.
|
* @param {ol.Size} size Size.
|
||||||
* @return {!goog.vec.Mat4.Number} Transform.
|
* @return {!ol.Transform} Transform.
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
ol.source.ImageVector.prototype.getTransform_ = function(center, resolution, pixelRatio, size) {
|
ol.source.ImageVector.prototype.getTransform_ = function(center, resolution, pixelRatio, size) {
|
||||||
return ol.vec.Mat4.makeTransform2D(this.transform_,
|
var dx1 = size[0] / 2;
|
||||||
size[0] / 2, size[1] / 2,
|
var dy1 = size[1] / 2;
|
||||||
pixelRatio / resolution, -pixelRatio / resolution,
|
var sx = pixelRatio / resolution;
|
||||||
0,
|
var sy = -sx;
|
||||||
-center[0], -center[1]);
|
var dx2 = -center[0];
|
||||||
|
var dy2 = -center[1];
|
||||||
|
|
||||||
|
return ol.transform.compose(this.transform_, dx1, dy1, sx, sy, 0, dx2, dy2);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ goog.provide('ol.source.RasterEvent');
|
|||||||
goog.provide('ol.source.RasterEventType');
|
goog.provide('ol.source.RasterEventType');
|
||||||
|
|
||||||
goog.require('goog.asserts');
|
goog.require('goog.asserts');
|
||||||
goog.require('goog.vec.Mat4');
|
goog.require('ol.transform');
|
||||||
goog.require('ol.ImageCanvas');
|
goog.require('ol.ImageCanvas');
|
||||||
goog.require('ol.TileQueue');
|
goog.require('ol.TileQueue');
|
||||||
goog.require('ol.dom');
|
goog.require('ol.dom');
|
||||||
@@ -120,7 +120,7 @@ ol.source.Raster = function(options) {
|
|||||||
this.frameState_ = {
|
this.frameState_ = {
|
||||||
animate: false,
|
animate: false,
|
||||||
attributions: {},
|
attributions: {},
|
||||||
coordinateToPixelMatrix: goog.vec.Mat4.createNumber(),
|
coordinateToPixelTransform: ol.transform.create(),
|
||||||
extent: null,
|
extent: null,
|
||||||
focus: null,
|
focus: null,
|
||||||
index: 0,
|
index: 0,
|
||||||
@@ -128,7 +128,7 @@ ol.source.Raster = function(options) {
|
|||||||
layerStatesArray: layerStatesArray,
|
layerStatesArray: layerStatesArray,
|
||||||
logos: {},
|
logos: {},
|
||||||
pixelRatio: 1,
|
pixelRatio: 1,
|
||||||
pixelToCoordinateMatrix: goog.vec.Mat4.createNumber(),
|
pixelToCoordinateTransform: ol.transform.create(),
|
||||||
postRenderFunctions: [],
|
postRenderFunctions: [],
|
||||||
size: [0, 0],
|
size: [0, 0],
|
||||||
skippedFeatureUids: {},
|
skippedFeatureUids: {},
|
||||||
|
|||||||
@@ -0,0 +1,229 @@
|
|||||||
|
goog.provide('ol.transform');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Collection of affine 2d transformation functions. The functions work on an
|
||||||
|
* array of 6 elements. The element order is compatible with the [SVGMatrix
|
||||||
|
* interface](https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix) and is
|
||||||
|
* a subset (elements a to f) of a 3x3 martrix:
|
||||||
|
* ```
|
||||||
|
* [ a c e ]
|
||||||
|
* [ b d f ]
|
||||||
|
* [ 0 0 1 ]
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
* @type {ol.Transform}
|
||||||
|
*/
|
||||||
|
ol.transform.tmp_ = new Array(6);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an identity transform.
|
||||||
|
* @return {!ol.Transform} Identity transform.
|
||||||
|
*/
|
||||||
|
ol.transform.create = function() {
|
||||||
|
return [1, 0, 0, 1, 0, 0];
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resets the given transform to an identity transform.
|
||||||
|
* @param {!ol.Transform} transform Transform.
|
||||||
|
* @return {!ol.Transform} Transform.
|
||||||
|
*/
|
||||||
|
ol.transform.reset = function(transform) {
|
||||||
|
return ol.transform.set(transform, 1, 0, 0, 1, 0, 0);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Multiply the underlying matrices of two transforms and return the result in
|
||||||
|
* the first transform.
|
||||||
|
* @param {!ol.Transform} transform1 Transform parameters of matrix 1.
|
||||||
|
* @param {!ol.Transform} transform2 Transform parameters of matrix 2.
|
||||||
|
* @return {!ol.Transform} transform1 multiplied with transform2.
|
||||||
|
*/
|
||||||
|
ol.transform.multiply = function(transform1, transform2) {
|
||||||
|
var a1 = transform1[0];
|
||||||
|
var b1 = transform1[1];
|
||||||
|
var c1 = transform1[2];
|
||||||
|
var d1 = transform1[3];
|
||||||
|
var e1 = transform1[4];
|
||||||
|
var f1 = transform1[5];
|
||||||
|
var a2 = transform2[0];
|
||||||
|
var b2 = transform2[1];
|
||||||
|
var c2 = transform2[2];
|
||||||
|
var d2 = transform2[3];
|
||||||
|
var e2 = transform2[4];
|
||||||
|
var f2 = transform2[5];
|
||||||
|
|
||||||
|
transform1[0] = a1 * a2 + c1 * b2;
|
||||||
|
transform1[1] = b1 * a2 + d1 * b2;
|
||||||
|
transform1[2] = a1 * c2 + c1 * d2;
|
||||||
|
transform1[3] = b1 * c2 + d1 * d2;
|
||||||
|
transform1[4] = a1 * e2 + c1 * f2 + e1;
|
||||||
|
transform1[5] = b1 * e2 + d1 * f2 + f1;
|
||||||
|
|
||||||
|
return transform1;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the transform components a-f on a given transform.
|
||||||
|
* @param {!ol.Transform} transform Transform.
|
||||||
|
* @param {number} a The a component of the transform.
|
||||||
|
* @param {number} b The b component of the transform.
|
||||||
|
* @param {number} c The c component of the transform.
|
||||||
|
* @param {number} d The d component of the transform.
|
||||||
|
* @param {number} e The e component of the transform.
|
||||||
|
* @param {number} f The f component of the transform.
|
||||||
|
* @return {!ol.Transform} Matrix with transform applied.
|
||||||
|
*/
|
||||||
|
ol.transform.set = function(transform, a, b, c, d, e, f) {
|
||||||
|
transform[0] = a;
|
||||||
|
transform[1] = b;
|
||||||
|
transform[2] = c;
|
||||||
|
transform[3] = d;
|
||||||
|
transform[4] = e;
|
||||||
|
transform[5] = f;
|
||||||
|
return transform;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set transform on one matrix from another matrix.
|
||||||
|
* @param {!ol.Transform} transform1 Matrix to set transform to.
|
||||||
|
* @param {!ol.Transform} transform2 Matrix to set transform from.
|
||||||
|
* @return {!ol.Transform} transform1 with transform from transform2 applied.
|
||||||
|
*/
|
||||||
|
ol.transform.setFromArray = function(transform1, transform2) {
|
||||||
|
transform1[0] = transform2[0];
|
||||||
|
transform1[1] = transform2[1];
|
||||||
|
transform1[2] = transform2[2];
|
||||||
|
transform1[3] = transform2[3];
|
||||||
|
transform1[4] = transform2[4];
|
||||||
|
transform1[5] = transform2[5];
|
||||||
|
return transform1;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Transforms the given coordinate with the given transform returning the
|
||||||
|
* resulting, transformed coordinate. The coordinate will be modified in-place.
|
||||||
|
*
|
||||||
|
* @param {ol.Transform} transform The transformation.
|
||||||
|
* @param {ol.Coordinate|ol.Pixel} coordinate The coordinate to transform.
|
||||||
|
* @return {ol.Coordinate|ol.Pixel} return coordinate so that operations can be
|
||||||
|
* chained together.
|
||||||
|
*/
|
||||||
|
ol.transform.apply = function(transform, coordinate) {
|
||||||
|
var x = coordinate[0], y = coordinate[1];
|
||||||
|
coordinate[0] = transform[0] * x + transform[2] * y + transform[4];
|
||||||
|
coordinate[1] = transform[1] * x + transform[3] * y + transform[5];
|
||||||
|
return coordinate;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Applies rotation to the given transform.
|
||||||
|
* @param {!ol.Transform} transform Transform.
|
||||||
|
* @param {number} angle Angle in radians.
|
||||||
|
* @return {!ol.Transform} The rotated transform.
|
||||||
|
*/
|
||||||
|
ol.transform.rotate = function(transform, angle) {
|
||||||
|
var cos = Math.cos(angle);
|
||||||
|
var sin = Math.sin(angle);
|
||||||
|
return ol.transform.multiply(transform,
|
||||||
|
ol.transform.set(ol.transform.tmp_, cos, sin, -sin, cos, 0, 0));
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Applies scale to a given transform.
|
||||||
|
* @param {!ol.Transform} transform Transform.
|
||||||
|
* @param {number} x Scale factor x.
|
||||||
|
* @param {number} y Scale factor y.
|
||||||
|
* @return {!ol.Transform} The scaled transform.
|
||||||
|
*/
|
||||||
|
ol.transform.scale = function(transform, x, y) {
|
||||||
|
return ol.transform.multiply(transform,
|
||||||
|
ol.transform.set(ol.transform.tmp_, x, 0, 0, y, 0, 0));
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Applies translation to the given transform.
|
||||||
|
* @param {!ol.Transform} transform Transform.
|
||||||
|
* @param {number} dx Translation x.
|
||||||
|
* @param {number} dy Translation y.
|
||||||
|
* @return {!ol.Transform} The translated transform.
|
||||||
|
*/
|
||||||
|
ol.transform.translate = function(transform, dx, dy) {
|
||||||
|
return ol.transform.multiply(transform,
|
||||||
|
ol.transform.set(ol.transform.tmp_, 1, 0, 0, 1, dx, dy));
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a composite transform given an initial translation, scale, rotation, and
|
||||||
|
* final translation (in that order only, not commutative).
|
||||||
|
* @param {!ol.Transform} transform The transform (will be modified in place).
|
||||||
|
* @param {number} dx1 Initial translation x.
|
||||||
|
* @param {number} dy1 Initial translation y.
|
||||||
|
* @param {number} sx Scale factor x.
|
||||||
|
* @param {number} sy Scale factor y.
|
||||||
|
* @param {number} angle Rotation (in counter-clockwise radians).
|
||||||
|
* @param {number} dx2 Final translation x.
|
||||||
|
* @param {number} dy2 Final translation y.
|
||||||
|
* @return {!ol.Transform} The composite transform.
|
||||||
|
*/
|
||||||
|
ol.transform.compose = function(transform, dx1, dy1, sx, sy, angle, dx2, dy2) {
|
||||||
|
var sin = Math.sin(angle);
|
||||||
|
var cos = Math.cos(angle);
|
||||||
|
transform[0] = sx * cos;
|
||||||
|
transform[1] = sy * sin;
|
||||||
|
transform[2] = -sx * sin;
|
||||||
|
transform[3] = sy * cos;
|
||||||
|
transform[4] = dx2 * sx * cos - dy2 * sx * sin + dx1;
|
||||||
|
transform[5] = dx2 * sy * sin + dy2 * sy * cos + dy1;
|
||||||
|
return transform;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Invert the given transform.
|
||||||
|
* @param {!ol.Transform} transform Transform.
|
||||||
|
* @return {!ol.Transform} Inverse of the transform.
|
||||||
|
*/
|
||||||
|
ol.transform.invert = function(transform) {
|
||||||
|
var det = ol.transform.determinant(transform);
|
||||||
|
goog.asserts.assert(det !== 0, 'Transformation matrix cannot be inverted.');
|
||||||
|
|
||||||
|
var a = transform[0];
|
||||||
|
var b = transform[1];
|
||||||
|
var c = transform[2];
|
||||||
|
var d = transform[3];
|
||||||
|
var e = transform[4];
|
||||||
|
var f = transform[5];
|
||||||
|
|
||||||
|
transform[0] = d / det;
|
||||||
|
transform[1] = -b / det;
|
||||||
|
transform[2] = -c / det;
|
||||||
|
transform[3] = a / det;
|
||||||
|
transform[4] = (c * f - d * e) / det;
|
||||||
|
transform[5] = -(a * f - b * e) / det;
|
||||||
|
|
||||||
|
return transform;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the determinant of the given matrix.
|
||||||
|
* @param {!ol.Transform} mat Matrix.
|
||||||
|
* @return {number} Determinant.
|
||||||
|
*/
|
||||||
|
ol.transform.determinant = function(mat) {
|
||||||
|
return mat[0] * mat[3] - mat[1] * mat[2];
|
||||||
|
};
|
||||||
@@ -329,6 +329,14 @@ ol.LRUCacheEntry;
|
|||||||
ol.MapOptionsInternal;
|
ol.MapOptionsInternal;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An array representing an affine 2d transformation for use with
|
||||||
|
* {@link ol.transform} functions. The array has 6 elements.
|
||||||
|
* @typedef {Array.<number>}
|
||||||
|
*/
|
||||||
|
ol.Transform;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {{depth: (Array.<number>|undefined),
|
* @typedef {{depth: (Array.<number>|undefined),
|
||||||
* feature: ol.Feature,
|
* feature: ol.Feature,
|
||||||
|
|||||||
+14
-79
@@ -1,90 +1,25 @@
|
|||||||
goog.provide('ol.vec.Mat4');
|
goog.provide('ol.vec.Mat4');
|
||||||
goog.provide('ol.vec.Mat4.Number');
|
|
||||||
|
|
||||||
goog.require('goog.vec.Mat4');
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A alias for the goog.vec.Number type.
|
* @return {Array.<number>} 4x4 matrix representing a 3D identity transform.
|
||||||
* @typedef {goog.vec.Number}
|
|
||||||
*/
|
*/
|
||||||
ol.vec.Mat4.Number;
|
ol.vec.Mat4.create = function() {
|
||||||
|
return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {!goog.vec.Mat4.Number} mat Matrix.
|
|
||||||
* @param {number} translateX1 Translate X1.
|
|
||||||
* @param {number} translateY1 Translate Y1.
|
|
||||||
* @param {number} scaleX Scale X.
|
|
||||||
* @param {number} scaleY Scale Y.
|
|
||||||
* @param {number} rotation Rotation.
|
|
||||||
* @param {number} translateX2 Translate X2.
|
|
||||||
* @param {number} translateY2 Translate Y2.
|
|
||||||
* @return {!goog.vec.Mat4.Number} Matrix.
|
|
||||||
*/
|
|
||||||
ol.vec.Mat4.makeTransform2D = function(mat, translateX1, translateY1,
|
|
||||||
scaleX, scaleY, rotation, translateX2, translateY2) {
|
|
||||||
goog.vec.Mat4.makeIdentity(mat);
|
|
||||||
if (translateX1 !== 0 || translateY1 !== 0) {
|
|
||||||
goog.vec.Mat4.translate(mat, translateX1, translateY1, 0);
|
|
||||||
}
|
|
||||||
if (scaleX != 1 || scaleY != 1) {
|
|
||||||
goog.vec.Mat4.scale(mat, scaleX, scaleY, 1);
|
|
||||||
}
|
|
||||||
if (rotation !== 0) {
|
|
||||||
goog.vec.Mat4.rotateZ(mat, rotation);
|
|
||||||
}
|
|
||||||
if (translateX2 !== 0 || translateY2 !== 0) {
|
|
||||||
goog.vec.Mat4.translate(mat, translateX2, translateY2, 0);
|
|
||||||
}
|
|
||||||
return mat;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if mat1 and mat2 represent the same 2D transformation.
|
* @param {Array.<number>} mat4 Flattened 4x4 matrix receiving the result.
|
||||||
* @param {goog.vec.Mat4.Number} mat1 Matrix 1.
|
* @param {ol.Transform} transform Transformation matrix.
|
||||||
* @param {goog.vec.Mat4.Number} mat2 Matrix 2.
|
* @return {Array.<number>} 2D transformation matrix as flattened 4x4 matrix.
|
||||||
* @return {boolean} Equal 2D.
|
|
||||||
*/
|
*/
|
||||||
ol.vec.Mat4.equals2D = function(mat1, mat2) {
|
ol.vec.Mat4.fromTransform = function(mat4, transform) {
|
||||||
return (
|
mat4[0] = transform[0];
|
||||||
goog.vec.Mat4.getElement(mat1, 0, 0) ==
|
mat4[1] = transform[1];
|
||||||
goog.vec.Mat4.getElement(mat2, 0, 0) &&
|
mat4[4] = transform[2];
|
||||||
goog.vec.Mat4.getElement(mat1, 1, 0) ==
|
mat4[5] = transform[3];
|
||||||
goog.vec.Mat4.getElement(mat2, 1, 0) &&
|
mat4[12] = transform[4];
|
||||||
goog.vec.Mat4.getElement(mat1, 0, 1) ==
|
mat4[13] = transform[5];
|
||||||
goog.vec.Mat4.getElement(mat2, 0, 1) &&
|
return mat4;
|
||||||
goog.vec.Mat4.getElement(mat1, 1, 1) ==
|
|
||||||
goog.vec.Mat4.getElement(mat2, 1, 1) &&
|
|
||||||
goog.vec.Mat4.getElement(mat1, 0, 3) ==
|
|
||||||
goog.vec.Mat4.getElement(mat2, 0, 3) &&
|
|
||||||
goog.vec.Mat4.getElement(mat1, 1, 3) ==
|
|
||||||
goog.vec.Mat4.getElement(mat2, 1, 3));
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Transforms the given vector with the given matrix storing the resulting,
|
|
||||||
* transformed vector into resultVec. The input vector is multiplied against the
|
|
||||||
* upper 2x4 matrix omitting the projective component.
|
|
||||||
*
|
|
||||||
* @param {goog.vec.Mat4.Number} mat The matrix supplying the transformation.
|
|
||||||
* @param {Array.<number>} vec The 3 element vector to transform.
|
|
||||||
* @param {Array.<number>} resultVec The 3 element vector to receive the results
|
|
||||||
* (may be vec).
|
|
||||||
* @return {Array.<number>} return resultVec so that operations can be
|
|
||||||
* chained together.
|
|
||||||
*/
|
|
||||||
ol.vec.Mat4.multVec2 = function(mat, vec, resultVec) {
|
|
||||||
var m00 = goog.vec.Mat4.getElement(mat, 0, 0);
|
|
||||||
var m10 = goog.vec.Mat4.getElement(mat, 1, 0);
|
|
||||||
var m01 = goog.vec.Mat4.getElement(mat, 0, 1);
|
|
||||||
var m11 = goog.vec.Mat4.getElement(mat, 1, 1);
|
|
||||||
var m03 = goog.vec.Mat4.getElement(mat, 0, 3);
|
|
||||||
var m13 = goog.vec.Mat4.getElement(mat, 1, 3);
|
|
||||||
var x = vec[0], y = vec[1];
|
|
||||||
resultVec[0] = m00 * x + m01 * y + m03;
|
|
||||||
resultVec[1] = m10 * x + m11 * y + m13;
|
|
||||||
return resultVec;
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -147,8 +147,8 @@ describe('ol.dom', function() {
|
|||||||
|
|
||||||
describe('ol.dom.transformElement2D', function() {
|
describe('ol.dom.transformElement2D', function() {
|
||||||
var element = null;
|
var element = null;
|
||||||
var transform = goog.vec.Mat4.createNumber();
|
var transform = ol.transform.create();
|
||||||
var transformFloat = goog.vec.Mat4.createNumber();
|
var transformFloat = ol.transform.create();
|
||||||
transformFloat[0] = 0.12345;
|
transformFloat[0] = 0.12345;
|
||||||
beforeEach(function() {
|
beforeEach(function() {
|
||||||
element = document.createElement('div');
|
element = document.createElement('div');
|
||||||
@@ -564,5 +564,5 @@ describe('ol.dom', function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
goog.require('goog.userAgent');
|
goog.require('goog.userAgent');
|
||||||
goog.require('goog.vec.Mat4');
|
goog.require('ol.transform');
|
||||||
goog.require('ol.dom');
|
goog.require('ol.dom');
|
||||||
|
|||||||
@@ -864,7 +864,6 @@ describe('ol.extent', function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
goog.require('goog.vec.Mat4');
|
|
||||||
goog.require('ol.extent');
|
goog.require('ol.extent');
|
||||||
goog.require('ol.extent.Corner');
|
goog.require('ol.extent.Corner');
|
||||||
goog.require('ol.extent.Relationship');
|
goog.require('ol.extent.Relationship');
|
||||||
|
|||||||
@@ -23,9 +23,11 @@ describe('ol.geom.flat.transform', function() {
|
|||||||
[-82.128838, 26.693342, 0],
|
[-82.128838, 26.693342, 0],
|
||||||
[-82.102127, 26.585724, 0]]]
|
[-82.102127, 26.585724, 0]]]
|
||||||
]).transform('EPSG:4326', 'EPSG:3857');
|
]).transform('EPSG:4326', 'EPSG:3857');
|
||||||
var transform = [0.0004088332670837288, 0, 0, 0, 0,
|
var transform = [
|
||||||
-0.0004088332670837288, 0, 0, 0, 0, 1, 0, 4480.991370439071,
|
0.0004088332670837288, 0,
|
||||||
1529.5752568707105, 0, 1];
|
0, -0.0004088332670837288,
|
||||||
|
4480.991370439071, 1529.5752568707105
|
||||||
|
];
|
||||||
var pixelCoordinates = ol.geom.transformSimpleGeometry2D(
|
var pixelCoordinates = ol.geom.transformSimpleGeometry2D(
|
||||||
multiPolygonGeometry, transform, []);
|
multiPolygonGeometry, transform, []);
|
||||||
expect(pixelCoordinates[0]).to.roughlyEqual(806.6035275946265, 1e-9);
|
expect(pixelCoordinates[0]).to.roughlyEqual(806.6035275946265, 1e-9);
|
||||||
|
|||||||
@@ -22,16 +22,16 @@ describe('ol.render', function() {
|
|||||||
[0, 0, size[0] * pixelRatio, size[1] * pixelRatio]);
|
[0, 0, size[0] * pixelRatio, size[1] * pixelRatio]);
|
||||||
expect(canvas.style.width).to.be(size[0] + 'px');
|
expect(canvas.style.width).to.be(size[0] + 'px');
|
||||||
expect(canvas.style.height).to.be(size[1] + 'px');
|
expect(canvas.style.height).to.be(size[1] + 'px');
|
||||||
var transform = ol.vec.Mat4.makeTransform2D(goog.vec.Mat4.createNumber(),
|
var transform = ol.transform.scale(ol.transform.create(),
|
||||||
0, 0, pixelRatio, pixelRatio, 0, 0, 0);
|
pixelRatio, pixelRatio);
|
||||||
expect(ol.vec.Mat4.equals2D(render.transform_, transform)).to.be.ok();
|
expect(ol.array.equals(render.transform_, transform)).to.be.ok();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
goog.require('goog.vec.Mat4');
|
goog.require('ol.transform');
|
||||||
goog.require('ol.render');
|
goog.require('ol.render');
|
||||||
goog.require('ol.render.canvas.Immediate');
|
goog.require('ol.render.canvas.Immediate');
|
||||||
goog.require('ol.vec.Mat4');
|
goog.require('ol.vec.Mat4');
|
||||||
|
|||||||
@@ -198,10 +198,9 @@ describe('ol.render.canvas.Immediate', function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
var transform = [
|
var transform = [
|
||||||
0.0004088332670837288, 0, 0, 0,
|
0.0004088332670837288, 0,
|
||||||
0, -0.0004088332670837288, 0, 0,
|
0, -0.0004088332670837288,
|
||||||
0, 0, 1, 0,
|
4480.991370439071, 1529.5752568707105
|
||||||
4480.991370439071, 1529.5752568707105, 0, 1
|
|
||||||
];
|
];
|
||||||
|
|
||||||
var extent = [
|
var extent = [
|
||||||
|
|||||||
@@ -23,11 +23,11 @@ describe('ol.renderer.canvas.Layer', function() {
|
|||||||
},
|
},
|
||||||
size: [10, 10],
|
size: [10, 10],
|
||||||
pixelRatio: 1,
|
pixelRatio: 1,
|
||||||
coordinateToPixelMatrix: goog.vec.Mat4.createNumber(),
|
coordinateToPixelTransform: ol.transform.create(),
|
||||||
pixelToCoordinateMatrix: goog.vec.Mat4.createNumber()
|
pixelToCoordinateTransform: ol.transform.create()
|
||||||
};
|
};
|
||||||
renderer.getImageTransform = function() {
|
renderer.getImageTransform = function() {
|
||||||
return goog.vec.Mat4.createNumberIdentity();
|
return ol.transform.create();
|
||||||
};
|
};
|
||||||
ol.renderer.Map.prototype.calculateMatrices2D(frameState);
|
ol.renderer.Map.prototype.calculateMatrices2D(frameState);
|
||||||
var layerState = layer.getLayerState();
|
var layerState = layer.getLayerState();
|
||||||
@@ -62,7 +62,7 @@ describe('ol.renderer.canvas.Layer', function() {
|
|||||||
|
|
||||||
|
|
||||||
goog.require('ol.render.canvas');
|
goog.require('ol.render.canvas');
|
||||||
goog.require('goog.vec.Mat4');
|
goog.require('ol.transform');
|
||||||
goog.require('ol.layer.Image');
|
goog.require('ol.layer.Image');
|
||||||
goog.require('ol.renderer.Map');
|
goog.require('ol.renderer.Map');
|
||||||
goog.require('ol.renderer.canvas.Layer');
|
goog.require('ol.renderer.canvas.Layer');
|
||||||
|
|||||||
@@ -49,39 +49,30 @@ describe('ol.renderer.webgl.ImageLayer', function() {
|
|||||||
pixelRatio, viewCenter, viewResolution, viewRotation, imageExtent);
|
pixelRatio, viewCenter, viewResolution, viewRotation, imageExtent);
|
||||||
var matrix = renderer.getProjectionMatrix();
|
var matrix = renderer.getProjectionMatrix();
|
||||||
|
|
||||||
var input;
|
var output = ol.transform.apply(matrix, [-1, -1]);
|
||||||
var output = goog.vec.Vec4.createNumber();
|
|
||||||
|
|
||||||
input = goog.vec.Vec4.createFromValues(-1, -1, 0, 1);
|
|
||||||
goog.vec.Mat4.multVec4(matrix, input, output);
|
|
||||||
expect(output[0]).to.eql(-6);
|
expect(output[0]).to.eql(-6);
|
||||||
expect(output[1]).to.eql(-6);
|
expect(output[1]).to.eql(-6);
|
||||||
|
|
||||||
input = goog.vec.Vec4.createFromValues(1, -1, 0, 1);
|
output = ol.transform.apply(matrix, [1, -1]);
|
||||||
goog.vec.Mat4.multVec4(matrix, input, output);
|
|
||||||
expect(output[0]).to.eql(2);
|
expect(output[0]).to.eql(2);
|
||||||
expect(output[1]).to.eql(-6);
|
expect(output[1]).to.eql(-6);
|
||||||
|
|
||||||
input = goog.vec.Vec4.createFromValues(-1, 1, 0, 1);
|
output = ol.transform.apply(matrix, [-1, 1]);
|
||||||
goog.vec.Mat4.multVec4(matrix, input, output);
|
|
||||||
expect(output[0]).to.eql(-6);
|
expect(output[0]).to.eql(-6);
|
||||||
expect(output[1]).to.eql(6);
|
expect(output[1]).to.eql(6);
|
||||||
|
|
||||||
input = goog.vec.Vec4.createFromValues(1, 1, 0, 1);
|
output = ol.transform.apply(matrix, [1, 1]);
|
||||||
goog.vec.Mat4.multVec4(matrix, input, output);
|
|
||||||
expect(output[0]).to.eql(2);
|
expect(output[0]).to.eql(2);
|
||||||
expect(output[1]).to.eql(6);
|
expect(output[1]).to.eql(6);
|
||||||
|
|
||||||
input = goog.vec.Vec4.createFromValues(0, 0, 0, 1);
|
output = ol.transform.apply(matrix, [0, 0]);
|
||||||
goog.vec.Mat4.multVec4(matrix, input, output);
|
|
||||||
expect(output[0]).to.eql(-2);
|
expect(output[0]).to.eql(-2);
|
||||||
expect(output[1]).to.eql(0);
|
expect(output[1]).to.eql(0);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
goog.require('goog.vec.Mat4');
|
goog.require('ol.transform');
|
||||||
goog.require('goog.vec.Vec4');
|
|
||||||
goog.require('ol.Map');
|
goog.require('ol.Map');
|
||||||
goog.require('ol.proj.common');
|
goog.require('ol.proj.common');
|
||||||
goog.require('ol.layer.Image');
|
goog.require('ol.layer.Image');
|
||||||
|
|||||||
@@ -0,0 +1,121 @@
|
|||||||
|
goog.provide('ol.test.transform');
|
||||||
|
|
||||||
|
describe('ol.transform', function() {
|
||||||
|
|
||||||
|
function assertRoughlyEqual(t1, t2) {
|
||||||
|
t1.forEach(function(item, index) {
|
||||||
|
expect(item).to.roughlyEqual(t2[index], 1e-8);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
describe('ol.transform.create()', function() {
|
||||||
|
it('creates an identity transform', function() {
|
||||||
|
expect(ol.transform.create()).to.eql([1, 0, 0, 1, 0, 0]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('ol.transform.reset()', function() {
|
||||||
|
it('resets tansform to an identity transform', function() {
|
||||||
|
var transform = [1, 2, 3, 4, 5, 6];
|
||||||
|
expect(ol.transform.reset(transform)).to.eql([1, 0, 0, 1, 0, 0]);
|
||||||
|
expect(transform).to.eql([1, 0, 0, 1, 0, 0]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('ol.transform.set()', function() {
|
||||||
|
it('sets the given values', function() {
|
||||||
|
var transform = ol.transform.create();
|
||||||
|
expect(ol.transform.set(transform, 1, 2, 3, 4, 5, 6)).to.eql([1, 2, 3, 4, 5, 6]);
|
||||||
|
expect(transform).to.eql([1, 2, 3, 4, 5, 6]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('ol.transform.setFromArray()', function() {
|
||||||
|
it('sets values of 2nd transform on 1st transform', function() {
|
||||||
|
var transform1 = ol.transform.create();
|
||||||
|
var transform2 = [1, 2, 3, 4, 5, 6];
|
||||||
|
expect(ol.transform.setFromArray(transform1, transform2)).to.eql(transform2);
|
||||||
|
expect(transform1).to.eql(transform2);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('ol.transform.translate()', function() {
|
||||||
|
it('applies translation to a transform', function() {
|
||||||
|
var transform = ol.transform.create();
|
||||||
|
expect(ol.transform.translate(transform, 3, 4)).to.eql([1, 0, 0, 1, 3, 4]);
|
||||||
|
expect(transform).to.eql([1, 0, 0, 1, 3, 4]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('ol.transform.scale()', function() {
|
||||||
|
it('applies scaling to a transform', function() {
|
||||||
|
var transform = ol.transform.create();
|
||||||
|
expect(ol.transform.scale(transform, 3, 4)).to.eql([3, 0, 0, 4, 0, 0]);
|
||||||
|
expect(transform).to.eql([3, 0, 0, 4, 0, 0]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('ol.transform.rotate()', function() {
|
||||||
|
it('applies rotation to a transform', function() {
|
||||||
|
var transform = ol.transform.create();
|
||||||
|
assertRoughlyEqual(ol.transform.rotate(transform, Math.PI / 2), [0, 1, -1, 0, 0, 0]);
|
||||||
|
assertRoughlyEqual(transform, [0, 1, -1, 0, 0, 0]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('ol.transform.multiply()', function() {
|
||||||
|
it('multiplies two transforms', function() {
|
||||||
|
var transform1 = [1, 2, 1, 2, 1, 2];
|
||||||
|
var transform2 = [1, 2, 1, 2, 1, 2];
|
||||||
|
expect(ol.transform.multiply(transform1, transform2)).to.eql([3, 6, 3, 6, 4, 8]);
|
||||||
|
expect(transform1).to.eql([3, 6, 3, 6, 4, 8]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('ol.transform.compose()', function() {
|
||||||
|
it('composes a translate, scale, rotate, translate transform', function() {
|
||||||
|
var dx1 = 3;
|
||||||
|
var dy1 = 4;
|
||||||
|
var sx = 1.5;
|
||||||
|
var sy = -1.5;
|
||||||
|
var angle = Math.PI / 3;
|
||||||
|
var dx2 = -dx1 / 2;
|
||||||
|
var dy2 = -dy1 / 2;
|
||||||
|
|
||||||
|
var expected = ol.transform.create();
|
||||||
|
ol.transform.translate(expected, dx1, dy1);
|
||||||
|
ol.transform.scale(expected, sx, sy);
|
||||||
|
ol.transform.rotate(expected, angle);
|
||||||
|
ol.transform.translate(expected, dx2, dy2);
|
||||||
|
|
||||||
|
var composed = ol.transform.create();
|
||||||
|
var composedReturn = ol.transform.compose(composed, dx1, dy1, sx, sy, angle, dx2, dy2);
|
||||||
|
expect(composed).to.equal(composedReturn);
|
||||||
|
expect(composed).to.eql(expected);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('ol.transform.invert()', function() {
|
||||||
|
it('inverts a transform', function() {
|
||||||
|
var transform = [1, 0, 1, 0, 1, 0];
|
||||||
|
expect(function() {
|
||||||
|
ol.transform.invert(transform);
|
||||||
|
}).to.throwException();
|
||||||
|
transform = [1, 1, 1, 2, 2, 0];
|
||||||
|
expect(ol.transform.invert(transform)).to.eql([2, -1, -1, 1, -4, 2]);
|
||||||
|
expect(transform).to.eql([2, -1, -1, 1, -4, 2]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('ol.transform.apply()', function() {
|
||||||
|
it('applies a transform to a 2d vector', function() {
|
||||||
|
var transform = ol.transform.translate(ol.transform.create(), 2, 3);
|
||||||
|
var point = [1, 2];
|
||||||
|
expect(ol.transform.apply(transform, point)).to.eql([3, 5]);
|
||||||
|
expect(point).to.eql([3, 5]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
goog.require('ol.transform');
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
goog.provide('ol.test.vec.Mat4');
|
||||||
|
|
||||||
|
describe('ol.vec.Mat4', function() {
|
||||||
|
|
||||||
|
describe('ol.vec.Mat4.create()', function() {
|
||||||
|
it('returns the expected matrix', function() {
|
||||||
|
expect(ol.vec.Mat4.create()).to.eql(
|
||||||
|
[1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('ol.vec.Mat4.fromTransform()', function() {
|
||||||
|
it('sets the expected transform on the matrix', function() {
|
||||||
|
var transform = [1, 2, 3, 4, 5, 6];
|
||||||
|
var result = ol.vec.Mat4.create();
|
||||||
|
expect(ol.vec.Mat4.fromTransform(result, transform)).to.eql(
|
||||||
|
[1, 2, 0, 0, 3, 4, 0, 0, 0, 0, 1, 0, 5, 6, 0, 1]);
|
||||||
|
expect(result).to.eql(
|
||||||
|
[1, 2, 0, 0, 3, 4, 0, 0, 0, 0, 1, 0, 5, 6, 0, 1]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
goog.require('ol.vec.Mat4');
|
||||||
Reference in New Issue
Block a user