import { EdgeStyle, SurfaceStyle, PointStyle, TextStyle } from "./style";
import { Tooltip, Axis, PointFamily, Attribute } from "./utils";
/**
 * A class for drawing Arc2Ds.
 */
export declare class Arc2D {
    cx: number;
    cy: number;
    r: number;
    start_angle: number;
    end_angle: number;
    data: any[];
    anticlockwise: boolean;
    edge_style: EdgeStyle;
    type_: string;
    name: string;
    minX: number;
    maxX: number;
    minY: number;
    maxY: number;
    init_scale: number;
    /**
     *
     * @param cx the center x coordinate
     * @param cy the center y coordinate
     * @param r radius
     * @param start_angle in radian
     * @param end_angle in radian
     * @param data A list of relevant points for BSPline drawing (optional if the arc2D isn't inside a contour).
     It is usually generated by volmdlr.
     * @param anticlockwise true or false whether you want the arc the be drawn anticlockwise or not.
     * @param edge_style Edge customization
     */
    constructor(cx: number, cy: number, r: number, start_angle: number, // Warning: canvas' angles are clockwise-oriented. For example: pi/2 rad is below -pi/2 rad.
    end_angle: number, data: any[], anticlockwise: boolean, edge_style: EdgeStyle, type_: string, name: string);
    static deserialize(serialized: any): Arc2D;
    draw(context: any, mvx: any, mvy: any, scaleX: any, scaleY: any, X: any, Y: any): void;
    contour_draw(context: any, first_elem: any, mvx: any, mvy: any, scaleX: any, scaleY: any, X: any, Y: any): void;
}
export declare class Circle2D {
    data: any;
    cx: number;
    cy: number;
    r: number;
    edge_style: EdgeStyle;
    surface_style: SurfaceStyle;
    tooltip: Tooltip;
    type_: string;
    name: string;
    minX: number;
    maxX: number;
    minY: number;
    maxY: number;
    hidden_color: any;
    constructor(data: any, cx: number, cy: number, r: number, edge_style: EdgeStyle, surface_style: SurfaceStyle, tooltip: Tooltip, type_: string, name: string);
    static deserialize(serialized: any): Circle2D;
    draw(context: any, mvx: any, mvy: any, scaleX: any, scaleY: any, X: any, Y: any): void;
}
/**
 * @param plot_data_primitives A set of primitives (LineSegment2D, Arc2D) that draw a closed polygon.
 */
export declare class Contour2D {
    plot_data_primitives: any;
    edge_style: EdgeStyle;
    surface_style: SurfaceStyle;
    tooltip: Tooltip;
    type_: string;
    name: string;
    minX: number;
    maxX: number;
    minY: number;
    maxY: number;
    hidden_color: any;
    constructor(plot_data_primitives: any, edge_style: EdgeStyle, surface_style: SurfaceStyle, tooltip: Tooltip, type_: string, name: string);
    static deserialize(serialized: any): Contour2D;
}
export declare class Dataset {
    attribute_names: string[];
    edge_style: EdgeStyle;
    tooltip: Tooltip;
    point_style: PointStyle;
    elements: any[];
    display_step: number;
    type_: string;
    name: string;
    index: number;
    id: number;
    point_list: Point2D[];
    segments: LineSegment2D[];
    constructor(attribute_names: string[], edge_style: EdgeStyle, tooltip: Tooltip, point_style: PointStyle, elements: any[], display_step: number, type_: string, name: string, index?: number);
    initialize_point_list(): void;
    initialize_segments(): void;
    static deserialize(serialized: any): Dataset;
}
export declare class Graph2D {
    graphs: Dataset[];
    attribute_names: string[];
    axis: Axis;
    type_: string;
    name: string;
    constructor(graphs: Dataset[], attribute_names: string[], axis: Axis, type_?: string, name?: string);
    static deserialize(serialized: any): Graph2D;
}
export declare class Label {
    title: string;
    text_style: TextStyle;
    rectangle_surface_style: SurfaceStyle;
    rectangle_edge_style: EdgeStyle;
    type_: string;
    name: string;
    constructor(title: string, text_style: TextStyle, rectangle_surface_style: SurfaceStyle, rectangle_edge_style: EdgeStyle, type_?: string, name?: string);
    static deserialize(serialized: any): Label;
    draw(context: any, decalage_x: any, decalage_y: any, rect_w: any): void;
}
export declare class Line2D {
    data: number[];
    edge_style: EdgeStyle;
    type_: string;
    name: string;
    minX: number;
    maxX: number;
    minY: number;
    maxY: number;
    constructor(data: number[], edge_style: EdgeStyle, type_?: string, name?: string);
    static deserialize(serialized: any): Line2D;
    draw(context: any, mvx: any, mvy: any, scaleX: any, scaleY: any, X: any, Y: any, canvas_width: any, canvas_height: any): void;
    get_side_points(mvx: any, mvy: any, scaleX: any, scaleY: any, X: any, Y: any, canvas_width: any, canvas_height: any): any[];
}
export declare class LineSegment2D {
    data: any;
    edge_style: EdgeStyle;
    type_: string;
    name: string;
    minX: number;
    maxX: number;
    minY: number;
    maxY: number;
    constructor(data: any, edge_style: EdgeStyle, type_: string, name: string);
    static deserialize(serialized: any): LineSegment2D;
    draw(context: any, first_elem: any, mvx: any, mvy: any, scaleX: any, scaleY: any, X: any, Y: any, log_scale_x?: boolean, log_scale_y?: boolean): void;
}
export declare class MultipleLabels {
    labels: Label[];
    type_: string;
    name: string;
    constructor(labels: Label[], type_?: string, name?: string);
    static deserialize(serialized: any): MultipleLabels;
    draw(context: any, canvas_width: any, X: any, Y: any): void;
}
export declare class Point2D {
    cx: number;
    cy: number;
    point_style: PointStyle;
    type_: string;
    name: string;
    /**
     * minX, maxX, minY, maxY define the bounding box.
     * size is the real size of the point (depends on point_size which value is 1, 2, 3 or 4).
     */
    minX: number;
    maxX: number;
    minY: number;
    maxY: number;
    hidden_color: any;
    size: number;
    k: number;
    points_inside: Point2D[];
    point_families: PointFamily[];
    selected: boolean;
    clicked: boolean;
    selected_by_heatmap: boolean;
    index: number;
    dataset_index: number;
    constructor(cx: number, cy: number, point_style: PointStyle, type_?: string, name?: string);
    static deserialize(serialized: any): Point2D;
    draw(context: any, mvx: any, mvy: any, scaleX: any, scaleY: any, X: any, Y: any, log_scale_x: any, log_scale_y: any): void;
    copy(): Point2D;
    equals(point: Point2D): boolean;
    getPointIndex(point_list: Point2D[]): number;
    isPointInList(point_list: Point2D[]): boolean;
}
/**
 * A class that allows you to draw multiple primitives in one canvas.
 * @param primitives A list of primitives, ie. Contour2D, Text, LineSegment2D, Arc2D, Circle2D or Line2D
 */
