import { PdfViewer, PdfViewerBase, IRectangle, IPoint, AnnotationType as AnnotType, ShapeLabelSettingsModel, AnnotationType, IAnnotation } from '../../index';
import { PdfAnnotationBaseModel } from '../drawing/pdf-annotation-model';
import { PointModel } from '@syncfusion/ej2-drawings';
import { LineHeadStyle, CalibrationUnit, AllowedInteraction } from '../base';
/**
 * @hidden
 */
export interface IMeasureShapeAnnotation extends IAnnotation {
    bounds: IRectangle;
    thickness: number;
    borderStyle: string;
    borderDashArray: number;
    rotateAngle: string;
    isCloudShape: boolean;
    cloudIntensity: number;
    vertexPoints: PointModel[];
    lineHeadStart: string;
    lineHeadEnd: string;
    rectangleDifference: string[];
    isLocked: boolean;
    caption: boolean;
    captionPosition: string;
    leaderLineExtension: number;
    leaderLength: number;
    leaderLineOffset: number;
    indent: string;
    calibrate: any;
    id: string;
    enableShapeLabel: boolean;
    labelContent: string;
    labelFillColor: string;
    labelBorderColor: string;
    fontColor: string;
    fontSize: number;
    labelBounds: IRectangle;
    labelSettings?: ShapeLabelSettingsModel;
    customData: object;
    allowedInteractions?: AllowedInteraction;
    isPrint: boolean;
    isAnnotationRotated: boolean;
    pageNumber?: number;
}
/**
 * @hidden
 */
export interface IMeasure {
    ratio: string;
    x?: INumberFormat[];
    distance?: INumberFormat[];
    area?: INumberFormat[];
    angle?: INumberFormat[];
    volume?: INumberFormat[];
    targetUnitConversion?: number;
    depth?: number;
}
/**
 * @hidden
 */
export declare class MeasurementScaleRatio {
    id?: string;
    annotName?: string;
    displayUnit: CalibrationUnit;
    unit: CalibrationUnit;
    ratio: number;
    destValue: number;
    srcValue: number;
    volumeDepth: number;
    depthValue: number;
    ratioString?: string;
}
/**
 * @hidden
 */
export interface INumberFormat {
    unit: string;
    conversionFactor: number;
    fractionalType: string;
    denominator: number;
    formatDenominator: boolean;
}
/**
 * @hidden
 */
