import { BimCoreApi } from '../BimCoreApi';
import { Plane } from '../loader/babylonjs-import';
import { DynamicPolygonPoint, DynamicPolygonPointDeleteResult } from './DynamicPolygonPoint';
/**
 * Represents a control point in a {@link DynamicPolygonWithArbitraryPoints}. Inherit from this class if additional functionality
 * is required.
 */
export declare class ArbitraryShapePoint extends DynamicPolygonPoint {
    protected readonly _api: BimCoreApi;
    readonly plane: Plane;
    /**
     *
     * @param _api {@link BimCoreApi} API.
     * @param plane [Plane](https://doc.babylonjs.com/typedoc/classes/babylon.plane) that this point lies on.
     * @param isVirtual whether point is virtual or not.
     */
    constructor(_api: BimCoreApi, plane: Plane, isVirtual: boolean);
    /**
     * This method has two purposes.
     *
     * 1. Check if `this` point is virtual or not (if `v` is undefined). This is very useful in a UI
     * where a different visualization for a 'virtual drag point' and a 'real drag point' may be required..
     *
     * 2. Convert `this` point to/from virtual by specifying `v`.
     * @param v Optional. If not specified function only returns current state. If specified then point is converted to either a virtual point (v = `true`) or
     * a non virtual point (`v = false`).
     * @returns If `v` was not specified then `true` if point is virtual, otherwise `false`. If `v` was specified
     * it returns `true` if point was successfully converted. Otherwise `false`. A point cannot be converted from
     * non virtual to virtual if there are 3 or less non virtual points in the polygon.
     */
    virtual(v?: boolean): boolean;
    /**
     * Deletes `this` point from the parent {@link DynamicPolygon}.
     * It is possible to use {@link isDeletable} to check if point can be deleted beforehand.
     * @returns a {@link DynamicPolygonPointMoveResult}.
     */
    delete(): DynamicPolygonPointDeleteResult;
    /**
     * Enables iteration of all points in  the polygon.
     * @param predicate Optional predicate. If specified only points where the predicate returns `true` will be returned.
     * @returns generator.
     */
    points(predicate?: (p: ArbitraryShapePoint) => boolean): Generator<ArbitraryShapePoint, void, unknown>;
    protected remove(p: DynamicPolygonPoint): void;
}
//# sourceMappingURL=ArbitraryShapePoint.d.ts.map