import { IAnimateOption, IMapService, ITexture2D } from '@antv/l7-core';
import { IColorRamp } from '@antv/l7-utils';
import { styleOffset } from '../core/BaseModel';
import { anchorType } from '../utils/symbol-layout';
export declare enum lineStyleType {
    'solid' = 0,
    'dash' = 1
}
interface ILineArrow {
    enable: boolean;
    arrowWidth: number;
    arrowHeight: number;
    tailWidth: number;
}
export declare enum LinearDir {
    VERTICAL = "vertical",
    HORIZONTAL = "horizontal"
}
export declare enum TextureBlend {
    NORMAL = "normal",
    REPLACE = "replace"
}
/**
 * 基础图层类型定义
 */
export interface IBaseLayerStyleOptions {
    opacity?: number;
    depth?: boolean;
    blend?: string;
    raisingHeight?: number;
    heightfixed?: boolean;
    zIndex?: number;
    mask?: boolean;
    maskInside?: boolean;
    usage?: string;
    color?: string;
    size?: number;
}
export interface ILineLayerStyleOptions extends IBaseLayerStyleOptions {
    tileOrigin?: number[];
    coord?: string;
    lineType?: keyof typeof lineStyleType;
    dashArray?: [number, number];
    segmentNumber?: number;
    forward?: boolean;
    lineTexture?: boolean;
    iconStep?: number;
    iconStepCount?: number;
    textureBlend?: TextureBlend;
    linearDir?: LinearDir;
    sourceColor?: string;
    targetColor?: string;
    thetaOffset?: number;
    globalArcHeight?: number;
    vertexHeightScale?: number;
    borderWidth?: number;
    borderColor?: string;
    blur?: [number, number, number];
    arrow?: ILineArrow;
    rampColors?: IColorRamp;
    featureId?: string;
    sourceLayer?: string;
    enablePicking?: boolean;
    workerEnabled?: boolean;
}
export declare enum SizeUnitType {
    pixel = 0,
    meter = 1
}
export interface IPointLayerStyleOptions extends IBaseLayerStyleOptions {
    tileOrigin?: number[];
    coord?: string;
    strokeOpacity: number;
    strokeWidth: number;
    stroke: string;
    blur?: number;
    textOffset?: [number, number];
    textAnchor?: anchorType;
    spacing?: number;
    padding?: [number, number];
    halo?: number;
    gamma?: number;
    fontWeight?: string;
    fontFamily?: string;
    textAllowOverlap?: boolean;
    pickLight?: boolean;
    sourceColor?: string;
    targetColor?: string;
    opacityLinear?: {
        enable: boolean;
        dir: string;
    };
    lightEnable: boolean;
    offsets?: styleOffset;
    unit?: SizeUnitType;
    rotation?: number;
    speed?: number;
    featureId?: string;
    sourceLayer?: string;
}
export interface IPolygonLayerStyleOptions extends IBaseLayerStyleOptions {
    tileOrigin?: number[];
    coord?: string;
    opacityLinear?: {
        enable: boolean;
        dir: string;
    };
    topsurface?: boolean;
    sidesurface?: boolean;
    mapTexture?: string;
    sourceColor?: string;
    targetColor?: string;
    pickLight: boolean;
    waterTexture?: string;
    speed?: number;
    watercolor?: string;
    watercolor2?: string;
    featureId?: string;
    sourceLayer?: string;
}
export interface IRasterTileLayerStyleOptions extends IBaseLayerStyleOptions {
    opacity: number;
}
export interface IMaskLayerStyleOptions extends IBaseLayerStyleOptions {
    opacity: number;
    color: string;
    sourceLayer?: string;
}
export interface IWindLayerStyleOptions extends IBaseLayerStyleOptions {
    uMin?: number;
    uMax?: number;
    vMin?: number;
    vMax?: number;
    fadeOpacity?: number;
    speedFactor?: number;
    dropRate?: number;
    dropRateBump?: number;
    numParticles?: number;
    rampColors?: {
        [key: number]: string;
    };
    sizeScale?: number;
}
export interface IImageLayerStyleOptions extends IBaseLayerStyleOptions {
    domain?: [number, number];
    noDataValue?: number;
    clampLow?: boolean;
    clampHigh?: boolean;
    rampColors?: IColorRamp;
    colorTexture?: ITexture2D;
}
export interface ICityBuildLayerStyleOptions {
    opacity: number;
    baseColor: string;
    brightColor: string;
    windowColor: string;
    time: number;
    sweep: {
        enable: boolean;
        sweepRadius: number;
        sweepColor: string;
        sweepSpeed: number;
        sweepCenter?: [number, number];
    };
}
export interface IGeometryLayerStyleOptions extends IBaseLayerStyleOptions {
    mapTexture?: string;
    terrainTexture?: string;
    center?: [number, number];
    width?: number;
    height?: number;
    widthSegments?: number;
    heightSegments?: number;
    terrainClipHeight?: number;
    rgb2height?: (r: number, g: number, b: number) => number;
    canvasWidth?: number;
    canvasHeight?: number;
    drawCanvas?: (canvas: HTMLCanvasElement) => void;
    spriteAnimate?: string;
    spriteRadius?: number;
    spriteCount?: number;
    spriteSpeed?: number;
    spriteTop?: number;
    spriteBottom?: number;
    spriteUpdate?: number;
    spriteScale?: number;
    animateOption?: IAnimateOption;
}
export declare enum CanvasUpdateType {
    'ALWAYS' = "always",
    'DRAGEND' = "dragend"
}
export interface IDrawingOnCanvas {
    canvas: HTMLCanvasElement;
    ctx: CanvasRenderingContext2D;
    mapService: IMapService;
    size: [number, number];
}
export interface ICanvasLayerStyleOptions {
    zIndex: number;
    update: CanvasUpdateType | string;
    drawingOnCanvas: (option: IDrawingOnCanvas) => void;
}
export interface IHeatMapLayerStyleOptions extends IBaseLayerStyleOptions {
    intensity: number;
    radius: number;
    angle: number;
    rampColors: IColorRamp;
    coverage?: number;
}
export interface IBaseRasterLayerStyleOptions extends IBaseLayerStyleOptions {
    colorTexture?: ITexture2D;
    domain: [number, number];
    noDataValue: number;
    clampLow: boolean;
    clampHigh: boolean;
    rampColors: IColorRamp;
}
export interface IRasterLayerStyleOptions extends IBaseRasterLayerStyleOptions {
    channelRMax?: number;
    channelGMax?: number;
    channelBMax?: number;
}
export interface IRasterTerrainLayerStyleOptions extends IBaseRasterLayerStyleOptions {
    rScaler?: number;
    gScaler?: number;
    bScaler?: number;
    offset?: number;
}
export {};