export declare class MeasureAnnotation {
    private pdfViewer;
    private pdfViewerBase;
    /**
     * @private
     */
    currentAnnotationMode: string;
    /**
     * @private
     */
    distanceOpacity: number;
    /**
     * @private
     */
    perimeterOpacity: number;
    /**
     * @private
     */
    areaOpacity: number;
    /**
     * @private
     */
    radiusOpacity: number;
    /**
     * @private
     */
    volumeOpacity: number;
    /**
     * @private
     */
    distanceFillColor: string;
    /**
     * @private
     */
    perimeterFillColor: string;
    /**
     * @private
     */
    areaFillColor: string;
    /**
     * @private
     */
    radiusFillColor: string;
    /**
     * @private
     */
    volumeFillColor: string;
    /**
     * @private
     */
    distanceStrokeColor: string;
    /**
     * @private
     */
    perimeterStrokeColor: string;
    /**
     * @private
     */
    areaStrokeColor: string;
    /**
     * @private
     */
    radiusStrokeColor: string;
    /**
     * @private
     */
    volumeStrokeColor: string;
    /**
     * @private
     */
    distanceThickness: number;
    /**
     * @private
     */
    leaderLength: number;
    /**
     * @private
     */
    perimeterThickness: number;
    /**
     * @private
     */
    areaThickness: number;
    /**
     * @private
     */
    radiusThickness: number;
    /**
     * @private
     */
    volumeThickness: number;
    /**
     * @private
     */
    distanceDashArray: number;
    /**
     * @private
     */
    distanceStartHead: LineHeadStyle;
    /**
     * @private
     */
    distanceEndHead: LineHeadStyle;
    /**
     * @private
     */
    perimeterDashArray: number;
    /**
     * @private
     */
    perimeterStartHead: LineHeadStyle;
    /**
     * @private
     */
    perimeterEndHead: LineHeadStyle;
    private unit;
    /**
     * @private
     */
    displayUnit: CalibrationUnit;
    /**
     * @private
     */
    measureShapeCount: number;
    /**
     * @private
     */
    volumeDepth: number;
    private measureRatioObject;
    /**
     * @private
     */
    isAddAnnotationProgramatically: boolean;
    private ratio;
    private srcValue;
    private destValue;
    private depthValue;
    private currentScaleRatio;
    private scaleRatioString;
    private scaleRatioDialog;
    private sourceTextBox;
    private convertUnit;
    private destTextBox;
    private dispUnit;
    private depthTextBox;
    private depthUnit;
    /**
     * @private
     */
    scaleRatioCollection: any;
    private scaleRatioAddCollection;
    constructor(pdfviewer: PdfViewer, pdfViewerBase: PdfViewerBase);
    /**
     * @private
     * @returns {number} - number
     */
    readonly pixelToPointFactor: number;
    /**
     * @param {any} shapeAnnotations - It describes about the shape annotations
     * @param {number} pageNumber - It describes about the page number
     * @param {boolean} isImportAction - It describes about whether the isImportAction is true or not
     * @param {boolean} isAnnotOrderAction - It describes about whether the isAnnotOrderAction is true or not
     * @private
     * @returns {void}
     */
    renderMeasureShapeAnnotations(shapeAnnotations: any, pageNumber: number, isImportAction?: boolean, isAnnotOrderAction?: boolean): void;
    /**
     * @param {any} annotation - It describes about the annotation
     * @private
     * @returns {any} - any
     */
    getSettings(annotation: any): any;
    /**
     * @param {AnnotType} type - It describes about the annotation type
     * @private
     * @returns {void}
     */
    setAnnotationType(type: AnnotType): void;
    private updateMeasureproperties;
    private createAnnotationObject;
    private getSelector;
    private getShapeAnnotType;
    private getShapeType;
    private getMeasureType;
    private getIndent;
    private getNumberFormatArray;
    private createNumberFormat;
    /**
     * @private
     * @returns {string} - string
     */
    saveMeasureShapeAnnotations(): string;
    /**
     * @private
     * @returns {void}
     */
    createScaleRatioWindow(): void;
    private updateScaleRatioCollection;
    private createRatioUI;
    private convertUnitSelect;
    private dispUnitSelect;
    private depthUnitSelect;
    private createContent;
    private createInputElement;
    /**
     * @private
     * @returns {void}
     */
    onOkClicked(): void;
    private updateRatioValues;
    private restoreUnit;
    /**
     * @private
     * @returns {void}
     */
    destroy(): void;
    /**
     * @param {string} ratio - It describes about the ratio
     * @param {CalibrationUnit} displayUnit - It describes about the display unit
     * @param {CalibrationUnit} conversionUnit - It describes about the conversion unit
     * @param {number} depth - It describes about the depth
     * @private
     * @returns {void}
     */
    updateMeasureValues(ratio: string, displayUnit: CalibrationUnit, conversionUnit: CalibrationUnit, depth: number): void;
    private getAnnotationBaseModel;
    private getContent;
    /**
     * @param value
     * @param currentAnnot
     * @private
     */
    setConversion(value: number, currentAnnot: any): string;
    private onCancelClicked;
    /**
     * @param {string} property - It describes about the property
     * @param {number} pageNumber - It describes about the page number
     * @param {any} annotationBase - It describes about the annotation base
     * @param {boolean} isNewlyAdded - It describes about whether the isNewlyAdded is true or not
     * @private
     * @returns {IMeasureShapeAnnotation} - IMeasureShapeAnnotation
     */
    modifyInCollection(property: string, pageNumber: number, annotationBase: any, isNewlyAdded?: boolean): IMeasureShapeAnnotation;
    /**
     * @param {number} pageNumber -It describes about the page number
     * @param {IMeasureShapeAnnotation} annotationBase - It describes about the annotation base
     * @private
     * @returns {void}
     */
    addInCollection(pageNumber: number, annotationBase: IMeasureShapeAnnotation): void;
    private manageAnnotations;
    private getAnnotations;
    private getCurrentObject;
    private getCurrentValues;
    private getCurrentRatio;
    /**
     * @param {PointModel} points - It describes about the points
     * @param {string} id - It describes about the id
     * @param {number} pageNumber - It describes about the page number
     * @private
     * @returns {string} - string
     */
    calculateArea(points: PointModel[], id?: string, pageNumber?: number): string;
    private getArea;
    /**
     * @param {PointModel} points - It describes about the points
     * @param {string} id - It describes about the id
     * @param {number} pageNumber - It describes about the page number
     * @private
     * @returns {string} - string
     */
    calculateVolume(points: PointModel[], id?: string, pageNumber?: number): string;
    /**
     * @param {PdfAnnotationBaseModel} pdfAnnotationBase - It describes about the pdf annotation base
     * @private
     * @returns {string} - string
     */
    calculatePerimeter(pdfAnnotationBase: PdfAnnotationBaseModel): string;
    private getFactor;
    private convertPointToUnits;
    private convertUnitToPoint;
    private getStringifiedMeasure;
    private getRgbCode;
    /**
     * @param {any} annotation - It describes about the annotation
     * @param {number} pageNumber - It describes about the page number
     * @private
     * @returns {any} - any
     */
    saveImportedMeasureAnnotations(annotation: any, pageNumber: number): any;
    /**
     * @param {any} annotation - It describes about the annotation
     * @param {number} pageNumber - It describes about the page number value
     * @private
     * @returns {any} - any
     */
    updateMeasureAnnotationCollections(annotation: any, pageNumber: number): any;
    /**
     * This method used to add annotations with using program.
     *
     * @param {AnnotationType} annotationType - It describes the annotation type
     * @param {any} annotationObject - It describes type of annotation object
     * @param {IPoint} offset - It describes about the annotation bounds or location
     * @returns {object} - object
     * @private
     */
    updateAddAnnotationDetails(annotationType: AnnotationType, annotationObject: any, offset: IPoint): Object;
}
