diff --git a/lib/commonjs/helper/coordinateConversion.js b/lib/commonjs/helper/coordinateConversion.js index 81dc625..b682213 100644 --- a/lib/commonjs/helper/coordinateConversion.js +++ b/lib/commonjs/helper/coordinateConversion.js @@ -118,7 +118,6 @@ function viewportPositionToImagePosition({ x: (viewportPosition.x - sheetOriginOnContainer.x) / zoomableEvent.zoomLevel / resizedImgScale, y: (viewportPosition.y - sheetOriginOnContainer.y) / zoomableEvent.zoomLevel / resizedImgScale }; - if (pointOnSheet.x < 0 || pointOnSheet.x > imageSize.width || pointOnSheet.y < 0 || pointOnSheet.y > imageSize.height) return null; return pointOnSheet; } //# sourceMappingURL=coordinateConversion.js.map \ No newline at end of file diff --git a/lib/commonjs/helper/coordinateConversion.js.map b/lib/commonjs/helper/coordinateConversion.js.map index 439af0a..de445da 100644 --- a/lib/commonjs/helper/coordinateConversion.js.map +++ b/lib/commonjs/helper/coordinateConversion.js.map @@ -1 +1 @@ -{"version":3,"sources":["coordinateConversion.ts"],"names":["defaultTransformSubjectData","offsetX","offsetY","zoomLevel","originalWidth","originalHeight","originalPageX","originalPageY","applyContainResizeMode","imgSize","containerSize","width","imageWidth","height","imageHeight","areaWidth","areaHeight","imageAspect","areaAspect","newSize","isNaN","scale","isFinite","size","getImageOriginOnTransformSubject","resizedImageSize","transformSubject","x","y","viewportPositionToImagePosition","viewportPosition","imageSize","zoomableEvent","resizedImgSize","resizedImgScale","sheetOriginOnContainer","pointOnSheet"],"mappings":"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","sourcesContent":["import { Size2D, Vec2D, ZoomableViewEvent } from 'src/typings';\n\nexport const defaultTransformSubjectData: ZoomableViewEvent = {\n offsetX: 0,\n offsetY: 0,\n zoomLevel: 0,\n originalWidth: 0,\n originalHeight: 0,\n originalPageX: 0,\n originalPageY: 0,\n};\n\n/**\n * Assuming you have an image that's being resized to fit into a container\n * using the \"contain\" resize mode. You can use this function to calculate the\n * size of the image after fitting.\n *\n * Since our sheet is resized in this manner, we need this function\n * for things like pan boundaries and marker placement\n *\n * @param imgSize\n * @param containerSize\n */\nexport function applyContainResizeMode(\n imgSize: Size2D,\n containerSize: Size2D\n): { size: Size2D; scale: number } | { size: null; scale: null } {\n const { width: imageWidth, height: imageHeight } = imgSize;\n const { width: areaWidth, height: areaHeight } = containerSize;\n const imageAspect = imageWidth / imageHeight;\n const areaAspect = areaWidth / areaHeight;\n\n let newSize;\n if (imageAspect >= areaAspect) {\n // longest edge is horizontal\n newSize = { width: areaWidth, height: areaWidth / imageAspect };\n } else {\n // longest edge is vertical\n newSize = { width: areaHeight * imageAspect, height: areaHeight };\n }\n\n if (isNaN(newSize.height)) newSize.height = areaHeight;\n if (isNaN(newSize.width)) newSize.width = areaWidth;\n\n const scale = imageWidth\n ? newSize.width / imageWidth\n : newSize.height / imageHeight;\n\n if (!isFinite(scale)) return { size: null, scale: null };\n\n return {\n size: newSize,\n scale,\n };\n}\n\n/**\n * get the coord of image's origin relative to the transformSubject\n * @param resizedImageSize\n * @param transformSubject\n */\nexport function getImageOriginOnTransformSubject(\n resizedImageSize: Size2D,\n transformSubject: ZoomableViewEvent\n) {\n const { offsetX, offsetY, zoomLevel, originalWidth, originalHeight } =\n transformSubject;\n return {\n x:\n offsetX * zoomLevel +\n originalWidth / 2 -\n (resizedImageSize.width / 2) * zoomLevel,\n y:\n offsetY * zoomLevel +\n originalHeight / 2 -\n (resizedImageSize.height / 2) * zoomLevel,\n };\n}\n\n/**\n * Translates the coord system of a point from the viewport's space to the image's space\n *\n * @param pointOnContainer\n * @param sheetImageSize\n * @param transformSubject\n *\n * @return {Vec2D} returns null if point is out of the sheet's bound\n */\nexport function viewportPositionToImagePosition({\n viewportPosition,\n imageSize,\n zoomableEvent,\n}: {\n viewportPosition: Vec2D;\n imageSize: Size2D;\n zoomableEvent: ZoomableViewEvent;\n}): Vec2D | null {\n const { size: resizedImgSize, scale: resizedImgScale } =\n applyContainResizeMode(imageSize, {\n width: zoomableEvent.originalWidth,\n height: zoomableEvent.originalHeight,\n }) || {};\n\n if (resizedImgScale == null || resizedImgSize == null) return null;\n\n const sheetOriginOnContainer = getImageOriginOnTransformSubject(\n resizedImgSize,\n zoomableEvent\n );\n\n const pointOnSheet = {\n x:\n (viewportPosition.x - sheetOriginOnContainer.x) /\n zoomableEvent.zoomLevel /\n resizedImgScale,\n y:\n (viewportPosition.y - sheetOriginOnContainer.y) /\n zoomableEvent.zoomLevel /\n resizedImgScale,\n };\n\n if (\n pointOnSheet.x < 0 ||\n pointOnSheet.x > imageSize.width ||\n pointOnSheet.y < 0 ||\n pointOnSheet.y > imageSize.height\n )\n return null;\n\n return pointOnSheet;\n}\n"]} \ No newline at end of file +{"version":3,"sources":["coordinateConversion.ts"],"names":["defaultTransformSubjectData","offsetX","offsetY","zoomLevel","originalWidth","originalHeight","originalPageX","originalPageY","applyContainResizeMode","imgSize","containerSize","width","imageWidth","height","imageHeight","areaWidth","areaHeight","imageAspect","areaAspect","newSize","isNaN","scale","isFinite","size","getImageOriginOnTransformSubject","resizedImageSize","transformSubject","x","y","viewportPositionToImagePosition","viewportPosition","imageSize","zoomableEvent","resizedImgSize","resizedImgScale","sheetOriginOnContainer","pointOnSheet"],"mappings":"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","sourcesContent":["import { Size2D, Vec2D, ZoomableViewEvent } from 'src/typings';\n\nexport const defaultTransformSubjectData: ZoomableViewEvent = {\n offsetX: 0,\n offsetY: 0,\n zoomLevel: 0,\n originalWidth: 0,\n originalHeight: 0,\n originalPageX: 0,\n originalPageY: 0,\n};\n\n/**\n * Assuming you have an image that's being resized to fit into a container\n * using the \"contain\" resize mode. You can use this function to calculate the\n * size of the image after fitting.\n *\n * Since our sheet is resized in this manner, we need this function\n * for things like pan boundaries and marker placement\n *\n * @param imgSize\n * @param containerSize\n */\nexport function applyContainResizeMode(\n imgSize: Size2D,\n containerSize: Size2D\n): { size: Size2D; scale: number } | { size: null; scale: null } {\n const { width: imageWidth, height: imageHeight } = imgSize;\n const { width: areaWidth, height: areaHeight } = containerSize;\n const imageAspect = imageWidth / imageHeight;\n const areaAspect = areaWidth / areaHeight;\n\n let newSize;\n if (imageAspect >= areaAspect) {\n // longest edge is horizontal\n newSize = { width: areaWidth, height: areaWidth / imageAspect };\n } else {\n // longest edge is vertical\n newSize = { width: areaHeight * imageAspect, height: areaHeight };\n }\n\n if (isNaN(newSize.height)) newSize.height = areaHeight;\n if (isNaN(newSize.width)) newSize.width = areaWidth;\n\n const scale = imageWidth\n ? newSize.width / imageWidth\n : newSize.height / imageHeight;\n\n if (!isFinite(scale)) return { size: null, scale: null };\n\n return {\n size: newSize,\n scale,\n };\n}\n\n/**\n * get the coord of image's origin relative to the transformSubject\n * @param resizedImageSize\n * @param transformSubject\n */\nexport function getImageOriginOnTransformSubject(\n resizedImageSize: Size2D,\n transformSubject: ZoomableViewEvent\n) {\n const { offsetX, offsetY, zoomLevel, originalWidth, originalHeight } =\n transformSubject;\n return {\n x:\n offsetX * zoomLevel +\n originalWidth / 2 -\n (resizedImageSize.width / 2) * zoomLevel,\n y:\n offsetY * zoomLevel +\n originalHeight / 2 -\n (resizedImageSize.height / 2) * zoomLevel,\n };\n}\n\n/**\n * Translates the coord system of a point from the viewport's space to the image's space\n *\n * @param pointOnContainer\n * @param sheetImageSize\n * @param transformSubject\n *\n * @return {Vec2D} returns null if point is out of the sheet's bound\n */\nexport function viewportPositionToImagePosition({\n viewportPosition,\n imageSize,\n zoomableEvent,\n}: {\n viewportPosition: Vec2D;\n imageSize: Size2D;\n zoomableEvent: ZoomableViewEvent;\n}): Vec2D | null {\n const { size: resizedImgSize, scale: resizedImgScale } =\n applyContainResizeMode(imageSize, {\n width: zoomableEvent.originalWidth,\n height: zoomableEvent.originalHeight,\n }) || {};\n\n if (resizedImgScale == null || resizedImgSize == null) return null;\n\n const sheetOriginOnContainer = getImageOriginOnTransformSubject(\n resizedImgSize,\n zoomableEvent\n );\n\n const pointOnSheet = {\n x:\n (viewportPosition.x - sheetOriginOnContainer.x) /\n zoomableEvent.zoomLevel /\n resizedImgScale,\n y:\n (viewportPosition.y - sheetOriginOnContainer.y) /\n zoomableEvent.zoomLevel /\n resizedImgScale,\n };\n\n return pointOnSheet;\n}\n"]} \ No newline at end of file diff --git a/lib/module/helper/coordinateConversion.js b/lib/module/helper/coordinateConversion.js index 107eb34..bbe380c 100644 --- a/lib/module/helper/coordinateConversion.js +++ b/lib/module/helper/coordinateConversion.js @@ -105,7 +105,6 @@ export function viewportPositionToImagePosition({ x: (viewportPosition.x - sheetOriginOnContainer.x) / zoomableEvent.zoomLevel / resizedImgScale, y: (viewportPosition.y - sheetOriginOnContainer.y) / zoomableEvent.zoomLevel / resizedImgScale }; - if (pointOnSheet.x < 0 || pointOnSheet.x > imageSize.width || pointOnSheet.y < 0 || pointOnSheet.y > imageSize.height) return null; return pointOnSheet; } //# sourceMappingURL=coordinateConversion.js.map \ No newline at end of file diff --git a/lib/module/helper/coordinateConversion.js.map b/lib/module/helper/coordinateConversion.js.map index d6c2a6c..3c5ff65 100644 --- a/lib/module/helper/coordinateConversion.js.map +++ b/lib/module/helper/coordinateConversion.js.map @@ -1 +1 @@ -{"version":3,"sources":["coordinateConversion.ts"],"names":["defaultTransformSubjectData","offsetX","offsetY","zoomLevel","originalWidth","originalHeight","originalPageX","originalPageY","applyContainResizeMode","imgSize","containerSize","width","imageWidth","height","imageHeight","areaWidth","areaHeight","imageAspect","areaAspect","newSize","isNaN","scale","isFinite","size","getImageOriginOnTransformSubject","resizedImageSize","transformSubject","x","y","viewportPositionToImagePosition","viewportPosition","imageSize","zoomableEvent","resizedImgSize","resizedImgScale","sheetOriginOnContainer","pointOnSheet"],"mappings":"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","sourcesContent":["import { Size2D, Vec2D, ZoomableViewEvent } from 'src/typings';\n\nexport const defaultTransformSubjectData: ZoomableViewEvent = {\n offsetX: 0,\n offsetY: 0,\n zoomLevel: 0,\n originalWidth: 0,\n originalHeight: 0,\n originalPageX: 0,\n originalPageY: 0,\n};\n\n/**\n * Assuming you have an image that's being resized to fit into a container\n * using the \"contain\" resize mode. You can use this function to calculate the\n * size of the image after fitting.\n *\n * Since our sheet is resized in this manner, we need this function\n * for things like pan boundaries and marker placement\n *\n * @param imgSize\n * @param containerSize\n */\nexport function applyContainResizeMode(\n imgSize: Size2D,\n containerSize: Size2D\n): { size: Size2D; scale: number } | { size: null; scale: null } {\n const { width: imageWidth, height: imageHeight } = imgSize;\n const { width: areaWidth, height: areaHeight } = containerSize;\n const imageAspect = imageWidth / imageHeight;\n const areaAspect = areaWidth / areaHeight;\n\n let newSize;\n if (imageAspect >= areaAspect) {\n // longest edge is horizontal\n newSize = { width: areaWidth, height: areaWidth / imageAspect };\n } else {\n // longest edge is vertical\n newSize = { width: areaHeight * imageAspect, height: areaHeight };\n }\n\n if (isNaN(newSize.height)) newSize.height = areaHeight;\n if (isNaN(newSize.width)) newSize.width = areaWidth;\n\n const scale = imageWidth\n ? newSize.width / imageWidth\n : newSize.height / imageHeight;\n\n if (!isFinite(scale)) return { size: null, scale: null };\n\n return {\n size: newSize,\n scale,\n };\n}\n\n/**\n * get the coord of image's origin relative to the transformSubject\n * @param resizedImageSize\n * @param transformSubject\n */\nexport function getImageOriginOnTransformSubject(\n resizedImageSize: Size2D,\n transformSubject: ZoomableViewEvent\n) {\n const { offsetX, offsetY, zoomLevel, originalWidth, originalHeight } =\n transformSubject;\n return {\n x:\n offsetX * zoomLevel +\n originalWidth / 2 -\n (resizedImageSize.width / 2) * zoomLevel,\n y:\n offsetY * zoomLevel +\n originalHeight / 2 -\n (resizedImageSize.height / 2) * zoomLevel,\n };\n}\n\n/**\n * Translates the coord system of a point from the viewport's space to the image's space\n *\n * @param pointOnContainer\n * @param sheetImageSize\n * @param transformSubject\n *\n * @return {Vec2D} returns null if point is out of the sheet's bound\n */\nexport function viewportPositionToImagePosition({\n viewportPosition,\n imageSize,\n zoomableEvent,\n}: {\n viewportPosition: Vec2D;\n imageSize: Size2D;\n zoomableEvent: ZoomableViewEvent;\n}): Vec2D | null {\n const { size: resizedImgSize, scale: resizedImgScale } =\n applyContainResizeMode(imageSize, {\n width: zoomableEvent.originalWidth,\n height: zoomableEvent.originalHeight,\n }) || {};\n\n if (resizedImgScale == null || resizedImgSize == null) return null;\n\n const sheetOriginOnContainer = getImageOriginOnTransformSubject(\n resizedImgSize,\n zoomableEvent\n );\n\n const pointOnSheet = {\n x:\n (viewportPosition.x - sheetOriginOnContainer.x) /\n zoomableEvent.zoomLevel /\n resizedImgScale,\n y:\n (viewportPosition.y - sheetOriginOnContainer.y) /\n zoomableEvent.zoomLevel /\n resizedImgScale,\n };\n\n if (\n pointOnSheet.x < 0 ||\n pointOnSheet.x > imageSize.width ||\n pointOnSheet.y < 0 ||\n pointOnSheet.y > imageSize.height\n )\n return null;\n\n return pointOnSheet;\n}\n"]} \ No newline at end of file +{"version":3,"sources":["coordinateConversion.ts"],"names":["defaultTransformSubjectData","offsetX","offsetY","zoomLevel","originalWidth","originalHeight","originalPageX","originalPageY","applyContainResizeMode","imgSize","containerSize","width","imageWidth","height","imageHeight","areaWidth","areaHeight","imageAspect","areaAspect","newSize","isNaN","scale","isFinite","size","getImageOriginOnTransformSubject","resizedImageSize","transformSubject","x","y","viewportPositionToImagePosition","viewportPosition","imageSize","zoomableEvent","resizedImgSize","resizedImgScale","sheetOriginOnContainer","pointOnSheet"],"mappings":"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","sourcesContent":["import { Size2D, Vec2D, ZoomableViewEvent } from 'src/typings';\n\nexport const defaultTransformSubjectData: ZoomableViewEvent = {\n offsetX: 0,\n offsetY: 0,\n zoomLevel: 0,\n originalWidth: 0,\n originalHeight: 0,\n originalPageX: 0,\n originalPageY: 0,\n};\n\n/**\n * Assuming you have an image that's being resized to fit into a container\n * using the \"contain\" resize mode. You can use this function to calculate the\n * size of the image after fitting.\n *\n * Since our sheet is resized in this manner, we need this function\n * for things like pan boundaries and marker placement\n *\n * @param imgSize\n * @param containerSize\n */\nexport function applyContainResizeMode(\n imgSize: Size2D,\n containerSize: Size2D\n): { size: Size2D; scale: number } | { size: null; scale: null } {\n const { width: imageWidth, height: imageHeight } = imgSize;\n const { width: areaWidth, height: areaHeight } = containerSize;\n const imageAspect = imageWidth / imageHeight;\n const areaAspect = areaWidth / areaHeight;\n\n let newSize;\n if (imageAspect >= areaAspect) {\n // longest edge is horizontal\n newSize = { width: areaWidth, height: areaWidth / imageAspect };\n } else {\n // longest edge is vertical\n newSize = { width: areaHeight * imageAspect, height: areaHeight };\n }\n\n if (isNaN(newSize.height)) newSize.height = areaHeight;\n if (isNaN(newSize.width)) newSize.width = areaWidth;\n\n const scale = imageWidth\n ? newSize.width / imageWidth\n : newSize.height / imageHeight;\n\n if (!isFinite(scale)) return { size: null, scale: null };\n\n return {\n size: newSize,\n scale,\n };\n}\n\n/**\n * get the coord of image's origin relative to the transformSubject\n * @param resizedImageSize\n * @param transformSubject\n */\nexport function getImageOriginOnTransformSubject(\n resizedImageSize: Size2D,\n transformSubject: ZoomableViewEvent\n) {\n const { offsetX, offsetY, zoomLevel, originalWidth, originalHeight } =\n transformSubject;\n return {\n x:\n offsetX * zoomLevel +\n originalWidth / 2 -\n (resizedImageSize.width / 2) * zoomLevel,\n y:\n offsetY * zoomLevel +\n originalHeight / 2 -\n (resizedImageSize.height / 2) * zoomLevel,\n };\n}\n\n/**\n * Translates the coord system of a point from the viewport's space to the image's space\n *\n * @param pointOnContainer\n * @param sheetImageSize\n * @param transformSubject\n *\n * @return {Vec2D} returns null if point is out of the sheet's bound\n */\nexport function viewportPositionToImagePosition({\n viewportPosition,\n imageSize,\n zoomableEvent,\n}: {\n viewportPosition: Vec2D;\n imageSize: Size2D;\n zoomableEvent: ZoomableViewEvent;\n}): Vec2D | null {\n const { size: resizedImgSize, scale: resizedImgScale } =\n applyContainResizeMode(imageSize, {\n width: zoomableEvent.originalWidth,\n height: zoomableEvent.originalHeight,\n }) || {};\n\n if (resizedImgScale == null || resizedImgSize == null) return null;\n\n const sheetOriginOnContainer = getImageOriginOnTransformSubject(\n resizedImgSize,\n zoomableEvent\n );\n\n const pointOnSheet = {\n x:\n (viewportPosition.x - sheetOriginOnContainer.x) /\n zoomableEvent.zoomLevel /\n resizedImgScale,\n y:\n (viewportPosition.y - sheetOriginOnContainer.y) /\n zoomableEvent.zoomLevel /\n resizedImgScale,\n };\n\n return pointOnSheet;\n}\n"]} \ No newline at end of file