import { Transform } from "@itwin/core-geometry";
import { FeatureSymbolizedRenderer } from "../../../../tile/internal";
/** Interface defining minimal implementation needed to create an ArcGIS geometry renderer,
 * that will ultimately be called by an [[ArcGisFeatureReader]] implementation.
 * @internal
 */
export interface FeatureGeometryRenderer {
    transform: Transform | undefined;
    hasSymbologyRenderer(): this is FeatureSymbolizedRenderer;
    renderPath(geometryLengths: number[], geometryCoords: number[], fill: boolean, stride: number, relativeCoords: boolean): Promise<void>;
    renderPoint(geometryLengths: number[], geometryCoords: number[], stride: number, relativeCoords: boolean): Promise<void>;
}
/** Internal implementation of [[FeatureGeometryRenderer]]
 * @internal
 */
export declare abstract class FeatureGeometryBaseRenderer implements FeatureGeometryRenderer {
    private _transform;
    constructor(world2PixelTransform?: Transform);
    abstract hasSymbologyRenderer(): this is FeatureSymbolizedRenderer;
    get transform(): Transform | undefined;
    protected abstract beginPath(): void;
    protected abstract closePath(): void;
    protected abstract lineTo(x: number, y: number): void;
    protected abstract moveTo(x: number, y: number): void;
    protected abstract stroke(): Promise<void>;
    protected abstract fill(): Promise<void>;
    protected abstract drawPoint(x: number, y: number): void;
    protected abstract finishPoints(): Promise<void>;
    /**
     * Render a path on the renderer's context.
     * Note: Inputs are designed based on the PBF format, to avoid any data transformation.
     * @param geometryLengths  Array be used to determine the start and end of each sub-path / rings. (i.e. [5,5] =  two rings of 5 vertices)
     * @param geometryCoords Array that linearly encodes the vertices of each sub-path of a polyline / ring of a polygon
     * @param fill Indicates if the path should be filled or not.
     * @param stride Dimension of each vertices (i.e. 2 or 3.  3 could be X,Y,Z, X,YM) Currently 3rd dimension is ignored.
    */
    renderPath(geometryLengths: number[], geometryCoords: number[], fill: boolean, stride: number, relativeCoords: boolean): Promise<void>;
    /**
     * Render a point on the renderer's context.
     * Note: Inputs are designed based on the PBF format, to avoid any data transformation.
     * @param geometryLengths  Array be used to determine the start and end of each multi-point array, empty for single point.
     * @param geometryCoords Array that linearly encodes vertices.
     * @param stride Dimension of each vertices (i.e. 2 or 3.  3 could be X,Y,Z, X,YM) Currently 3rd dimension is ignored.
    */
    renderPoint(geometryLengths: number[], geometryCoords: number[], stride: number, relativeCoords: boolean): Promise<void>;
}
//# sourceMappingURL=FeatureGeometryRenderer.d.ts.map