import { Point2D, Point3D } from '../types';
export interface ShapeInstance<Datum = Point3D> {
    scale(): number;
    scale(scale: number): this;
    origin(): Point2D;
    origin(origin: Point2D): this;
    rotateX(): number;
    rotateX(angle: number): this;
    rotateY(): number;
    rotateY(angle: number): this;
    rotateZ(): number;
    rotateZ(angle: number): this;
    x(): (point: Datum) => number;
    x(x: (point: Datum) => number): this;
    y(): (point: Datum) => number;
    y(y: (point: Datum) => number): this;
    z(): (point: Datum) => number;
    z(z: (point: Datum) => number): this;
    rotationCenter(): Point3D;
    rotationCenter(center: Point3D): this;
    rotationCenter(center?: Point3D): this | Point3D;
}
export declare class ShapeRenderer<Datum = Point3D> implements ShapeInstance<Datum> {
    private _scale;
    private _origin;
    private _rotateX;
    private _rotateY;
    private _rotateZ;
    private _x;
    private _y;
    private _z;
    private _rotationCenter;
    constructor();
    scale(): number;
    scale(scale: number): this;
    origin(): Point2D;
    origin(origin: Point2D): this;
    rotationCenter(): Point3D;
    rotationCenter(center: Point3D): this;
    rotateX(): number;
    rotateX(angle: number): this;
    rotateY(): number;
    rotateY(angle: number): this;
    rotateZ(): number;
    rotateZ(angle: number): this;
    x(): (point: Datum) => number;
    x(x: (point: Datum) => number): this;
    y(): (point: Datum) => number;
    y(y: (point: Datum) => number): this;
    z(): (point: Datum) => number;
    z(z: (point: Datum) => number): this;
}
