import { NumberRange } from "../../../Core/NumberRange";
import type { NumberArray } from "../../../types/NumberArray";
import type { TSciChart3D } from "../../../types/TSciChart3D";
import type { EDataSeriesType3D, IBaseDataSeries3DOptions } from "./BaseDataSeries3D";
import { BaseDataSeries3D } from "./BaseDataSeries3D";
import type { IDataSeries3D } from "./IDataSeries3D";
/**
 * Optional parameters passed to the {@link BaseGridDataSeries3D} at construct time.
 */
export interface IBaseGridDataSeries3DOptions extends IBaseDataSeries3DOptions {
    yValues?: NumberArray[];
    metadata?: any[][];
}
/**
 * Interface to a {@link BaseGridDataSeries3D}
 */
export interface IGridDataSeries3D extends IDataSeries3D {
    /**
     * The zSize is the HEIGHT or number of rows of the 2-dimensional array,
     * e.g. [[1, 2][3, 4][5, 6]] has a height of 3
     */
    readonly zSize: number;
    /**
     * The xSize is the WIDTH or number of elements in each or of the 2-dimensional array,
     * e.g. [[1, 2][3, 4][5, 6]] has a xSize of 2
     */
    readonly xSize: number;
    /**
     * Gets the YValue at the specific Z,X index where Z must be within 0-zSize and X must be within 0-xSize
     * @param zIndex the z-index from 0 to zSize
     * @param xIndex the x-index from 0 to xSize
     */
    getYValue(zIndex: number, xIndex: number): number;
    /**
     * Gets the Y-Values array as a two dimensional array. Output is in the format YValues[z][x]
     * where z is 0 to zSize and X is 0 to xSize.
     */
    getYValues(): NumberArray[];
    /**
     * Sets a 2D array of YValues. Input is in the format YValues[z][x]
     * where z is 0 to zSize and X is 0 to xSize
     * Note that setting the YValues involves a clone. Once the array has been set you cannot manipulate
     * the input array and expect changes on the chart.
     * @param zValues
     * @param metadata
     */
    setYValues(YValues: NumberArray[], metadata?: any[][]): void;
}
/**
 * @summary The base class for a Grid (two-dimensional array) DataSeries in SciChart's
 * {@link https://www.scichart.com/javascript-chart-features | JavaScript 3D Charts}
 * @description
 * A DataSeries stores the data to render. This is independent from the {@link IRenderableSeries3D | RenderableSeries}
 * which defines how that data should be rendered.
 *
 * The Grid DataSeries type is used for 3D Charts that have a uniform grid of values, for example {@link SurfaceMeshRenderableSeries3D},
 * which draws a 3D surface-plot or mesh chart with contours.
 * @remarks See derived type {@link UniformGridDataSeries3D} for a concrete implementation
 */
export declare abstract class BaseGridDataSeries3D extends BaseDataSeries3D implements IGridDataSeries3D {
    /**
     * @inheritDoc
     */
    abstract readonly type: EDataSeriesType3D;
    protected yRangeCached: NumberRange;
    private yValuesProperty;
    private xSizeProperty;
    private zSizeProperty;
    private metadataProperty;
    /**
     * Creates an instance of the {@link BaseGridDataSeries3D}
     * @param webAssemblyContext the {@link TSciChart3D | SciChart WebAssembly Context} containing native methods
     * and access to our underlying WebGL2 rendering engine
     * @param options optional parameters of type {@link IBaseGridDataSeries3DOptions} to configure the series
     */
    protected constructor(webAssemblyContext: TSciChart3D, options?: IBaseGridDataSeries3DOptions);
    /**
     * Gets the total extends of the GridDataSeries3D in the x-range
     */
    abstract get xRange(): NumberRange;
    /**
     * Gets the total extends of the GridDataSeries3D in the z-range
     */
    abstract get zRange(): NumberRange;
    /**
     * Gets the total extends of the GridDataSeries3D in the y-range
     */
    get yRange(): NumberRange;
    /**
     * The zSize is the HEIGHT or number of rows of the 2-dimensional array,
     * e.g. [[1, 2][3, 4][5, 6]] has a height of 3
     */
    get zSize(): number;
    /**
     * The xSize is the WIDTH or number of elements in each or of the 2-dimensional array,
     * e.g. [[1, 2][3, 4][5, 6]] has a xSize of 2
     */
    get xSize(): number;
    /**
     * Gets a js array of {@link any | Metadata values} in the DataSeries
     */
    getMetadataValues(): any[][];
    /**
     * Sets a 2D array of YValues. Input is in the format YValues[z][x]
     * where z is 0 to zSize and X is 0 to xSize
     * Direct changes to this array will not be noticed by the chart.  Use setYValue or call notifyDataChanged() after an update
     * @param zValues
     */
    setYValues(YValues: NumberArray[], metadata?: any[][]): void;
    /**
     * Gets the Y-Values array as a two dimensional array. Output is in the format YValues[z][x]
     * where z is 0 to zSize and X is 0 to xSize.
     */
    getYValues(): NumberArray[];
    /**
     * Gets the YValue at the specific Z,X index where Z must be within 0-zSize and X must be within 0-xSize
     * @param zIndex the z-index from 0 to zSize
     * @param xIndex the x-index from 0 to xSize
     */
    getYValue(zIndex: number, xIndex: number): number;
    /**
     * Sets the YValue at the specific Z,X index where Z must be within 0-zSize and X must be within 0-xSize
     * @param zIndex the z-index from 0 to zSize
     * @param xIndex the x-index from 0 to xSize
     * @param YValue the new Height-value
     * @param metadata optional metadata for the data point.  The full metadata array must already exist
     */
    setYValue(zIndex: number, xIndex: number, yValue: number, metadata?: any): void;
    /**
     * @inheritDoc
     */
    notifyDataChanged(): void;
    /**
     * Gets the metadata by Z and X indexes
     * @param zIndex The Z index
     * @param xIndex The X index
     */
    getMetadataAt(zIndex: number, xIndex: number): any;
    /**
     * Gets the metadata matrix height
     */
    getMetadataHeight(): number;
    /**
     * Gets the metadata matrix width
     */
    getMetadataWidth(): number;
    protected setMetadata(metadata: any[][]): void;
    protected setMetadataAt(zIndex: number, xIndex: number, metadata: any): void;
    /**
     * @inheritDoc
     */
    delete(): void;
    protected getOptions(excludeData: boolean): IBaseGridDataSeries3DOptions;
    protected validateIndexes(zIndex: number, xIndex: number): void;
}