export declare class PrimitiveGroup {
    primitives: any[];
    type_: string;
    name: string;
    constructor(primitives: any[], type_: string, name: string);
    static deserialize(serialized: any): PrimitiveGroup;
}
export declare class Scatter {
    tooltip: Tooltip;
    attribute_names: string[];
    point_style: PointStyle;
    elements: any[];
    axis: Axis;
    type_: string;
    name: string;
    point_list: Point2D[];
    all_attributes: Attribute[];
    lists: any[];
    to_display_attributes: Attribute[];
    constructor(tooltip: Tooltip, attribute_names: string[], point_style: PointStyle, elements: any[], axis: Axis, type_: string, name: string);
    static deserialize(serialized: any): Scatter;
    initialize_all_attributes(): void;
    initialize_to_display_attributes(): void;
    initialize_lists(): void;
    initialize_point_list(elements: any): void;
}
export declare class Text {
    comment: string;
    position_x: number;
    position_y: number;
    text_style: TextStyle;
    text_scaling: boolean;
    max_width?: number;
    multi_lines?: boolean;
    type_: string;
    name: string;
    minX: number;
    maxX: number;
    minY: number;
    maxY: number;
    hidden_color: any;
    init_scale: number;
    constructor(comment: string, position_x: number, position_y: number, text_style: TextStyle, text_scaling?: boolean, max_width?: number, multi_lines?: boolean, type_?: string, name?: string);
    static deserialize(serialized: any): Text;
    private static mixConditions;
    private automaticFontSize;
    draw(context: any, mvx: any, mvy: any, scaleX: any, scaleY: any, X: any, Y: any): void;
    write(context: any, x: any, y: any, scaleX: any, font_size: any): void;
    cutting_text(context: any, display_max_width: any): any[];
}
export declare class Heatmap {
    size: number[];
    colors: string[];
    edge_style: EdgeStyle;
    name: string;
    constructor(size?: number[], colors?: string[], edge_style?: EdgeStyle, name?: string);
    static deserialize(serialized: any): Heatmap;
}
export declare class Wire {
    lines: number[][];
    edge_style: EdgeStyle;
    tooltip?: Tooltip;
    type_: string;
    name: string;
    hidden_color: string;
    minX: number;
    maxX: number;
    minY: number;
    maxY: number;
    constructor(lines: number[][], edge_style: EdgeStyle, tooltip?: Tooltip, type_?: string, name?: string);
    static deserialize(serialized: any): Wire;
    draw(context: any, scaleX: any, scaleY: any, mvx: any, mvy: any, X: any, Y: any): void;
}
