import { Event, Mesh, Vector3 } from 'three';
import { IMaterial } from '../IMaterial';
import { IObject3D, IObjectSetDirtyOptions } from '../IObject';
import { IGeometry, IGeometryEventMap } from '../IGeometry';
import { makeIObject3DUiConfig } from './IObjectUi';
import { ITexture } from '../ITexture';
export declare const iObjectCommons: {
    setDirty: (this: IObject3D, options?: IObjectSetDirtyOptions, ...args: any[]) => void;
    upgradeObject3D: typeof upgradeObject3D;
    makeUiConfig: typeof makeIObject3DUiConfig;
    autoCenter: <T extends IObject3D>(this: T, setDirty?: boolean, undo?: boolean) => T;
    autoScale: <T extends IObject3D>(this: T, autoScaleRadius?: number, isCentered?: boolean, setDirty?: boolean, undo?: boolean) => T;
    pivotToBoundsCenter: <T extends IObject3D>(this: T, setDirty?: boolean) => () => void;
    pivotToPoint: <T extends IObject3D>(this: T, point: Vector3, setDirty?: boolean, compensateSharedGeometry?: boolean) => () => void;
    traverseModels: <T extends IObject3D>(this: T, callback: (object: IObject3D) => boolean | void, { visible, widgets, ...ops }: {
        [x: string]: any;
        visible?: boolean | undefined;
        widgets?: boolean | undefined;
    }) => void;
    eventCallbacks: {
        onAddedToParent: (this: IObject3D, e: Event) => void;
        onRemovedFromParent: (this: IObject3D, e: Event) => void;
        onGeometryUpdate: (this: IObject3D, e: IGeometryEventMap["geometryUpdate"] & Event<"geometryUpdate">) => void;
    };
    initMaterial: (this: IObject3D) => void;
    getMaterial: (this: IObject3D) => IMaterial | IMaterial[] | undefined;
    getMaterials: (this: IObject3D) => IMaterial[];
    setMaterial: (this: IObject3D, material: IMaterial | IMaterial[] | undefined) => never[] | undefined;
    setMaterials: (this: IObject3D, materials: IMaterial[]) => void;
    initGeometry: (this: IObject3D) => void;
    getGeometry: (this: IObject3D & Mesh) => IGeometry | undefined;
    setGeometry: (this: IObject3D & Mesh, geometry: IGeometry | undefined) => void;
    refreshUi: (this: IObject3D) => void;
    /** @ignore */
    dispatchEvent: (superDispatch: IObject3D["dispatchEvent"]) => IObject3D["dispatchEvent"];
    /** @ignore */
    clone: (superClone: IObject3D["clone"]) => IObject3D["clone"];
    /** @ignore */
    copy: (superCopy: IObject3D["copy"]) => IObject3D["copy"];
    /** @ignore */
    add: (superAdd: IObject3D["add"]) => IObject3D["add"];
    /** @ignore */
    dispose: (superDispose?: IObject3D["dispose"]) => (this: IObject3D, removeFromParent?: boolean) => any;
    getMapsForObject3D: (this: IObject3D) => Map<string, ITexture>;
    deleteObject: (object: IObject3D, e?: any) => Promise<(() => void) | undefined>;
    duplicateObject: (object: IObject3D, e?: any) => Promise<{
        action: () => void;
        undo: () => void;
    }>;
};
export declare const sceneTextureProperties: Set<string>;
export declare const object3DTextureProperties: Set<string>;
/**
 * Converts three.js Object3D to IObject3D, setup object events, adds utility methods, and runs objectProcessor.
 * @param parent
 */
declare function upgradeObject3D(this: IObject3D, parent?: IObject3D | undefined): IObject3D;
export {};
//# sourceMappingURL=../../src/core/object/iObjectCommons.d.ts.map