mirror of
https://github.com/openseadragon/openseadragon.git
synced 2024-11-21 20:56:09 +03:00
Coordinate conversion functions for TiledImage
This commit is contained in:
parent
2a5fd0b0f7
commit
d5c345970c
@ -8,7 +8,8 @@
|
|||||||
"*.sublime-workspace"
|
"*.sublime-workspace"
|
||||||
],
|
],
|
||||||
"folder_exclude_patterns": [
|
"folder_exclude_patterns": [
|
||||||
"node_modules"
|
"node_modules",
|
||||||
|
"coverage"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -87,6 +87,7 @@ $.TiledImage = function( options ) {
|
|||||||
|
|
||||||
// Ratio of zoomable image height to width.
|
// Ratio of zoomable image height to width.
|
||||||
this.normHeight = options.source.dimensions.y / options.source.dimensions.x;
|
this.normHeight = options.source.dimensions.y / options.source.dimensions.x;
|
||||||
|
this.contentAspectX = options.source.dimensions.x / options.source.dimensions.y;
|
||||||
|
|
||||||
if ( options.width ) {
|
if ( options.width ) {
|
||||||
this._setScale(options.width);
|
this._setScale(options.width);
|
||||||
@ -183,6 +184,122 @@ $.extend($.TiledImage.prototype, $.EventSource.prototype, /** @lends OpenSeadrag
|
|||||||
return new $.Point(this.source.dimensions.x, this.source.dimensions.y);
|
return new $.Point(this.source.dimensions.x, this.source.dimensions.y);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Translates from OpenSeadragon viewer coordinate system to image coordinate system.
|
||||||
|
* This method can be called either by passing X,Y coordinates or an
|
||||||
|
* OpenSeadragon.Point
|
||||||
|
* @function
|
||||||
|
* @param {OpenSeadragon.Point} viewerX the point in viewport coordinate system.
|
||||||
|
* @param {Number} viewerX X coordinate in viewport coordinate system.
|
||||||
|
* @param {Number} viewerY Y coordinate in viewport coordinate system.
|
||||||
|
* @return {OpenSeadragon.Point} a point representing the coordinates in the image.
|
||||||
|
*/
|
||||||
|
viewportToImageCoordinates: function( viewerX, viewerY ) {
|
||||||
|
if ( arguments.length == 1 ) {
|
||||||
|
//they passed a point instead of individual components
|
||||||
|
return this.viewportToImageCoordinates( viewerX.x, viewerX.y );
|
||||||
|
}
|
||||||
|
|
||||||
|
var contentSize = this.source.dimensions;
|
||||||
|
return new $.Point((viewerX - this._worldX) * (contentSize.x / this._scale),
|
||||||
|
(viewerY - this._worldY) * ((contentSize.y * this.contentAspectX) / this._scale));
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Translates from image coordinate system to OpenSeadragon viewer coordinate system
|
||||||
|
* This method can be called either by passing X,Y coordinates or an
|
||||||
|
* OpenSeadragon.Point
|
||||||
|
* @function
|
||||||
|
* @param {OpenSeadragon.Point} imageX the point in image coordinate system.
|
||||||
|
* @param {Number} imageX X coordinate in image coordinate system.
|
||||||
|
* @param {Number} imageY Y coordinate in image coordinate system.
|
||||||
|
* @return {OpenSeadragon.Point} a point representing the coordinates in the viewport.
|
||||||
|
*/
|
||||||
|
imageToViewportCoordinates: function( imageX, imageY ) {
|
||||||
|
if ( arguments.length == 1 ) {
|
||||||
|
//they passed a point instead of individual components
|
||||||
|
return this.imageToViewportCoordinates( imageX.x, imageX.y );
|
||||||
|
}
|
||||||
|
|
||||||
|
var contentSize = this.source.dimensions;
|
||||||
|
return new $.Point(this._worldX + ((imageX / contentSize.x) * this._scale),
|
||||||
|
this._worldY + ((imageY / contentSize.y / this.contentAspectX) * this._scale));
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Translates from a rectangle which describes a portion of the image in
|
||||||
|
* pixel coordinates to OpenSeadragon viewport rectangle coordinates.
|
||||||
|
* This method can be called either by passing X,Y,width,height or an
|
||||||
|
* OpenSeadragon.Rect
|
||||||
|
* @function
|
||||||
|
* @param {OpenSeadragon.Rect} imageX the rectangle in image coordinate system.
|
||||||
|
* @param {Number} imageX the X coordinate of the top left corner of the rectangle
|
||||||
|
* in image coordinate system.
|
||||||
|
* @param {Number} imageY the Y coordinate of the top left corner of the rectangle
|
||||||
|
* in image coordinate system.
|
||||||
|
* @param {Number} pixelWidth the width in pixel of the rectangle.
|
||||||
|
* @param {Number} pixelHeight the height in pixel of the rectangle.
|
||||||
|
*/
|
||||||
|
imageToViewportRectangle: function( imageX, imageY, pixelWidth, pixelHeight ) {
|
||||||
|
var coordA,
|
||||||
|
coordB,
|
||||||
|
rect;
|
||||||
|
if( arguments.length == 1 ) {
|
||||||
|
//they passed a rectangle instead of individual components
|
||||||
|
rect = imageX;
|
||||||
|
return this.imageToViewportRectangle(
|
||||||
|
rect.x, rect.y, rect.width, rect.height
|
||||||
|
);
|
||||||
|
}
|
||||||
|
coordA = this.imageToViewportCoordinates(
|
||||||
|
imageX, imageY
|
||||||
|
);
|
||||||
|
coordB = this.imageToViewportCoordinates(
|
||||||
|
imageX + pixelWidth, imageY + pixelHeight
|
||||||
|
);
|
||||||
|
return new $.Rect(
|
||||||
|
coordA.x,
|
||||||
|
coordA.y,
|
||||||
|
coordB.x - coordA.x,
|
||||||
|
coordB.y - coordA.y
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Translates from a rectangle which describes a portion of
|
||||||
|
* the viewport in point coordinates to image rectangle coordinates.
|
||||||
|
* This method can be called either by passing X,Y,width,height or an
|
||||||
|
* OpenSeadragon.Rect
|
||||||
|
* @function
|
||||||
|
* @param {OpenSeadragon.Rect} viewerX the rectangle in viewport coordinate system.
|
||||||
|
* @param {Number} viewerX the X coordinate of the top left corner of the rectangle
|
||||||
|
* in viewport coordinate system.
|
||||||
|
* @param {Number} imageY the Y coordinate of the top left corner of the rectangle
|
||||||
|
* in viewport coordinate system.
|
||||||
|
* @param {Number} pointWidth the width of the rectangle in viewport coordinate system.
|
||||||
|
* @param {Number} pointHeight the height of the rectangle in viewport coordinate system.
|
||||||
|
*/
|
||||||
|
viewportToImageRectangle: function( viewerX, viewerY, pointWidth, pointHeight ) {
|
||||||
|
var coordA,
|
||||||
|
coordB,
|
||||||
|
rect;
|
||||||
|
if ( arguments.length == 1 ) {
|
||||||
|
//they passed a rectangle instead of individual components
|
||||||
|
rect = viewerX;
|
||||||
|
return this.viewportToImageRectangle(
|
||||||
|
rect.x, rect.y, rect.width, rect.height
|
||||||
|
);
|
||||||
|
}
|
||||||
|
coordA = this.viewportToImageCoordinates( viewerX, viewerY );
|
||||||
|
coordB = this.viewportToImageCoordinates(viewerX + pointWidth, viewerY + pointHeight);
|
||||||
|
return new $.Rect(
|
||||||
|
coordA.x,
|
||||||
|
coordA.y,
|
||||||
|
coordB.x - coordA.x,
|
||||||
|
coordB.y - coordA.y
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the TiledImage's position in the world.
|
* Sets the TiledImage's position in the world.
|
||||||
* @param {OpenSeadragon.Point} position - The new position, in world coordinates.
|
* @param {OpenSeadragon.Point} position - The new position, in world coordinates.
|
||||||
|
@ -942,6 +942,7 @@ $.Viewport.prototype = /** @lends OpenSeadragon.Viewport.prototype */{
|
|||||||
* Translates from OpenSeadragon viewer coordinate system to image coordinate system.
|
* Translates from OpenSeadragon viewer coordinate system to image coordinate system.
|
||||||
* This method can be called either by passing X,Y coordinates or an
|
* This method can be called either by passing X,Y coordinates or an
|
||||||
* OpenSeadragon.Point
|
* OpenSeadragon.Point
|
||||||
|
* Note: not accurate with multi-image; use TiledImage.viewportToImageCoordinates instead.
|
||||||
* @function
|
* @function
|
||||||
* @param {OpenSeadragon.Point} viewerX the point in viewport coordinate system.
|
* @param {OpenSeadragon.Point} viewerX the point in viewport coordinate system.
|
||||||
* @param {Number} viewerX X coordinate in viewport coordinate system.
|
* @param {Number} viewerX X coordinate in viewport coordinate system.
|
||||||
@ -954,6 +955,10 @@ $.Viewport.prototype = /** @lends OpenSeadragon.Viewport.prototype */{
|
|||||||
return this.viewportToImageCoordinates( viewerX.x, viewerX.y );
|
return this.viewportToImageCoordinates( viewerX.x, viewerX.y );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.viewer && this.viewer.world.getItemCount() > 1) {
|
||||||
|
$.console.error('[Viewport.viewportToImageCoordinates] is not accurate with multi-image; use TiledImage.viewportToImageCoordinates instead.');
|
||||||
|
}
|
||||||
|
|
||||||
var scale = this.homeBounds.width;
|
var scale = this.homeBounds.width;
|
||||||
return new $.Point((viewerX - this.homeBounds.x) * (this.contentSize.x / scale),
|
return new $.Point((viewerX - this.homeBounds.x) * (this.contentSize.x / scale),
|
||||||
(viewerY - this.homeBounds.y) * ((this.contentSize.y * this.contentAspectX) / scale));
|
(viewerY - this.homeBounds.y) * ((this.contentSize.y * this.contentAspectX) / scale));
|
||||||
@ -963,6 +968,7 @@ $.Viewport.prototype = /** @lends OpenSeadragon.Viewport.prototype */{
|
|||||||
* Translates from image coordinate system to OpenSeadragon viewer coordinate system
|
* Translates from image coordinate system to OpenSeadragon viewer coordinate system
|
||||||
* This method can be called either by passing X,Y coordinates or an
|
* This method can be called either by passing X,Y coordinates or an
|
||||||
* OpenSeadragon.Point
|
* OpenSeadragon.Point
|
||||||
|
* Note: not accurate with multi-image; use TiledImage.imageToViewportCoordinates instead.
|
||||||
* @function
|
* @function
|
||||||
* @param {OpenSeadragon.Point} imageX the point in image coordinate system.
|
* @param {OpenSeadragon.Point} imageX the point in image coordinate system.
|
||||||
* @param {Number} imageX X coordinate in image coordinate system.
|
* @param {Number} imageX X coordinate in image coordinate system.
|
||||||
@ -975,6 +981,10 @@ $.Viewport.prototype = /** @lends OpenSeadragon.Viewport.prototype */{
|
|||||||
return this.imageToViewportCoordinates( imageX.x, imageX.y );
|
return this.imageToViewportCoordinates( imageX.x, imageX.y );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.viewer && this.viewer.world.getItemCount() > 1) {
|
||||||
|
$.console.error('[Viewport.imageToViewportCoordinates] is not accurate with multi-image; use TiledImage.imageToViewportCoordinates instead.');
|
||||||
|
}
|
||||||
|
|
||||||
var scale = this.homeBounds.width;
|
var scale = this.homeBounds.width;
|
||||||
return new $.Point(this.homeBounds.x + ((imageX / this.contentSize.x) * scale),
|
return new $.Point(this.homeBounds.x + ((imageX / this.contentSize.x) * scale),
|
||||||
this.homeBounds.y + ((imageY / this.contentSize.y / this.contentAspectX) * scale));
|
this.homeBounds.y + ((imageY / this.contentSize.y / this.contentAspectX) * scale));
|
||||||
@ -985,6 +995,7 @@ $.Viewport.prototype = /** @lends OpenSeadragon.Viewport.prototype */{
|
|||||||
* pixel coordinates to OpenSeadragon viewport rectangle coordinates.
|
* pixel coordinates to OpenSeadragon viewport rectangle coordinates.
|
||||||
* This method can be called either by passing X,Y,width,height or an
|
* This method can be called either by passing X,Y,width,height or an
|
||||||
* OpenSeadragon.Rect
|
* OpenSeadragon.Rect
|
||||||
|
* Note: not accurate with multi-image; use TiledImage.imageToViewportRectangle instead.
|
||||||
* @function
|
* @function
|
||||||
* @param {OpenSeadragon.Rect} imageX the rectangle in image coordinate system.
|
* @param {OpenSeadragon.Rect} imageX the rectangle in image coordinate system.
|
||||||
* @param {Number} imageX the X coordinate of the top left corner of the rectangle
|
* @param {Number} imageX the X coordinate of the top left corner of the rectangle
|
||||||
@ -1005,6 +1016,7 @@ $.Viewport.prototype = /** @lends OpenSeadragon.Viewport.prototype */{
|
|||||||
rect.x, rect.y, rect.width, rect.height
|
rect.x, rect.y, rect.width, rect.height
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
coordA = this.imageToViewportCoordinates(
|
coordA = this.imageToViewportCoordinates(
|
||||||
imageX, imageY
|
imageX, imageY
|
||||||
);
|
);
|
||||||
@ -1024,6 +1036,7 @@ $.Viewport.prototype = /** @lends OpenSeadragon.Viewport.prototype */{
|
|||||||
* the viewport in point coordinates to image rectangle coordinates.
|
* the viewport in point coordinates to image rectangle coordinates.
|
||||||
* This method can be called either by passing X,Y,width,height or an
|
* This method can be called either by passing X,Y,width,height or an
|
||||||
* OpenSeadragon.Rect
|
* OpenSeadragon.Rect
|
||||||
|
* Note: not accurate with multi-image; use TiledImage.viewportToImageRectangle instead.
|
||||||
* @function
|
* @function
|
||||||
* @param {OpenSeadragon.Rect} viewerX the rectangle in viewport coordinate system.
|
* @param {OpenSeadragon.Rect} viewerX the rectangle in viewport coordinate system.
|
||||||
* @param {Number} viewerX the X coordinate of the top left corner of the rectangle
|
* @param {Number} viewerX the X coordinate of the top left corner of the rectangle
|
||||||
@ -1044,6 +1057,7 @@ $.Viewport.prototype = /** @lends OpenSeadragon.Viewport.prototype */{
|
|||||||
rect.x, rect.y, rect.width, rect.height
|
rect.x, rect.y, rect.width, rect.height
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
coordA = this.viewportToImageCoordinates( viewerX, viewerY );
|
coordA = this.viewportToImageCoordinates( viewerX, viewerY );
|
||||||
coordB = this.viewportToImageCoordinates(viewerX + pointWidth, viewerY + pointHeight);
|
coordB = this.viewportToImageCoordinates(viewerX + pointWidth, viewerY + pointHeight);
|
||||||
return new $.Rect(
|
return new $.Rect(
|
||||||
@ -1057,6 +1071,7 @@ $.Viewport.prototype = /** @lends OpenSeadragon.Viewport.prototype */{
|
|||||||
/**
|
/**
|
||||||
* Convert pixel coordinates relative to the viewer element to image
|
* Convert pixel coordinates relative to the viewer element to image
|
||||||
* coordinates.
|
* coordinates.
|
||||||
|
* Note: not accurate with multi-image.
|
||||||
* @param {OpenSeadragon.Point} pixel
|
* @param {OpenSeadragon.Point} pixel
|
||||||
* @returns {OpenSeadragon.Point}
|
* @returns {OpenSeadragon.Point}
|
||||||
*/
|
*/
|
||||||
@ -1068,6 +1083,7 @@ $.Viewport.prototype = /** @lends OpenSeadragon.Viewport.prototype */{
|
|||||||
/**
|
/**
|
||||||
* Convert pixel coordinates relative to the image to
|
* Convert pixel coordinates relative to the image to
|
||||||
* viewer element coordinates.
|
* viewer element coordinates.
|
||||||
|
* Note: not accurate with multi-image.
|
||||||
* @param {OpenSeadragon.Point} pixel
|
* @param {OpenSeadragon.Point} pixel
|
||||||
* @returns {OpenSeadragon.Point}
|
* @returns {OpenSeadragon.Point}
|
||||||
*/
|
*/
|
||||||
@ -1078,6 +1094,7 @@ $.Viewport.prototype = /** @lends OpenSeadragon.Viewport.prototype */{
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert pixel coordinates relative to the window to image coordinates.
|
* Convert pixel coordinates relative to the window to image coordinates.
|
||||||
|
* Note: not accurate with multi-image.
|
||||||
* @param {OpenSeadragon.Point} pixel
|
* @param {OpenSeadragon.Point} pixel
|
||||||
* @returns {OpenSeadragon.Point}
|
* @returns {OpenSeadragon.Point}
|
||||||
*/
|
*/
|
||||||
@ -1089,6 +1106,7 @@ $.Viewport.prototype = /** @lends OpenSeadragon.Viewport.prototype */{
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert image coordinates to pixel coordinates relative to the window.
|
* Convert image coordinates to pixel coordinates relative to the window.
|
||||||
|
* Note: not accurate with multi-image.
|
||||||
* @param {OpenSeadragon.Point} pixel
|
* @param {OpenSeadragon.Point} pixel
|
||||||
* @returns {OpenSeadragon.Point}
|
* @returns {OpenSeadragon.Point}
|
||||||
*/
|
*/
|
||||||
@ -1146,13 +1164,18 @@ $.Viewport.prototype = /** @lends OpenSeadragon.Viewport.prototype */{
|
|||||||
* 1 means original image size, 0.5 half size...
|
* 1 means original image size, 0.5 half size...
|
||||||
* Viewport zoom: ratio of the displayed image's width to viewport's width.
|
* Viewport zoom: ratio of the displayed image's width to viewport's width.
|
||||||
* 1 means identical width, 2 means image's width is twice the viewport's width...
|
* 1 means identical width, 2 means image's width is twice the viewport's width...
|
||||||
|
* Note: not accurate with multi-image.
|
||||||
* @function
|
* @function
|
||||||
* @param {Number} viewportZoom The viewport zoom
|
* @param {Number} viewportZoom The viewport zoom
|
||||||
* target zoom.
|
* target zoom.
|
||||||
* @returns {Number} imageZoom The image zoom
|
* @returns {Number} imageZoom The image zoom
|
||||||
*/
|
*/
|
||||||
viewportToImageZoom: function( viewportZoom ) {
|
viewportToImageZoom: function( viewportZoom ) {
|
||||||
var imageWidth = this.viewer.source.dimensions.x;
|
if (this.viewer && this.viewer.world.getItemCount() > 1) {
|
||||||
|
$.console.error('[Viewport.viewportToImageZoom] is not accurate with multi-image.');
|
||||||
|
}
|
||||||
|
|
||||||
|
var imageWidth = this.contentSize.x;
|
||||||
var containerWidth = this._containerInnerSize.x;
|
var containerWidth = this._containerInnerSize.x;
|
||||||
var scale = this.homeBounds.width;
|
var scale = this.homeBounds.width;
|
||||||
var viewportToImageZoomRatio = (containerWidth / imageWidth) * scale;
|
var viewportToImageZoomRatio = (containerWidth / imageWidth) * scale;
|
||||||
@ -1165,13 +1188,18 @@ $.Viewport.prototype = /** @lends OpenSeadragon.Viewport.prototype */{
|
|||||||
* 1 means original image size, 0.5 half size...
|
* 1 means original image size, 0.5 half size...
|
||||||
* Viewport zoom: ratio of the displayed image's width to viewport's width.
|
* Viewport zoom: ratio of the displayed image's width to viewport's width.
|
||||||
* 1 means identical width, 2 means image's width is twice the viewport's width...
|
* 1 means identical width, 2 means image's width is twice the viewport's width...
|
||||||
|
* Note: not accurate with multi-image.
|
||||||
* @function
|
* @function
|
||||||
* @param {Number} imageZoom The image zoom
|
* @param {Number} imageZoom The image zoom
|
||||||
* target zoom.
|
* target zoom.
|
||||||
* @returns {Number} viewportZoom The viewport zoom
|
* @returns {Number} viewportZoom The viewport zoom
|
||||||
*/
|
*/
|
||||||
imageToViewportZoom: function( imageZoom ) {
|
imageToViewportZoom: function( imageZoom ) {
|
||||||
var imageWidth = this.viewer.source.dimensions.x;
|
if (this.viewer && this.viewer.world.getItemCount() > 1) {
|
||||||
|
$.console.error('[Viewport.imageToViewportZoom] is not accurate with multi-image.');
|
||||||
|
}
|
||||||
|
|
||||||
|
var imageWidth = this.contentSize.x;
|
||||||
var containerWidth = this._containerInnerSize.x;
|
var containerWidth = this._containerInnerSize.x;
|
||||||
var scale = this.homeBounds.width;
|
var scale = this.homeBounds.width;
|
||||||
var viewportToImageZoomRatio = (imageWidth / containerWidth) / scale;
|
var viewportToImageZoomRatio = (imageWidth / containerWidth) / scale;
|
||||||
|
Loading…
Reference in New Issue
Block a user