import { vec3 } from 'gl-matrix';
import { Element } from 'sadi-sdk-ts';
import * as sadi from 'sadi-sdk-ts';
export declare abstract class ComponentBase {
    scene: sadi.Scene;
    constructor(scene: any);
    /**
     * 冻结构件
     */
    freezeByElement: (elements: any | any[]) => void;
    /**
     * 根据index显示构件
     */
    showElementsByIndexs: (indexs: number[]) => void;
    /**
     * 根据id显示自定义构件
     */
    showElementsByIds: (ids: number[]) => void;
    /**
     * 根据index隐藏构件
     */
    hideElementsByIndexs: (indexs: number[]) => void;
    /**
     * 根据id隐藏自定义构件
     */
    hideElementsByIds: (indexs: number[]) => void;
    /**
     * 根据Elements隐藏构件
     */
    hideElementsByElements: (elements: any[]) => void;
    /**
     * 根据Index获取构件
     */
    getElementByIndex: (index: number | number[], options?: {
        excludes: [];
    }) => sadi.Element | sadi.Element[];
    /**
     * 获取所有构件
     */
    getAllElement: () => sadi.Element[];
    /**
     * 隐藏所有
     */
    hideAll: () => void;
    /**
     * 显示所有
     */
    showAll: () => void;
    /**
     * 根据id查找构件元素
     */
    getElementById: (id: number | number[], options?: {
        excludes: any[];
    }) => any;
    /**
     * 根据id查找构件
     */
    getElementByIdFormInit: (id: number | number[], options?: {
        excludes: any[];
    }) => any;
    /**
     * 根据index数组冻结构件元素
     */
    freezeByIndex: (indexs: number[]) => void;
    /**
     * 解冻所有元素
     */
    unlockAll: () => void;
    /**
     * 设置几何体颜色
     */
    setInstanceColor: (ins: any | any[], options: {
        color: string;
        opacity?: number;
    }) => void;
    /**
     * 设置构件颜色
     */
    setElementColor: (element: any | any[], opts: {
        color: string;
        opacity?: number;
    }) => void;
    /**
     * 修改所有构件颜色
     */
    changeAllElementsColor: (color: string, opacity?: number) => void;
    /**清除选择的构件上的颜色 */
    resetElementsColor: (elements: sadi.Element[]) => void;
    /**
     * 清除构件上所有颜色
     */
    resetAllElementsColor: () => void;
    /**
     * 泛光
     */
    setBloomParams: (params: {
        range: number;
        exposure: number;
    }) => void;
    /**
     * 根据构件元素设置泛光
     */
    addBloomByElement: (elements: any[]) => void;
    /**
     * 清除泛光效果
     */
    clearBloom: () => void;
    /**
     * 高亮
     */
    highlightObjects: (objects: sadi.SelectResult[], opts?: {
        isClearOlderHighlight: boolean;
    }) => void;
    /**
     * 清除所有高亮
     */
    clearHighlightElements: () => void;
    /**
     * 设置隔离高亮
     */
    setIsolationHighlights: (flag: boolean) => void;
    /**
     * 显示构件
     */
    showElementsByElements: (elements: any[], opts?: {
        hideOther: boolean;
    }) => void;
    /**
     * 根据文件获取构件模板
     * @param file 文件
     * @returns
     */
    getTemplateByFile: (file: File) => Promise<sadi.Element[]>;
    /**
     * 根据文件放置构件
     * @param buffer 二进制文件
     * @param point 位置
     * @param id 构件id
     * @returns void
     */
    placeComponents: (buffer: ArrayBuffer, point: vec3[], id: number[]) => Promise<sadi.Element[]>;
    /**
     * 根据索引获取构件中心点
     * @param index 构件索引
     * @returns
     */
    getComponentCenterByIndex: (index: number) => number[] | undefined;
    /**
     * 根据索引获取构件中心点z为最小值
     * @param index 构件索引
     * @returns
     */
    getComponentCenterByIndexTwo: (index: number) => number[] | undefined;
    /**
     * 根据自定义构件id获取构件中心点
     * @param index 构件索引
     * @returns
     */
    getComponentCenterByCustomId: (ids: number[]) => number[] | undefined;
    /**
     * 根据自定义构件id获取构件中心点z为最小值
     * @param index 构件索引
     * @returns
     */
    getComponentCenterByCustomIdTwo: (ids: number[]) => number[] | undefined;
    /**
     * 根据索引获取构件中心店
     * @param element 自定义构件
     * @returns
     */
    getComponentCenterByElement: (element: Element) => number[];
    /**
     * 根据索引获取构件中心点多个构件
     * @param element 自定义构件
     * @returns
     */
    getComponentCenterByElements: (elements: Element[]) => number[][];
    /**
     * 根据索引获取构件顶点
     * @param element
     * @returns
     */
    getComponentTopByElement: (element: Element) => number[];
    /**
     * 移动构件
     * @param elementArr 构件数组
     * @param arr 位置
     */
    moveComponents: (elementArr: Element[], arr?: [number, number, number]) => Promise<void>;
    /**
     * 缩放构件
     * @param elementArr 构件数组
     * @param arr 位置
     */
    scaleComponents: (elementArr: Element[], arr?: [number, number, number]) => Promise<void>;
    /**
     * 旋转构件
     * @param elementArr 构件数组
     * @param arr 位置
     * @param rad 角度
     */
    rotateComponents: (elementArr: Element[], arr?: [number, number, number], rad?: number) => Promise<void>;
    /**
     * 删除构件
     * @param elementArr 构件数组
     */
    deleteComponents: (elementArr: Element[]) => Promise<void>;
    /**
     * 根据索引获取构件轴心坐标
     * @param index 构件索引
     * @returns
     */
    getComponentAxis: (element: Element) => vec3;
    /**
     * 保存新构件
     * @returns
     */
    saveNewComponent: () => Promise<ArrayBuffer>;
    /**
     * 加载新建构件
     * @param buffer
     * @returns
     */
    loadExtraElements: (buffer: ArrayBuffer) => Promise<void>;
    /**
     * 绘制平移坐标轴
     * @param element 构件
     */
    enableAxis: (element: Element, flag: boolean, fun?: Function) => Promise<void>;
    /**
     * 根据id查找自定义构件元素
     */
    getElementByCustomId: (ids: number[]) => sadi.Element[];
    /**
     * 根据构件与坐标设置构件位置
     */
    setComponentLocation: (element: Element, loc: [number, number, number]) => void;
}
