pixano / pixano-elements

Pixano Elements - Re-usable web components dedicated to data annotation tasks.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

goTo proposal (in ViewControls)

bpioge opened this issue · comments

/**
 * 
 * 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();
  }

/**

  • 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)
];

}