import { NDArray, NativeNDArray } from "../ndarray/NDArray";
/** Discriminator for geometric primitive kinds. */
export type PrimitiveType = "point" | "vector" | "segment" | "triangle" | "ray" | "line" | "plane" | "aabb" | "polygon";
/**
 * A WASM-resident geometric primitive backed by an NDArray<Float32Array>.
 *
 * The `type` field discriminates between primitive kinds.
 * Dimensionality (2D/3D) is inferred from shape.
 * Shape encodes single vs batch:
 * - Single point: shape [3]
 * - Batch of N points: shape [N, 3]
 */
export declare class Primitive extends NDArray<Float32Array> {
    readonly type: PrimitiveType;
    /** @internal */
    constructor(handle: NativeNDArray<Float32Array>, type: PrimitiveType);
    /** Whether this primitive represents a batch (leading batch dimension). */
    get isBatch(): boolean;
    /** Number of elements in a batch, or 1 for a single primitive. */
    get count(): number;
    /** For batch primitives, returns the i-th element as a single Primitive. */
    at(i: number): Primitive;
}
/** A point in 2D or 3D space. Shape: `[D]` or batch `[N, D]`. */
export type Point = Primitive & {
    readonly type: "point";
};
/** A direction vector. Shape: `[D]` or batch `[N, D]`. */
export type Vector = Primitive & {
    readonly type: "vector";
};
/** A line segment defined by two endpoints. Shape: `[2, D]` or batch `[N, 2, D]`. */
export type Segment = Primitive & {
    readonly type: "segment";
};
/** A triangle defined by three vertices. Shape: `[3, D]` or batch `[N, 3, D]`. */
export type Triangle = Primitive & {
    readonly type: "triangle";
};
/** A ray defined by origin and direction. Shape: `[2, D]` or batch `[N, 2, D]`. */
export type Ray = Primitive & {
    readonly type: "ray";
};
/** A line extending infinitely in both directions. Shape: `[2, D]` or batch `[N, 2, D]`. */
export type Line = Primitive & {
    readonly type: "line";
};
/** An infinite plane (ax+by+cz+d=0). Shape: `[4]` or batch `[N, 4]`. */
export type Plane = Primitive & {
    readonly type: "plane";
};
/** An axis-aligned bounding box. Shape: `[2, D]` or batch `[N, 2, D]`. */
export type AABB = Primitive & {
    readonly type: "aabb";
};
/** A polygon defined by ordered vertices. Shape: `[V, D]`. */
export type Polygon = Primitive & {
    readonly type: "polygon";
};
//# sourceMappingURL=Primitive.d.ts.map