Merge pull request #7834 from marcjansen/transform-transformation

Named exports from ol/transform
This commit is contained in:
Marc Jansen
2018-02-15 22:00:42 +01:00
committed by GitHub
28 changed files with 247 additions and 208 deletions

View File

@@ -28,7 +28,7 @@ import {getMapRendererPlugins} from './plugins.js';
import RendererType from './renderer/Type.js';
import {hasArea} from './size.js';
import PriorityQueue from './structs/PriorityQueue.js';
import _ol_transform_ from './transform.js';
import {create as createTransform, apply as applyTransform} from './transform.js';
/**
@@ -164,13 +164,13 @@ const PluggableMap = function(options) {
* @private
* @type {ol.Transform}
*/
this.coordinateToPixelTransform_ = _ol_transform_.create();
this.coordinateToPixelTransform_ = createTransform();
/**
* @private
* @type {ol.Transform}
*/
this.pixelToCoordinateTransform_ = _ol_transform_.create();
this.pixelToCoordinateTransform_ = createTransform();
/**
* @private
@@ -707,7 +707,7 @@ PluggableMap.prototype.getCoordinateFromPixel = function(pixel) {
if (!frameState) {
return null;
} else {
return _ol_transform_.apply(frameState.pixelToCoordinateTransform, pixel.slice());
return applyTransform(frameState.pixelToCoordinateTransform, pixel.slice());
}
};
@@ -795,7 +795,7 @@ PluggableMap.prototype.getPixelFromCoordinate = function(coordinate) {
if (!frameState) {
return null;
} else {
return _ol_transform_.apply(frameState.coordinateToPixelTransform,
return applyTransform(frameState.coordinateToPixelTransform,
coordinate.slice(0, 2));
}
};

View File

@@ -8,7 +8,7 @@ import {FALSE} from '../functions.js';
import {transform2D} from '../geom/flat/transform.js';
import {get as getProjection, getTransform} from '../proj.js';
import Units from '../proj/Units.js';
import _ol_transform_ from '../transform.js';
import {create as createTransform, compose as composeTransform} from '../transform.js';
/**
* @classdesc
@@ -62,7 +62,7 @@ const Geometry = function() {
* @private
* @type {ol.Transform}
*/
this.tmpTransform_ = _ol_transform_.create();
this.tmpTransform_ = createTransform();
};
@@ -261,7 +261,7 @@ Geometry.prototype.transform = function(source, destination) {
const pixelExtent = source.getExtent();
const projectedExtent = source.getWorldExtent();
const scale = getHeight(projectedExtent) / getHeight(pixelExtent);
_ol_transform_.compose(tmpTransform,
composeTransform(tmpTransform,
projectedExtent[0], projectedExtent[3],
scale, -scale, 0,
0, 0);

View File

@@ -2,7 +2,7 @@
* @module ol/render
*/
import {DEVICE_PIXEL_RATIO} from './has.js';
import _ol_transform_ from './transform.js';
import {create as createTransform, scale as scaleTransform} from './transform.js';
import CanvasImmediateRenderer from './render/canvas/Immediate.js';
@@ -38,6 +38,6 @@ export function toContext(context, opt_options) {
canvas.style.height = size[1] + 'px';
}
const extent = [0, 0, canvas.width, canvas.height];
const transform = _ol_transform_.scale(_ol_transform_.create(), pixelRatio, pixelRatio);
const transform = scaleTransform(createTransform(), pixelRatio, pixelRatio);
return new CanvasImmediateRenderer(context, pixelRatio, extent, transform, 0);
}

View File

@@ -9,7 +9,7 @@ import {linearRingss as linearRingssCenter} from '../geom/flat/center.js';
import {getInteriorPointOfArray, getInteriorPointsOfMultiArray} from '../geom/flat/interiorpoint.js';
import {interpolatePoint} from '../geom/flat/interpolate.js';
import {transform2D} from '../geom/flat/transform.js';
import _ol_transform_ from '../transform.js';
import {create as createTransform, compose as composeTransform} from '../transform.js';
/**
* Lightweight, read-only, {@link ol.Feature} and {@link ol.geom.Geometry} like
@@ -78,7 +78,7 @@ const RenderFeature = function(type, flatCoordinates, ends, properties, id) {
* @private
* @type {ol.Transform}
*/
this.tmpTransform_ = _ol_transform_.create();
this.tmpTransform_ = createTransform();
};
@@ -268,7 +268,7 @@ RenderFeature.prototype.transform = function(source, destination) {
const projectedExtent = source.getWorldExtent();
const scale = getHeight(projectedExtent) / getHeight(pixelExtent);
const transform = this.tmpTransform_;
_ol_transform_.compose(transform,
composeTransform(transform,
projectedExtent[0], projectedExtent[3],
scale, -scale, 0,
0, 0);

View File

@@ -5,7 +5,7 @@ import {getFontFamilies} from '../css.js';
import {createCanvasContext2D} from '../dom.js';
import {clear} from '../obj.js';
import LRUCache from '../structs/LRUCache.js';
import _ol_transform_ from '../transform.js';
import {create as createTransform} from '../transform.js';
/**
@@ -257,7 +257,7 @@ export function rotateAtOffset(context, rotation, offsetX, offsetY) {
}
export const resetTransform = _ol_transform_.create();
export const resetTransform = createTransform();
/**

View File

@@ -15,7 +15,7 @@ import {transform2D} from '../../geom/flat/transform.js';
import {CANVAS_LINE_DASH} from '../../has.js';
import VectorContext from '../VectorContext.js';
import {defaultTextAlign, defaultFillStyle, defaultLineCap, defaultLineDash, defaultLineDashOffset, defaultLineJoin, defaultLineWidth, defaultMiterLimit, defaultStrokeStyle, defaultTextBaseline, defaultFont} from '../canvas.js';
import _ol_transform_ from '../../transform.js';
import {create as createTransform, compose as composeTransform} from '../../transform.js';
/**
* @classdesc
@@ -234,7 +234,7 @@ const CanvasImmediateRenderer = function(context, pixelRatio, extent, transform,
* @private
* @type {ol.Transform}
*/
this.tmpLocalTransform_ = _ol_transform_.create();
this.tmpLocalTransform_ = createTransform();
};
@@ -275,7 +275,7 @@ CanvasImmediateRenderer.prototype.drawImages_ = function(flatCoordinates, offset
if (rotation !== 0 || this.imageScale_ != 1) {
const centerX = x + this.imageAnchorX_;
const centerY = y + this.imageAnchorY_;
_ol_transform_.compose(localTransform,
composeTransform(localTransform,
centerX, centerY,
this.imageScale_, this.imageScale_,
rotation,
@@ -325,7 +325,7 @@ CanvasImmediateRenderer.prototype.drawText_ = function(flatCoordinates, offset,
const x = pixelCoordinates[offset] + this.textOffsetX_;
const y = pixelCoordinates[offset + 1] + this.textOffsetY_;
if (rotation !== 0 || this.textScale_ != 1) {
const localTransform = _ol_transform_.compose(this.tmpLocalTransform_,
const localTransform = composeTransform(this.tmpLocalTransform_,
x, y,
this.textScale_, this.textScale_,
rotation,

View File

@@ -18,7 +18,12 @@ import VectorContext from '../VectorContext.js';
import {drawImage, resetTransform, defaultPadding, defaultFillStyle, defaultStrokeStyle, defaultMiterLimit, defaultLineWidth, defaultLineJoin, defaultLineDashOffset, defaultLineDash, defaultLineCap} from '../canvas.js';
import CanvasInstruction from '../canvas/Instruction.js';
import _ol_render_replay_ from '../replay.js';
import _ol_transform_ from '../../transform.js';
import {
create as createTransform,
compose as composeTransform,
apply as applyTransform,
setFromArray as transformSetFromArray
} from '../../transform.js';
/**
* @constructor
@@ -129,7 +134,7 @@ const CanvasReplay = function(tolerance, maxExtent, resolution, pixelRatio, over
* @private
* @type {!ol.Transform}
*/
this.renderedTransform_ = _ol_transform_.create();
this.renderedTransform_ = createTransform();
/**
* @protected
@@ -159,13 +164,13 @@ const CanvasReplay = function(tolerance, maxExtent, resolution, pixelRatio, over
* @private
* @type {!ol.Transform}
*/
this.tmpLocalTransform_ = _ol_transform_.create();
this.tmpLocalTransform_ = createTransform();
/**
* @private
* @type {!ol.Transform}
*/
this.resetTransform = _ol_transform_.create();
this.resetTransform = createTransform();
};
inherits(CanvasReplay, VectorContext);
@@ -256,14 +261,14 @@ CanvasReplay.prototype.replayImage_ = function(context, x, y, image,
if (rotation !== 0) {
const centerX = x + anchorX;
const centerY = y + anchorY;
transform = _ol_transform_.compose(localTransform,
transform = composeTransform(localTransform,
centerX, centerY, 1, 1, rotation, -centerX, -centerY);
createOrUpdateEmpty(box);
extendCoordinate(box, _ol_transform_.apply(localTransform, p1));
extendCoordinate(box, _ol_transform_.apply(localTransform, p2));
extendCoordinate(box, _ol_transform_.apply(localTransform, p3));
extendCoordinate(box, _ol_transform_.apply(localTransform, p4));
extendCoordinate(box, applyTransform(localTransform, p1));
extendCoordinate(box, applyTransform(localTransform, p2));
extendCoordinate(box, applyTransform(localTransform, p3));
extendCoordinate(box, applyTransform(localTransform, p4));
} else {
createOrUpdate(boxX, boxY, boxX + boxW, boxY + boxH, box);
}
@@ -457,7 +462,7 @@ CanvasReplay.prototype.beginGeometry = function(geometry, feature) {
*/
CanvasReplay.prototype.fill_ = function(context) {
if (this.fillOrigin_) {
const origin = _ol_transform_.apply(this.renderedTransform_, this.fillOrigin_.slice());
const origin = applyTransform(this.renderedTransform_, this.fillOrigin_.slice());
context.translate(origin[0], origin[1]);
context.rotate(this.viewRotation_);
}
@@ -551,7 +556,7 @@ CanvasReplay.prototype.replay_ = function(
pixelCoordinates = transform2D(
this.coordinates, 0, this.coordinates.length, 2,
transform, this.pixelCoordinates_);
_ol_transform_.setFromArray(this.renderedTransform_, transform);
transformSetFromArray(this.renderedTransform_, transform);
}
const skipFeatures = !isEmpty(skippedFeaturesHash);
let i = 0; // instruction index

View File

@@ -15,7 +15,7 @@ import CanvasLineStringReplay from '../canvas/LineStringReplay.js';
import CanvasPolygonReplay from '../canvas/PolygonReplay.js';
import CanvasTextReplay from '../canvas/TextReplay.js';
import _ol_render_replay_ from '../replay.js';
import _ol_transform_ from '../../transform.js';
import {create as createTransform, compose as composeTransform} from '../../transform.js';
/**
@@ -115,7 +115,7 @@ const CanvasReplayGroup = function(
* @private
* @type {ol.Transform}
*/
this.hitDetectionTransform_ = _ol_transform_.create();
this.hitDetectionTransform_ = createTransform();
};
inherits(CanvasReplayGroup, ReplayGroup);
@@ -301,7 +301,7 @@ CanvasReplayGroup.prototype.forEachFeatureAtCoordinate = function(
hitTolerance = Math.round(hitTolerance);
const contextSize = hitTolerance * 2 + 1;
const transform = _ol_transform_.compose(this.hitDetectionTransform_,
const transform = composeTransform(this.hitDetectionTransform_,
hitTolerance + 0.5, hitTolerance + 0.5,
1 / resolution, -1 / resolution,
-rotation,

View File

@@ -4,7 +4,13 @@
import {inherits} from '../../index.js';
import {getCenter} from '../../extent.js';
import VectorContext from '../VectorContext.js';
import _ol_transform_ from '../../transform.js';
import {
create as createTransform,
reset as resetTransform,
rotate as rotateTransform,
scale as scaleTransform,
translate as translateTransform
} from '../../transform.js';
import {create, fromTransform} from '../../vec/mat4.js';
import _ol_webgl_ from '../../webgl.js';
@@ -46,19 +52,19 @@ const WebGLReplay = function(tolerance, maxExtent) {
* @private
* @type {ol.Transform}
*/
this.projectionMatrix_ = _ol_transform_.create();
this.projectionMatrix_ = createTransform();
/**
* @private
* @type {ol.Transform}
*/
this.offsetRotateMatrix_ = _ol_transform_.create();
this.offsetRotateMatrix_ = createTransform();
/**
* @private
* @type {ol.Transform}
*/
this.offsetScaleMatrix_ = _ol_transform_.create();
this.offsetScaleMatrix_ = createTransform();
/**
* @private
@@ -294,17 +300,17 @@ WebGLReplay.prototype.replay = function(context,
const locations = this.setUpProgram(gl, context, size, pixelRatio);
// set the "uniform" values
const projectionMatrix = _ol_transform_.reset(this.projectionMatrix_);
_ol_transform_.scale(projectionMatrix, 2 / (resolution * size[0]), 2 / (resolution * size[1]));
_ol_transform_.rotate(projectionMatrix, -rotation);
_ol_transform_.translate(projectionMatrix, -(center[0] - this.origin[0]), -(center[1] - this.origin[1]));
const projectionMatrix = resetTransform(this.projectionMatrix_);
scaleTransform(projectionMatrix, 2 / (resolution * size[0]), 2 / (resolution * size[1]));
rotateTransform(projectionMatrix, -rotation);
translateTransform(projectionMatrix, -(center[0] - this.origin[0]), -(center[1] - this.origin[1]));
const offsetScaleMatrix = _ol_transform_.reset(this.offsetScaleMatrix_);
_ol_transform_.scale(offsetScaleMatrix, 2 / size[0], 2 / size[1]);
const offsetScaleMatrix = resetTransform(this.offsetScaleMatrix_);
scaleTransform(offsetScaleMatrix, 2 / size[0], 2 / size[1]);
const offsetRotateMatrix = _ol_transform_.reset(this.offsetRotateMatrix_);
const offsetRotateMatrix = resetTransform(this.offsetRotateMatrix_);
if (rotation !== 0) {
_ol_transform_.rotate(offsetRotateMatrix, -rotation);
rotateTransform(offsetRotateMatrix, -rotation);
}
gl.uniformMatrix4fv(locations.u_projectionMatrix, false,

View File

@@ -10,7 +10,7 @@ import {TRUE} from '../functions.js';
import {visibleAtResolution} from '../layer/Layer.js';
import {getLayerRendererPlugins} from '../plugins.js';
import {iconImageCache} from '../style.js';
import _ol_transform_ from '../transform.js';
import {compose as composeTransform, invert as invertTransform, setFromArray as transformSetFromArray} from '../transform.js';
/**
* @constructor
@@ -56,14 +56,14 @@ MapRenderer.prototype.calculateMatrices2D = function(frameState) {
const coordinateToPixelTransform = frameState.coordinateToPixelTransform;
const pixelToCoordinateTransform = frameState.pixelToCoordinateTransform;
_ol_transform_.compose(coordinateToPixelTransform,
composeTransform(coordinateToPixelTransform,
frameState.size[0] / 2, frameState.size[1] / 2,
1 / viewState.resolution, -1 / viewState.resolution,
-viewState.rotation,
-viewState.center[0], -viewState.center[1]);
_ol_transform_.invert(
_ol_transform_.setFromArray(pixelToCoordinateTransform, coordinateToPixelTransform));
invertTransform(
transformSetFromArray(pixelToCoordinateTransform, coordinateToPixelTransform));
};

View File

@@ -13,7 +13,7 @@ import {assign} from '../../obj.js';
import {getLayerRendererPlugins} from '../../plugins.js';
import RendererType from '../Type.js';
import IntermediateCanvasRenderer from '../canvas/IntermediateCanvas.js';
import _ol_transform_ from '../../transform.js';
import {create as createTransform, compose as composeTransform} from '../../transform.js';
/**
* @constructor
@@ -35,7 +35,7 @@ const CanvasImageLayerRenderer = function(imageLayer) {
* @private
* @type {ol.Transform}
*/
this.imageTransform_ = _ol_transform_.create();
this.imageTransform_ = createTransform();
/**
* @type {!Array.<string>}
@@ -175,13 +175,13 @@ CanvasImageLayerRenderer.prototype.prepareFrame = function(frameState, layerStat
const imagePixelRatio = image.getPixelRatio();
const scale = pixelRatio * imageResolution /
(viewResolution * imagePixelRatio);
const transform = _ol_transform_.compose(this.imageTransform_,
const transform = composeTransform(this.imageTransform_,
pixelRatio * size[0] / 2, pixelRatio * size[1] / 2,
scale, scale,
0,
imagePixelRatio * (imageExtent[0] - viewCenter[0]) / imageResolution,
imagePixelRatio * (viewCenter[1] - imageExtent[3]) / imageResolution);
_ol_transform_.compose(this.coordinateToCanvasPixelTransform,
composeTransform(this.coordinateToCanvasPixelTransform,
pixelRatio * size[0] / 2 - transform[4], pixelRatio * size[1] / 2 - transform[5],
pixelRatio / viewResolution, -pixelRatio / viewResolution,
0,

View File

@@ -6,7 +6,7 @@ import {scale as scaleCoordinate} from '../../coordinate.js';
import {createCanvasContext2D} from '../../dom.js';
import {containsExtent, intersects} from '../../extent.js';
import CanvasLayerRenderer from '../canvas/Layer.js';
import _ol_transform_ from '../../transform.js';
import {create as createTransform, apply as applyTransform} from '../../transform.js';
/**
* @constructor
@@ -22,7 +22,7 @@ const IntermediateCanvasRenderer = function(layer) {
* @protected
* @type {ol.Transform}
*/
this.coordinateToCanvasPixelTransform = _ol_transform_.create();
this.coordinateToCanvasPixelTransform = createTransform();
/**
* @private
@@ -128,7 +128,7 @@ IntermediateCanvasRenderer.prototype.forEachLayerAtCoordinate = function(coordin
// so that for example also transparent polygons are detected
return CanvasLayerRenderer.prototype.forEachLayerAtCoordinate.apply(this, arguments);
} else {
const pixel = _ol_transform_.apply(this.coordinateToCanvasPixelTransform, coordinate.slice());
const pixel = applyTransform(this.coordinateToCanvasPixelTransform, coordinate.slice());
scaleCoordinate(pixel, frameState.viewState.resolution / this.renderedResolution);
if (!this.hitCanvasContext_) {

View File

@@ -9,7 +9,7 @@ import RenderEventType from '../../render/EventType.js';
import {rotateAtOffset} from '../../render/canvas.js';
import CanvasImmediateRenderer from '../../render/canvas/Immediate.js';
import LayerRenderer from '../Layer.js';
import _ol_transform_ from '../../transform.js';
import {create as createTransform, apply as applyTransform, compose as composeTransform} from '../../transform.js';
/**
* @constructor
@@ -31,7 +31,7 @@ const CanvasLayerRenderer = function(layer) {
* @private
* @type {ol.Transform}
*/
this.transform_ = _ol_transform_.create();
this.transform_ = createTransform();
};
@@ -54,10 +54,10 @@ CanvasLayerRenderer.prototype.clip = function(context, frameState, extent) {
const bottomRight = getBottomRight(/** @type {ol.Extent} */ (extent));
const bottomLeft = getBottomLeft(/** @type {ol.Extent} */ (extent));
_ol_transform_.apply(frameState.coordinateToPixelTransform, topLeft);
_ol_transform_.apply(frameState.coordinateToPixelTransform, topRight);
_ol_transform_.apply(frameState.coordinateToPixelTransform, bottomRight);
_ol_transform_.apply(frameState.coordinateToPixelTransform, bottomLeft);
applyTransform(frameState.coordinateToPixelTransform, topLeft);
applyTransform(frameState.coordinateToPixelTransform, topRight);
applyTransform(frameState.coordinateToPixelTransform, bottomRight);
applyTransform(frameState.coordinateToPixelTransform, bottomLeft);
context.save();
rotateAtOffset(context, -rotation, width / 2, height / 2);
@@ -168,7 +168,7 @@ CanvasLayerRenderer.prototype.getTransform = function(frameState, offsetX) {
const angle = -viewState.rotation;
const dx2 = -viewState.center[0] + offsetX;
const dy2 = -viewState.center[1];
return _ol_transform_.compose(this.transform_, dx1, dy1, sx, sy, angle, dx2, dy2);
return composeTransform(this.transform_, dx1, dy1, sx, sy, angle, dx2, dy2);
};

View File

@@ -3,7 +3,7 @@
*/
// FIXME offset panning
import _ol_transform_ from '../../transform.js';
import {create as createTransform, apply as applyTransform, compose as composeTransform} from '../../transform.js';
import {inherits} from '../../index.js';
import {stableSort} from '../../array.js';
import {CLASS_UNSELECTABLE} from '../../css.js';
@@ -56,7 +56,7 @@ const CanvasMapRenderer = function(container, map) {
* @private
* @type {ol.Transform}
*/
this.transform_ = _ol_transform_.create();
this.transform_ = createTransform();
};
@@ -123,7 +123,7 @@ CanvasMapRenderer.prototype.getTransform = function(frameState) {
const angle = -viewState.rotation;
const dx2 = -viewState.center[0];
const dy2 = -viewState.center[1];
return _ol_transform_.compose(this.transform_, dx1, dy1, sx, sy, angle, dx2, dy2);
return composeTransform(this.transform_, dx1, dy1, sx, sy, angle, dx2, dy2);
};
@@ -216,7 +216,7 @@ CanvasMapRenderer.prototype.forEachLayerAtPixel = function(pixel, frameState, ca
const layerStates = frameState.layerStatesArray;
const numLayers = layerStates.length;
const coordinate = _ol_transform_.apply(
const coordinate = applyTransform(
frameState.pixelToCoordinateTransform, pixel.slice());
let i;

View File

@@ -10,7 +10,7 @@ import {createCanvasContext2D} from '../../dom.js';
import {containsExtent, createEmpty, equals, getIntersection, isEmpty} from '../../extent.js';
import RendererType from '../Type.js';
import IntermediateCanvasRenderer from '../canvas/IntermediateCanvas.js';
import _ol_transform_ from '../../transform.js';
import {create as createTransform, compose as composeTransform} from '../../transform.js';
/**
* @constructor
@@ -68,7 +68,7 @@ const CanvasTileLayerRenderer = function(tileLayer) {
* @private
* @type {ol.Transform}
*/
this.imageTransform_ = _ol_transform_.create();
this.imageTransform_ = createTransform();
/**
* @protected
@@ -275,13 +275,13 @@ CanvasTileLayerRenderer.prototype.prepareFrame = function(frameState, layerState
}
const scale = this.renderedResolution / viewResolution;
const transform = _ol_transform_.compose(this.imageTransform_,
const transform = composeTransform(this.imageTransform_,
pixelRatio * size[0] / 2, pixelRatio * size[1] / 2,
scale, scale,
0,
(this.renderedExtent_[0] - viewCenter[0]) / this.renderedResolution * pixelRatio,
(viewCenter[1] - this.renderedExtent_[3]) / this.renderedResolution * pixelRatio);
_ol_transform_.compose(this.coordinateToCanvasPixelTransform,
composeTransform(this.coordinateToCanvasPixelTransform,
pixelRatio * size[0] / 2 - transform[4], pixelRatio * size[1] / 2 - transform[5],
pixelRatio / viewResolution, -pixelRatio / viewResolution,
0,

View File

@@ -19,7 +19,13 @@ import _ol_render_replay_ from '../../render/replay.js';
import RendererType from '../Type.js';
import CanvasTileLayerRenderer from '../canvas/TileLayer.js';
import {getSquaredTolerance as getSquaredRenderTolerance, renderFeature} from '../vector.js';
import _ol_transform_ from '../../transform.js';
import {
create as createTransform,
compose as composeTransform,
reset as resetTransform,
scale as scaleTransform,
translate as translateTransform
} from '../../transform.js';
/**
@@ -79,7 +85,7 @@ const CanvasVectorTileLayerRenderer = function(layer) {
* @private
* @type {ol.Transform}
*/
this.tmpTransform_ = _ol_transform_.create();
this.tmpTransform_ = createTransform();
// Use lower resolution for pure vector rendering. Closest resolution otherwise.
this.zDirection = layer.getRenderMode() == VectorTileRenderType.VECTOR ? 1 : 0;
@@ -327,7 +333,7 @@ CanvasVectorTileLayerRenderer.prototype.getReplayTransform_ = function(tile, fra
const size = frameState.size;
const offsetX = Math.round(pixelRatio * size[0] / 2);
const offsetY = Math.round(pixelRatio * size[1] / 2);
return _ol_transform_.compose(this.tmpTransform_,
return composeTransform(this.tmpTransform_,
offsetX, offsetY,
tileResolution / renderResolution, tileResolution / renderResolution,
viewState.rotation,
@@ -502,9 +508,9 @@ CanvasVectorTileLayerRenderer.prototype.renderTileImage_ = function(
continue;
}
const pixelScale = pixelRatio / resolution;
const transform = _ol_transform_.reset(this.tmpTransform_);
_ol_transform_.scale(transform, pixelScale, -pixelScale);
_ol_transform_.translate(transform, -tileExtent[0], -tileExtent[3]);
const transform = resetTransform(this.tmpTransform_);
scaleTransform(transform, pixelScale, -pixelScale);
translateTransform(transform, -tileExtent[0], -tileExtent[3]);
const replayGroup = sourceTile.getReplayGroup(layer, tile.tileCoord.toString());
replayGroup.replay(context, transform, 0, {}, replays);
}

View File

@@ -10,7 +10,16 @@ import {getIntersection, isEmpty} from '../../extent.js';
import {TRUE} from '../../functions.js';
import RendererType from '../Type.js';
import WebGLLayerRenderer from '../webgl/Layer.js';
import _ol_transform_ from '../../transform.js';
import {
create as createTransform,
rotate as rotateTransform,
translate as translateTransform,
scale as scaleTransform,
reset as resetTransform,
apply as applyTransform,
invert as invertTransform,
multiply as multiplyTransform
} from '../../transform.js';
import _ol_webgl_ from '../../webgl.js';
import {createTexture} from '../../webgl/Context.js';
@@ -183,9 +192,9 @@ WebGLImageLayerRenderer.prototype.prepareFrame = function(frameState, layerState
// Translate and scale to flip the Y coord.
const texCoordMatrix = this.texCoordMatrix;
_ol_transform_.reset(texCoordMatrix);
_ol_transform_.scale(texCoordMatrix, 1, -1);
_ol_transform_.translate(texCoordMatrix, 0, -1);
resetTransform(texCoordMatrix);
scaleTransform(texCoordMatrix, 1, -1);
translateTransform(texCoordMatrix, 0, -1);
this.image_ = image;
this.texture = texture;
@@ -212,18 +221,18 @@ WebGLImageLayerRenderer.prototype.updateProjectionMatrix_ = function(canvasWidth
const canvasExtentHeight = canvasHeight * viewResolution;
const projectionMatrix = this.projectionMatrix;
_ol_transform_.reset(projectionMatrix);
_ol_transform_.scale(projectionMatrix,
resetTransform(projectionMatrix);
scaleTransform(projectionMatrix,
pixelRatio * 2 / canvasExtentWidth,
pixelRatio * 2 / canvasExtentHeight);
_ol_transform_.rotate(projectionMatrix, -viewRotation);
_ol_transform_.translate(projectionMatrix,
rotateTransform(projectionMatrix, -viewRotation);
translateTransform(projectionMatrix,
imageExtent[0] - viewCenter[0],
imageExtent[1] - viewCenter[1]);
_ol_transform_.scale(projectionMatrix,
scaleTransform(projectionMatrix,
(imageExtent[2] - imageExtent[0]) / 2,
(imageExtent[3] - imageExtent[1]) / 2);
_ol_transform_.translate(projectionMatrix, 1, 1);
translateTransform(projectionMatrix, 1, 1);
};
@@ -248,7 +257,7 @@ WebGLImageLayerRenderer.prototype.forEachLayerAtPixel = function(pixel, frameSta
if (this.getLayer().getSource().forEachFeatureAtCoordinate !== nullFunction) {
// for ImageCanvas sources use the original hit-detection logic,
// so that for example also transparent polygons are detected
const coordinate = _ol_transform_.apply(
const coordinate = applyTransform(
frameState.pixelToCoordinateTransform, pixel.slice());
const hasFeature = this.forEachFeatureAtCoordinate(coordinate, frameState, 0, TRUE, this);
@@ -266,7 +275,7 @@ WebGLImageLayerRenderer.prototype.forEachLayerAtPixel = function(pixel, frameSta
frameState.size, imageSize);
}
const pixelOnFrameBuffer = _ol_transform_.apply(
const pixelOnFrameBuffer = applyTransform(
this.hitTransformationMatrix_, pixel.slice());
if (pixelOnFrameBuffer[0] < 0 || pixelOnFrameBuffer[0] > imageSize[0] ||
@@ -304,25 +313,25 @@ WebGLImageLayerRenderer.prototype.forEachLayerAtPixel = function(pixel, frameSta
WebGLImageLayerRenderer.prototype.getHitTransformationMatrix_ = function(mapSize, imageSize) {
// the first matrix takes a map pixel, flips the y-axis and scales to
// a range between -1 ... 1
const mapCoordTransform = _ol_transform_.create();
_ol_transform_.translate(mapCoordTransform, -1, -1);
_ol_transform_.scale(mapCoordTransform, 2 / mapSize[0], 2 / mapSize[1]);
_ol_transform_.translate(mapCoordTransform, 0, mapSize[1]);
_ol_transform_.scale(mapCoordTransform, 1, -1);
const mapCoordTransform = createTransform();
translateTransform(mapCoordTransform, -1, -1);
scaleTransform(mapCoordTransform, 2 / mapSize[0], 2 / mapSize[1]);
translateTransform(mapCoordTransform, 0, mapSize[1]);
scaleTransform(mapCoordTransform, 1, -1);
// the second matrix is the inverse of the projection matrix used in the
// shader for drawing
const projectionMatrixInv = _ol_transform_.invert(this.projectionMatrix.slice());
const projectionMatrixInv = invertTransform(this.projectionMatrix.slice());
// the third matrix scales to the image dimensions and flips the y-axis again
const transform = _ol_transform_.create();
_ol_transform_.translate(transform, 0, imageSize[1]);
_ol_transform_.scale(transform, 1, -1);
_ol_transform_.scale(transform, imageSize[0] / 2, imageSize[1] / 2);
_ol_transform_.translate(transform, 1, 1);
const transform = createTransform();
translateTransform(transform, 0, imageSize[1]);
scaleTransform(transform, 1, -1);
scaleTransform(transform, imageSize[0] / 2, imageSize[1] / 2);
translateTransform(transform, 1, 1);
_ol_transform_.multiply(transform, projectionMatrixInv);
_ol_transform_.multiply(transform, mapCoordTransform);
multiplyTransform(transform, projectionMatrixInv);
multiplyTransform(transform, mapCoordTransform);
return transform;
};

View File

@@ -8,7 +8,7 @@ import WebGLImmediateRenderer from '../../render/webgl/Immediate.js';
import LayerRenderer from '../Layer.js';
import {fragment, vertex} from '../webgl/defaultmapshader.js';
import Locations from '../webgl/defaultmapshader/Locations.js';
import _ol_transform_ from '../../transform.js';
import {create as createTransform} from '../../transform.js';
import {create, fromTransform} from '../../vec/mat4.js';
import _ol_webgl_ from '../../webgl.js';
import WebGLBuffer from '../../webgl/Buffer.js';
@@ -64,13 +64,13 @@ const WebGLLayerRenderer = function(mapRenderer, layer) {
* @protected
* @type {ol.Transform}
*/
this.texCoordMatrix = _ol_transform_.create();
this.texCoordMatrix = createTransform();
/**
* @protected
* @type {ol.Transform}
*/
this.projectionMatrix = _ol_transform_.create();
this.projectionMatrix = createTransform();
/**
* @type {Array.<number>}

View File

@@ -16,7 +16,13 @@ import WebGLLayerRenderer from '../webgl/Layer.js';
import {fragment, vertex} from '../webgl/tilelayershader.js';
import Locations from '../webgl/tilelayershader/Locations.js';
import {toSize} from '../../size.js';
import _ol_transform_ from '../../transform.js';
import {
reset as resetTransform,
rotate as rotateTransform,
scale as scaleTransform,
translate as translateTransform,
apply as applyTransform
} from '../../transform.js';
import _ol_webgl_ from '../../webgl.js';
import WebGLBuffer from '../../webgl/Buffer.js';
@@ -355,21 +361,21 @@ WebGLTileLayerRenderer.prototype.prepareFrame = function(frameState, layerState,
this.scheduleExpireCache(frameState, tileSource);
const texCoordMatrix = this.texCoordMatrix;
_ol_transform_.reset(texCoordMatrix);
_ol_transform_.translate(texCoordMatrix,
resetTransform(texCoordMatrix);
translateTransform(texCoordMatrix,
(Math.round(center[0] / tileResolution) * tileResolution - framebufferExtent[0]) /
(framebufferExtent[2] - framebufferExtent[0]),
(Math.round(center[1] / tileResolution) * tileResolution - framebufferExtent[1]) /
(framebufferExtent[3] - framebufferExtent[1]));
if (viewState.rotation !== 0) {
_ol_transform_.rotate(texCoordMatrix, viewState.rotation);
rotateTransform(texCoordMatrix, viewState.rotation);
}
_ol_transform_.scale(texCoordMatrix,
scaleTransform(texCoordMatrix,
frameState.size[0] * viewState.resolution /
(framebufferExtent[2] - framebufferExtent[0]),
frameState.size[1] * viewState.resolution /
(framebufferExtent[3] - framebufferExtent[1]));
_ol_transform_.translate(texCoordMatrix, -0.5, -0.5);
translateTransform(texCoordMatrix, -0.5, -0.5);
return true;
};
@@ -387,7 +393,7 @@ WebGLTileLayerRenderer.prototype.forEachLayerAtPixel = function(pixel, frameStat
pixel[0] / frameState.size[0],
(frameState.size[1] - pixel[1]) / frameState.size[1]];
const pixelOnFrameBufferScaled = _ol_transform_.apply(
const pixelOnFrameBufferScaled = applyTransform(
this.texCoordMatrix, pixelOnMapScaled.slice());
const pixelOnFrameBuffer = [
pixelOnFrameBufferScaled[0] * this.framebufferDimension,

View File

@@ -9,7 +9,7 @@ import WebGLReplayGroup from '../../render/webgl/ReplayGroup.js';
import RendererType from '../Type.js';
import {defaultOrder as defaultRenderOrder, getTolerance as getRenderTolerance, getSquaredTolerance as getSquaredRenderTolerance, renderFeature} from '../vector.js';
import WebGLLayerRenderer from '../webgl/Layer.js';
import _ol_transform_ from '../../transform.js';
import {apply as applyTransform} from '../../transform.js';
/**
* @constructor
@@ -186,7 +186,7 @@ WebGLVectorLayerRenderer.prototype.hasFeatureAtCoordinate = function(coordinate,
* @inheritDoc
*/
WebGLVectorLayerRenderer.prototype.forEachLayerAtPixel = function(pixel, frameState, callback, thisArg) {
const coordinate = _ol_transform_.apply(
const coordinate = applyTransform(
frameState.pixelToCoordinateTransform, pixel.slice());
const hasFeature = this.hasFeatureAtCoordinate(coordinate, frameState);

View File

@@ -19,7 +19,7 @@ import ImageSource from '../source/Image.js';
import RasterOperationType from '../source/RasterOperationType.js';
import SourceState from '../source/State.js';
import TileSource from '../source/Tile.js';
import _ol_transform_ from '../transform.js';
import {create as createTransform} from '../transform.js';
/**
@@ -128,14 +128,14 @@ const RasterSource = function(options) {
*/
this.frameState_ = {
animate: false,
coordinateToPixelTransform: _ol_transform_.create(),
coordinateToPixelTransform: createTransform(),
extent: null,
focus: null,
index: 0,
layerStates: layerStates,
layerStatesArray: layerStatesArray,
pixelRatio: 1,
pixelToCoordinateTransform: _ol_transform_.create(),
pixelToCoordinateTransform: createTransform(),
postRenderFunctions: [],
size: [0, 0],
skippedFeatureUids: {},

View File

@@ -2,7 +2,6 @@
* @module ol/transform
*/
import {assert} from './asserts.js';
const _ol_transform_ = {};
/**
@@ -22,16 +21,16 @@ const _ol_transform_ = {};
* @private
* @type {ol.Transform}
*/
_ol_transform_.tmp_ = new Array(6);
const tmp_ = new Array(6);
/**
* Create an identity transform.
* @return {!ol.Transform} Identity transform.
*/
_ol_transform_.create = function() {
export function create() {
return [1, 0, 0, 1, 0, 0];
};
}
/**
@@ -39,9 +38,9 @@ _ol_transform_.create = function() {
* @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);
};
export function reset(transform) {
return set(transform, 1, 0, 0, 1, 0, 0);
}
/**
@@ -51,7 +50,7 @@ _ol_transform_.reset = function(transform) {
* @param {!ol.Transform} transform2 Transform parameters of matrix 2.
* @return {!ol.Transform} transform1 multiplied with transform2.
*/
_ol_transform_.multiply = function(transform1, transform2) {
export function multiply(transform1, transform2) {
const a1 = transform1[0];
const b1 = transform1[1];
const c1 = transform1[2];
@@ -73,7 +72,7 @@ _ol_transform_.multiply = function(transform1, transform2) {
transform1[5] = b1 * e2 + d1 * f2 + f1;
return transform1;
};
}
/**
* Set the transform components a-f on a given transform.
@@ -86,7 +85,7 @@ _ol_transform_.multiply = function(transform1, transform2) {
* @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) {
export function set(transform, a, b, c, d, e, f) {
transform[0] = a;
transform[1] = b;
transform[2] = c;
@@ -94,7 +93,7 @@ _ol_transform_.set = function(transform, a, b, c, d, e, f) {
transform[4] = e;
transform[5] = f;
return transform;
};
}
/**
@@ -103,7 +102,7 @@ _ol_transform_.set = function(transform, a, b, c, d, e, f) {
* @param {!ol.Transform} transform2 Matrix to set transform from.
* @return {!ol.Transform} transform1 with transform from transform2 applied.
*/
_ol_transform_.setFromArray = function(transform1, transform2) {
export function setFromArray(transform1, transform2) {
transform1[0] = transform2[0];
transform1[1] = transform2[1];
transform1[2] = transform2[2];
@@ -111,7 +110,7 @@ _ol_transform_.setFromArray = function(transform1, transform2) {
transform1[4] = transform2[4];
transform1[5] = transform2[5];
return transform1;
};
}
/**
@@ -123,13 +122,13 @@ _ol_transform_.setFromArray = function(transform1, transform2) {
* @return {ol.Coordinate|ol.Pixel} return coordinate so that operations can be
* chained together.
*/
_ol_transform_.apply = function(transform, coordinate) {
export function apply(transform, coordinate) {
const x = coordinate[0];
const 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;
};
}
/**
@@ -138,12 +137,11 @@ _ol_transform_.apply = function(transform, coordinate) {
* @param {number} angle Angle in radians.
* @return {!ol.Transform} The rotated transform.
*/
_ol_transform_.rotate = function(transform, angle) {
export function rotate(transform, angle) {
const cos = Math.cos(angle);
const sin = Math.sin(angle);
return _ol_transform_.multiply(transform,
_ol_transform_.set(_ol_transform_.tmp_, cos, sin, -sin, cos, 0, 0));
};
return multiply(transform, set(tmp_, cos, sin, -sin, cos, 0, 0));
}
/**
@@ -153,10 +151,9 @@ _ol_transform_.rotate = function(transform, angle) {
* @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));
};
export function scale(transform, x, y) {
return multiply(transform, set(tmp_, x, 0, 0, y, 0, 0));
}
/**
@@ -166,10 +163,9 @@ _ol_transform_.scale = function(transform, x, y) {
* @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));
};
export function translate(transform, dx, dy) {
return multiply(transform, set(tmp_, 1, 0, 0, 1, dx, dy));
}
/**
@@ -185,7 +181,7 @@ _ol_transform_.translate = function(transform, dx, dy) {
* @param {number} dy2 Final translation y.
* @return {!ol.Transform} The composite transform.
*/
_ol_transform_.compose = function(transform, dx1, dy1, sx, sy, angle, dx2, dy2) {
export function compose(transform, dx1, dy1, sx, sy, angle, dx2, dy2) {
const sin = Math.sin(angle);
const cos = Math.cos(angle);
transform[0] = sx * cos;
@@ -195,7 +191,7 @@ _ol_transform_.compose = function(transform, dx1, dy1, sx, sy, angle, dx2, dy2)
transform[4] = dx2 * sx * cos - dy2 * sx * sin + dx1;
transform[5] = dx2 * sy * sin + dy2 * sy * cos + dy1;
return transform;
};
}
/**
@@ -203,8 +199,8 @@ _ol_transform_.compose = function(transform, dx1, dy1, sx, sy, angle, dx2, dy2)
* @param {!ol.Transform} transform Transform.
* @return {!ol.Transform} Inverse of the transform.
*/
_ol_transform_.invert = function(transform) {
const det = _ol_transform_.determinant(transform);
export function invert(transform) {
const det = determinant(transform);
assert(det !== 0, 32); // Transformation matrix cannot be inverted
const a = transform[0];
@@ -222,7 +218,7 @@ _ol_transform_.invert = function(transform) {
transform[5] = -(a * f - b * e) / det;
return transform;
};
}
/**
@@ -230,7 +226,6 @@ _ol_transform_.invert = function(transform) {
* @param {!ol.Transform} mat Matrix.
* @return {number} Determinant.
*/
_ol_transform_.determinant = function(mat) {
export function determinant(mat) {
return mat[0] * mat[3] - mat[1] * mat[2];
};
export default _ol_transform_;
}

View File

@@ -2,7 +2,7 @@ import {equals} from '../../../src/ol/array.js';
import {DEVICE_PIXEL_RATIO} from '../../../src/ol/has.js';
import {toContext} from '../../../src/ol/render.js';
import CanvasImmediateRenderer from '../../../src/ol/render/canvas/Immediate.js';
import _ol_transform_ from '../../../src/ol/transform.js';
import {scale as scaleTransform, create as createTransform} from '../../../src/ol/transform.js';
describe('ol.render', function() {
@@ -27,7 +27,7 @@ describe('ol.render', function() {
[0, 0, size[0] * pixelRatio, size[1] * pixelRatio]);
expect(canvas.style.width).to.be(size[0] + 'px');
expect(canvas.style.height).to.be(size[1] + 'px');
const transform = _ol_transform_.scale(_ol_transform_.create(),
const transform = scaleTransform(createTransform(),
pixelRatio, pixelRatio);
expect(equals(render.transform_, transform)).to.be.ok();
});

View File

@@ -1,4 +1,4 @@
import _ol_transform_ from '../../../../../src/ol/transform.js';
import {create as createTransform} from '../../../../../src/ol/transform.js';
import ImageLayer from '../../../../../src/ol/layer/Image.js';
import MapRenderer from '../../../../../src/ol/renderer/Map.js';
import IntermediateCanvasRenderer from '../../../../../src/ol/renderer/canvas/IntermediateCanvas.js';
@@ -27,11 +27,11 @@ describe('ol.renderer.canvas.IntermediateCanvas', function() {
},
size: [10, 10],
pixelRatio: 1,
coordinateToPixelTransform: _ol_transform_.create(),
pixelToCoordinateTransform: _ol_transform_.create()
coordinateToPixelTransform: createTransform(),
pixelToCoordinateTransform: createTransform()
};
renderer.getImageTransform = function() {
return _ol_transform_.create();
return createTransform();
};
MapRenderer.prototype.calculateMatrices2D(frameState);
layerState = layer.getLayerState();

View File

@@ -15,7 +15,7 @@ import {renderFeature} from '../../../../../src/ol/renderer/vector.js';
import Fill from '../../../../../src/ol/style/Fill.js';
import Stroke from '../../../../../src/ol/style/Stroke.js';
import Style from '../../../../../src/ol/style/Style.js';
import _ol_transform_ from '../../../../../src/ol/transform.js';
import {create as createTransform, scale as scaleTransform} from '../../../../../src/ol/transform.js';
describe('ol.render.canvas.ReplayGroup', function() {
@@ -27,7 +27,7 @@ describe('ol.render.canvas.ReplayGroup', function() {
let fill0, fill1, style1, style2;
beforeEach(function() {
transform = _ol_transform_.create();
transform = createTransform();
replay = new CanvasReplayGroup(1, [-180, -90, 180, 90], 1, 1, false);
feature0 = new Feature(new Polygon(
[[[-90, 0], [-45, 45], [0, 0], [1, 1], [0, -45], [-90, 0]]]));
@@ -92,7 +92,7 @@ describe('ol.render.canvas.ReplayGroup', function() {
replay.replay(context, transform, 0, {});
expect(lineToCount).to.be(4);
lineToCount = 0;
_ol_transform_.scale(transform, 0.25, 0.25);
scaleTransform(transform, 0.25, 0.25);
replay.replay(context, transform, 0, {});
expect(lineToCount).to.be(3);
});
@@ -249,7 +249,7 @@ describe('ol.render.canvas.ReplayGroup', function() {
renderFeature(replay, polygon, style, 1);
renderFeature(replay, multipolygon, style, 1);
renderFeature(replay, geometrycollection, style, 1);
_ol_transform_.scale(transform, 0.1, 0.1);
scaleTransform(transform, 0.1, 0.1);
replay.replay(context, transform, 0, {});
expect(calls.length).to.be(9);
expect(calls[0].geometry).to.be(point.getGeometry());

View File

@@ -6,7 +6,7 @@ import MapRenderer from '../../../../../src/ol/renderer/Map.js';
import CanvasTileLayerRenderer from '../../../../../src/ol/renderer/canvas/TileLayer.js';
import TileWMS from '../../../../../src/ol/source/TileWMS.js';
import XYZ from '../../../../../src/ol/source/XYZ.js';
import _ol_transform_ from '../../../../../src/ol/transform.js';
import {create as createTransform} from '../../../../../src/ol/transform.js';
describe('ol.renderer.canvas.TileLayer', function() {
@@ -89,13 +89,13 @@ describe('ol.renderer.canvas.TileLayer', function() {
extent: [0, 0, 20, 10],
size: [20, 10],
pixelRatio: 2,
coordinateToPixelTransform: _ol_transform_.create(),
pixelToCoordinateTransform: _ol_transform_.create(),
coordinateToPixelTransform: createTransform(),
pixelToCoordinateTransform: createTransform(),
usedTiles: {},
wantedTiles: {}
};
renderer.getImageTransform = function() {
return _ol_transform_.create();
return createTransform();
};
MapRenderer.prototype.calculateMatrices2D(frameState);
const layerState = layer.getLayerState();

View File

@@ -1,4 +1,4 @@
import _ol_transform_ from '../../../../../src/ol/transform.js';
import {apply as applyTransform} from '../../../../../src/ol/transform.js';
import Map from '../../../../../src/ol/Map.js';
import ImageLayer from '../../../../../src/ol/layer/Image.js';
import ImageSource from '../../../../../src/ol/source/Image.js';
@@ -52,23 +52,23 @@ describe('ol.renderer.webgl.ImageLayer', function() {
pixelRatio, viewCenter, viewResolution, viewRotation, imageExtent);
const matrix = renderer.getProjectionMatrix();
let output = _ol_transform_.apply(matrix, [-1, -1]);
let output = applyTransform(matrix, [-1, -1]);
expect(output[0]).to.eql(-6);
expect(output[1]).to.eql(-6);
output = _ol_transform_.apply(matrix, [1, -1]);
output = applyTransform(matrix, [1, -1]);
expect(output[0]).to.eql(2);
expect(output[1]).to.eql(-6);
output = _ol_transform_.apply(matrix, [-1, 1]);
output = applyTransform(matrix, [-1, 1]);
expect(output[0]).to.eql(-6);
expect(output[1]).to.eql(6);
output = _ol_transform_.apply(matrix, [1, 1]);
output = applyTransform(matrix, [1, 1]);
expect(output[0]).to.eql(2);
expect(output[1]).to.eql(6);
output = _ol_transform_.apply(matrix, [0, 0]);
output = applyTransform(matrix, [0, 0]);
expect(output[0]).to.eql(-2);
expect(output[1]).to.eql(0);
});

View File

@@ -1,4 +1,16 @@
import _ol_transform_ from '../../../src/ol/transform.js';
import {
create,
reset,
set,
setFromArray,
translate,
scale,
rotate,
multiply,
compose,
invert,
apply
} from '../../../src/ol/transform.js';
describe('ol.transform', function() {
@@ -9,71 +21,71 @@ describe('ol.transform', function() {
});
}
describe('ol.transform.create()', function() {
describe('create()', function() {
it('creates an identity transform', function() {
expect(_ol_transform_.create()).to.eql([1, 0, 0, 1, 0, 0]);
expect(create()).to.eql([1, 0, 0, 1, 0, 0]);
});
});
describe('ol.transform.reset()', function() {
describe('reset()', function() {
it('resets tansform to an identity transform', function() {
const transform = [1, 2, 3, 4, 5, 6];
expect(_ol_transform_.reset(transform)).to.eql([1, 0, 0, 1, 0, 0]);
expect(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() {
describe('set()', function() {
it('sets the given values', function() {
const transform = _ol_transform_.create();
expect(_ol_transform_.set(transform, 1, 2, 3, 4, 5, 6)).to.eql([1, 2, 3, 4, 5, 6]);
const transform = create();
expect(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() {
describe('setFromArray()', function() {
it('sets values of 2nd transform on 1st transform', function() {
const transform1 = _ol_transform_.create();
const transform1 = create();
const transform2 = [1, 2, 3, 4, 5, 6];
expect(_ol_transform_.setFromArray(transform1, transform2)).to.eql(transform2);
expect(setFromArray(transform1, transform2)).to.eql(transform2);
expect(transform1).to.eql(transform2);
});
});
describe('ol.transform.translate()', function() {
describe('translate()', function() {
it('applies translation to a transform', function() {
const transform = _ol_transform_.create();
expect(_ol_transform_.translate(transform, 3, 4)).to.eql([1, 0, 0, 1, 3, 4]);
const transform = create();
expect(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() {
describe('scale()', function() {
it('applies scaling to a transform', function() {
const transform = _ol_transform_.create();
expect(_ol_transform_.scale(transform, 3, 4)).to.eql([3, 0, 0, 4, 0, 0]);
const transform = create();
expect(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() {
describe('rotate()', function() {
it('applies rotation to a transform', function() {
const transform = _ol_transform_.create();
assertRoughlyEqual(_ol_transform_.rotate(transform, Math.PI / 2), [0, 1, -1, 0, 0, 0]);
const transform = create();
assertRoughlyEqual(rotate(transform, Math.PI / 2), [0, 1, -1, 0, 0, 0]);
assertRoughlyEqual(transform, [0, 1, -1, 0, 0, 0]);
});
});
describe('ol.transform.multiply()', function() {
describe('multiply()', function() {
it('multiplies two transforms', function() {
const transform1 = [1, 2, 1, 2, 1, 2];
const transform2 = [1, 2, 1, 2, 1, 2];
expect(_ol_transform_.multiply(transform1, transform2)).to.eql([3, 6, 3, 6, 4, 8]);
expect(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() {
describe('compose()', function() {
it('composes a translate, scale, rotate, translate transform', function() {
const dx1 = 3;
const dy1 = 4;
@@ -83,36 +95,36 @@ describe('ol.transform', function() {
const dx2 = -dx1 / 2;
const dy2 = -dy1 / 2;
const 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);
const expected = create();
translate(expected, dx1, dy1);
scale(expected, sx, sy);
rotate(expected, angle);
translate(expected, dx2, dy2);
const composed = _ol_transform_.create();
const composedReturn = _ol_transform_.compose(composed, dx1, dy1, sx, sy, angle, dx2, dy2);
const composed = create();
const composedReturn = compose(composed, dx1, dy1, sx, sy, angle, dx2, dy2);
expect(composed).to.equal(composedReturn);
expect(composed).to.eql(expected);
});
});
describe('ol.transform.invert()', function() {
describe('invert()', function() {
it('inverts a transform', function() {
let transform = [1, 0, 1, 0, 1, 0];
expect(function() {
_ol_transform_.invert(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(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() {
describe('apply()', function() {
it('applies a transform to a 2d vector', function() {
const transform = _ol_transform_.translate(_ol_transform_.create(), 2, 3);
const transform = translate(create(), 2, 3);
const point = [1, 2];
expect(_ol_transform_.apply(transform, point)).to.eql([3, 5]);
expect(apply(transform, point)).to.eql([3, 5]);
expect(point).to.eql([3, 5]);
});
});