goTo proposal (in ViewControls)
bpioge opened this issue · comments
bpioge commented
/**
*
* Center the view on the point [targetX, targetY]. Apply a zoom if provided
*
* @param targetX
* @param targetY
* @param zoom
* @param normalized
*/
goTo(targetX: number, targetY: number, zoom : number, normalized = true) {
if (!normalized)
var { x, y } = this.viewer.normalize({ x, y });
else {
var { x, y } = { x: targetX, y: targetY };
}
if(zoom){
this.viewer.s = zoom;
this.viewer.stage.scale.set(this.viewer.s * this.viewer.rw / this.viewer.imageWidth,
this.viewer.s * this.viewer.rh / this.viewer.imageHeight);
}
let centerXOffset = (this.viewer.canvasWidth) / 2 / this.viewer.s;
let centerYOffset = (this.viewer.canvasHeight) / 2 / this.viewer.s;
this.viewer.rx = centerXOffset + (((x * this.viewer.rw * this.viewer.s) + this.viewer.sx) / this.viewer.s * (-1));
this.viewer.ry = centerYOffset + (((y * this.viewer.rh * this.viewer.s) + this.viewer.sy) / this.viewer.s * (-1));
this.viewer.stage.position.set(this.viewer.rx * this.viewer.s + this.viewer.sx, this.viewer.ry * this.viewer.s + this.viewer.sy);
this.triggerOnZoom();
this.computeHitArea();
}
bpioge commented
/**
- Return the denormalized position relative to the current view (zoom and pan)
- @param vertice
*/
public getViewPosition(vertice: [number, number]) : [number, number]{
const globalPoint = this.renderer.stage.toGlobal({
x : this.renderer.denormalizeX(vertice[0]),
y : this.renderer.denormalizeY(vertice[1])
});
const boudingOffset = (this.renderer.view.parentNode as HTMLDivElement).getBoundingClientRect();
return [
Math.round(globalPoint.x + boudingOffset.left),
Math.round(globalPoint.y + boudingOffset.top)
];
}