Create circle-only annotation

55 views
Skip to first unread message

Valentin Marteau

unread,
Mar 3, 2021, 5:57:37 PM3/3/21
to PDFTron WebViewer
Hello,

We are looking for a way to create annotations which are circles (not ellipsis).
Is there a way to configure or extend EllipseAnnotation so that it can only draw circles ?

Thanks and best regards
Valentin

Anthony Chen

unread,
Mar 5, 2021, 3:00:15 PM3/5/21
to PDFTron WebViewer

Hi Valenti,

It is possible.

If its from the UI, you can do the following:
When using the ellipse create tool, hold shift while dragging around.

If you want to do this programmatically, please use the following code snippet:
    Tools.EllipseCreateTool.prototype.mouseMove = function(e) {
      Tools.GenericAnnotationCreateTool.prototype.mouseMove.call(this, e);
      const annotation = this['annotation'];
      if (annotation) {
        const width = annotation['Width'];
        const height = annotation['Height'];
        const maxDimension = Math.abs(width < height ? width : height);
        annotation['Width'] = maxDimension;
        annotation['Height'] = maxDimension;
  
        // The following code ensures the annotation X and Y
        // remains fixed to point where we started drawing,
        // even as the annotation moves upwards or leftwards
        const pt0 = this['pageCoordinates'][0];
        const pt1 = this['pageCoordinates'][1];
  
        const deltaX = pt1.x - pt0.x;
        const deltaY = pt1.y - pt0.y;
  
        const absDeltaX = Math.abs(deltaX);
        const absDeltaY = Math.abs(deltaY);
  
        const offset = absDeltaX < absDeltaY ? absDeltaX : absDeltaY;
  
        if (deltaX < 0) {
          annotation['X'] = pt0.x - offset;
        }
  
        if (deltaY < 0) {
          annotation['Y'] = pt0.y - offset;
        }
  
        this.docViewer.annotationManager.redrawAnnotation(this['annotation']);
  
        // By toggling this on/off we can ensure the ellipsis remains
        // a perfect circle when it is being resized when selected
        annotation['MaintainAspectRatio'] = true;
      }
    };

Please let me know if either options were not what you were looking for.

Anthony Chen
Software Developer
PDFTron Systems Inc.

Valentin Marteau

unread,
Mar 8, 2021, 6:06:49 PM3/8/21
to PDFTron WebViewer
Hi Anthony,

Thank you!
We were looking for a programmatic approach so we will try your solution.

Regards,
Valentin

Reply all
Reply to author
Forward
0 new messages