import { Box3 as Box3_2 } from 'three';
import { Camera } from 'three';
import { Circle } from 'fabric';
import { default as default_2 } from 'stats.js';
import * as GaussianSplats3D from '@mkkellogg/gaussian-splats-3d';
import { GlobeControls } from '3d-tiles-renderer';
import { Group } from 'fabric';
import { IText } from 'fabric';
import { Line } from 'fabric';
import { Object3D } from 'three';
import { Path } from 'fabric';
import { PerspectiveCamera } from 'three';
import { Rect } from 'fabric';
import { RenderPipeline } from 'three/webgpu';
import { Scene } from 'three';
import * as THREE from 'three';
import { TilesRenderer } from '3d-tiles-renderer';
import { Vector3 } from 'three';
import { WebGPURenderer } from 'three/webgpu';

declare class AngleMeasure2d extends BaseMeasureTool2d {
    /** 三点完成角度测量，第二个点作为角点。 */
    handleClick(point: THREE.Vector3): void;
    handleMove(point: THREE.Vector3): void;
}

declare class Annotation3d {
    private readonly engine;
    private readonly rootGroup;
    private readonly records;
    private readonly occlusionRaycaster;
    private readonly normalizer;
    private readonly materialFactory;
    private readonly overlayController;
    private readonly interactionController;
    private readonly effectsController;
    private readonly visibilityController;
    private readonly markerRegistry;
    private readonly recordFactory;
    private currentTime;
    constructor(engine: any);
    add(config: Annotation3dData_2): string;
    addMany(configs: Annotation3dData_2[]): string[];
    /** 将 PathDraw 的通用路径数据转换为可持久化的 Annotation3D 折线标记。 */
    addPath(pathData: PathDrawData_2, options?: Annotation3dPathOptions_2): string;
    pickPoint(): Promise<AnnotationPoint3d | null>;
    update(id: string, patch: Partial<Annotation3dData_2>): boolean;
    remove(id: string): boolean;
    clear(): void;
    get(id: string): Annotation3dInstance_2 | undefined;
    getAll(): Annotation3dInstance_2[];
    show(id: string): boolean;
    hide(id: string): boolean;
    setVisible(id: string, visible: boolean): boolean;
    showPanel(id: string): boolean;
    hidePanel(id: string): boolean;
    togglePanel(id: string): boolean;
    updatePanel(id: string, patch: Partial<Annotation3dPanel_2>): boolean;
    getData(): Annotation3dData_2[];
    restoreData(data: Annotation3dData_2[]): void;
    updateFrame(deltaTime?: number): void;
    dispose(): void;
    private attachRecord;
    private removeInternal;
    private toEventPayload;
    private emit;
}

declare class Annotation3d_2 {
    private readonly engine;
    private readonly rootGroup;
    private readonly records;
    private readonly occlusionRaycaster;
    private readonly normalizer;
    private readonly materialFactory;
    private readonly overlayController;
    private readonly interactionController;
    private readonly effectsController;
    private readonly visibilityController;
    private readonly markerRegistry;
    private readonly recordFactory;
    private currentTime;
    constructor(engine: any);
    add(config: Annotation3dData): string;
    addMany(configs: Annotation3dData[]): string[];
    /** 将 PathDraw 的通用路径数据转换为可持久化的 Annotation3D 折线标记。 */
    addPath(pathData: PathDrawData, options?: Annotation3dPathOptions): string;
    pickPoint(): Promise<AnnotationPoint3d_2 | null>;
    update(id: string, patch: Partial<Annotation3dData>): boolean;
    remove(id: string): boolean;
    clear(): void;
    get(id: string): Annotation3dInstance | undefined;
    getAll(): Annotation3dInstance[];
    show(id: string): boolean;
    hide(id: string): boolean;
    setVisible(id: string, visible: boolean): boolean;
    showPanel(id: string): boolean;
    hidePanel(id: string): boolean;
    togglePanel(id: string): boolean;
    updatePanel(id: string, patch: Partial<Annotation3dPanel>): boolean;
    getData(): Annotation3dData[];
    restoreData(data: Annotation3dData[]): void;
    updateFrame(deltaTime?: number): void;
    dispose(): void;
    private attachRecord;
    private removeInternal;
    private toEventPayload;
    private emit;
}

/** 创建或恢复标记使用的纯数据结构。 */
export declare interface Annotation3dData {
    id?: string;
    type: Annotation3dType;
    points: AnnotationPoint3d_2[];
    visible?: boolean;
    selectable?: boolean;
    style?: Annotation3dStyle;
    effect?: Annotation3dEffect;
    panel?: Annotation3dPanel;
    data?: any;
}

/** 创建或恢复标记使用的纯数据结构。 */
declare interface Annotation3dData_2 {
    id?: string;
    type: Annotation3dType_2;
    points: AnnotationPoint3d[];
    visible?: boolean;
    selectable?: boolean;
    style?: Annotation3dStyle_2;
    effect?: Annotation3dEffect_2;
    panel?: Annotation3dPanel_2;
    data?: any;
}

/** 点线面体统一的特效配置。 */
export declare interface Annotation3dEffect {
    gradient?: AnnotationGradientEffect_2;
    glow?: AnnotationGlowEffect_2;
    flow?: AnnotationFlowEffect_2;
    pulse?: AnnotationPulseEffect_2;
    layers?: AnnotationLayersEffect_2;
    scan?: AnnotationScanEffect_2;
}

/** 点线面体统一的特效配置。 */
declare interface Annotation3dEffect_2 {
    gradient?: AnnotationGradientEffect;
    glow?: AnnotationGlowEffect;
    flow?: AnnotationFlowEffect;
    pulse?: AnnotationPulseEffect;
    layers?: AnnotationLayersEffect;
    scan?: AnnotationScanEffect;
}

/** 引擎运行时实例，包含根节点和交互状态。 */
export declare interface Annotation3dInstance {
    id: string;
    type: Annotation3dType;
    points: AnnotationPoint3d_2[];
    visible: boolean;
    selectable: boolean;
    style: Annotation3dStyle;
    effect: Annotation3dEffect;
    panel?: Omit<Annotation3dPanel, 'actions'>;
    data?: any;
    panelVisible: boolean;
    hovered: boolean;
    root: THREE.Group;
}

/** 引擎运行时实例，包含根节点和交互状态。 */
declare interface Annotation3dInstance_2 {
    id: string;
    type: Annotation3dType_2;
    points: AnnotationPoint3d[];
    visible: boolean;
    selectable: boolean;
    style: Annotation3dStyle_2;
    effect: Annotation3dEffect_2;
    panel?: Omit<Annotation3dPanel_2, 'actions'>;
    data?: any;
    panelVisible: boolean;
    hovered: boolean;
    root: THREE.Group;
}

/** 标记关联的原生 HTML 窗体配置。 */
export declare interface Annotation3dPanel {
    visible?: boolean;
    trigger?: 'manual' | 'hover' | 'click' | 'always';
    mode?: 'text' | 'html';
    text?: string;
    html?: string;
    anchor?: 'self' | 'top' | 'center' | 'start' | 'end' | 'centroid';
    offset?: AnnotationPanelOffset3d_2;
    screenOffset?: AnnotationPanelOffset2d_2;
    className?: string;
    style?: Record<string, string>;
    interactive?: boolean;
    occlusion?: 'show' | 'hide';
    actions?: Record<string, (ctx: AnnotationActionContext) => void>;
}

/** 标记关联的原生 HTML 窗体配置。 */
declare interface Annotation3dPanel_2 {
    visible?: boolean;
    trigger?: 'manual' | 'hover' | 'click' | 'always';
    mode?: 'text' | 'html';
    text?: string;
    html?: string;
    anchor?: 'self' | 'top' | 'center' | 'start' | 'end' | 'centroid';
    offset?: AnnotationPanelOffset3d;
    screenOffset?: AnnotationPanelOffset2d;
    className?: string;
    style?: Record<string, string>;
    interactive?: boolean;
    occlusion?: 'show' | 'hide';
    actions?: Record<string, (ctx: AnnotationActionContext_2) => void>;
}

/** 将 PathDraw 路径转换为 Annotation3D 线标记时使用的配置。 */
export declare interface Annotation3dPathOptions {
    id?: string;
    pointSource?: 'samples' | 'points';
    visible?: boolean;
    selectable?: boolean;
    style?: Annotation3dStyle;
    effect?: Annotation3dEffect;
    panel?: Annotation3dPanel;
    data?: any;
}

/** 将 PathDraw 路径转换为 Annotation3D 线标记时使用的配置。 */
declare interface Annotation3dPathOptions_2 {
    id?: string;
    pointSource?: 'samples' | 'points';
    visible?: boolean;
    selectable?: boolean;
    style?: Annotation3dStyle_2;
    effect?: Annotation3dEffect_2;
    panel?: Annotation3dPanel_2;
    data?: any;
}

/** 点线面体统一样式。 */
export declare interface Annotation3dStyle {
    color?: string;
    opacity?: number;
    depthTest?: boolean;
    alwaysOnTop?: boolean;
    lineWidth?: number;
    fillColor?: string;
    fillOpacity?: number;
    iconPoint?: AnnotationIconPointStyle_2;
    textPoint?: AnnotationTextPointStyle_2;
    iconTextPoint?: AnnotationIconTextPointStyle_2;
    ripplePoint?: AnnotationRipplePointStyle_2;
    pillarPoint?: AnnotationPillarPointStyle_2;
    leaderPoint?: AnnotationLeaderPointStyle_2;
    line?: AnnotationLineStyle_2;
    curve?: AnnotationCurveStyle_2;
    polygon?: AnnotationPolygonStyle_2;
    volume?: AnnotationVolumeStyle_2;
}

/** 点线面体统一样式。 */
declare interface Annotation3dStyle_2 {
    color?: string;
    opacity?: number;
    depthTest?: boolean;
    alwaysOnTop?: boolean;
    lineWidth?: number;
    fillColor?: string;
    fillOpacity?: number;
    iconPoint?: AnnotationIconPointStyle;
    textPoint?: AnnotationTextPointStyle;
    iconTextPoint?: AnnotationIconTextPointStyle;
    ripplePoint?: AnnotationRipplePointStyle;
    pillarPoint?: AnnotationPillarPointStyle;
    leaderPoint?: AnnotationLeaderPointStyle;
    line?: AnnotationLineStyle;
    curve?: AnnotationCurveStyle;
    polygon?: AnnotationPolygonStyle;
    volume?: AnnotationVolumeStyle;
}

/** 支持的三维标记类型。 */
export declare type Annotation3dType = 'iconPoint' | 'textPoint' | 'iconTextPoint' | 'ripplePoint' | 'pillarPoint' | 'leaderPoint' | 'polyline' | 'curve3d' | 'polygon' | 'extrudePolygon' | 'box';

/** 支持的三维标记类型。 */
declare type Annotation3dType_2 = 'iconPoint' | 'textPoint' | 'iconTextPoint' | 'ripplePoint' | 'pillarPoint' | 'leaderPoint' | 'polyline' | 'curve3d' | 'polygon' | 'extrudePolygon' | 'box';

/** 面板 action 回调上下文。 */
export declare interface AnnotationActionContext {
    engine: any;
    id: string;
    annotation: Annotation3dInstance;
    action: string;
    element: HTMLElement;
    originalEvent: MouseEvent;
}

/** 面板 action 回调上下文。 */
declare interface AnnotationActionContext_2 {
    engine: any;
    id: string;
    annotation: Annotation3dInstance_2;
    action: string;
    element: HTMLElement;
    originalEvent: MouseEvent;
}

/**
 * 标注联合类型
 */
declare type AnnotationConfig720 = IconAnnotationConfig | TextAnnotationConfig | LinkAnnotationConfig;

/** 3D 曲线样式。 */
declare interface AnnotationCurveStyle {
    interpolation?: 'catmullRom' | 'centripetal' | 'chordal';
    tension?: number;
    tubularSegments?: number;
    radialSegments?: number;
    closed?: boolean;
}

/** 3D 曲线样式。 */
declare interface AnnotationCurveStyle_2 {
    interpolation?: 'catmullRom' | 'centripetal' | 'chordal';
    tension?: number;
    tubularSegments?: number;
    radialSegments?: number;
    closed?: boolean;
}

/** DOM 点标记相对三维锚点的屏幕布局。 */
declare interface AnnotationDomPointLayoutStyle {
    screenAnchor?: 'center' | 'top' | 'right' | 'bottom' | 'left';
    offsetX?: number;
    offsetY?: number;
}

/** DOM 点标记相对三维锚点的屏幕布局。 */
declare interface AnnotationDomPointLayoutStyle_2 {
    screenAnchor?: 'center' | 'top' | 'right' | 'bottom' | 'left';
    offsetX?: number;
    offsetY?: number;
}

/** 流动效果配置。 */
declare interface AnnotationFlowEffect {
    enabled: boolean;
    speed?: number;
    width?: number;
    direction?: 'forward' | 'backward' | 'up';
}

/** 流动效果配置。 */
declare interface AnnotationFlowEffect_2 {
    enabled: boolean;
    speed?: number;
    width?: number;
    direction?: 'forward' | 'backward' | 'up';
}

/** 发光效果配置。 */
declare interface AnnotationGlowEffect {
    enabled: boolean;
    color?: string;
    intensity?: number;
}

/** 发光效果配置。 */
declare interface AnnotationGlowEffect_2 {
    enabled: boolean;
    color?: string;
    intensity?: number;
}

/** 渐变色效果配置。 */
declare interface AnnotationGradientEffect {
    enabled: boolean;
    direction?: 'vertical' | 'horizontal' | 'path';
    stops?: AnnotationGradientStop[];
}

/** 渐变色效果配置。 */
declare interface AnnotationGradientEffect_2 {
    enabled: boolean;
    direction?: 'vertical' | 'horizontal' | 'path';
    stops?: AnnotationGradientStop_2[];
}

/** 渐变色 stop。 */
declare interface AnnotationGradientStop {
    offset: number;
    color: string;
    alpha?: number;
}

/** 渐变色 stop。 */
declare interface AnnotationGradientStop_2 {
    offset: number;
    color: string;
    alpha?: number;
}

/** 纯图标点标记样式，尺寸单位为屏幕像素。 */
declare interface AnnotationIconPointStyle extends AnnotationDomPointLayoutStyle {
    icon?: string;
    width?: number;
    height?: number;
    opacity?: number;
    rotation?: number;
    objectFit?: 'contain' | 'cover' | 'fill' | 'none' | 'scale-down';
    background?: AnnotationPointBackgroundStyle;
}

/** 纯图标点标记样式，尺寸单位为屏幕像素。 */
declare interface AnnotationIconPointStyle_2 extends AnnotationDomPointLayoutStyle_2 {
    icon?: string;
    width?: number;
    height?: number;
    opacity?: number;
    rotation?: number;
    objectFit?: 'contain' | 'cover' | 'fill' | 'none' | 'scale-down';
    background?: AnnotationPointBackgroundStyle_2;
}

/** 图标与文字组合点标记样式。 */
declare interface AnnotationIconTextPointStyle extends AnnotationDomPointLayoutStyle {
    icon?: string;
    iconWidth?: number;
    iconHeight?: number;
    iconOpacity?: number;
    iconObjectFit?: 'contain' | 'cover' | 'fill' | 'none' | 'scale-down';
    text?: string;
    textColor?: string;
    fontSize?: number;
    fontFamily?: string;
    fontWeight?: number | string;
    lineHeight?: number;
    maxTextWidth?: number;
    textAlign?: 'left' | 'center' | 'right';
    whiteSpace?: 'normal' | 'nowrap' | 'pre-line';
    placement?: 'top' | 'right' | 'bottom' | 'left';
    gap?: number;
    align?: 'start' | 'center' | 'end';
    backgroundScope?: 'none' | 'text' | 'all';
    background?: AnnotationPointBackgroundStyle;
}

/** 图标与文字组合点标记样式。 */
declare interface AnnotationIconTextPointStyle_2 extends AnnotationDomPointLayoutStyle_2 {
    icon?: string;
    iconWidth?: number;
    iconHeight?: number;
    iconOpacity?: number;
    iconObjectFit?: 'contain' | 'cover' | 'fill' | 'none' | 'scale-down';
    text?: string;
    textColor?: string;
    fontSize?: number;
    fontFamily?: string;
    fontWeight?: number | string;
    lineHeight?: number;
    maxTextWidth?: number;
    textAlign?: 'left' | 'center' | 'right';
    whiteSpace?: 'normal' | 'nowrap' | 'pre-line';
    placement?: 'top' | 'right' | 'bottom' | 'left';
    gap?: number;
    align?: 'start' | 'center' | 'end';
    backgroundScope?: 'none' | 'text' | 'all';
    background?: AnnotationPointBackgroundStyle_2;
}

/**
 * 标注实例（包含 DOM 元素）
 */
declare interface AnnotationInstance {
    id: string;
    config: AnnotationConfig720;
    element: HTMLElement;
    worldPosition: {
        x: number;
        y: number;
        z: number;
    };
    screenPosition: {
        x: number;
        y: number;
    };
    visible: boolean;
}

/** 多层围栏线效果配置。 */
declare interface AnnotationLayersEffect {
    enabled: boolean;
    count?: number;
    offsetY?: number;
}

/** 多层围栏线效果配置。 */
declare interface AnnotationLayersEffect_2 {
    enabled: boolean;
    count?: number;
    offsetY?: number;
}

/** 带引线点标记样式。 */
declare interface AnnotationLeaderPointStyle {
    variant?: 'vertical' | 'elbow' | 'flag';
    side?: 'left' | 'right';
    height?: number;
    armLength?: number;
    offsetX?: number;
    offsetZ?: number;
    stemWidth?: number;
    showAnchor?: boolean;
    showBoard?: boolean;
    boardWidth?: number;
    boardHeight?: number;
    boardOpacity?: number;
    strokeColor?: string;
    strokeOpacity?: number;
    backgroundColor?: string;
    backgroundOpacity?: number;
    borderColor?: string;
    borderWidth?: number;
    anchorColor?: string;
    anchorRingColor?: string;
    iconBackgroundColor?: string;
    iconBackgroundOpacity?: number;
    icon?: string;
    iconWidth?: number;
    iconHeight?: number;
    text?: string;
    textColor?: string;
    fontSize?: number;
    fontWeight?: number | string;
}

/** 带引线点标记样式。 */
declare interface AnnotationLeaderPointStyle_2 {
    variant?: 'vertical' | 'elbow' | 'flag';
    side?: 'left' | 'right';
    height?: number;
    armLength?: number;
    offsetX?: number;
    offsetZ?: number;
    stemWidth?: number;
    showAnchor?: boolean;
    showBoard?: boolean;
    boardWidth?: number;
    boardHeight?: number;
    boardOpacity?: number;
    strokeColor?: string;
    strokeOpacity?: number;
    backgroundColor?: string;
    backgroundOpacity?: number;
    borderColor?: string;
    borderWidth?: number;
    anchorColor?: string;
    anchorRingColor?: string;
    iconBackgroundColor?: string;
    iconBackgroundOpacity?: number;
    icon?: string;
    iconWidth?: number;
    iconHeight?: number;
    text?: string;
    textColor?: string;
    fontSize?: number;
    fontWeight?: number | string;
}

/** 线样式。 */
declare interface AnnotationLineStyle {
    dashed?: boolean;
    closed?: boolean;
}

/** 线样式。 */
declare interface AnnotationLineStyle_2 {
    dashed?: boolean;
    closed?: boolean;
}

/**
 * 标注管理器 - 管理全景图中的标注点
 * 支持图标、文字、超链接三种类型的标注
 */
declare class AnnotationManager720 {
    private annotations;
    private container;
    private annotationContainer;
    private worldToScreen;
    private sphereRadius;
    private camera;
    private renderer;
    private onClickAnnotation?;
    private onHoverAnnotation?;
    constructor(container: HTMLElement, camera: THREE.Camera, renderer: THREE.WebGLRenderer, sphereRadius: number);
    /**
     * 创建标注容器
     */
    private createAnnotationContainer;
    /**
     * 添加标注
     * @param config 标注配置
     * @returns 标注 ID
     */
    addAnnotation(config: AnnotationConfig720): string;
    /**
     * 批量添加标注
     * @param configs 标注配置数组
     * @returns 标注 ID 数组
     */
    addAnnotations(configs: AnnotationConfig720[]): string[];
    /**
     * 创建标注 DOM 元素
     */
    private createAnnotationElement;
    /**
     * 创建图标标注
     */
    private createIconAnnotation;
    /**
     * 创建文字标注
     */
    private createTextAnnotation;
    /**
     * 创建超链接标注
     */
    private createLinkAnnotation;
    /**
     * 附加标注事件
     */
    private attachAnnotationEvents;
    /**
     * 球面坐标转笛卡尔坐标
     */
    private sphericalToCartesian;
    /**
     * 更新标注位置（单个标注）
     */
    private updateAnnotationPosition;
    /**
     * 检查点是否在相机前方
     */
    private isPositionInFront;
    /**
     * 检查点是否在视野内
     */
    private isPositionInView;
    /**
     * 更新所有标注（每帧调用）
     */
    update(): void;
    /**
     * 处理标注点击
     */
    private handleClickAnnotation;
    /**
     * 处理标注悬停
     */
    private handleHoverAnnotation;
    /**
     * 设置点击回调
     */
    setOnClickAnnotation(callback: (instance: AnnotationInstance) => void): void;
    /**
     * 设置悬停回调
     */
    setOnHoverAnnotation(callback: (instance: AnnotationInstance | null) => void): void;
    /**
     * 移除标注
     * @param id 标注 ID
     */
    removeAnnotation(id: string): void;
    /**
     * 清空所有标注
     */
    clearAll(): void;
    /**
     * 获取所有标注
     */
    getAnnotations(): AnnotationInstance[];
    /**
     * 获取标注
     * @param id 标注 ID
     */
    getAnnotation(id: string): AnnotationInstance | undefined;
    /**
     * 更新相机引用（当相机发生变化时调用）
     */
    updateCamera(camera: THREE.Camera): void;
    /**
     * 销毁管理器
     */
    dispose(): void;
    /**
     * 生成唯一 ID
     */
    private generateId;
}

/** 面板屏幕偏移。 */
declare interface AnnotationPanelOffset2d {
    x?: number;
    y?: number;
}

/** 面板屏幕偏移。 */
declare interface AnnotationPanelOffset2d_2 {
    x?: number;
    y?: number;
}

/** 面板三维偏移。 */
declare interface AnnotationPanelOffset3d {
    x?: number;
    y?: number;
    z?: number;
}

/** 面板三维偏移。 */
declare interface AnnotationPanelOffset3d_2 {
    x?: number;
    y?: number;
    z?: number;
}

/** 独立光柱点标记样式，几何尺寸使用世界单位。 */
declare interface AnnotationPillarPointStyle {
    height?: number;
    radiusTop?: number;
    radiusBottom?: number;
    radialSegments?: number;
    openEnded?: boolean;
    color?: string;
    opacity?: number;
    gradientStartColor?: string;
    gradientEndColor?: string;
    gradientStartAlpha?: number;
    gradientEndAlpha?: number;
    glowIntensity?: number;
    pulseEnabled?: boolean;
    pulseSpeed?: number;
    pulseMinOpacity?: number;
    pulseMaxOpacity?: number;
    showBaseRing?: boolean;
    baseRingInnerRadius?: number;
    baseRingOuterRadius?: number;
    baseRingColor?: string;
    baseRingOpacity?: number;
    baseRingSegments?: number;
    baseRingPulseSpeed?: number;
    offsetX?: number;
    offsetY?: number;
    offsetZ?: number;
}

/** 独立光柱点标记样式，几何尺寸使用世界单位。 */
declare interface AnnotationPillarPointStyle_2 {
    height?: number;
    radiusTop?: number;
    radiusBottom?: number;
    radialSegments?: number;
    openEnded?: boolean;
    color?: string;
    opacity?: number;
    gradientStartColor?: string;
    gradientEndColor?: string;
    gradientStartAlpha?: number;
    gradientEndAlpha?: number;
    glowIntensity?: number;
    pulseEnabled?: boolean;
    pulseSpeed?: number;
    pulseMinOpacity?: number;
    pulseMaxOpacity?: number;
    showBaseRing?: boolean;
    baseRingInnerRadius?: number;
    baseRingOuterRadius?: number;
    baseRingColor?: string;
    baseRingOpacity?: number;
    baseRingSegments?: number;
    baseRingPulseSpeed?: number;
    offsetX?: number;
    offsetY?: number;
    offsetZ?: number;
}

/** 三维空间点。 */
declare interface AnnotationPoint3d {
    x: number;
    y: number;
    z: number;
}

/** 三维空间点。 */
declare interface AnnotationPoint3d_2 {
    x: number;
    y: number;
    z: number;
}

/** 文字或图文点标记使用的背景样式。 */
declare interface AnnotationPointBackgroundStyle {
    enabled?: boolean;
    color?: string;
    opacity?: number;
    borderColor?: string;
    borderWidth?: number;
    borderRadius?: number;
    paddingX?: number;
    paddingY?: number;
    boxShadow?: string;
}

/** 文字或图文点标记使用的背景样式。 */
declare interface AnnotationPointBackgroundStyle_2 {
    enabled?: boolean;
    color?: string;
    opacity?: number;
    borderColor?: string;
    borderWidth?: number;
    borderRadius?: number;
    paddingX?: number;
    paddingY?: number;
    boxShadow?: string;
}

/** 面样式。 */
declare interface AnnotationPolygonStyle {
    showEdge?: boolean;
    edgeColor?: string;
    edgeWidth?: number;
}

/** 面样式。 */
declare interface AnnotationPolygonStyle_2 {
    showEdge?: boolean;
    edgeColor?: string;
    edgeWidth?: number;
}

/**
 * 标注位置信息（球面坐标）
 */
declare interface AnnotationPosition {
    theta: number;
    phi: number;
    radius?: number;
}

/** 呼吸闪烁效果配置。 */
declare interface AnnotationPulseEffect {
    enabled: boolean;
    speed?: number;
    minOpacity?: number;
    maxOpacity?: number;
}

/** 呼吸闪烁效果配置。 */
declare interface AnnotationPulseEffect_2 {
    enabled: boolean;
    speed?: number;
    minOpacity?: number;
    maxOpacity?: number;
}

/** 独立扩散波纹点标记样式，半径与线宽使用世界单位。 */
declare interface AnnotationRipplePointStyle {
    color?: string;
    opacity?: number;
    count?: number;
    speed?: number;
    startRadius?: number;
    maxRadius?: number;
    ringWidth?: number;
    segments?: number;
    showCenter?: boolean;
    centerRadius?: number;
    centerColor?: string;
    centerOpacity?: number;
    rotationX?: number;
    rotationY?: number;
    rotationZ?: number;
    offsetX?: number;
    offsetY?: number;
    offsetZ?: number;
}

/** 独立扩散波纹点标记样式，半径与线宽使用世界单位。 */
declare interface AnnotationRipplePointStyle_2 {
    color?: string;
    opacity?: number;
    count?: number;
    speed?: number;
    startRadius?: number;
    maxRadius?: number;
    ringWidth?: number;
    segments?: number;
    showCenter?: boolean;
    centerRadius?: number;
    centerColor?: string;
    centerOpacity?: number;
    rotationX?: number;
    rotationY?: number;
    rotationZ?: number;
    offsetX?: number;
    offsetY?: number;
    offsetZ?: number;
}

/** 扫描效果配置。 */
declare interface AnnotationScanEffect {
    enabled: boolean;
    speed?: number;
    width?: number;
}

/** 扫描效果配置。 */
declare interface AnnotationScanEffect_2 {
    enabled: boolean;
    speed?: number;
    width?: number;
}

/** 纯文字点标记样式。 */
declare interface AnnotationTextPointStyle extends AnnotationDomPointLayoutStyle {
    text?: string;
    color?: string;
    fontSize?: number;
    fontFamily?: string;
    fontWeight?: number | string;
    lineHeight?: number;
    maxWidth?: number;
    textAlign?: 'left' | 'center' | 'right';
    whiteSpace?: 'normal' | 'nowrap' | 'pre-line';
    background?: AnnotationPointBackgroundStyle;
}

/** 纯文字点标记样式。 */
declare interface AnnotationTextPointStyle_2 extends AnnotationDomPointLayoutStyle_2 {
    text?: string;
    color?: string;
    fontSize?: number;
    fontFamily?: string;
    fontWeight?: number | string;
    lineHeight?: number;
    maxWidth?: number;
    textAlign?: 'left' | 'center' | 'right';
    whiteSpace?: 'normal' | 'nowrap' | 'pre-line';
    background?: AnnotationPointBackgroundStyle_2;
}

/**
 * 标注类型枚举
 */
declare enum AnnotationType720 {
    ICON = "icon",// 图标标注
    TEXT = "text",// 文字标注
    LINK = "link"
}

/** 体样式。 */
declare interface AnnotationVolumeStyle {
    height?: number;
    showTop?: boolean;
    showSide?: boolean;
    showBottom?: boolean;
    edgeColor?: string;
}

/** 体样式。 */
declare interface AnnotationVolumeStyle_2 {
    height?: number;
    showTop?: boolean;
    showSide?: boolean;
    showBottom?: boolean;
    edgeColor?: string;
}

declare class AreaMeasure2d extends BaseMeasureTool2d {
    /** 三点及以上可以闭合面积，双击或 Enter 结束。 */
    handleClick(point: THREE.Vector3): void;
    handleMove(point: THREE.Vector3): void;
    handleDoubleClick(): void;
}

/** v2 自动曝光模块，使用低分辨率 RGBA8 离屏目标完成 WebGL 测光。 */
declare class AutoExposureModule {
    private readonly engine;
    private readonly renderer;
    private readonly scene;
    private options;
    private probeTarget;
    private lastMeasurementTime;
    private lastUpdateTime;
    private targetExposure;
    private disposed;
    constructor(engine: any);
    get settings(): ResolvedAutoExposureOptions;
    isEnabled(): boolean;
    setEnabled(enabled: boolean): void;
    setOptions(options: AutoExposureOptions): void;
    /** 在主动画循环中更新曝光；低分辨率测光按配置间隔执行。 */
    update(time: DOMHighResTimeStamp): void;
    dispose(): void;
    private resolveOptions;
    private ensureProbeTarget;
    private measureScene;
    private calculateTrimmedLuminance;
    private clampExposure;
}

/**
 * v3 自动曝光模块。
 *
 * 使用低分辨率离屏渲染探针估计相机当前看到的线性亮度，再用指数平滑更新
 * renderer.toneMappingExposure。探针不会修改主渲染目标，也不会参与后期管线。
 */
declare class AutoExposureModule_2 {
    private readonly engine;
    private readonly renderer;
    private readonly scene;
    private options;
    private probeTarget;
    private inFlightMeasurement;
    private lastMeasurementTime;
    private lastUpdateTime;
    private targetExposure;
    private disposed;
    constructor(engine: any);
    get settings(): ResolvedAutoExposureOptions;
    isEnabled(): boolean;
    setEnabled(enabled: boolean): void;
    setOptions(options: AutoExposureOptions): void;
    /** 在主动画循环中调用；测光和曝光适应都不阻塞主渲染。 */
    update(time: DOMHighResTimeStamp): void;
    dispose(): void;
    private resolveOptions;
    private ensureProbeTarget;
    private measureScene;
    private restoreRenderTarget;
    private calculateTrimmedLuminance;
    private clampExposure;
}

export declare interface AutoExposureOptions {
    /** 是否启用自动曝光；也可以在创建引擎时直接传入 true/false。 */
    enabled?: boolean;
    /** 测光目标亮度；值越大，自动曝光后的画面整体越亮。 */
    targetLuminance?: number;
    /** toneMappingExposure 的最小值和最大值，防止曝光无限变亮或变暗。 */
    minExposure?: number;
    maxExposure?: number;
    /** 暗处提亮和亮处压暗的适应速度，单位为每秒的指数适应强度。 */
    darkAdaptationSpeed?: number;
    brightAdaptationSpeed?: number;
    /** 两次 GPU 测光之间的最小间隔，单位为毫秒；越小响应越快但开销越高。 */
    measurementInterval?: number;
    /** 低分辨率离屏测光目标的宽度和高度，尺寸越大估算越细但开销越高。 */
    probeWidth?: number;
    probeHeight?: number;
    /** 计算截尾平均亮度时忽略的最暗和最亮像素比例，范围为 0~1。 */
    lowPercentile?: number;
    highPercentile?: number;
}

declare class BaseMeasureTool2d {
    protected readonly manager: Measure_3;
    protected points: THREE.Vector3[];
    constructor(manager: Measure_3);
    /** 激活当前测量工具，并清空未完成的临时点。 */
    active(): void;
    /** 停用当前测量工具，只清理临时预览，不删除已完成结果。 */
    disActive(): void;
    /** 清空当前工具尚未完成的点。 */
    clearAllPoints(): void;
    handleClick(point: THREE.Vector3): void;
    handleMove(_point: THREE.Vector3): void;
    handleDoubleClick(): void;
    handleRightClick(): void;
    handleEnter(): void;
    handleEsc(): void;
}

export declare interface BimGISLoadOptions extends BimGISPlacement {
    id: string;
    source: GISSource;
    name?: string;
    /** 无地理定位的 Tileset 使用 local；默认保留数据自带的地理定位。 */
    coordinateMode?: 'georeferenced' | 'local';
    /** 本地 Tileset 自身的向上轴，默认 Z。 */
    localUp?: 'y' | 'z';
}

/** 将 GIS 瓦片挂到 BIM 原生场景，不接管相机、控制器或渲染器。 */
export declare class BimGISManager {
    private readonly engine;
    private readonly root;
    private readonly presets;
    private readonly resources;
    private readonly pending;
    private loader;
    private origin;
    private camera;
    private previousFar;
    private removeFrameCallback;
    private resizeObserver;
    private disposed;
    constructor(engine: EngineKernelV2 | EngineKernelV3);
    /** 获取所有可选预设；结果是快照，不包含鉴权信息。 */
    getPresets(filter?: {
        type?: BimGISResourceType;
    }): BimGISPreset[];
    /** 登记项目自有影像、地形或 3D Tiles 预设；与内置预设共用 ID 命名空间。 */
    registerPreset(preset: BimGISPresetRegistration): void;
    /** 绑定项目地理原点；已加载或正在加载资源时不可更换。 */
    setSiteOrigin(origin: BimGISSiteOrigin): void;
    /** 从内置/项目预设 ID 或自定义数据源加载影像。 */
    addImagery(input: string | BimGISLoadOptions): Promise<BimGISResource>;
    /** 加载 3D Tiles；未指定 anchor 时保留其数据自身的地理定位。 */
    addTileset(input: string | BimGISLoadOptions): Promise<BimGISResource>;
    /** 内置预设复用 GIS 地形入口，自定义源加载独立地形。 */
    addTerrain(input: string | BimGISLoadOptions): Promise<BimGISResource>;
    private addSpatialResource;
    /** 返回已加载 GIS 资源快照。 */
    getResources(): BimGISResource[];
    /** 更新资源的经纬高定位或旋转；不重新请求瓦片数据。 */
    updatePosition(id: string, placement: BimGISPlacement): boolean;
    /** 设置单个资源可见性，不卸载其缓存。 */
    setVisible(id: string, visible: boolean): boolean;
    /** 批量释放资源，保留管理器与项目预设，便于重新设置地理原点。 */
    clearResources(): void;
    /** 移除资源、监听与 GPU 缓存；加载中的同 ID 资源也会取消。 */
    removeResource(id: string): boolean;
    /** 释放管理器拥有的全部 GIS 资源，不销毁 BIM 引擎。 */
    dispose(): void;
    private resolveInput;
    private reserve;
    private getLoader;
    private attach;
    private applyPlacement;
    private toLocal;
    private startUpdating;
    private stopUpdating;
    private syncCamera;
    private updateResolution;
    private waitForRoot;
    private snapshot;
    private validateCoordinate;
    private assertUsable;
}

export declare interface BimGISPlacement {
    /** WGS84 经纬高；3D Tiles 以根瓦片包围球中心为定位点，影像以项目原点为定位点。 */
    anchor?: GISCoordinate;
    /** 以当地东、北、上为参考，单位为度。 */
    rotation?: Partial<BimGISResource['rotation']>;
}

export declare interface BimGISPreset {
    id: string;
    name: string;
    type: BimGISResourceType;
}

export declare type BimGISPresetRegistration = BimGISPreset & Omit<BimGISLoadOptions, 'id' | 'name'>;

export declare interface BimGISResource extends BimGISPreset {
    visible: boolean;
    anchor?: GISCoordinate;
    rotation: {
        heading: number;
        pitch: number;
        roll: number;
    };
}

export declare type BimGISResourceType = 'imagery' | 'terrain' | '3dtiles';

export declare interface BimGISSiteOrigin extends GISCoordinate {
    bimPosition: {
        x: number;
        y: number;
        z: number;
    };
    /** BIM 中地理北向相对于 -Z 的顺时针角度，单位为度。 */
    northRotation?: number;
}

/** Bloom 辉光参数。 */
export declare interface BloomPostProcessingSettings {
    enabled: boolean;
    /** 辉光叠加强度。 */
    strength: number;
    /** 辉光扩散半径，范围为 0~1。 */
    radius: number;
    /** 参与辉光计算的最低亮度阈值。 */
    threshold: number;
    /** 亮度阈值边缘的平滑宽度。 */
    smoothWidth: number;
    /** Bloom 内部渲染目标的分辨率比例，范围为 0~1。 */
    resolutionScale: number;
}

declare interface BoundsLike {
    min: {
        x: number;
        y: number;
        z: number;
    };
    max: {
        x: number;
        y: number;
        z: number;
    };
}

declare interface BoundsLike_2 {
    min: {
        x: number;
        y: number;
        z: number;
    };
    max: {
        x: number;
        y: number;
        z: number;
    };
}

/**
 * 基础几何类型定义
 */
declare interface Box3 {
    min: {
        x: number;
        y: number;
        z: number;
    };
    max: {
        x: number;
        y: number;
        z: number;
    };
}

declare type CadCursorStyle2d = 'full-crosshair' | 'short-crosshair';

declare class CadCursorUI {
    private overlay;
    private hLine;
    private vLine;
    private box;
    private canvas;
    private container;
    private readonly style;
    constructor(container: HTMLElement, canvas: HTMLElement, style?: CadCursorStyle2d);
    private bindEvents;
    private onMouseMove;
    /** 允许其它捕获阶段交互在阻断 canvas 事件前手动同步十字光标。 */
    updateFromMouseEvent(e: MouseEvent): void;
    private onMouseEnter;
    private onMouseLeave;
    private show;
    private hide;
    /** 根据画布背景亮度反转十字光标颜色，保证黑白背景下都有足够对比度。 */
    setBackgroundColor(color: number): void;
    dispose(): void;
}

/**
 * 模型校准管理器。
 * 按 url 维护模型根 group 的整体变换，模型拾取会天然跟随 Three.js 的 matrixWorld。
 */
declare class Calibration {
    private readonly engine;
    private static readonly svgNamespace;
    private static readonly sourceColor;
    private static readonly targetColor;
    private readonly matrices;
    private readonly histories;
    private readonly historyOrder;
    private pointCalibrationUrl;
    private pointCalibrationPoints;
    private pointCalibrationCallback;
    private behavior;
    private readonly onKeyDown;
    /** 供 handelBehaved 判断不同工具切换时释放当前鼠标监听。 */
    readonly type = "point-calibration";
    constructor(engine: any);
    /** 释放校准管理器的全局快捷键监听。 */
    dispose(): void;
    /**
     * 应用模型校准矩阵。
     * flat 16 数组按 Three.js 列主序处理；二维 4x4 数组按常见行主序处理。
     */
    apply(options: CalibrationOptions_2): boolean;
    private applyInternal;
    /**
     * 兼容业务侧更直观的命名。
     */
    setCalibration(options: CalibrationOptions_2): boolean;
    /**
     * 通过两条线段做模型对齐。
     * source/target 均使用当前世界坐标；只修正平移和旋转，不引入缩放。
     */
    alignBySegments(options: SegmentCalibrationOptions_2): boolean;
    /** 启动四点捕捉校准，后续鼠标点击由 handelBehaved 分发给 handleMouseClick。 */
    startPointCalibration(options: PointCalibrationOptions_2): boolean;
    /** 由 handelBehaved 的鼠标事件监听器回调，采集四个有效捕捉点。 */
    handleMouseClick(event: any): void;
    /**
     * 保留空的鼠标移动回调以启用 handelBehaved 的实时捕捉计算，
     * 并将已确认点和当前待确认点绘制到 SVG 覆盖层。
     */
    handleMouseMove(event: any): void;
    /** Esc 取消当前四点采集。 */
    handelKeyEscDown(): void;
    /** 与测量工具一致：停用时只释放当前行为监听。 */
    disActive(): void;
    /** 完成或取消后恢复默认模型交互。 */
    private finishPointCalibration;
    /** 将四点校准的已选点与当前捕捉预览渲染成两种颜色的 SVG 点线。 */
    private drawPointCalibrationOverlay;
    /** 绘制一组已确认点、已确认线段和到当前捕捉点的虚线预览。 */
    private drawCalibrationSegment;
    /** 将世界坐标转换为 catchSvg 使用的屏幕坐标，忽略相机不可见点。 */
    private toSvgPoint;
    /** 向捕捉 SVG 追加线段。 */
    private appendSvgLine;
    /** 向捕捉 SVG 追加确认点或半透明的当前捕捉预览点。 */
    private appendSvgPoint;
    /** 清理四点校准留下的 SVG 覆盖元素。 */
    private clearPointCalibrationOverlay;
    /**
     * 获取某个 url 当前的校准矩阵。
     */
    getMatrix(url: string): THREE.Matrix4;
    /**
     * 清除指定模型的校准。
     */
    clear(url: string, onChange?: CalibrationChangeCallback_2): boolean;
    /** 撤回最近一次模型校准；传 url 时只撤回指定模型，不传时撤回最后变更的模型。 */
    undo(url?: string, onChange?: CalibrationChangeCallback_2): boolean;
    private pushHistory;
    private findLatestHistoryUrl;
    private notifyChange;
    private createChangeEvent;
    private handleKeyDown;
    /** Ctrl+Z / Command+Z 撤回最近一次主模型校准，输入框焦点下保留原生编辑行为。 */
    private isUndoShortcut;
    private updateCachedModelBox;
    private clearRuntimeWorldBoxCache;
    private toThreeMatrix;
    private toVector3;
}

/**
 * 模型校准管理器。
 * 按 url 维护模型根 group 的整体变换，模型拾取会天然跟随 Three.js 的 matrixWorld。
 */
declare class Calibration_2 {
    private readonly engine;
    private static readonly svgNamespace;
    private static readonly sourceColor;
    private static readonly targetColor;
    private readonly matrices;
    private readonly histories;
    private readonly historyOrder;
    private pointCalibrationUrl;
    private pointCalibrationPoints;
    private pointCalibrationCallback;
    private behavior;
    private readonly onKeyDown;
    /** 供 handelBehaved 判断不同工具切换时释放当前鼠标监听。 */
    readonly type = "point-calibration";
    constructor(engine: any);
    /** 释放校准管理器的全局快捷键监听。 */
    dispose(): void;
    /**
     * 应用模型校准矩阵。
     * flat 16 数组按 Three.js 列主序处理；二维 4x4 数组按常见行主序处理。
     */
    apply(options: CalibrationOptions): boolean;
    private applyInternal;
    /**
     * 兼容业务侧更直观的命名。
     */
    setCalibration(options: CalibrationOptions): boolean;
    /**
     * 通过两条线段做模型对齐。
     * source/target 均使用当前世界坐标；只修正平移和旋转，不引入缩放。
     */
    alignBySegments(options: SegmentCalibrationOptions): boolean;
    /** 启动四点捕捉校准，后续鼠标点击由 handelBehaved 分发给 handleMouseClick。 */
    startPointCalibration(options: PointCalibrationOptions): boolean;
    /** 由 handelBehaved 的鼠标事件监听器回调，采集四个有效捕捉点。 */
    handleMouseClick(event: any): void;
    /**
     * 保留空的鼠标移动回调以启用 handelBehaved 的实时捕捉计算，
     * 并将已确认点和当前待确认点绘制到 SVG 覆盖层。
     */
    handleMouseMove(event: any): void;
    /** Esc 取消当前四点采集。 */
    handelKeyEscDown(): void;
    /** 与测量工具一致：停用时只释放当前行为监听。 */
    disActive(): void;
    /** 完成或取消后恢复默认模型交互。 */
    private finishPointCalibration;
    /** 将四点校准的已选点与当前捕捉预览渲染成两种颜色的 SVG 点线。 */
    private drawPointCalibrationOverlay;
    /** 绘制一组已确认点、已确认线段和到当前捕捉点的虚线预览。 */
    private drawCalibrationSegment;
    /** 将世界坐标转换为 catchSvg 使用的屏幕坐标，忽略相机不可见点。 */
    private toSvgPoint;
    /** 向捕捉 SVG 追加线段。 */
    private appendSvgLine;
    /** 向捕捉 SVG 追加确认点或半透明的当前捕捉预览点。 */
    private appendSvgPoint;
    /** 清理四点校准留下的 SVG 覆盖元素。 */
    private clearPointCalibrationOverlay;
    /**
     * 获取某个 url 当前的校准矩阵。
     */
    getMatrix(url: string): THREE.Matrix4;
    /**
     * 清除指定模型的校准。
     */
    clear(url: string, onChange?: CalibrationChangeCallback): boolean;
    /** 撤回最近一次模型校准；传 url 时只撤回指定模型，不传时撤回最后变更的模型。 */
    undo(url?: string, onChange?: CalibrationChangeCallback): boolean;
    private pushHistory;
    private findLatestHistoryUrl;
    private notifyChange;
    private createChangeEvent;
    private handleKeyDown;
    /** Ctrl+Z / Command+Z 撤回最近一次主模型校准，输入框焦点下保留原生编辑行为。 */
    private isUndoShortcut;
    private updateCachedModelBox;
    private clearRuntimeWorldBoxCache;
    private toThreeMatrix;
    private toVector3;
}

export declare type CalibrationChangeCallback = (event: CalibrationChangeEvent) => void;

declare type CalibrationChangeCallback_2 = (event: CalibrationChangeEvent_2) => void;

/** 3D 主模型校准变化回调数据。 */
export declare interface CalibrationChangeEvent {
    url: string;
    source: CalibrationChangeSource;
    /** 模型根节点当前平移值，单位沿用引擎世界坐标。 */
    offset: CalibrationVector3Array_2;
    /** 模型根节点当前欧拉角，单位为角度，数组第 4 位保留 Three.js 的旋转顺序。 */
    rotation: CalibrationEulerArray_2;
    /** 模型根节点当前欧拉角，单位为弧度，供需要 Three.js 原始单位的业务使用。 */
    rotationRadians: CalibrationEulerArray_2;
    /** 便于 UI 直接显示的三轴角度制旋转值。 */
    rotationDegrees: CalibrationVector3Array_2;
    /** 模型根节点当前缩放，矩阵校准包含缩放时用于业务侧兜底保存。 */
    scale: CalibrationVector3Array_2;
    /** 当前 4x4 校准矩阵，按 Three.js 列主序导出。 */
    matrix: number[];
    /** 本次变更前的 4x4 校准矩阵，按 Three.js 列主序导出。 */
    previousMatrix: number[];
    /** 是否由 Ctrl+Z 或 undo 触发。 */
    isUndo: boolean;
}

/** 3D 主模型校准变化回调数据。 */
declare interface CalibrationChangeEvent_2 {
    url: string;
    source: CalibrationChangeSource_2;
    /** 模型根节点当前平移值，单位沿用引擎世界坐标。 */
    offset: CalibrationVector3Array;
    /** 模型根节点当前欧拉角，单位为角度，数组第 4 位保留 Three.js 的旋转顺序。 */
    rotation: CalibrationEulerArray;
    /** 模型根节点当前欧拉角，单位为弧度，供需要 Three.js 原始单位的业务使用。 */
    rotationRadians: CalibrationEulerArray;
    /** 便于 UI 直接显示的三轴角度制旋转值。 */
    rotationDegrees: CalibrationVector3Array;
    /** 模型根节点当前缩放，矩阵校准包含缩放时用于业务侧兜底保存。 */
    scale: CalibrationVector3Array;
    /** 当前 4x4 校准矩阵，按 Three.js 列主序导出。 */
    matrix: number[];
    /** 本次变更前的 4x4 校准矩阵，按 Three.js 列主序导出。 */
    previousMatrix: number[];
    /** 是否由 Ctrl+Z 或 undo 触发。 */
    isUndo: boolean;
}

export declare type CalibrationChangeSource = 'apply' | 'segment' | 'point' | 'clear' | 'undo';

declare type CalibrationChangeSource_2 = 'apply' | 'segment' | 'point' | 'clear' | 'undo';

declare type CalibrationEulerArray = [number, number, number, THREE.EulerOrder];

declare type CalibrationEulerArray_2 = [number, number, number, THREE.EulerOrder];

declare type CalibrationMatrixInput = THREE.Matrix4 | number[] | ArrayLike<number> | number[][];

declare type CalibrationMatrixInput_2 = THREE.Matrix4 | number[] | ArrayLike<number> | number[][];

export declare interface CalibrationOptions {
    url: string;
    matrix: CalibrationMatrixInput_2;
    /** 校准成功后返回当前模型的偏移、旋转和矩阵，便于业务侧保存手动调节结果。 */
    onChange?: CalibrationChangeCallback;
}

declare interface CalibrationOptions_2 {
    url: string;
    matrix: CalibrationMatrixInput;
    /** 校准成功后返回当前模型的偏移、旋转和矩阵，便于业务侧保存手动调节结果。 */
    onChange?: CalibrationChangeCallback_2;
}

declare type CalibrationPointInput = THREE.Vector3 | [number, number, number] | {
    x: number;
    y: number;
    z: number;
} | {
    X: number;
    Y: number;
    Z: number;
};

declare type CalibrationPointInput_2 = THREE.Vector3 | [number, number, number] | {
    x: number;
    y: number;
    z: number;
} | {
    X: number;
    Y: number;
    Z: number;
};

declare interface CalibrationSegmentInput {
    start: CalibrationPointInput;
    end: CalibrationPointInput;
}

declare interface CalibrationSegmentInput_2 {
    start: CalibrationPointInput_2;
    end: CalibrationPointInput_2;
}

declare type CalibrationVector3Array = [number, number, number];

declare type CalibrationVector3Array_2 = [number, number, number];

/** 管理 GIS 相机的经纬度定位与平滑视图跳转。 */
export declare class CameraModule {
    private readonly camera;
    private readonly tiles;
    private readonly cameraFrame;
    private readonly requestRender;
    private readonly coordinateModule?;
    private controls;
    private currentView;
    private readonly inverseParentMatrix;
    private flight;
    private controlsEnabledBeforeFlight;
    private disposed;
    constructor(camera: PerspectiveCamera, tiles: TilesRenderer, cameraFrame: number, requestRender: () => void, initialView?: GISView, coordinateModule?: CoordinateModule | undefined);
    /** 绑定地球控制器，使跳转期间禁用输入并在结束后同步控制状态。 */
    setControls(controls: GlobeControls): void;
    /** 立即跳转到指定经纬度。 */
    setView(view: GISView): void;
    /** 平滑飞行到指定经纬度，默认动画时长为 1.5 秒。 */
    flyTo(view: GISView, options?: GISFlyToOptions): Promise<void>;
    /** 返回当前已经应用到相机的 WGS84 视图。 */
    getView(): Required<GISView>;
    /** 取消当前飞行，并恢复跳转前的控制器状态。 */
    cancelFlight(message?: string, aborted?: boolean): boolean;
    /** 由 GIS 共享渲染循环调用，推进当前相机飞行动画。 */
    update(time: DOMHighResTimeStamp): void;
    /** 释放飞行任务持有的事件和控制器状态。 */
    dispose(): void;
    /** 用户通过 GlobeControls 改变相机后，同步真实地理视图供保存和后续飞行使用。 */
    private readonly handleControlsChange;
    private syncViewFromCamera;
    private resolveView;
    private applyView;
    private cleanupFlight;
    private lerp;
    private lerpAngle;
    private normalizeAngle;
}

declare class CameraModule2d {
    private engine;
    orthographicCamera: THREE.OrthographicCamera;
    private container;
    private frustumSize;
    private near;
    private far;
    private initialZoom;
    private defaultPosition;
    constructor(engine: any, container: HTMLElement);
    /**
     * 创建正交相机
     */
    private createOrthographicCamera;
    private animationId;
    private animationStartTime;
    private animationDuration;
    private animationStartState;
    private animationTargetState;
    /**
     * 适配视图到模型边界
     * @param extents 模型边界 { min: [x, y, z], max: [x, y, z] }
     * @param padding 边距（默认 1.2 = 20% 边距）
     * @param animated 是否使用动画（默认 true）
     * @param duration 动画时长（毫秒，默认 800）
     */
    fitToExtents(extents: {
        min: number[];
        max: number[];
    }, padding?: number, animated?: boolean, duration?: number): void;
    /**
     * 缓动函数 - easeOutCubic
     * @param t 进度 0-1
     * @returns 缓动后的值
     */
    private easeOutCubic;
    /**
     * 执行 fitToExtents 动画
     */
    private animateFitToExtents;
    /**
     * 线性插值
     */
    private lerp;
    /**
     * 设置缩放级别
     * @param zoom 缩放级别
     */
    setZoom(zoom: number): void;
    /**
     * 获取当前缩放级别
     * @returns 缩放级别
     */
    getZoom(): number;
    /**
     * 设置相机位置
     * @param x X 坐标
     * @param y Y 坐标
     */
    setPosition(x: number, y: number): void;
    /**
     * 获取相机位置
     * @returns 位置向量
     */
    getPosition(): THREE.Vector3;
    /** 记录当前相机视图状态，用于模型空间和布局空间之间无损切换。 */
    getViewState(): CameraViewState2d;
    /** 恢复保存过的相机视图，并同步 pan 控制器的目标值，避免阻尼把视图拉回旧位置。 */
    applyViewState(state: CameraViewState2d): void;
    /**
     * 重置相机视图
     */
    resetView(): void;
    /**
     * 获取当前视图边界
     * @returns 视图边界
     */
    getViewBounds(): ViewBounds;
    /**
     * 屏幕坐标转世界坐标
     * @param screenX 屏幕 X 坐标
     * @param screenY 屏幕 Y 坐标
     * @returns 世界坐标向量
     */
    screenToWorld(screenX: number, screenY: number): THREE.Vector3;
    /**
     * 世界坐标转屏幕坐标
     * @param worldX 世界 X 坐标
     * @param worldY 世界 Y 坐标
     * @returns 屏幕坐标 { x, y }
     */
    worldToScreen(worldX: number, worldY: number): {
        x: number;
        y: number;
    };
    /**
     * 更新相机宽高比
     * 在容器尺寸变化时调用
     */
    updateAspectRatio(): void;
    /**
     * 设置视锥体大小
     * @param size 视锥体大小
     */
    setFrustumSize(size: number): void;
    /**
     * 获取视锥体大小
     * @returns 视锥体大小
     */
    getFrustumSize(): number;
    /**
     * 销毁相机模块
     */
    dispose(): void;
}

/**
 * 相机模块 - 管理全景相机
 * 使用单个透视相机，支持 FOV 缩放控制
 */
declare class CameraModule720 {
    private camera;
    private minFov;
    private maxFov;
    private container;
    /**
     * 当前相机姿态（球面坐标）
     */
    private currentPose;
    constructor(container: HTMLElement, fov?: number, minFov?: number, maxFov?: number);
    /**
     * 创建透视相机
     */
    private createCamera;
    /**
     * 初始化相机
     */
    private init;
    /**
     * 更新相机旋转（基于当前姿态）
     */
    private updateCameraRotation;
    /**
     * 设置 FOV（视野角度）
     * @param fov 视野角度（度）
     */
    setFov(fov: number): void;
    /**
     * 获取当前 FOV
     */
    getFov(): number;
    /**
     * 获取相机姿态
     */
    getCameraPose(): CameraPose;
    /**
     * 设置相机姿态（球面坐标）
     * @param theta 水平角度（弧度）
     * @param phi 垂直角度（弧度）
     */
    setCameraPose(theta: number, phi: number): void;
    /**
     * 更新相机姿态（增量更新）
     * @param deltaTheta 水平角度增量（弧度）
     * @param deltaPhi 垂直角度增量（弧度）
     */
    updatePose(deltaTheta: number, deltaPhi: number): void;
    /**
     * 获取相机对象
     */
    getCamera(): THREE.PerspectiveCamera;
    /**
     * 调整相机宽高比
     * @param width 容器宽度
     * @param height 容器高度
     */
    updateAspectRatio(width: number, height: number): void;
    /**
     * 销毁相机
     */
    dispose(): void;
}

declare class CameraModule_2 {
    private static readonly MIN_VISIBLE_HEIGHT;
    private static readonly MIN_CAMERA_DISTANCE;
    private static readonly CAMERA_ANIMATION_IDLE_EXEMPT_REASON;
    private engine;
    perspectiveCamera: THREE.PerspectiveCamera;
    orthographicCamera: THREE.OrthographicCamera;
    private cameraAnimationFrame;
    constructor(engine: any);
    /** 视图跳转前统一退出图钉查看态，避免批注锁定与相机动画冲突。 */
    private exitDrawingPinView;
    private getCameraAspect;
    private getPerspectiveVisibleHeight;
    getOrthographicVisibleHeight(camera?: THREE.OrthographicCamera): number;
    setOrthographicVisibleHeight(visibleHeight: number, camera?: THREE.OrthographicCamera, aspect?: number): void;
    private getViewDirection;
    private getStableCameraUp;
    private updateComposerCamera;
    private applySwitchedCamera;
    private resolvePoseReferenceUp;
    private syncControlsAfterPoseRestore;
    private inferTargetFromRestoredCamera;
    switchCurrentCamera(): void;
    setPerspectiveFov(fov: number, options?: {
        adjustDistance?: boolean;
    }): void;
    switchToPerspectiveCamera(): void;
    switchToOrthographicCamera(): void;
    getCameraType(): CameraType;
    getCameraPose(): ICameraPose;
    restoreCameraPose(pose: ICameraPose): void;
    setViewFromOriginAndDirection(origin: {
        x: number;
        y: number;
        z: number;
    }, direction: {
        x: number;
        y: number;
        z: number;
    }, stableUp?: any, distanceOverride?: number | null, animationDuration?: number, onComplete?: () => void): void;
    /** 保持相机位置不变，以过渡动画将观察目标旋转到指定点。 */
    rotateToTarget(target: {
        x: number;
        y: number;
        z: number;
    }, animationDuration?: number, onComplete?: () => void): void;
    private applyCameraPose;
    private animateCameraToTarget;
}

declare class CameraModule_3 {
    private static readonly MIN_VISIBLE_HEIGHT;
    private static readonly MIN_CAMERA_DISTANCE;
    private static readonly CAMERA_ANIMATION_IDLE_EXEMPT_REASON;
    private engine;
    perspectiveCamera: THREE.PerspectiveCamera;
    orthographicCamera: THREE.OrthographicCamera;
    private cameraAnimationFrame;
    constructor(engine: any);
    /** 视图跳转前统一退出图钉查看态，避免批注锁定与相机动画冲突。 */
    private exitDrawingPinView;
    private getCameraAspect;
    private getPerspectiveVisibleHeight;
    getOrthographicVisibleHeight(camera?: THREE.OrthographicCamera): number;
    setOrthographicVisibleHeight(visibleHeight: number, camera?: THREE.OrthographicCamera, aspect?: number): void;
    private getViewDirection;
    private getStableCameraUp;
    private updateComposerCamera;
    private applySwitchedCamera;
    private resolvePoseReferenceUp;
    private syncControlsAfterPoseRestore;
    private inferTargetFromRestoredCamera;
    switchCurrentCamera(): void;
    setPerspectiveFov(fov: number, options?: {
        adjustDistance?: boolean;
    }): void;
    switchToPerspectiveCamera(): void;
    switchToOrthographicCamera(): void;
    getCameraType(): CameraType_2;
    getCameraPose(): ICameraPose_2;
    restoreCameraPose(pose: ICameraPose_2): void;
    setViewFromOriginAndDirection(origin: {
        x: number;
        y: number;
        z: number;
    }, direction: {
        x: number;
        y: number;
        z: number;
    }, stableUp?: any, distanceOverride?: number | null, animationDuration?: number, onComplete?: () => void): void;
    private applyCameraPose;
    private animateCameraToTarget;
    /** 取消相机飞行动画，避免页面卸载后 RAF 回调继续持有引擎实例。 */
    dispose(): void;
}

/**
 * Gaussian 相机模块。
 * 默认使用透视相机，坐标和 GaussianSplats3D 保持一致。
 */
declare class CameraModuleGaussian {
    private camera;
    private container;
    private cameraUp;
    private initialLookAt;
    constructor(container: HTMLElement, cameraUp: GaussianVector3, initialCameraPosition: GaussianVector3, initialCameraLookAt: GaussianVector3);
    private createCamera;
    getCamera(): THREE.PerspectiveCamera;
    updateAspectRatio(width: number, height: number): void;
    reset(position?: GaussianVector3, lookAt?: GaussianVector3): void;
    dispose(): void;
}

/**
 * 相机姿态信息
 */
declare interface CameraPose {
    theta: number;
    phi: number;
}

declare type CameraSyncMode = 'realtime' | 'onStop';

declare type CameraSyncMode_2 = 'realtime' | 'onStop';

declare enum CameraType {
    PERSPECTIVE = "perspective",
    ORTHOGRAPHIC = "orthographic"
}

declare enum CameraType_2 {
    PERSPECTIVE = "perspective",
    ORTHOGRAPHIC = "orthographic"
}

declare type CameraViewState2d = {
    left: number;
    right: number;
    top: number;
    bottom: number;
    x: number;
    y: number;
    zoom: number;
};

declare class Clipping {
    private engine;
    private readonly clippingTolerance;
    sectionBox: any;
    sectionFace: any;
    clippingStencil: any;
    clippingCSGSimple: ClippingCSGOptimizedSimple | null;
    currentClippingMode: string;
    sectionCatchFace: any;
    fillCutFace: boolean;
    private viewRangePlanes;
    constructor(engine: any);
    init(): void;
    scaleBox(): void;
    setFillCutFace(b: boolean): void;
    getFillCutFace(): boolean;
    clippingModel(models: any): void;
    updateClippingValue(value: any): void;
    active(type: string): void;
    disabled(): void;
    recover(): void;
    reverse(): void;
    disActive(): void;
    isPointInClippingRange(point: any, tolerance?: number): boolean;
    filterIntersectionsByClipping<T extends {
        point?: any;
    }>(intersections: T[] | null | undefined, tolerance?: number): T[];
    /**
     * 判断包围盒是否仍与当前可见剖切区域相交。
     * 只要包围盒被任一剖切平面完全裁掉，就可以在八叉树阶段提前跳过。
     */
    doesBoxIntersectClippingRange(box: THREE.Box3 | {
        min: any;
        max: any;
    } | null | undefined, tolerance?: number): boolean;
    getClippedBoundingBox(baseBox?: THREE.Box3): THREE.Box3 | null;
    private getEffectiveClippingPlanes;
    private toBox3;
    private getBoxBoundaryPlanes;
    private intersectThreePlanes;
    private isPointInsidePlanes;
    /**
     * 取包围盒在平面法线方向上的最远顶点；
     * 如果这个点仍落在平面外侧，说明整个包围盒都已经被该平面剔除。
     */
    private isBoxVisibleAgainstPlane;
    private pushUniquePoint;
    private isVector3Like;
    /**
     * 按视图原点与视线方向设置剖面（用于打开剖面视图）
     * 剖切面过 origin，法向指向相机侧，并生成与场景包围盒同大的剖切面
     * @param origin 剖面上的点 {x, y, z}（与视图 Origin 一致）
     * @param viewDirection 视线方向 {x, y, z}（与视图 ViewDirection 一致）
     */
    setSectionByView(origin: {
        x: number;
        y: number;
        z: number;
    }, viewDirection: {
        x: number;
        y: number;
        z: number;
    }): void;
    /**
     * 按 Revit 视图范围生成的 6 个平面启用剖切范围。
     * 平面方向约定为 THREE.Plane 的可见半空间：distanceToPoint(point) >= 0。
     */
    setSectionPlanesByViewRange(planes: THREE.Plane[]): void;
    private applyStoredViewRangePlanes;
    private applySectionPlanesToModelMeshes;
    private setPlaneConstantsHigh;
}

/** Public V3 clipping facade. Runtime clipping is applied through WebGPU clipping groups. */
declare class Clipping_2 {
    private readonly engine;
    private readonly state;
    private viewRangePlanes;
    readonly sectionPlane: THREE.Plane[];
    readonly sectionBox: WebGPUSectionBox;
    readonly sectionFace: WebGPUSectionFace;
    clippingStencil: any;
    clippingCSGSimple: ReturnType<typeof createWebGPUFillAdapter>;
    currentClippingMode: string;
    sectionCatchFace: any;
    fillCutFace: boolean;
    constructor(engine: any);
    init(): void;
    scaleBox(): void;
    setFillCutFace(enabled: boolean): void;
    getFillCutFace(): boolean;
    clippingModel(models: any[]): void;
    updateClippingValue(value: any): void;
    active(type: string): void;
    disabled(): void;
    recover(): void;
    reverse(): void;
    disActive(): void;
    /** 释放剖切覆盖层和指针监听。 */
    dispose(): void;
    isPointInClippingRange(point: any, tolerance?: number): boolean;
    filterIntersectionsByClipping<T extends {
        point?: any;
    }>(items: T[] | null | undefined, tolerance?: number): T[];
    doesBoxIntersectClippingRange(box: THREE.Box3 | {
        min: any;
        max: any;
    } | null | undefined, tolerance?: number): boolean;
    getClippedBoundingBox(baseBox?: THREE.Box3): THREE.Box3 | null;
    setSectionByView(origin: {
        x: number;
        y: number;
        z: number;
    }, viewDirection: {
        x: number;
        y: number;
        z: number;
    }): void;
    setSectionPlanesByViewRange(planes: THREE.Plane[]): void;
    private toBox3;
    private getBoxBoundaryPlanes;
    private intersectThreePlanes;
}

/**
 * ClippingCSGOptimizedSimple
 *
 * 作用：
 * 1. 根据剖切平面，计算模型与“薄片平面体”的 CSG 相交结果。
 * 2. 从相交结果中提取贴近平面的帽面三角形（cap）。
 * 3. 合并 cap 几何并加入场景，作为剖切补面。
 *
 * 设计要点：
 * - 先粗筛（octree box / mesh box），再做重计算（CSG），避免全量布尔运算。
 * - 对补面做极小偏移，避免补面材质本身也挂 clippingPlanes 时被同平面裁掉。
 * - 每次更新前先 clear，保证场景中只存在当前补面。
 */
declare class ClippingCSGOptimizedSimple {
    /** 引擎实例（包含 scene / models / engineStatus / octreeBox 等） */
    private engine;
    /** three-bvh-csg 计算器，负责执行布尔操作 */
    private readonly evaluator;
    /** 场景中补面 Mesh 的统一名前缀 */
    private readonly fillMeshName;
    /**
     * 当前生成的补面集合。
     * key：平面唯一键（face 或 plane-i-name）
     * value：对应补面 Mesh
     */
    private readonly fillMeshes;
    /** 单次最多参与 CSG 的候选 Mesh 数量（保护性能） */
    private readonly maxCandidates;
    /** 单个 mesh 最大三角面阈值（过大直接跳过，保护实时交互） */
    private readonly maxTriangleCountPerMesh;
    /** 补面统一材质（由你在构造器中挂了 clippingPlanes） */
    private fillMaterial;
    private readonly fillTextureRepeat;
    private readonly fillTextureRotation;
    constructor(engine: any);
    /**
     * 清理当前所有补面。
     * - 从 scene 移除 mesh
     * - 释放 geometry / material 资源
     */
    clear(): void;
    /** 释放补面实例共享的材质和贴图。 */
    dispose(): void;
    /**
     * 单平面补面入口（face/x/y/z 模式可用）。
     * 每次调用先 clear，再构建当前平面的补面。
     */
    updataFace(plane: any): void;
    /**
     * 多平面补面入口（box 模式可用）。
     * 约定：传入的每个合法平面都分别生成一份补面。
     */
    updataFaces(planes: any[]): void;
    /**
     * 构建某一个平面的补面。
     *
     * 主流程：
     * 1) 拿场景包围盒，确定平面体尺寸。
     * 2) 基于 octree 与 plane 相交，筛候选 mesh。
     * 3) 再按 mesh world box 与复杂度做二次筛选。
     * 4) 对每个候选 mesh 执行 CSG INTERSECTION。
     * 5) 从交集几何中提取贴近平面的 cap 三角形。
     * 6) 合并 cap，做轻微偏移，创建补面 mesh。
     */
    private buildSinglePlaneFill;
    /**
     * 获取补面偏移距离。
     * - 可通过 engine.engineStatus.clippingFaceOffset 覆盖
     * - 默认按模型尺度自适应并带最小值
     */
    private getFaceOffsetDistance;
    /**
     * 获取补面偏移方向。
     * - 可通过 engine.engineStatus.clippingFaceOffsetSign 指定（1/-1）
     * - 默认 -1，即沿 -normal 方向偏移
     */
    private getFaceOffsetSign;
    /**
     * 使用 octree + plane 相交快速收集候选 mesh。
     *
     * 过程：
     * - 遍历 engineStatus.models -> lod.octreeBox
     * - 只取与 plane 相交的 octree 节点元素 id
     * - 跳过隐藏/半透明/实例化节点
     * - 收集节点 infos 里的 mesh，并按 uuid 去重
     */
    private collectCandidateMeshesFromOctree;
    /**
     * 收集当前 model url 下需要忽略的元素 id（隐藏 + 半透明）。
     */
    private getIgnoredIds;
    /**
     * 深度遍历 octree，返回与 plane 相交节点中的 element id 集合。
     */
    private collectIntersectElementIds;
    /**
     * 将引擎 octree 节点坐标转换为 three.js 的 Box3（含单位/坐标系转换）。
     */
    private octreeNodeToBox3;
    /**
     * 候选 mesh 二次筛选：
     * - 必须存在有效 position
     * - 三角面数不能超过阈值
     * - world bbox 必须与 plane 相交
     */
    private filterMeshesByBoxAndComplexity;
    /**
     * 构造“薄片平面体” Brush：
     * - 几何为 BoxGeometry(size, size, thickness)
     * - 旋转到 plane.normal
     * - 平移到 plane 上
     */
    private createPlaneBrush;
    /**
     * 将场景 mesh 转为世界坐标 Brush。
     */
    private createWorldBrushFromMesh;
    /**
     * 统一 CSG 输入属性，避免属性不一致报错（例如 uv 缺失）。
     * 目标属性固定为：position / normal / uv
     */
    private toCsgReadyGeometry;
    /**
     * 从 CSG 相交结果中提取补面三角形。
     *
     * 判定条件：
     * - 三角形法线与 plane.normal 足够平行（|dot| >= 0.9）
     * - 三角形顶点到平面的距离 spread 足够小
     * - 三角形平均距离落在薄片附近，且位于有效侧
     *
     * 提取后将三角形顶点投影回 plane，保证补面共面。
     */
    private extractPlaneCapGeometry;
    private applyPlanarUv;
    private getPlaneBasis;
}

declare type ClippingMode = 'x' | 'y' | 'z' | 'box' | 'face' | 'viewRange' | '';

declare class Collector {
    private engine;
    constructor(engine: any);
}

/** 颜色分级参数；这些参数在最终色调映射前执行。 */
export declare interface ColorGradingSettings {
    /** 色温，单位 Kelvin；6500 为中性白。 */
    colorTemperature: number;
    /** 饱和度倍率；0 为黑白，1 为原始饱和度。 */
    saturation: number;
    /** 对比度倍率；1 为原始对比度。 */
    contrast: number;
    /** RCAS 锐化强度，范围 0~1；0 关闭，1 最强。 */
    sharpen: number;
}

declare class ComposerModule {
    private engine;
    composer: any;
    saturationPass: any;
    ssaoPass: any;
    gtaoPass: any;
    outputPass: any;
    fxaaPass: any;
    constructor(engine: any);
    applyClippingToAmbientOcclusionPass(pass: any): void;
    syncAmbientOcclusionClipping(): void;
    /**
     * GTAO 会以 normalMaterial 覆盖场景材质来生成法线/深度图，
     * 透明的剖切范围面也会因此被当作实体参与 AO。仅在该中间渲染阶段
     * 隐藏剖切范围面与控制器辅助 Mesh，避免它们在模型交叠处制造伪阴影。
     */
    private excludeClippingHelpersFromGtao;
    /** 判断对象或其父级是否已标记为不参与 AO 的剖切辅助对象。 */
    private isAmbientOcclusionExcluded;
    /**
     * 同步 AO 中间渲染目标的深度纹理尺寸，避免 resize 后首次渲染触发 three.js 尺寸校验报错。
     */
    private syncRenderTargetDepthTexture;
    /**
     * 同步 GTAO/SSAO 内部 normalRenderTarget 的深度纹理尺寸。
     */
    private syncAmbientOcclusionDepthTextures;
    resize(width?: number, height?: number): void;
    /**
     * 统一从这里触发后处理渲染，确保每次实际 render 前深度纹理尺寸已同步。
     */
    render(): void;
    init(): void;
}

/** v3 后期渲染公共门面，具体实现由 render-pipelines 管理。 */
declare class ComposerModule_2 {
    private readonly pipelineManager;
    constructor(engine: any);
    /** 兼容原 composer 属性。 */
    get composer(): RenderPipeline | null;
    /** 返回持久化的 WebGPU RenderPipeline。 */
    get renderPipeline(): RenderPipeline | null;
    /** 后期效果之外的叠加场景，供剖切面和交互辅助对象使用。 */
    get postProcessingOverlayScene(): Scene;
    /** 悬浮轮廓使用的独立掩码场景。 */
    get depthAwareOverlayScene(): Scene;
    /** 返回当前 SSGI 节点。 */
    get ssgiPass(): any;
    /** 返回当前 VXGI 体素锥追踪节点。 */
    get vxgiPass(): any;
    /** 返回当前 TRAA 节点。 */
    get traaPass(): any;
    /** 返回当前 SSR 节点。 */
    get ssrPass(): any;
    /** 返回当前 Bloom 节点。 */
    get bloomPass(): any;
    /** 返回当前 GTAO 节点。 */
    get gtaoPass(): any;
    /** 返回当前效果开关。 */
    get effects(): EffectState;
    /** 返回当前后期参数。 */
    get parameters(): WebGPUPostProcessingSettings;
    /** 初始化后期渲染管线。 */
    init(): void;
    /** 渲染当前后期效果栈。 */
    render(): void;
    /** 响应渲染尺寸变化。 */
    resize(_width?: number, _height?: number): void;
    /** 通知后期管线场景几何已变化，供 VXGI 重新体素化。 */
    markSceneDirty(): void;
    /** 更新后期管线使用的相机。 */
    setCamera(camera: any): void;
    /** 启用或关闭单个后期效果。 */
    setEffectEnabled(effect: WebGPUPostProcessingEffect, enabled: boolean): void;
    /** 批量切换效果，并只重建一次效果栈。 */
    setEffectsEnabled(effects: Partial<EffectState>, _notifyPreference?: boolean): void;
    /** 更新指定效果的参数。 */
    setEffectParameters<K extends WebGPUPostProcessingEffect>(effect: K, parameters: Partial<WebGPUPostProcessingParameterMap[K]>): void;
    /** 原子应用多个后期效果开关和参数，仅触发一次管线重建。 */
    applyConfiguration(configuration: WebGPUPostProcessingConfiguration): void;
    /** 更新最终画面的色温、饱和度、对比度或锐化参数。 */
    setColorGradingParameters(parameters: Partial<ColorGradingSettings>): void;
    /** 获取当前色彩分级参数。 */
    getColorGradingParameters(): ColorGradingSettings;
    /** 获取指定效果的参数副本。 */
    getEffectParameters<K extends WebGPUPostProcessingEffect>(effect: K): WebGPUPostProcessingSettings[K];
    /** 查询指定效果是否启用。 */
    isEffectEnabled(effect: WebGPUPostProcessingEffect): boolean;
    /** 按当前状态强制重建效果栈。 */
    rebuild(): void;
    /** 释放后期管线资源。 */
    dispose(): void;
}

/**
 * 右键菜单 UI 组件。
 */
declare type ContextMenuAction = 'hideElement' | 'showAll' | 'hideLayer' | 'showAllLayers' | 'search' | 'layerManage' | 'linkElement2d3d' | 'linkView2d3d' | 'toggleBg';

declare interface ContextMenuItemConfig {
    action: ContextMenuAction;
    label?: string;
    visible?: boolean;
    dividerBefore?: boolean;
}

/** 只负责切换入口，具体控制行为由 GIS 或 v3 已有控制器实现。 */
export declare class ControllerModule {
    private readonly engine;
    private readonly gisControls;
    private readonly requestRender;
    private readonly layerManager?;
    private currentMode;
    private disposed;
    private removeThirdPersonPlacementResolver;
    private removeOrbitCenterResolver;
    constructor(engine: EngineKernelV3, gisControls: GlobeControls, requestRender: () => void, layerManager?: GISLayerManager | undefined);
    /** 切换控制器模式，并把业务配置原样委托给 v3 控制模块。 */
    switchController(mode: GISControllerMode, options?: GISControllerSwitchOptions): void;
    /** 获取当前已请求的控制器模式。 */
    getMode(): GISControllerMode;
    /** 切换到 3d-tiles-renderer 原生 GIS 控制器。 */
    switchToGIS(): void;
    /** 切换到 v3 默认轨道控制器。 */
    switchToDefault(options?: Pick<GISControllerSwitchOptions, 'preserveCameraPose'>): void;
    /** 切换到 v3 第一人称控制器。 */
    switchToFirstPerson(): void;
    /** 进入 v3 第三人称控制器已有的落点选择流程。 */
    switchToThirdPerson(options?: unknown): void;
    /** 停止当前控制输入，具体控制器资源仍由各自所属模块释放。 */
    dispose(): void;
    /** 重入或离开第三人称前，借助 v3 默认入口清理等待落点状态。 */
    private leavePendingThirdPersonMode;
    /** 将 GlobeControls 的旋转支点适配为 v3 ViewCube 使用的 OrbitControls target。 */
    private ensureViewCubeTargetCompatibility;
    /** 记录 GIS 当前近远裁剪面，避免底层控制器切换改写地图可见范围。 */
    private captureCameraRange;
    /** 将切换前的裁剪范围应用到切换后的活动相机。 */
    private restoreCameraRange;
    /** 从当前可见 GIS 图层中拾取地图、地形或模型表面。 */
    private readonly resolveGISPlacement;
    private isVisibleWithinLayer;
}

declare class ControlModule {
    private engine;
    orbitControls: any;
    firstPersonControls: any;
    thirdPersonControls: any;
    isActive: boolean;
    private originDiv;
    private mobileRoamControlsEl;
    private mobileMovePointerId;
    private mobileMoveActiveKeys;
    private mobileMoveIntensity;
    private mobileMoveSpeedBase;
    private mobileLookPointerId;
    private mobileLookOffset;
    private handelBehaved;
    private pendingThirdPersonOptions;
    private prevContainerCursor;
    private thirdPersonPlacementResolver;
    private orbitCenterResolver;
    private roamLookDirection;
    private isDragging;
    private isDown;
    private containerOffset;
    constructor(engine: any);
    init(): void;
    active(preferredControl?: any): void;
    disActive(): void;
    private setEngineControls;
    setMoveSpeed(value: number): void;
    getMoveSpeed(): number;
    setApplyCollision(value: boolean): void;
    getApplyCollision(): any;
    setApplyGravity(value: boolean): void;
    getApplyGravity(): any;
    /**
     * 设置第一、第三人称漫游的视角拖拽方向；未传入的轴维持当前设置。
     * @param direction horizontal/vertical 为 1 使用默认方向，-1 反向该轴。
     */
    setRoamLookDirection(direction: RoamLookDirection): void;
    /** 获取当前漫游视角拖拽方向，返回副本以免外部修改内部配置。 */
    getRoamLookDirection(): Required<RoamLookDirection>;
    /** 将用户偏好同步给具体控制器，兼容控制器尚未创建的阶段。 */
    private applyRoamLookDirection;
    toggleMinMap(): void;
    switchFirstPersonMode(): void;
    switchThirdPersonMode(options?: any): void;
    private createThirdPersonControl;
    private beginThirdPersonPlacement;
    isWaitingThirdPersonPlacement(): boolean;
    /** 注册 BIM 八叉树之外的第三人称落点表面，例如 GIS 地图和地形。 */
    setThirdPersonPlacementResolver(resolver: ThirdPersonPlacementResolver | null): () => void;
    /** 合并 BIM 与扩展表面的拾取结果，始终选择距离相机最近的落点。 */
    resolveThirdPersonPlacement(event: any): ThirdPersonPlacementHit | null;
    /** 注册轨道控制器可使用的外部旋转中心表面。 */
    setOrbitCenterResolver(resolver: OrbitCenterResolver | null): () => void;
    /** 轨道模式按下时合并 BIM 与 GIS 命中点，供首次拖动立即使用。 */
    resolveOrbitCenter(event: any): ThirdPersonPlacementHit | null;
    private resolveSurfaceHit;
    private toThirdPersonPlacementHit;
    applyThirdPersonPlacement(point: THREE.Vector3, normal?: THREE.Vector3): boolean;
    setThirdPersonAvatar(model: any, options?: any): void;
    setThirdPersonMoveSpeed(value: number): void;
    setThirdPersonApplyCollision(value: boolean): void;
    setThirdPersonApplyGravity(value: boolean): void;
    private getOrbitTargetFromCamera;
    switchDefaultMode(options?: {
        preserveCameraPose?: boolean;
    }): void;
    handleMouseUp(event: MouseEvent): void;
    handleMouseMove(event: MouseEvent): void;
    handleMouseDown(event: MouseEvent): void;
    handleMouseClick(event: MouseEvent): void;
    private isMobileDevice;
    private getActiveRoamControl;
    private getMobileMoveBaseSpeed;
    private setMobileMoveBaseSpeed;
    private restoreMobileMoveSpeed;
    private updateMobileMoveSpeed;
    private createVirtualKeyEvent;
    private setVirtualKey;
    private updateMobileMoveKeys;
    private releaseMobileMoveKeys;
    private bindVirtualButton;
    private createMobileRoamButton;
    private bindMovePad;
    private rotateActiveRoamView;
    private updateMobileLookRotation;
    private updateMobileVerticalControlsVisibility;
    private ensureMobileRoamControls;
    private removeMobileRoamControls;
    update(): void;
    dispose(): void;
}

declare class ControlModule2d {
    private engine;
    panControls: Pan2dControls;
    isActive: boolean;
    constructor(engine: any);
    /**
     * 初始化控制器
     */
    private init;
    /**
     * 创建 2D 平移控制器
     */
    private createPanControls;
    /**
     * 双击事件处理
     */
    private onDoubleClick;
    /**
     * 控制器变化事件处理
     */
    private onChange;
    /**
     * 激活控制器
     */
    active(): void;
    /**
     * 禁用控制器
     */
    disActive(): void;
    /**
     * 更新控制器（在动画循环中调用）
     */
    update(): void;
    /**
     * 重置控制器
     */
    reset(): void;
    /**
     * 设置控制器位置
     * @param x X 坐标
     * @param y Y 坐标
     */
    setPosition(x: number, y: number): void;
    /**
     * 设置缩放级别
     * @param zoom 缩放级别
     */
    setZoom(zoom: number): void;
    /**
     * 获取当前缩放级别
     * @returns 缩放级别
     */
    getZoom(): number;
    /**
     * 启用/禁用缩放
     * @param enabled 是否启用
     */
    setEnableZoom(enabled: boolean): void;
    /**
     * 启用/禁用平移
     * @param enabled 是否启用
     */
    setEnablePan(enabled: boolean): void;
    /**
     * 启用/禁用阻尼效果
     * @param enabled 是否启用
     */
    setEnableDamping(enabled: boolean): void;
    /**
     * 设置阻尼系数
     * @param factor 阻尼系数 (0-1)
     */
    setDampingFactor(factor: number): void;
    /**
     * 设置缩放速度
     * @param speed 缩放速度
     */
    setZoomSpeed(speed: number): void;
    /**
     * 设置缩放限制
     * @param min 最小缩放
     * @param max 最大缩放
     */
    setZoomLimits(min: number, max: number): void;
    /**
     * 销毁控制器模块
     */
    dispose(): void;
}

/**
 * 控制模块 - 管理全景交互控制
 */
declare class ControlModule720 {
    private controls;
    private domElement;
    private cameraModule;
    constructor(cameraModule: any, domElement: HTMLElement);
    /**
     * 初始化控制模块
     */
    init(): void;
    /**
     * 激活控制器
     */
    active(): void;
    /**
     * 禁用控制器
     */
    disActive(): void;
    /**
     * 重新启用控制器
     */
    enable(): void;
    /**
     * 更新控制器（每帧调用）
     */
    update(): void;
    /**
     * 设置视角
     */
    lookAt(theta: number, phi: number): void;
    /**
     * 获取当前视角
     */
    getViewAngle(): {
        theta: number;
        phi: number;
    };
    /**
     * 设置视角变化回调
     */
    setOnViewAngleChange(callback: (theta: number, phi: number) => void): void;
    /**
     * 重置控制器
     */
    reset(): void;
    /**
     * 获取控制器对象
     */
    getControls(): PanoramaControls;
    /**
     * 动态更新交互参数
     */
    updateInteractionOptions(options: InteractionOptions720): void;
    /**
     * 销毁控制模块
     */
    dispose(): void;
}

declare class ControlModule_2 {
    private engine;
    orbitControls: any;
    firstPersonControls: any;
    thirdPersonControls: any;
    isActive: boolean;
    private originDiv;
    private mobileRoamControlsEl;
    private mobileMovePointerId;
    private mobileMoveActiveKeys;
    private mobileMoveIntensity;
    private mobileMoveSpeedBase;
    private mobileLookPointerId;
    private mobileLookOffset;
    private handelBehaved;
    private pendingThirdPersonOptions;
    private prevContainerCursor;
    private thirdPersonPlacementResolver;
    private orbitCenterResolver;
    private suspendedControl;
    private roamLookDirection;
    private isDragging;
    private isDown;
    private containerOffset;
    constructor(engine: any);
    init(): void;
    active(preferredControl?: any): void;
    disActive(): void;
    private setEngineControls;
    setMoveSpeed(value: number): void;
    getMoveSpeed(): number;
    setApplyCollision(value: boolean): void;
    getApplyCollision(): any;
    setApplyGravity(value: boolean): void;
    getApplyGravity(): any;
    /**
     * 设置第一、第三人称漫游的视角拖拽方向；未传入的轴维持当前设置。
     * @param direction horizontal/vertical 为 1 使用默认方向，-1 反向该轴。
     */
    setRoamLookDirection(direction: RoamLookDirection_2): void;
    /** 获取当前漫游视角拖拽方向，返回副本以免外部修改内部配置。 */
    getRoamLookDirection(): Required<RoamLookDirection_2>;
    /** 将用户偏好同步给具体控制器，兼容控制器尚未创建的阶段。 */
    private applyRoamLookDirection;
    toggleMinMap(): void;
    switchFirstPersonMode(): void;
    switchThirdPersonMode(options?: any): void;
    private createThirdPersonControl;
    private beginThirdPersonPlacement;
    isWaitingThirdPersonPlacement(): boolean;
    /** 注册 BIM 八叉树之外的第三人称落点表面，例如 GIS 地图和地形。 */
    setThirdPersonPlacementResolver(resolver: ThirdPersonPlacementResolver_2 | null): () => void;
    /** 合并 BIM 与扩展表面的拾取结果，始终选择距离相机最近的落点。 */
    resolveThirdPersonPlacement(event: any): ThirdPersonPlacementHit_2 | null;
    /** 注册轨道控制器可使用的外部旋转中心表面。 */
    setOrbitCenterResolver(resolver: OrbitCenterResolver_2 | null): () => void;
    /** 轨道模式按下时合并 BIM 与 GIS 命中点，供首次拖动立即使用。 */
    resolveOrbitCenter(event: any): ThirdPersonPlacementHit_2 | null;
    private resolveSurfaceHit;
    private toThirdPersonPlacementHit;
    applyThirdPersonPlacement(point: THREE.Vector3, normal?: THREE.Vector3): boolean;
    setThirdPersonAvatar(model: any, options?: any): void;
    setThirdPersonMoveSpeed(value: number): void;
    setThirdPersonApplyCollision(value: boolean): void;
    setThirdPersonApplyGravity(value: boolean): void;
    private getOrbitTargetFromCamera;
    switchDefaultMode(options?: {
        preserveCameraPose?: boolean;
    }): void;
    handleMouseUp(event: MouseEvent): void;
    handleMouseMove(event: MouseEvent): void;
    handleMouseDown(event: MouseEvent): void;
    handleMouseClick(event: MouseEvent): void;
    private isMobileDevice;
    private getActiveRoamControl;
    private getMobileMoveBaseSpeed;
    private setMobileMoveBaseSpeed;
    private restoreMobileMoveSpeed;
    private updateMobileMoveSpeed;
    private createVirtualKeyEvent;
    private setVirtualKey;
    private updateMobileMoveKeys;
    private releaseMobileMoveKeys;
    private bindVirtualButton;
    private createMobileRoamButton;
    private bindMovePad;
    private rotateActiveRoamView;
    private updateMobileLookRotation;
    private updateMobileVerticalControlsVisibility;
    private ensureMobileRoamControls;
    private removeMobileRoamControls;
    update(): void;
    dispose(): void;
}

/**
 * Gaussian 控制模块。
 * 当前主要维护模型方向矫正等交互配置，视角控制由 GaussianSplats3D 内置 controls 承担。
 */
declare class ControlModuleGaussian {
    private orientationPreset;
    constructor(orientationPreset?: GaussianOrientationPreset);
    setOrientationPreset(preset: GaussianOrientationPreset): void;
    getOrientationPreset(): GaussianOrientationPreset;
    getOrientationRotation(): GaussianQuaternion;
    active(): void;
    disActive(): void;
    update(): void;
    dispose(): void;
}

/**
 * 统一管理 WGS84、ECEF 与 GIS 局部世界坐标之间的转换。
 * 其他 GIS 模块不得自行假设 Y 轴始终等于地理高程方向。
 */
export declare class CoordinateModule {
    private tiles;
    private cameraFrame;
    private readonly inverseTilesMatrix;
    constructor(tiles: TilesRenderer, cameraFrame: number);
    /** 切换底图后更新坐标参考，但保持依赖此模块的业务管理器不变。 */
    setTiles(tiles: TilesRenderer, cameraFrame: number): void;
    /** 将 WGS84 经纬高转换为 Three.js 世界坐标。 */
    toWorld(coordinate: GISCoordinate, target?: Vector3): Vector3;
    /** 将 Three.js 世界坐标反算为 WGS84 经纬高。 */
    toWgs84(coordinate: Vector3 | GISWorldCoordinate): Required<GISCoordinate>;
    /** 从相机当前真实世界矩阵读取 WGS84 位置和姿态。 */
    getCameraView(camera: Camera): Required<GISView>;
    /** 获取指定 WGS84 位置在 Three.js 世界空间中的东、北、上单位轴。 */
    getEastNorthUpAxes(coordinate: GISCoordinate, east?: Vector3, north?: Vector3, up?: Vector3): {
        east: Vector3;
        north: Vector3;
        up: Vector3;
    };
    private normalizeCoordinate;
    private normalizeAngle;
}

/**
 * 动态创建 3D 引擎实例；未指定渲染后端时根据 WebGPU 支持情况自动选择 v3 或 v2。
 * 第二个参数可固定渲染后端，并优先于环境探测结果。
 */
export declare function createEngine(options: EngineKernelV2Options, backend: 'webgl'): Promise<EngineKernelV2>;

export declare function createEngine(options: EngineKernelV3Options, backend: 'webgpu'): Promise<EngineKernelV3>;

export declare function createEngine(options: EngineOptions, backend?: EngineRenderBackend): Promise<EngineInstance>;

/**
 * 动态创建 2D 引擎实例，只在调用时加载 2D 引擎 chunk。
 */
export declare function createEngine2d(options: any): Promise<EngineKernel2d>;

/**
 * 动态创建 720 引擎实例，只在调用时加载 720 引擎 chunk。
 */
export declare function createEngine720(options: any): Promise<EngineKernel720>;

/**
 * 动态创建 Gaussian 引擎实例，只在调用时加载 Gaussian 引擎 chunk。
 */
export declare function createEngineGaussian(options: any): Promise<EngineKernelGaussian>;

/** 按指定底座创建 GIS 引擎，并在传入地理配置时完成数据源加载。 */
export declare function createEngineGIS(options: EngineGISOptions, gisConfig?: EngineGISConfig): Promise<EngineGISInstance>;

declare function createWebGPUFillAdapter(engine: any, state: WebGPUClippingState): WebGPUFillAdapter;

export declare const DEFAULT_AUTO_EXPOSURE_OPTIONS: ResolvedAutoExposureOptions;

export declare const DEFAULT_LIGHTING_PRESETS: readonly LightingPreset[];

/** 12 档默认参数允许 SSGI 与 GTAO 叠加，二者同时启用时主动降低 AO 强度避免画面过黑。 */
export declare const DEFAULT_RENDER_QUALITY_PRESETS: readonly RenderQualityPreset[];

/**
 * 参考 WEBGPUTEMP 的 WebGPU 后期管线默认参数。
 *
 * 性能说明：后期效果按顺序叠加在全屏纹理上；关闭一个效果会同时省掉对应的
 * GPU 计算、临时纹理和带宽。通过 RenderPipelineManager 修改参数会重建节点图，
 * 因此建议在场景初始化或低频交互时调整，不要在每帧修改。
 */
export declare const DEFAULT_WEBGPU_POST_PROCESSING_OPTIONS: WebGPUPostProcessingSettings;

/**
 * 设备模块类
 * 用于检测和管理设备相关信息，包括设备类型（移动端/PC端）等
 */
declare class DeviceModule {
    private readonly engine;
    deviceType: 'mobile' | 'PC';
    constructor(engine: any);
    /**
     * 检测设备类型（移动端或PC端）
     * 通过多种方式综合判断，确保检测准确性
     * @returns {'mobile' | 'PC'} 返回设备类型
     */
    private detectDeviceType;
    /**
     * 获取设备类型
     * @returns {'mobile' | 'PC'} 返回当前设备类型
     */
    getDeviceType(): 'mobile' | 'PC';
    /**
     * 判断是否为移动端设备
     * @returns {boolean} 如果是移动端返回 true，否则返回 false
     */
    isMobile(): boolean;
    /**
     * 判断是否为PC端设备
     * @returns {boolean} 如果是PC端返回 true，否则返回 false
     */
    isPC(): boolean;
    /**
     * 重新检测设备类型
     * 在某些情况下（如窗口大小改变、设备方向改变）可能需要重新检测
     * @returns {'mobile' | 'PC'} 返回更新后的设备类型
     */
    redetectDeviceType(): 'mobile' | 'PC';
    /**
     * 获取容器尺寸
     * @returns {{width: number, height: number}} 返回容器的宽度和高度
     */
    getContainerSize(): {
        width: any;
        height: any;
    };
}

/**
 * 设备模块类
 * 用于检测和管理设备相关信息，包括设备类型（移动端/PC端）等
 */
declare class DeviceModule_2 {
    private readonly engine;
    deviceType: 'mobile' | 'PC';
    constructor(engine: any);
    /**
     * 检测设备类型（移动端或PC端）
     * 通过多种方式综合判断，确保检测准确性
     * @returns {'mobile' | 'PC'} 返回设备类型
     */
    private detectDeviceType;
    /**
     * 获取设备类型
     * @returns {'mobile' | 'PC'} 返回当前设备类型
     */
    getDeviceType(): 'mobile' | 'PC';
    /**
     * 判断是否为移动端设备
     * @returns {boolean} 如果是移动端返回 true，否则返回 false
     */
    isMobile(): boolean;
    /**
     * 判断是否为PC端设备
     * @returns {boolean} 如果是PC端返回 true，否则返回 false
     */
    isPC(): boolean;
    /**
     * 重新检测设备类型
     * 在某些情况下（如窗口大小改变、设备方向改变）可能需要重新检测
     * @returns {'mobile' | 'PC'} 返回更新后的设备类型
     */
    redetectDeviceType(): 'mobile' | 'PC';
    /**
     * 获取容器尺寸
     * @returns {{width: number, height: number}} 返回容器的宽度和高度
     */
    getContainerSize(): {
        width: any;
        height: any;
    };
}

declare class DistanceMeasure2d extends BaseMeasureTool2d {
    /** 两点完成一条距离测量。 */
    handleClick(point: THREE.Vector3): void;
    handleMove(point: THREE.Vector3): void;
}

/**
 * DrawingPin 视点管理器
 * 仅暴露两个主接口：
 * 1. get(): 获取当前视点完整状态
 * 2. restore(): 还原视点完整状态
 */
declare class DrawingPin {
    private engine;
    private capturePoint;
    private readonly labelPrefix;
    private readonly temporaryLabelId;
    private readonly labelIcon;
    private labelIds;
    private offLabelClick;
    private isPickingCapturePoint;
    private viewModeControlSnapshot;
    constructor(engine: any);
    /**
     * 获取当前视点状态（相机 + 剖切 + 测量 + 批注）
     */
    get(): IDrawingPinState;
    /**
     * 还原视点状态（相机 + 剖切 + 测量 + 批注）
     * 还原完成后进入批注流程，用户点击"确定"时通过回调返回最新视点状态
     */
    restore(state: IDrawingPinState, mode?: FabricDrawMode, callback?: (state: IDrawingPinState | null) => void, showToolbar?: boolean): Promise<void>;
    /**
     * 创建视点（进入批注流程）
     * 1. 启用批注功能
     * 2. 用户点击“确定”后自动调用 get()
     * 3. 将完整视点数据通过回调抛出
     */
    create(callback?: (state: IDrawingPinState) => void): void;
    /**
     * 根据图钉数据中的捕捉点在模型中显示标签；未捕捉点的图钉会被自动忽略。
     */
    showLabels(states?: IDrawingPinState[], options?: {
        namePrefix?: string;
    }): string[];
    /**
     * 关闭当前由图钉接口创建的标签，不影响业务侧其它标签。
     */
    hideLabels(): void;
    activeLabels(states?: IDrawingPinState[], options?: {
        namePrefix?: string;
    }): string[];
    disActiveLabels(): void;
    /**
     * 清空批注（便捷接口）
     */
    clearAnnotation(): void;
    /**
     * 退出图钉查看态，清理查看批注并恢复相机交互。
     * 视图跳转类功能可调用此接口与图钉查看态保持互斥。
     */
    exitViewMode(): boolean;
    /**
     * 图钉 view 模式下锁定相机控制，避免用户在只读查看阶段继续旋转视图。
     */
    private enterViewModeCameraLock;
    /**
     * 退出图钉 view 模式时恢复进入前的相机控制状态。
     */
    private exitViewModeCameraLock;
    /**
     * 兼容旧图钉：历史数据未保存 Orbit origin 时，优先使用 capturePoint 补足旋转中心。
     */
    private buildRestoreCameraPose;
    private pickCapturePoint;
    private disableCameraControlsForPick;
    private restoreCameraControlsAfterPick;
    private pickModelPointOnce;
    private pickNearestModelPoint;
    private showCaptureLabel;
    private updateCaptureLabelState;
    private ensureLabelClickHandler;
    /**
     * 获取剖切状态
     */
    private captureClippingState;
    /**
     * 还原剖切状态
     */
    private restoreClippingState;
    /**
     * 还原面剖切（不走拾取流程）
     */
    private restoreFaceMode;
    /**
     * 将法向/距离应用到 sectionFace
     */
    private applyFaceState;
    /**
     * 获取测量数据（移除 DOM 引用）
     */
    private captureMeasureData;
    /**
     * 还原测量数据
     */
    private restoreMeasureData;
    /**
     * 获取 Fabric 批注数据
     */
    private captureAnnotationData;
    /**
     * 还原 Fabric 批注数据
     */
    private restoreAnnotationData;
    /**
     * 按模式启用批注层：view 只查看，edit 可编辑。
     */
    private applyAnnotationMode;
    /**
     * 图钉流程沿用引擎统一的设备识别，避免移动端误拉起桌面工具栏。
     */
    private isMobileDevice;
    /**
     * 深度序列化：保留 Vector3，移除 DOM/函数
     */
    private serializeSnapshotValue;
    /**
     * 深度反序列化：将标记对象还原为 Vector3
     */
    private deserializeSnapshotValue;
}

/**
 * DrawingPin 视点管理器
 * 仅暴露两个主接口：
 * 1. get(): 获取当前视点完整状态
 * 2. restore(): 还原视点完整状态
 */
declare class DrawingPin_2 {
    private engine;
    private capturePoint;
    private readonly labelPrefix;
    private readonly temporaryLabelId;
    private readonly labelIcon;
    private labelIds;
    private offLabelClick;
    private isPickingCapturePoint;
    private viewModeControlSnapshot;
    constructor(engine: any);
    /**
     * 获取当前视点状态（相机 + 剖切 + 测量 + 批注）
     */
    get(): IDrawingPinState_2;
    /**
     * 还原视点状态（相机 + 剖切 + 测量 + 批注）
     * 还原完成后进入批注流程，用户点击"确定"时通过回调返回最新视点状态
     */
    restore(state: IDrawingPinState_2, mode?: FabricDrawMode_2, callback?: (state: IDrawingPinState_2 | null) => void, showToolbar?: boolean): Promise<void>;
    /**
     * 创建视点（进入批注流程）
     * 1. 启用批注功能
     * 2. 用户点击“确定”后自动调用 get()
     * 3. 将完整视点数据通过回调抛出
     */
    create(callback?: (state: IDrawingPinState_2) => void): void;
    /**
     * 根据图钉数据中的捕捉点在模型中显示标签；未捕捉点的图钉会被自动忽略。
     */
    showLabels(states?: IDrawingPinState_2[], options?: {
        namePrefix?: string;
    }): string[];
    /**
     * 关闭当前由图钉接口创建的标签，不影响业务侧其它标签。
     */
    hideLabels(): void;
    activeLabels(states?: IDrawingPinState_2[], options?: {
        namePrefix?: string;
    }): string[];
    disActiveLabels(): void;
    /**
     * 清空批注（便捷接口）
     */
    clearAnnotation(): void;
    /**
     * 退出图钉查看态，清理查看批注并恢复相机交互。
     * 视图跳转类功能可调用此接口与图钉查看态保持互斥。
     */
    exitViewMode(): boolean;
    /**
     * 图钉 view 模式下锁定相机控制，避免用户在只读查看阶段继续旋转视图。
     */
    private enterViewModeCameraLock;
    /**
     * 退出图钉 view 模式时恢复进入前的相机控制状态。
     */
    private exitViewModeCameraLock;
    /**
     * 兼容旧图钉：历史数据未保存 Orbit origin 时，优先使用 capturePoint 补足旋转中心。
     */
    private buildRestoreCameraPose;
    private pickCapturePoint;
    private disableCameraControlsForPick;
    private restoreCameraControlsAfterPick;
    private pickModelPointOnce;
    private pickNearestModelPoint;
    private showCaptureLabel;
    private updateCaptureLabelState;
    private ensureLabelClickHandler;
    /**
     * 获取剖切状态
     */
    private captureClippingState;
    /**
     * 还原剖切状态
     */
    private restoreClippingState;
    /**
     * 还原面剖切（不走拾取流程）
     */
    private restoreFaceMode;
    /**
     * 将法向/距离应用到 sectionFace
     */
    private applyFaceState;
    /**
     * 获取测量数据（移除 DOM 引用）
     */
    private captureMeasureData;
    /**
     * 还原测量数据
     */
    private restoreMeasureData;
    /**
     * 获取 Fabric 批注数据
     */
    private captureAnnotationData;
    /**
     * 还原 Fabric 批注数据
     */
    private restoreAnnotationData;
    /**
     * 按模式启用批注层：view 只查看，edit 可编辑。
     */
    private applyAnnotationMode;
    /**
     * 图钉流程沿用引擎统一的设备识别，避免移动端误拉起桌面工具栏。
     */
    private isMobileDevice;
    /**
     * 深度序列化：保留 Vector3，移除 DOM/函数
     */
    private serializeSnapshotValue;
    /**
     * 深度反序列化：将标记对象还原为 Vector3
     */
    private deserializeSnapshotValue;
}

/**
 * 块定义
 */
declare interface DWGBlock {
    id: string;
    name: string;
    entities: DWGEntity[];
    position?: number[];
}

/**
 * DWG 数据类型定义
 * 基于 my_model.json 的数据结构
 */
/**
 * DWG 数据结构
 */
declare interface DWGData {
    version: string;
    metadata: DWGMetadata;
    layers: DWGLayer[];
    entities: DWGEntity[];
    blocks?: DWGBlock[];
    /** 模型空间 octree 根节点；分包加载和 viewport 范围筛选会复用。 */
    octree?: SplitCadManifestNode;
    /** 已加载的模型空间 tile。 */
    tiles?: LoadedCadTile2d[];
    /** 布局空间列表；没有 layoutsUrl 的图纸保持为空。 */
    layouts?: LoadedLayoutSpace2d[];
}

/**
 * 实体基类
 */
declare interface DWGEntity {
    id?: string;
    type: EntityType;
    layer: string;
    color: number;
    colorIndex?: number;
    lineWeight?: number;
    lineType?: string;
    lineTypeScale?: number;
    lineTypePattern?: number[];
    visible: boolean;
}

/**
 * 边界范围
 */
declare interface DWGExtents {
    min: number[];
    max: number[];
}

/**
 * 图层定义
 */
declare interface DWGLayer {
    id: string;
    name: string;
    color: number;
    colorIndex: number;
    lineWeight: number;
    lineType: string;
    visible: boolean;
    frozen: boolean;
}

/**
 * 文件元数据
 */
declare interface DWGMetadata {
    file: string;
    fileType: string;
    createTime: string;
    author: string;
    units: string;
    extents: DWGExtents;
    /** 2D 模型整体绕 Z 轴旋转角度，单位为弧度。 */
    viewRotation?: number;
    /** 2D 模型默认打开时使用的视图范围。 */
    viewExtents?: DWGExtents;
    /** 布局空间索引文件路径，相对 manifest 所在目录。 */
    layoutsUrl?: string;
}

declare type EffectState = Record<WebGPUPostProcessingEffect, boolean>;

/**
 * 2D 引擎配置选项
 */
declare interface Engine2dOptions {
    containerId: string;
    backgroundColor?: number;
    gridEnabled?: boolean;
    axesEnabled?: boolean;
    selectionColor?: number;
    highlightColor?: number;
    enablePerformanceMonitoring?: boolean;
    /** 是否显示 stats.js 性能监视器面板。 */
    showStats?: boolean;
    /** 自定义字体 TTF 文件 URL，支持中文等完整 Unicode 字符 */
    fontUrl?: string;
    fontFile?: File;
    /** 覆盖 SDK 内置资源根路径，默认使用固定 CDN。 */
    assetBaseUrl?: string;
    assetFile?: File;
    assetFiles?: File[];
    /** 鼠标样式：full-crosshair 为全屏十字架，short-crosshair 为短十字架。 */
    cursorStyle?: CadCursorStyle2d;
    /** 加载进度条样式：1 为居中卡片，2 为底部进度条。 */
    loadingStyle?: LoadingStyle2d;
    /** 右键菜单配置：按 items 顺序渲染，visible=false 的菜单项会被隐藏。 */
    contextMenu?: {
        items?: ContextMenuItemConfig[];
    };
    /** 是否显示底部鼠标世界坐标状态栏，默认显示。 */
    showMouseCoordinates?: boolean;
}

/**
 * 720 全景引擎配置选项
 */
declare interface Engine720Options {
    /** 容器 ID */
    containerId: string;
    /** 覆盖 SDK 内置资源根路径，默认使用固定 CDN。 */
    assetBaseUrl?: string;
    assetFile?: File;
    assetFiles?: File[];
    /** 初始视野角度（默认 75） */
    fov?: number;
    /** 是否启用缩放（默认 true） */
    enableZoom?: boolean;
    /** 是否启用旋转（默认 true） */
    enableRotate?: boolean;
    /** 最小 FOV（默认 30，最大缩放） */
    minFov?: number;
    /** 最大 FOV（默认 90，最小缩放） */
    maxFov?: number;
    /** 球体半径（默认 500） */
    sphereRadius?: number;
    /** 旋转速度（默认 0.5） */
    rotateSpeed?: number;
    /** 缩放速度（默认 1.0） */
    zoomSpeed?: number;
    /** 是否启用阻尼效果（默认 true） */
    enableDamping?: boolean;
    /** 阻尼系数（默认 0.05） */
    dampingFactor?: number;
}

declare type EngineFrameCallback = (time: DOMHighResTimeStamp) => void;

declare type EngineFrameCallback_2 = (time: DOMHighResTimeStamp) => void;

/**
 * Gaussian 高斯点云引擎配置项。
 * 结构参考 core720，由 EngineKernel 统一装配各模块。
 */
declare interface EngineGaussianOptions {
    containerId: string;
    /** 覆盖 SDK 内置资源根路径，默认使用固定 CDN。 */
    assetBaseUrl?: string;
    assetFile?: File;
    assetFiles?: File[];
    cameraUp?: GaussianVector3;
    initialCameraPosition?: GaussianVector3;
    initialCameraLookAt?: GaussianVector3;
    backgroundColor?: string;
    antialias?: boolean;
    showLoadingUI?: boolean;
    sharedMemoryForWorkers?: boolean;
    gpuAcceleratedSort?: boolean;
    sphericalHarmonicsDegree?: number;
    orientationPreset?: GaussianOrientationPreset;
    viewerOptions?: Record<string, any>;
}

export declare type EngineGISConfig = GISOptions;

export declare type EngineGISInstance = GIS;

export declare type EngineGISOptions = EngineKernelV3Options & Pick<EngineKernelV2Options, 'limit_memory'> & {
    /** GIS 渲染后端，默认使用 WebGPU。 */
    renderBackend?: EngineRenderBackend;
};

/**
 * 引擎信息统计类
 * 用于统计引擎中模型的顶点和三角面数量
 */
declare class EngineInfo {
    private engine;
    constructor(engine: any);
    /**
     * 获取引擎统计信息
     * 统计场景中所有网格的顶点数和三角面数
     * @returns 返回包含顶点数和三角面数的对象
     */
    getEngineInfo(): {
        totalVertices: number;
        totalTriangles: number;
        meshCount: number;
    };
}

/**
 * 引擎信息统计类
 * 用于统计引擎中模型的顶点和三角面数量
 */
declare class EngineInfo_2 {
    private engine;
    constructor(engine: any);
    /**
     * 获取引擎统计信息
     * 统计场景中所有网格的顶点数和三角面数
     * @returns 返回包含顶点数和三角面数的对象
     */
    getEngineInfo(): {
        totalVertices: number;
        totalTriangles: number;
        meshCount: number;
    };
}

export declare type EngineInstance = EngineKernelV2 | EngineKernelV3;

declare class EngineKernel2d {
    private options;
    private container;
    private animationId;
    private isRendering;
    private fpsFrameCount;
    private fpsLastCheck;
    private currentFps;
    private enablePerformanceMonitoring;
    stats?: default_2;
    modelToolModule2d: ModelToolModule2d;
    engineStatus2d: EngineStatus2d;
    octreeBox2d: OctreeBox2d;
    events: EventModule2d;
    handelBehaved2d: any;
    interactionModule2d: InteractionModule2d;
    sceneModule2d: SceneModule2d;
    cameraModule2d: CameraModule2d;
    renderModule2d: RenderModule2d;
    controlModule2d: ControlModule2d;
    loaderModule2d: LoaderModule2d;
    layerManager: LayerManager;
    searchManager: SearchManager;
    themeManager: ThemeManager;
    measure: Measure_3;
    markup: Markup2d;
    label: Label2d;
    viewCube: ViewCube2d;
    cadCursorUI: CadCursorUI;
    private contextMenuUI;
    private loadingUI;
    private workspaceTabsUI;
    private versionEl;
    private linkView2d3d;
    private linkElement2d3d;
    scene: THREE.Scene | null;
    camera: THREE.OrthographicCamera | null;
    renderer: THREE.WebGLRenderer | null;
    dwgData: DWGData | null;
    version: string;
    constructor(options: Engine2dOptions);
    /**
     * 初始化引擎
     */
    private initialize;
    /**
     * 开始渲染循环
     */
    private startRendering;
    /**
     * 停止渲染循环
     */
    private stopRendering;
    /**
     * 动画循环
     */
    private animate;
    /** 初始化 stats.js 性能监视器，showStats 优先控制可视面板，旧配置 enablePerformanceMonitoring 继续兼容。 */
    private initStatsMonitor;
    /**
     * 更新性能统计
     */
    private updatePerformanceStats;
    /**
     * 加载模型
     * @param url 模型文件 URL
     * @param options 加载选项
     * @returns 加载结果
     */
    loadModel(url: string, options?: {
        chunkSize?: number;
        enableChunkedLoading?: boolean;
        enableValidation?: boolean;
    }): Promise<{}>;
    /**
     * 通过 viewToken 向 OpenAPI 解析真实加载地址，再复用现有 2D URL 加载逻辑。
     */
    loadModelFile(files: File[], options?: {
        chunkSize?: number;
        enableChunkedLoading?: boolean;
        enableValidation?: boolean;
    }): Promise<{}>;
    loadModelByViewToken(viewToken: string, options?: {
        chunkSize?: number;
        enableChunkedLoading?: boolean;
        enableValidation?: boolean;
    }): Promise<{}>;
    /** 获取当前 2D 图纸中可切换的布局空间列表。 */
    getLayouts(): LoadedLayoutSpace2d[];
    /** 获取当前激活的工作空间，供外部状态栏或自定义 UI 同步显示。 */
    getActiveWorkspace(): {
        type: 'model' | 'layout';
        layoutId?: string;
        name: string;
    };
    /** 当前是否处于模型空间。 */
    isModelSpaceActive(): boolean;
    /** 二三维构件联动状态；布局空间视口内构件交互依赖这个开关。 */
    isElementLink2d3dEnabled(): boolean;
    /** 切换到布局空间；layoutKey 支持布局 id、名称或 getLayouts() 返回数组下标。 */
    loadLayout(layoutKey: string | number, options?: {
        chunkSize?: number;
        enableChunkedLoading?: boolean;
    }): Promise<void>;
    /** 切回模型空间。 */
    showModelSpace(options?: {
        chunkSize?: number;
        enableChunkedLoading?: boolean;
    }): Promise<void>;
    /**
     * 获取图层列表
     * @returns 图层数组
     */
    getLayers(): DWGLayer[];
    /**
     * 按图层获取实体
     * @param layerName 图层名称
     * @returns 实体数组
     */
    getEntitiesByLayer(layerName: string): DWGEntity[];
    /**
     * 设置图层可见性
     * @param layerName 图层名称
     * @param visible 是否可见
     */
    setLayerVisible(layerName: string, visible: boolean): void;
    /** 隐藏当前选中/高亮图元所在图层，供右键菜单直接调用。 */
    private hideHighlightedLayers;
    /** 从 nodeMap 中反查图元所在图层；一个 linkId 可能对应多个合批对象。 */
    private getLayersByModelIds;
    /**
     * 切换主题
     * @param theme 'dark' | 'light'
     */
    setTheme(theme: Theme2d): void;
    /**
     * 重置视图
     */
    resetView(): void;
    /**
     * 适配视图到模型边界
     */
    fitToView(): void;
    /**
     * 设置缩放级别
     * @param zoom 缩放级别
     */
    setZoom(zoom: number): void;
    /**
     * 获取当前缩放级别
     * @returns 缩放级别
     */
    getZoom(): number;
    /** 刷新右下角版本号展示，便于外部修改 version 后同步 UI。 */
    updateVersionDisplay(): void;
    /**
     * 获取性能统计
     * @returns 性能统计信息
     */
    getPerformanceStats(): PerformanceStats;
    /**
     * 设置背景颜色
     * @param color 颜色值
     */
    setBackgroundColor(color: number): void;
    /**
     * 清空场景
     */
    clearScene(): void;
    /**
     * 调整渲染器尺寸
     */
    resize(): void;
    /**
     * 将主 canvas 转换成图片
     * @param options 图片导出选项
     * @returns 图片信息（包含 Data URL 和 Blob URL）
     */
    captureImage(options?: {
        format?: 'png' | 'jpeg' | 'webp';
        quality?: number;
        filename?: string;
        download?: boolean;
        transparent?: boolean;
        hideGrid?: boolean;
        hideAxes?: boolean;
    }): {
        dataURL: string;
        blobURL?: string;
        blob?: Blob;
    } | null;
    /**
     * 将主 canvas 转换成图片（异步版本，返回 Blob）
     * @param options 图片导出选项
     * @returns Promise，包含图片信息（Data URL、Blob URL 和 Blob）
     */
    captureImageAsync(options?: {
        format?: 'png' | 'jpeg' | 'webp';
        quality?: number;
        filename?: string;
        download?: boolean;
        transparent?: boolean;
        hideGrid?: boolean;
        hideAxes?: boolean;
    }): Promise<{
        dataURL: string;
        blobURL: string;
        blob: Blob;
    } | null>;
    /**
     * 销毁引擎
     */
    dispose(): void;
}

/**
 * 720 全景引擎核心类
 * 提供 720° 全景图查看和标注功能
 */
declare class EngineKernel720 {
    private readonly options;
    sceneModule: SceneModule720;
    cameraModule: CameraModule720;
    renderModule: RenderModule720;
    controlModule: ControlModule720;
    eventModule: EventModule_3;
    panoramaLoader: PanoramaLoader;
    annotationManager: AnnotationManager720;
    worldToScreen: WorldToScreen;
    private isInitialized;
    private readonly version;
    private localPanoramaResource;
    constructor(options: Engine720Options);
    /**
     * 初始化引擎
     */
    private initialize;
    /**
     * 设置渲染循环
     */
    private setupRenderLoop;
    /**
     * 加载全景图
     * @param imageUrl 全景图 URL（png, jpg）
     */
    loadPanorama(imageUrl: string): Promise<void>;
    loadPanoramaFile(file: File): Promise<void>;
    loadModelFile(files: File[]): Promise<void>;
    /**
     * 通过 viewToken 解析全景资源地址，再复用现有全景加载逻辑。
     */
    loadPanoramaByViewToken(viewToken: string): Promise<void>;
    /**
     * 预加载多个全景图
     * @param urls 全景图 URL 数组
     */
    preloadPanoramas(urls: string[]): Promise<void>;
    /**
     * 添加标注
     * @param config 标注配置
     * @returns 标注 ID
     */
    addAnnotation(config: AnnotationConfig720): string;
    /**
     * 批量添加标注
     * @param configs 标注配置数组
     * @returns 标注 ID 数组
     */
    addAnnotations(configs: AnnotationConfig720[]): string[];
    /**
     * 移除标注
     * @param id 标注 ID
     */
    removeAnnotation(id: string): void;
    /**
     * 清空所有标注
     */
    clearAnnotations(): void;
    /**
     * 获取所有标注
     */
    getAnnotations(): AnnotationInstance[];
    /**
     * 更新交互参数（旋转/缩放/阻尼等）
     */
    updateInteractionOptions(options: InteractionOptions720): void;
    /**
     * 根据屏幕坐标拾取全景球面坐标
     */
    pickPanoramaPoint(screenX: number, screenY: number): AnnotationPosition | null;
    /**
     * 设置视角（通过经纬度）
     * @param theta 水平角度（弧度）
     * @param phi 垂直角度（弧度）
     * @param animate 是否动画过渡（暂未实现）
     */
    lookAt(theta: number, phi: number, animate?: boolean): void;
    /**
     * 获取当前视角
     */
    getViewAngle(): {
        theta: number;
        phi: number;
    };
    /**
     * 设置 FOV
     * @param fov 视野角度（30-90）
     */
    setFov(fov: number): void;
    /**
     * 获取当前 FOV
     */
    getFov(): number;
    /**
     * 监听事件
     * @param event 事件类型
     * @param callback 回调函数
     */
    on<T = any>(event: EventType720, callback: (data: T) => void): void;
    /**
     * 取消监听
     * @param event 事件类型
     * @param callback 回调函数
     */
    off<T = any>(event: EventType720, callback: (data: T) => void): void;
    /**
     * 调整尺寸
     * @param width 容器宽度（可选，默认使用容器尺寸）
     * @param height 容器高度（可选，默认使用容器尺寸）
     */
    resize(width?: number, height?: number): void;
    /**
     * 暂停渲染
     */
    pauseRendering(): void;
    /**
     * 恢复渲染
     */
    resumeRendering(): void;
    /**
     * 检查渲染是否暂停
     */
    isRenderingPausedState(): boolean;
    /**
     * 获取版本
     */
    getVersion(): string;
    /**
     * 销毁引擎
     */
    dispose(): void;
    /**
     * 检查是否已初始化
     */
    private checkInitialized;
    private revokeLocalPanoramaResource;
}

/**
 * Gaussian 高斯点云引擎核心类。
 * 按 core720 的模块化方式组织：EngineKernel 只负责装配，具体职责下沉到 modules。
 */
declare class EngineKernelGaussian {
    eventModule: EventModuleGaussian;
    sceneModule: SceneModuleGaussian;
    cameraModule: CameraModuleGaussian;
    renderModule: RenderModuleGaussian;
    controlModule: ControlModuleGaussian;
    loaderModule: LoaderModuleGaussian;
    private isInitialized;
    private readonly options;
    private readonly version;
    constructor(options: EngineGaussianOptions);
    private initialize;
    loadModel(url: string, options?: GaussianSceneOptions): Promise<GaussianSceneInfo>;
    /**
     * 通过 viewToken 解析 Gaussian 资源地址，再复用现有 URL 加载逻辑。
     */
    loadModelFile(files: File[], options?: GaussianSceneOptions): Promise<GaussianSceneInfo>;
    loadModelByViewToken(viewToken: string, options?: GaussianSceneOptions): Promise<GaussianSceneInfo>;
    unloadModel(id: string): Promise<void>;
    setOrientationPreset(preset: GaussianOrientationPreset): void;
    getOrientationPreset(): GaussianOrientationPreset;
    resize(width?: number, height?: number): void;
    pauseRendering(): void;
    resumeRendering(): void;
    resetFpsStats(): void;
    getFpsInfo(): GaussianFpsInfo;
    on<T = any>(event: EventTypeGaussian, callback: (data: T) => void): void;
    off<T = any>(event: EventTypeGaussian, callback: (data: T) => void): void;
    getVersion(): string;
    dispose(): Promise<void>;
    private checkInitialized;
}

declare class EngineKernelV2 {
    readonly options: EngineKernelV2Options;
    readonly mobileMemoryProfile: MobileMemoryProfile;
    private deviceType;
    private animationId;
    private isDisposed;
    private isRenderingPaused;
    private suppressComposerRenderWhenFree;
    private pendingComposerRender;
    private controlsEnabledBeforePause;
    private boundControl;
    private controlEventHandlers;
    private animate;
    private onWindowResize;
    private _fpsFrameCount;
    private _fpsLastCheck;
    private _fpsLastSwitch;
    private _lowFpsCount;
    private _highFpsCount;
    private frameLockEnabled;
    private readonly _idleFrameInterval;
    private _lastIdleFrameTime;
    private readonly _idleFrameRateExemptionReasons;
    private readonly frameCallbacks;
    private readonly _fpsCheckInterval;
    private readonly _fpsSwitchCooldown;
    private readonly _fpsThreshold;
    private readonly _fpsUpgradeThreshold;
    private readonly _lowFpsRequired;
    private readonly _highFpsRequired;
    isMouseDown: boolean;
    isWheeling: boolean;
    scene: THREE.Scene | null;
    camera: THREE.Camera | null;
    renderer: THREE.WebGLRenderer | null;
    sceneModule: SceneModule;
    cameraModule: CameraModule_2;
    deviceModule: DeviceModule;
    renderModule: RenderModule;
    controlModule: ControlModule;
    composerModule: ComposerModule;
    autoExposureModule: AutoExposureModule;
    loaderModule: LoaderModule;
    engineStatus: EngineStatus;
    events: EventModule;
    lightModule: LightModule;
    interactionModule: InteractionModule;
    modelToolModule: ModelToolModule;
    worldToScreen: WorldToScreen;
    handelBehaved: typeof HandelBehaved;
    octreeBox: any;
    controls: any;
    stats?: default_2;
    catchSvg: SVGSVGElement;
    engineModelModule: EngineModelModule;
    viewTree: ViewTree;
    merge2d: Merge2d;
    viewCube: ViewCube;
    rangeScale: RangeScale;
    setting: Setting;
    measure: Measure;
    clipping: Clipping;
    modelTree: ModelTree;
    engineInfo: EngineInfo;
    modelProperties: ModelProperties;
    /** 提供构件、模型与房间的检索、高亮和相机定位能力。 */
    search: SearchManager3d;
    modelMapperBatch: ModelMapperBatch;
    modelEdge: ModelEdge;
    nodeBox: NodeBox;
    pathRoaming: PathRoaming;
    hoverHighLight: HoverHighLight;
    minMap: MiniMap;
    grid: Grid;
    level: Level;
    issueReport: IssueReport;
    text: Text_2;
    hdr: Hdr;
    ground: Ground;
    skyManager: SkyManager;
    /** 在当前 BIM 场景中加载和管理 GIS 资源。 */
    gisManager: BimGISManager;
    linkElement2d3d: LinkElement2d3d_2;
    linkView2d3d: LinkView2d3d_2;
    oneClickEncoding: OneClickEncoding_2;
    fabricDraw: FabricDraw_2;
    drawingPin: DrawingPin_2;
    modelLink3d: ModelLink3d_2;
    label: Label_2;
    annotation3d: Annotation3d_2;
    calibration: Calibration_2;
    /** 管理第三方 GLB 的放置、编辑和场景还原。 */
    modelPlace: ModelPlace_2;
    /** 基于当前引擎作为基准版本的模型差异比较器。 */
    modelComparison: ModelComparison;
    /** 管理模型炸开代理对象，并保持炸开后的构件交互身份。 */
    modelExplode: ModelExplode_2;
    /** 材质编辑器，提供 DOM 面板、材质修改记录读取和一键还原能力。 */
    materialTool: MaterialTool;
    pathDraw: PathDrawManager_2;
    rxQuotaListMapper: RxQuotaListMapper_2;
    filterLoaderModel: FilterLoaderModel_2;
    models: any[];
    reactBoundingClientRect: {
        left: number;
        top: number;
    };
    version: string;
    private versionEl;
    container: HTMLElement;
    constructor(options: EngineKernelV2Options);
    changeHandelBehavedMode(mode: string): void;
    getHandelBehavedMode(): string;
    updateVersionDisplay(): void;
    bindControlEvents(control: any): void;
    requestComposerRender(): void;
    /** 与 v3 保持一致的统一重绘入口，供 GIS 等共享模块调用。 */
    requestRender(): void;
    /** 注册共享渲染循环回调，返回函数用于释放订阅。 */
    addFrameCallback(callback: EngineFrameCallback_2): () => void;
    /**
     * 设置自动锁帧状态；开启后引擎空闲时限制为 1 FPS，关闭后持续全帧渲染。
     */
    setFrameLock(enabled: boolean): void;
    /**
     * 获取自动锁帧状态。
     */
    isFrameLockEnabled(): boolean;
    /**
     * 为持续交互或动画登记空闲限帧豁免；同一原因可重复设置，多个原因会独立共存。
     */
    setIdleFrameRateExempt(reason: string, exempt: boolean): void;
    /**
     * 通过 viewToken 解析 3D 模型地址，再复用现有 loaderModule URL 加载逻辑。
     * 解析得到多个模型地址时，共用同一份加载选项，包括是否加载边线。
     */
    loadModelByViewToken(viewToken: string, options?: LoadModelOptions): Promise<void>;
    /**
     * 对指定 url 的 3D 模型应用整体校准矩阵。
     */
    applyCalibration(options: CalibrationOptions): boolean;
    /**
     * 通过源线段和目标线段对指定 url 的 3D 模型做平移和旋转校准。
     */
    alignCalibrationBySegments(options: SegmentCalibrationOptions): boolean;
    /**
     * 启动模型四点捕捉校准，依次选择源定位点、源方向点、目标定位点和目标方向点。
     */
    startPointCalibration(options: PointCalibrationOptions): boolean;
    updateLightPosition(camera: any, directionalLight: any, updataRotate?: boolean): void;
    /**
     * 自适应渲染降级：将渲染模式降低一级
     */
    private _adaptiveRenderingDowngrade;
    /**
     * 自适应渲染升级：将渲染模式提升一级
     */
    private _adaptiveRenderingUpgrade;
    /**
     * 暂停渲染循环
     */
    pauseRendering(): void;
    /**
     * 恢复渲染循环
     */
    resumeRendering(): void;
    /**
     * 检查渲染是否暂停
     */
    isRenderingPausedState(): boolean;
    /**
     * 处理窗口大小变化
     */
    /**
     * 同步捕捉 SVG 的尺寸和 viewBox，避免窗口变化后出现偏移或裁切。
     */
    /**
     * 统一读取容器当前真实可见尺寸，避免外部传入尺寸与最终显示尺寸不一致。
     */
    private getViewportSize;
    private syncCatchSvgViewport;
    handleWindowResize(width?: number, height?: number): void;
    /**
     * 销毁引擎，释放资源,
     */
    dispose(): void;
    /**
     * 递归清理场景中的所有对象
     */
    private clearScene;
    /**
     * 清理材质及其纹理
     */
    private invokeIfExists;
    private disposeSceneAttachments;
    private disposeSceneAttachment;
    private disposeMaterial;
}

/** v2 引擎初始化参数。 */
export declare interface EngineKernelV2Options {
    container?: HTMLElement;
    containerId?: string;
    /** 移动端硬件内存，单位 GB；用于选择纹理上限和后处理 MSAA 档位。 */
    limit_memory?: number;
    /** v2 自动曝光；传入 false 可关闭，传入参数对象可覆盖默认值。默认开启。 */
    autoExposure?: boolean | AutoExposureOptions;
    /** 普通 Mesh 与实例批次的自动距离裁剪；传入 false 可整体关闭。 */
    ordinaryMeshOptimization?: false | {
        enabled?: boolean;
        meshDistanceCullingEnabled?: boolean;
        instanceDistanceCullingEnabled?: boolean;
        instanceDistanceCullingUpdateIntervalMs?: number;
        maxTrianglesPerMesh?: number;
        minProjectedSizePx?: number;
    };
    [key: string]: any;
}

/**
 * v3 引擎内核沿用 v2 的模块字段和初始化顺序。
 * 唯一的主链差异是 WebGPU 异步初始化、直接渲染和动画循环。
 */
export declare class EngineKernelV3 {
    readonly version: string;
    options: EngineKernelV3Options;
    container: HTMLElement;
    scene: THREE.Scene;
    camera: THREE.Camera;
    renderer: WebGPURenderer;
    sceneModule: SceneModule_2;
    cameraModule: CameraModule_3;
    deviceModule: DeviceModule_2;
    renderModule: RenderModule_2;
    controlModule: ControlModule_2;
    composerModule: ComposerModule_2;
    loaderModule: LoaderModule_2;
    engineStatus: EngineStatus_2;
    events: EventModule_2;
    lightModule: LightModule_2;
    interactionModule: InteractionModule_2;
    modelToolModule: ModelToolModule_2;
    handelBehaved: typeof HandelBehaved_2;
    viewCube: ViewCube_2;
    octreeBox: any;
    controls: any;
    worldToScreen: WorldToScreen;
    modelProperties: ModelProperties_2;
    hoverHighLight: HoverHighLight_2;
    autoExposureModule: AutoExposureModule_2;
    rxQuotaListMapper: RxQuotaListMapper;
    filterLoaderModel: FilterLoaderModel;
    /** v2 管理器完整集合，保留原有公开 API 以兼容现有调用方。 */
    engineModelModule: EngineModelModule_2;
    viewTree: ViewTree_2;
    merge2d: Merge2d_2;
    rangeScale: RangeScale_2;
    setting: Setting_2;
    measure: Measure_2;
    modelTree: ModelTree_2;
    engineInfo: EngineInfo_2;
    search: SearchManager3d_2;
    modelMapperBatch: ModelMapperBatch_2;
    modelEdge: ModelEdge_2;
    nodeBox: NodeBox_2;
    pathRoaming: PathRoaming_2;
    minMap: MiniMap_2;
    grid: Grid_2;
    level: Level_2;
    issueReport: IssueReport_2;
    text: Text_3;
    hdr: Hdr_2;
    ground: Ground_2;
    skyManager: SkyManager_2;
    /** 在当前 BIM 场景中加载和管理 GIS 资源。 */
    gisManager: BimGISManager;
    linkElement2d3d: LinkElement2d3d;
    linkView2d3d: LinkView2d3d;
    oneClickEncoding: OneClickEncoding;
    fabricDraw: FabricDraw;
    drawingPin: DrawingPin;
    modelLink3d: ModelLink3d;
    label: Label;
    annotation3d: Annotation3d;
    calibration: Calibration;
    modelPlace: ModelPlace;
    modelComparison: ModelComparison_2;
    materialTool: MaterialTool_2;
    pathDraw: PathDrawManager;
    clipping: Clipping_2;
    collector: Collector;
    modelEditor: ModelEditor;
    modelQuantityList: ModelQuantityList;
    roomSpace: RoomSpace;
    materialReplacement: MaterialReplacementManager;
    stats?: default_2;
    models: any[];
    reactBoundingClientRect: {
        left: number;
        top: number;
    };
    catchSvg: SVGSVGElement;
    sectionPlane: THREE.Plane[];
    readonly ready: Promise<this>;
    modelExplode: ModelExplode;
    private isDisposed;
    private isRenderingPaused;
    private pendingComposerRender;
    private frameLockEnabled;
    private readonly idleFrameInterval;
    private lastIdleFrameTime;
    private readonly idleFrameRateExemptionReasons;
    private readonly frameCallbacks;
    private temporalRenderingRequired;
    private controlsEnabledBeforePause;
    private boundControl;
    private controlEventHandlers;
    private readonly resizeObserver;
    private renderStatsEl;
    private renderTrianglesValueEl;
    private renderDrawCallsValueEl;
    private versionEl;
    constructor(options: EngineKernelV3Options);
    /** 刷新右下角版本号和纯数字渲染等级。 */
    updateVersionDisplay(): void;
    private initializeVersionDisplay;
    bindControlEvents(control: any): void;
    requestComposerRender(): void;
    requestRender(): void;
    /**
     * 通过 viewToken 解析 3D 模型地址，再复用 v3 loaderModule 的 URL 加载流程。
     * 解析与 SDK 鉴权沿用公共实现，保证和 v2 的 OpenAPI 行为一致。
     */
    loadModelByViewToken(viewToken: string, options?: LoadModelOptions): Promise<void>;
    /** 静态阴影仅在模型、灯光或可见状态变化后刷新一次。 */
    requestShadowUpdate(): void;
    setFrameLock(enabled: boolean): void;
    isFrameLockEnabled(): boolean;
    /** 仅在交互繁忙期间为时间域后处理保持连续帧，空闲时仍遵循 1 FPS 限帧。 */
    setTemporalRenderingRequired(enabled: boolean): void;
    setIdleFrameRateExempt(reason: string, exempt: boolean): void;
    /** 注册共享渲染循环回调，返回函数用于释放订阅。 */
    addFrameCallback(callback: EngineFrameCallback): () => void;
    private updateTemporalFrameRateExemption;
    pauseRendering(): void;
    resumeRendering(): void;
    isRenderingPausedState(): boolean;
    handleWindowResize(width?: number, height?: number): void;
    dispose(): void;
    private initialize;
    private readonly animate;
    /** 初始化 FPS 面板及其右侧的实时渲染量面板。 */
    private initializeStats;
    /** 在完成当前帧渲染后同步 WebGPU 渲染器统计值。 */
    private updateRenderStats;
    private createCatchSvg;
    private resolveContainer;
}

export declare interface EngineKernelV3Options {
    assetBaseUrl?: string;
    assetFile?: File;
    assetFiles?: File[] | FileList;
    sdkAuth?: SdkAuthOptions;
    version?: string;
    /** 强制 WebGPURenderer 使用 WebGL2 后端，适用于后端兼容性验证。 */
    forceWebGL?: boolean;
    antialias?: boolean;
    /** 初始渲染像素比，运行时可由 EngineModelModule 修改，范围 0.5 至 2。 */
    renderPixelRatio?: number;
    /** 场景背景色；传入 `null` 或 `transparent` 时保持画布透明。 */
    backgroundColor?: THREE.ColorRepresentation | 'transparent' | null;
    container?: HTMLElement;
    containerId?: string;
    continuousRendering?: boolean;
    /** 相机交互期间渲染裁剪的帧预算，单位为毫秒。 */
    interactionFrameBudgetMs?: number;
    /** 相机交互期间是否跳过阴影更新。 */
    interactionSkipShadows?: boolean;
    /** 普通合并 Mesh 的尺寸排序、三角面分批和距离裁剪配置；传入 false 可整体关闭。 */
    ordinaryMeshOptimization?: false | {
        enabled?: boolean;
        /** 是否对普通合并 Mesh 开启距离裁剪，默认开启。 */
        meshDistanceCullingEnabled?: boolean;
        /** 是否对 InstancedMesh 开启距离裁剪，默认开启。 */
        instanceDistanceCullingEnabled?: boolean;
        /** 相机交互期间实例距离裁剪的更新间隔（毫秒）；设为 0 可恢复逐帧计算，默认 100。 */
        instanceDistanceCullingUpdateIntervalMs?: number;
        maxTrianglesPerMesh?: number;
        minProjectedSizePx?: number;
    };
    /** 默认开启批次深度偏移以缓解共面闪烁；确认模型不存在 z-fighting 时可显式关闭。 */
    modelDepthBias?: boolean;
    postProcessing?: WebGPUPostProcessingOptions;
    /** 初始手动渲染等级，范围 1 至 12，默认 8。 */
    renderQualityLevel?: RenderQualityInput;
    /** 是否显示 EngineModelModule 维护的渲染设置面板，默认显示。 */
    renderQualityUI?: boolean;
    /** v3 自动曝光；传入 false 可关闭，传入参数对象可覆盖默认值。默认开启。 */
    autoExposure?: boolean | AutoExposureOptions;
    /** 通用材质自动替换管理器配置；传入规则后默认启用。 */
    materialReplacementOptions?: MaterialReplacementOptions;
    materialEditorOptions?: MaterialEditorOptions_2;
    linkOptions?: ModelLink3dOptions;
    render?: {
        allowWebGLFallback?: boolean;
    };
    showStats?: boolean;
    showViewCube?: boolean;
}

declare class EngineModelModule {
    private engine;
    private currentMode;
    private isManualMode;
    private gtaoPass;
    private ssaoPass;
    private saturationPass;
    private outputPass;
    private fxaaPass;
    constructor(engine_: any);
    /**
     * 初始化模块
     */
    init(): void;
    /**
     * 手动切换渲染模式（用户调用），锁定自动适配
     * @param model - "simple"(性能) | "balance"(平衡) | "advanced"(效果)
     */
    switchModel(model: string): void;
    /**
     * 自动切换渲染模式（引擎内部调用），若已手动设置则跳过
     * @param model - "simple"(性能) | "balance"(平衡) | "advanced"(效果)
     */
    autoSwitch(model: string): void;
    /**
     * 恢复自动适配模式（解除手动锁定）
     */
    enableAutoMode(): void;
    /**
     * 是否处于手动锁定模式
     */
    get isManual(): boolean;
    /**
     * 设置模式（内部初始化使用，不影响手动锁定状态）
     * @param model - "simple"(性能) | "balance"(平衡) | "advanced"(效果)
     */
    setMode(model: string): void;
    /**
     * 获取当前模式
     */
    getCurrentMode(): string;
    /**
     * 缓存 Pass 引用
     */
    private cachePassReferences;
    private applyMode;
    /**
     * 设置阴影开关
     */
    private setShadows;
    /**
     * 设置环境光遮蔽 (GTAO) 开关
     */
    private setGTAO;
    /**
     * 设置环境光遮蔽 (SSAO) 开关
     */
    private setSSAO;
    /**
     * 设置饱和度 Pass 开关
     */
    private setSaturation;
    /**
     * 设置输出 Pass 开关
     */
    setOutputPass(enabled: boolean): void;
    /**
     * 设置 FXAA Pass 开关
     */
    setFXAA(enabled: boolean): void;
    /**
     * 设置性能模式
     */
    setPerformanceMode(): void;
    /**
     * 设置平衡模式
     */
    setBalancedMode(): void;
    /**
     * 设置效果模式（SSAO）
     */
    setQualityMode(): void;
    /**
     * 设置超高级模式（GTAO，最高质量）
     */
    setSuperQualityMode(): void;
    /**
     * 设置阴影质量
     * @param quality - "low"(1024) | "medium"(2048) | "high"(4096)
     */
    setShadowQuality(quality: string): void;
    /**
     * 设置饱和度值
     * @param value - 饱和度值，1.0为正常
     */
    setSaturationValue(value: number): void;
    /**
     * 设置对比度值
     * @param value - 对比度值，1.0为正常
     */
    setContrastValue(value: number): void;
    /**
     * 设置 GTAO 强度
     * @param value - 强度值 0-1
     */
    setGTAOIntensity(value: number): void;
}

/** 管理 v3 手动渲染等级、像素比、Bloom、光环境及其原生 DOM 设置面板。 */
declare class EngineModelModule_2 {
    private readonly engine;
    private readonly presets;
    private readonly lightingPresets;
    private readonly panel;
    private currentLevel;
    private pixelRatio;
    private lightingPresetId;
    private lightingApplyVersion;
    constructor(engine: any);
    /** 初始化默认手动等级和设置面板。 */
    init(): void;
    /** 手动切换 1 至 12 级渲染质量，同时接受 v2 三档模式名称。 */
    setQualityLevel(level: RenderQualityInput): void;
    /** 返回当前数字渲染等级。 */
    getQualityLevel(): RenderQualityLevel;
    /** 兼容 v2 的三档模式 API，并映射到 v3 的 1、5、8 级。 */
    switchModel(mode: LegacyRenderMode): void;
    /** 返回指定等级的深拷贝，调用方可以安全地编辑草稿。 */
    getQualityPreset(level: number): RenderQualityPreset;
    /** 保存指定等级的完整参数，并按需立即应用。 */
    updateQualityPreset(level: number, preset: RenderQualityPreset, apply?: boolean): void;
    /** 恢复指定等级的内置参数。 */
    resetQualityPreset(level: number): void;
    /** 设置独立于质量等级的渲染像素比。 */
    setPixelRatio(value: number): void;
    /** 返回当前渲染像素比。 */
    getPixelRatio(): number;
    /** 独立开关 Bloom，不受等级切换影响。 */
    setBloomEnabled(enabled: boolean): void;
    /** 独立更新 Bloom 参数。 */
    setBloomParameters(parameters: Partial<Omit<BloomPostProcessingSettings, 'enabled'>>): void;
    /** 一次重建同时应用 Bloom 开关和全部参数。 */
    setBloomSettings(settings: BloomPostProcessingSettings): void;
    /** 恢复 Bloom 内置参数，同时保持其独立于渲染等级。 */
    resetBloomSettings(): void;
    /** 返回仅包含 IN 和 OUT 的两套可编辑光环境。 */
    getLightingPresets(): LightingPreset[];
    /** 保存光环境的 DIR、AMB、HDR 强度，并按需立即应用当前环境。 */
    updateLightingPreset(id: LightingPresetCategory, parameters: Pick<LightingPreset, 'directionalIntensity' | 'ambientIntensity' | 'hdrIntensity'>, apply?: boolean): void;
    /** 恢复 IN/OUT 的内置光照强度，并重新应用当前环境。 */
    resetLightingPresets(): void;
    /** 异步应用光环境；版本号防止快速切换时旧 HDR 请求覆盖新选择。 */
    setLightingPreset(id: LightingPresetCategory): Promise<void>;
    /** 返回 UI 和外部调用方需要的当前状态副本。 */
    getState(): EngineModelState;
    /** 兼容设置管理器的饱和度入口。 */
    setSaturationValue(value: number): void;
    /** 兼容设置管理器的对比度入口。 */
    setContrastValue(value: number): void;
    /** 兼容设置管理器的 GTAO 强度入口。 */
    setGTAOIntensity(value: number): void;
    /** 销毁本模块维护的设置界面。 */
    dispose(): void;
    private applyQualityPreset;
    private applyShadowPreset;
    private normalizePixelRatio;
    private normalizeIntensity;
}

export declare interface EngineModelState {
    qualityLevel: RenderQualityLevel;
    pixelRatio: number;
    bloom: BloomPostProcessingSettings;
    lightingPresetId: LightingPresetCategory;
}

export declare type EngineOptions = EngineKernelV2Options | EngineKernelV3Options;

/**
 * 引擎初始化配置
 */
export declare type EngineRenderBackend = 'webgl' | 'webgpu';

declare interface EngineSettings {
    render: {
        mode: RenderMode;
        contrast: number;
        saturation: number;
        shadowIntensity: number;
        lightIntensity: number;
        gtaoIntensity: number;
    };
    display: {
        showEdge: boolean;
        edgeOpacity: number;
        showGrid: boolean;
        showLevel: boolean;
        showGround: boolean;
        groundId: string;
        groundHeight: number;
    };
    environment: {
        type: EnvironmentType;
        hdrId: string;
        hdrIntensity: number;
        skyPreset: SkyPresetName;
        skyParams: SkyParams;
        skyIntensity: number;
    };
}

declare interface EngineSettings_2 {
    render: {
        mode: RenderMode_2;
        contrast: number;
        saturation: number;
        shadowIntensity: number;
        /** 自动曝光模式；缺省时按旧版手动亮度快照处理。 */
        autoExposure?: boolean;
        /** renderer.toneMappingExposure 的原始值，用于无损恢复自动曝光快照。 */
        toneMappingExposure?: number;
        /** 场景基础环境光百分比，0~100 对应实际强度 0~5。 */
        ambientLightIntensity?: number;
        lightIntensity: number;
        gtaoIntensity: number;
    };
    display: {
        showEdge: boolean;
        edgeOpacity: number;
        showGrid: boolean;
        showLevel: boolean;
        showGround: boolean;
        groundId: string;
        groundHeight: number;
    };
    environment: {
        type: EnvironmentType_2;
        hdrId: string;
        /** 兼容字段：历史版本表示环境亮度。 */
        hdrIntensity: number;
        hdrBackgroundIntensity: number;
        hdrEnvironmentIntensity: number;
        skyPreset: SkyPresetName_2;
        skyParams: SkyParams_2;
        skyIntensity: number;
    };
}

declare class EngineStatus {
    private engine;
    isFree: boolean;
    editorMode: string;
    isForceFree: boolean;
    isDisableContextMenu: boolean;
    disableModelInteractionHighlight: boolean;
    suppressNextOrbitOriginPick: boolean;
    highlightModels: HighlightModelState[];
    hideModels: any[];
    translucentModels: any[];
    models: any[];
    constructor(engine: any);
    init(): void;
    updateFree(status: boolean): void;
    private handleContextMenu;
    dispose(): void;
    closeAllFunction: () => void;
}

declare class EngineStatus2d {
    private engine;
    isFree: boolean;
    highlightModels: any[];
    highlightHoverModels: any[];
    hideModels: any[];
    translucentModels: any[];
    models: any[];
    constructor(engine: any);
}

declare class EngineStatus_2 {
    private engine;
    isFree: boolean;
    editorMode: string;
    isForceFree: boolean;
    isDisableContextMenu: boolean;
    disableModelInteractionHighlight: boolean;
    suppressNextOrbitOriginPick: boolean;
    highlightModels: HighlightModelState_2[];
    hideModels: any[];
    translucentModels: any[];
    models: any[];
    constructor(engine: any);
    init(): void;
    updateFree(status: boolean): void;
    private handleContextMenu;
    dispose(): void;
    closeAllFunction: () => void;
}

/**
 * 实体类型枚举
 */
declare type EntityType = 'LINE' | 'POLYLINE' | 'SPLINE' | 'CIRCLE' | 'HATCH' | 'INSERT' | 'MTEXT' | 'DIMENSIONLINEAR';

declare type EnvironmentType = 'none' | 'hdr' | 'sky';

declare type EnvironmentType_2 = 'none' | 'hdr' | 'sky';

/**
 * 事件监听器函数类型
 */
declare type EventListener_2 = (data?: any) => void;

/**
 * 事件模块
 * 负责系统的事件订阅与发布
 *
 * 注意：由于代码中存在两个不同的 EventType 定义（IEventModule.ts 和 eventType.ts），
 * 为了确保兼容性，trigger 方法会将枚举值转换为字符串进行比较
 */
declare class EventModule {
    private readonly listeners;
    private debugMode;
    /**
     * 设置调试模式
     * @param enabled 是否启用调试模式
     */
    setDebugMode(enabled: boolean): void;
    /**
     * 订阅事件
     * @param event 事件类型
     * @param callback 回调函数
     */
    on<T = any>(event: EventType, callback: (data: T) => void): void;
    /**
     * 取消订阅事件
     * @param event 事件类型
     * @param callback 要移除的回调函数
     */
    off<T = any>(event: EventType, callback: (data: T) => void): void;
    /**
     * 触发事件
     * @param event 事件类型
     * @param data 事件数据
     */
    trigger(event: EventType | string, data?: any): void;
}

/**
 * 事件模块类
 */
declare class EventModule2d {
    private listeners;
    private onceListeners;
    private debugMode;
    constructor(debugMode?: boolean);
    /**
     * 初始化所有事件类型
     */
    private initializeEvents;
    /**
     * 订阅事件
     * @param type 事件类型
     * @param listener 监听器函数
     * @returns 取消订阅的函数
     */
    on(type: EventType2d | string, listener: EventListener_2): () => void;
    /**
     * 订阅一次性事件
     * @param type 事件类型
     * @param listener 监听器函数
     */
    once(type: EventType2d | string, listener: EventListener_2): void;
    /**
     * 取消订阅事件
     * @param type 事件类型
     * @param listener 监听器函数
     */
    off(type: EventType2d | string, listener: EventListener_2): void;
    /**
     * 触发事件
     * @param type 事件类型
     * @param data 事件数据
     */
    trigger(type: EventType2d | string, data?: any): void;
    /**
     * 移除所有监听器
     */
    removeAllListeners(): void;
    /**
     * 移除指定类型的所有监听器
     * @param type 事件类型
     */
    removeListenersOfType(type: EventType2d | string): void;
    /**
     * 获取指定类型的监听器数量
     * @param type 事件类型
     * @returns 监听器数量
     */
    getListenerCount(type: EventType2d | string): number;
    /**
     * 设置调试模式
     * @param enabled 是否启用调试模式
     */
    setDebugMode(enabled: boolean): void;
    /**
     * 获取所有事件类型
     * @returns 事件类型数组
     */
    getAllEventTypes(): EventType2d[];
    /**
     * 销毁事件模块
     */
    dispose(): void;
}

/**
 * 事件模块
 * 负责系统的事件订阅与发布
 *
 * 注意：由于代码中存在两个不同的 EventType 定义（IEventModule.ts 和 eventType.ts），
 * 为了确保兼容性，trigger 方法会将枚举值转换为字符串进行比较
 */
declare class EventModule_2 {
    private readonly listeners;
    private debugMode;
    /**
     * 设置调试模式
     * @param enabled 是否启用调试模式
     */
    setDebugMode(enabled: boolean): void;
    /**
     * 订阅事件
     * @param event 事件类型
     * @param callback 回调函数
     */
    on<T = any>(event: EventType, callback: (data: T) => void): void;
    /**
     * 取消订阅事件
     * @param event 事件类型
     * @param callback 要移除的回调函数
     */
    off<T = any>(event: EventType, callback: (data: T) => void): void;
    /**
     * 触发事件
     * @param event 事件类型
     * @param data 事件数据
     */
    trigger(event: EventType | string, data?: any): void;
    /** 清空引擎级订阅，防止销毁后的回调继续持有旧引擎实例。 */
    dispose(): void;
}

/**
 * 事件模块 - 720 全景引擎专用
 * 简化的事件发布/订阅系统
 */
declare class EventModule_3 {
    private listeners;
    /**
     * 订阅事件
     * @param event 事件类型（字符串或枚举）
     * @param callback 回调函数
     */
    on<T = any>(event: string, callback: (data: T) => void): void;
    /**
     * 取消订阅事件
     * @param event 事件类型
     * @param callback 要移除的回调函数
     */
    off<T = any>(event: string, callback: (data: T) => void): void;
    /**
     * 触发事件
     * @param event 事件类型
     * @param data 事件数据
     */
    trigger<T = any>(event: string, data?: T): void;
    /**
     * 移除某个事件的所有监听器
     * @param event 事件类型
     */
    removeAllListeners(event: string): void;
    /**
     * 清空所有事件监听器
     */
    clear(): void;
    /**
     * 获取某个事件的监听器数量
     * @param event 事件类型
     */
    listenerCount(event: string): number;
    /**
     * 销毁事件模块
     */
    dispose(): void;
}

/**
 * Gaussian 事件模块。
 * 使用轻量发布订阅，和 core720 的 EventModule 保持一致的调用体验。
 */
declare class EventModuleGaussian {
    private listeners;
    on<T = any>(event: string, callback: (data: T) => void): void;
    off<T = any>(event: string, callback: (data: T) => void): void;
    trigger<T = any>(event: string, data?: T): void;
    clear(): void;
    dispose(): void;
}

/**
 * 事件类型枚举
 */
export declare enum EventType {
    ModelLoadStart = "model-load-start",
    ModelLoadProgress = "model-load-progress",
    ModelLoaded = "model-loaded",
    ModelError = "model-error",
    SelectionChanged = "selection-changed",// data: { ids: string[], modelId: string }
    HoverChanged = "hover-changed",// data: { id: string | null, point: Vector3 }
    Click = "click",// data: ModelClickEventItem[]
    MouseMove = "mouse-move",// data: MouseEventData - 鼠标移动事件
    ModelPlaceSelected = "model-place-selected",
    ModelCalibrationChanged = "model-calibration-changed",
    CameraChanged = "camera-changed",// 相机移动时持续触发
    CameraIdle = "camera-idle",// 相机静止后触发
    ViewportResize = "viewport-resize",// 窗口大小变化
    EngineFree = "engine-free",
    EngineBusy = "engine-busy",
    MeasureChanged = "measure-changed",
    SectionMove = "section-move",
    LoadingCompleted = "loading_completed"
}

/**
 * 2D 引擎事件系统模块
 * 简化版事件系统，支持发布/订阅模式
 */
/**
 * 事件类型枚举
 */
declare enum EventType2d {
    ModelLoadStart = "model-load-start",
    ModelLoadProgress = "model-load-progress",
    ModelLoaded = "model-loaded",
    ModelLoadError = "model-load-error",
    RenderStart = "render-start",
    RenderEnd = "render-end",
    CameraChanged = "camera-changed",
    CameraReset = "camera-reset",
    SelectionChanged = "selection-changed",
    HoverChanged = "hover-changed",
    EntityClick = "entity-click",
    LayerVisibilityChanged = "layer-visibility-changed",
    LayerColorChanged = "layer-color-changed",
    ViewZoomChanged = "view-zoom-changed",
    ViewPanChanged = "view-pan-changed",
    ToolActivated = "tool-activated",
    ToolDeactivated = "tool-deactivated",
    Error = "error",
    Warning = "warning"
}

/**
 * 720 全景引擎事件类型
 */
declare enum EventType720 {
    PanoramaLoadStart = "panorama-load-start",
    PanoramaLoadProgress = "panorama-load-progress",
    PanoramaLoaded = "panorama-loaded",
    PanoramaLoadError = "panorama-load-error",
    AnnotationClick = "annotation-click",
    AnnotationHover = "annotation-hover",
    AnnotationAdd = "annotation-add",
    AnnotationRemove = "annotation-remove",
    ViewAngleChanged = "view-angle-changed"
}

/**
 * Gaussian 高斯点云引擎事件类型。
 * 事件名前缀保持模块独立，避免和 3D、2D、720 模块冲突。
 */
declare enum EventTypeGaussian {
    LoadStart = "gaussian-load-start",
    LoadProgress = "gaussian-load-progress",
    Loaded = "gaussian-loaded",
    LoadError = "gaussian-load-error",
    SceneRemoved = "gaussian-scene-removed",
    FpsUpdated = "gaussian-fps-updated",
    ViewChanged = "gaussian-view-changed"
}

/**
 * Fabric 鎵规敞绠＄悊鍣細璐熻矗鎵规敞缁樺埗銆佹牱寮忋€佹祴璺濊仈鍔ㄣ€佹埅鍥惧悎鎴愩€? */
declare class FabricDraw {
    private readonly engine;
    private readonly wrapper;
    private readonly canvasEl;
    private readonly canvas;
    private readonly toolbar;
    private isActive;
    private isVisible;
    private isViewLocked;
    private forcePointerThrough;
    private isDistanceMeasureMode;
    private isMeasurePanelExpanded;
    private drawType;
    private mode;
    private currentMeasureType;
    private sessionSnapshot;
    private actionHandlers;
    private drawStyle;
    private startPoint;
    private tempObject;
    private cloudPoints;
    private readonly onMouseDown;
    private readonly onMouseMove;
    private readonly onMouseUp;
    private readonly onMouseDblClick;
    private readonly onSelectionChanged;
    private readonly onKeyDown;
    constructor(engine: any);
    /**
     * 婵€娲荤粯鍒跺姛鑳姐€?     */
    active(mode?: FabricDrawMode): void;
    /**
     * 鍏抽棴缁樺埗鍔熻兘銆?     */
    disActive(): void;
    /**
     * close 涓?disActive 鐨勮涔夊埆鍚嶃€?     */
    close(): void;
    /**
     * 闅愯棌缁樺埗灞傘€?     */
    hide(): void;
    /**
     * 鏄剧ず缁樺埗灞傘€?     */
    show(): void;
    isShown(): boolean;
    setToolbarVisible(visible: boolean): void;
    /**
     * 璁剧疆缁樺埗绫诲瀷鍜屾牱寮忋€?     */
    setDrawType(type: FabricDrawType, style?: Partial<FabricDrawStyle>): void;
    getDrawType(): FabricDrawType;
    /**
     * 璁剧疆鈥滃彇娑?纭畾鈥濆洖璋冦€?     */
    setActionHandlers(handlers: FabricDrawActionHandlers): void;
    /**
     * 图钉捕捉点时临时让批注画布穿透，保证鼠标点击落到三维模型画布上。
     */
    setPointerThrough(enabled: boolean): void;
    /**
     * 鐩存帴缁樺埗绾挎銆?     */
    drawLine(start: FabricDrawPoint, end: FabricDrawPoint, style?: Partial<FabricDrawStyle>): Line;
    /**
     * 鐩存帴缁樺埗绠ご銆?     */
    drawArrow(start: FabricDrawPoint, end: FabricDrawPoint, style?: Partial<FabricDrawStyle>): Group;
    /**
     * 鐩存帴缁樺埗鐭╁舰銆?     */
    drawRect(start: FabricDrawPoint, end: FabricDrawPoint, style?: Partial<FabricDrawStyle>): Rect;
    /**
     * 鐩存帴缁樺埗鍦嗗舰銆?     */
    drawCircle(start: FabricDrawPoint, end: FabricDrawPoint, style?: Partial<FabricDrawStyle>): Circle;
    /**
     * 鐩存帴缁樺埗鏂囧瓧銆?     */
    drawText(point: FabricDrawPoint, text?: string, style?: Partial<FabricDrawStyle>): IText;
    /**
     * 鐩存帴缁樺埗浜戠嚎銆?     */
    drawCloudLine(points: FabricDrawPoint[], style?: Partial<FabricDrawStyle>): Path | null;
    /**
     * 鑾峰彇鎵€鏈夊浘褰€?     */
    getAllShapes(): Record<string, any>;
    /**
     * 娓呯┖鎵€鏈夊浘褰€?     */
    clearAllShapes(): void;
    /**
     * 杩樺師鎵€鏈夊浘褰€?     */
    restoreAllShapes(data: string | Record<string, any>): Promise<void>;
    /**
     * 鎴浘淇濆瓨锛堟ā鍨?Fabric鎵规敞鍚堟垚锛夈€?     */
    saveScreenshot(fileName?: string): string | null;
    /**
     * 鍚屾鐢诲竷灏哄銆?     */
    resize(width?: number, height?: number): void;
    /**
     * 閿€姣併€?     */
    dispose(): void;
    private handleMouseDown;
    private handleMouseMove;
    private handleMouseUp;
    private handleMouseDblClick;
    private handleKeyDown;
    private getPointFromEvent;
    private shouldAppendCloudPoint;
    private createDraftObject;
    private updateDraftObject;
    private mergeStyle;
    private createObjectBase;
    private createLineObject;
    private createRectObject;
    private createCircleObject;
    private createArrowObject;
    private createCloudObject;
    private getBoxFromPoints;
    private getCircleFromPoints;
    /**
     * 灏嗘姌绾跨鏁ｆ垚鈥滈紦鍖呪€濊矾寰勶紝褰㈡垚浜戠嚎瑙嗚鏁堟灉銆?     */
    private buildCloudPath;
    private handleColorInputChange;
    private handleStrokeWidthInputChange;
    private handleFontSizeInputChange;
    private applyCurrentStyleToSelection;
    private applyStyleToObject;
    private syncStyleFromSelection;
    private readStyleFromObject;
    private isTextObject;
    private createTextStyle;
    private getTextOutlineColor;
    private isWhiteTextColor;
    private isInputElement;
    private applyCanvasInteractive;
    private parseNumber;
    private colorToAlpha;
    private toggleMeasurePanel;
    private activateDistanceMeasure;
    private stopDistanceMeasureMode;
    private disActiveMeasureTools;
    private activeMeasureTool;
    private updateOverlayPointerEvents;
    private toggleViewLock;
    private handleCancelClick;
    private handleCloseClick;
    private handleConfirmClick;
    private refreshToolbarStyleValues;
    private refreshToolbarState;
    private createScreenshotFileName;
    private cloneJson;
}

/**
 * Fabric 鎵规敞绠＄悊鍣細璐熻矗鎵规敞缁樺埗銆佹牱寮忋€佹祴璺濊仈鍔ㄣ€佹埅鍥惧悎鎴愩€? */
declare class FabricDraw_2 {
    private readonly engine;
    private readonly wrapper;
    private readonly canvasEl;
    private readonly canvas;
    private readonly toolbar;
    private isActive;
    private isVisible;
    private isViewLocked;
    private forcePointerThrough;
    private isDistanceMeasureMode;
    private isMeasurePanelExpanded;
    private drawType;
    private mode;
    private currentMeasureType;
    private sessionSnapshot;
    private actionHandlers;
    private drawStyle;
    private startPoint;
    private tempObject;
    private cloudPoints;
    private readonly onMouseDown;
    private readonly onMouseMove;
    private readonly onMouseUp;
    private readonly onMouseDblClick;
    private readonly onSelectionChanged;
    private readonly onKeyDown;
    constructor(engine: any);
    /**
     * 婵€娲荤粯鍒跺姛鑳姐€?     */
    active(mode?: FabricDrawMode_2): void;
    /**
     * 鍏抽棴缁樺埗鍔熻兘銆?     */
    disActive(): void;
    /**
     * close 涓?disActive 鐨勮涔夊埆鍚嶃€?     */
    close(): void;
    /**
     * 闅愯棌缁樺埗灞傘€?     */
    hide(): void;
    /**
     * 鏄剧ず缁樺埗灞傘€?     */
    show(): void;
    isShown(): boolean;
    setToolbarVisible(visible: boolean): void;
    /**
     * 璁剧疆缁樺埗绫诲瀷鍜屾牱寮忋€?     */
    setDrawType(type: FabricDrawType_2, style?: Partial<FabricDrawStyle_2>): void;
    getDrawType(): FabricDrawType_2;
    /**
     * 璁剧疆鈥滃彇娑?纭畾鈥濆洖璋冦€?     */
    setActionHandlers(handlers: FabricDrawActionHandlers_2): void;
    /**
     * 图钉捕捉点时临时让批注画布穿透，保证鼠标点击落到三维模型画布上。
     */
    setPointerThrough(enabled: boolean): void;
    /**
     * 鐩存帴缁樺埗绾挎銆?     */
    drawLine(start: FabricDrawPoint_2, end: FabricDrawPoint_2, style?: Partial<FabricDrawStyle_2>): Line;
    /**
     * 鐩存帴缁樺埗绠ご銆?     */
    drawArrow(start: FabricDrawPoint_2, end: FabricDrawPoint_2, style?: Partial<FabricDrawStyle_2>): Group;
    /**
     * 鐩存帴缁樺埗鐭╁舰銆?     */
    drawRect(start: FabricDrawPoint_2, end: FabricDrawPoint_2, style?: Partial<FabricDrawStyle_2>): Rect;
    /**
     * 鐩存帴缁樺埗鍦嗗舰銆?     */
    drawCircle(start: FabricDrawPoint_2, end: FabricDrawPoint_2, style?: Partial<FabricDrawStyle_2>): Circle;
    /**
     * 鐩存帴缁樺埗鏂囧瓧銆?     */
    drawText(point: FabricDrawPoint_2, text?: string, style?: Partial<FabricDrawStyle_2>): IText;
    /**
     * 鐩存帴缁樺埗浜戠嚎銆?     */
    drawCloudLine(points: FabricDrawPoint_2[], style?: Partial<FabricDrawStyle_2>): Path | null;
    /**
     * 鑾峰彇鎵€鏈夊浘褰€?     */
    getAllShapes(): Record<string, any>;
    /**
     * 娓呯┖鎵€鏈夊浘褰€?     */
    clearAllShapes(): void;
    /**
     * 杩樺師鎵€鏈夊浘褰€?     */
    restoreAllShapes(data: string | Record<string, any>): Promise<void>;
    /**
     * 鎴浘淇濆瓨锛堟ā鍨?Fabric鎵规敞鍚堟垚锛夈€?     */
    saveScreenshot(fileName?: string): string | null;
    /**
     * 鍚屾鐢诲竷灏哄銆?     */
    resize(width?: number, height?: number): void;
    /**
     * 閿€姣併€?     */
    dispose(): void;
    private handleMouseDown;
    private handleMouseMove;
    private handleMouseUp;
    private handleMouseDblClick;
    private handleKeyDown;
    private getPointFromEvent;
    private shouldAppendCloudPoint;
    private createDraftObject;
    private updateDraftObject;
    private mergeStyle;
    private createObjectBase;
    private createLineObject;
    private createRectObject;
    private createCircleObject;
    private createArrowObject;
    private createCloudObject;
    private getBoxFromPoints;
    private getCircleFromPoints;
    /**
     * 灏嗘姌绾跨鏁ｆ垚鈥滈紦鍖呪€濊矾寰勶紝褰㈡垚浜戠嚎瑙嗚鏁堟灉銆?     */
    private buildCloudPath;
    private handleColorInputChange;
    private handleStrokeWidthInputChange;
    private handleFontSizeInputChange;
    private applyCurrentStyleToSelection;
    private applyStyleToObject;
    private syncStyleFromSelection;
    private readStyleFromObject;
    private isTextObject;
    private createTextStyle;
    private getTextOutlineColor;
    private isWhiteTextColor;
    private isInputElement;
    private applyCanvasInteractive;
    private parseNumber;
    private colorToAlpha;
    private toggleMeasurePanel;
    private activateDistanceMeasure;
    private stopDistanceMeasureMode;
    private disActiveMeasureTools;
    private activeMeasureTool;
    private updateOverlayPointerEvents;
    private toggleViewLock;
    private handleCancelClick;
    private handleCloseClick;
    private handleConfirmClick;
    private refreshToolbarStyleValues;
    private refreshToolbarState;
    private createScreenshotFileName;
    private cloneJson;
}

declare interface FabricDrawActionHandlers {
    onConfirm?: (data: Record<string, any>) => void;
    onCancel?: () => void;
    onPickPoint?: () => void;
    onClose?: () => void;
}

declare interface FabricDrawActionHandlers_2 {
    onConfirm?: (data: Record<string, any>) => void;
    onCancel?: () => void;
    onPickPoint?: () => void;
    onClose?: () => void;
}

declare type FabricDrawMode = 'view' | 'edit';

declare type FabricDrawMode_2 = 'view' | 'edit';

declare interface FabricDrawPoint {
    x: number;
    y: number;
}

declare interface FabricDrawPoint_2 {
    x: number;
    y: number;
}

declare interface FabricDrawStyle {
    stroke: string;
    strokeWidth: number;
    fill: string;
    fontSize: number;
    text: string;
    cloudRadius: number;
}

declare interface FabricDrawStyle_2 {
    stroke: string;
    strokeWidth: number;
    fill: string;
    fontSize: number;
    text: string;
    cloudRadius: number;
}

declare type FabricDrawType = 'none' | 'line' | 'arrow' | 'rect' | 'circle' | 'text' | 'cloudline';

declare type FabricDrawType_2 = 'none' | 'line' | 'arrow' | 'rect' | 'circle' | 'text' | 'cloudline';

declare class FilterLoaderModel {
    private engine;
    private continusIds;
    constructor(engine: any);
    /**
     * 基于已加载的属性数据构建当前模型的过滤 id 集合。
     * 默认不过滤，业务侧只需要把 shouldFilterId 换成真实规则即可。
     */
    buildContinueIds(url: string): void;
    setContinueIds(url: string, ids: Array<string | number>): void;
    getContinueIds(url: string): number[];
    getContinueIdSet(url: string): Set<number>;
    hasContinueId(url: string, id: string | number): boolean;
    clear(url?: string): void;
    private shouldFilterId;
}

declare class FilterLoaderModel_2 {
    private engine;
    private continusIds;
    constructor(engine: any);
    /**
     * 基于已加载的属性数据构建当前模型的过滤 id 集合。
     * 默认不过滤，业务侧只需要把 shouldFilterId 换成真实规则即可。
     */
    buildContinueIds(url: string): void;
    setContinueIds(url: string, ids: Array<string | number>): void;
    getContinueIds(url: string): number[];
    getContinueIdSet(url: string): Set<number>;
    hasContinueId(url: string, id: string | number): boolean;
    clear(url?: string): void;
    private shouldFilterId;
}

declare interface GaussianFpsInfo {
    fps: number;
    frameTimeMs: number;
    minFps: number;
}

declare type GaussianOrientationPreset = 'identity' | 'x-90' | 'x90' | 'x180' | 'y-90' | 'y90' | 'z-90' | 'z90' | 'z180';

declare type GaussianQuaternion = [number, number, number, number];

declare interface GaussianSceneInfo {
    id: string;
    name: string;
    url: string;
    index: number;
    options: GaussianSceneOptions;
}

declare interface GaussianSceneOptions {
    id?: string;
    name?: string;
    format?: number;
    splatAlphaRemovalThreshold?: number;
    showLoadingUI?: boolean;
    position?: GaussianVector3;
    rotation?: GaussianQuaternion;
    scale?: GaussianVector3;
    progressiveLoad?: boolean;
    onProgress?: (...args: any[]) => void;
    [key: string]: any;
}

declare type GaussianVector3 = [number, number, number];

/**
 * 获取 SDK 内置 public 资源根路径，默认使用版本固定的 CDN。
 */
export declare function getSdkAssetBaseUrl(moduleUrl?: string): string;

/** 独立承载 3D Tiles、地球控制器及其生命周期，不依赖旧 GIS Manager。 */
declare class GIS {
    readonly options: GISOptions;
    readonly engine: GISEngineKernel;
    tiles: TilesRenderer | null;
    loaderModule: LoaderModule_3;
    resourceLoaderModule: GISResourceLoaderModule | null;
    readonly layerManager: GISLayerManager;
    coordinateModule: CoordinateModule | null;
    controls: GlobeControls | null;
    cameraModule: CameraModule | null;
    controllerModule: ControllerModule | null;
    modelPositionManager: ModelPositionManager | null;
    modelCalibrationManager: GISModelCalibrationManager | null;
    label: GISLabelManager | null;
    viewCube: GISMainViewManager | null;
    skyManager: GISSkyManager | null;
    private resizeObserver;
    private removeFrameCallback;
    private previousTime;
    private disposed;
    private baseMapSwitchVersion;
    private activeBaseSource;
    private readonly runtimeEngine;
    constructor(engine: GISEngineKernel, options: GISOptions);
    /** 按 Three.js 官方示例注册插件、定位相机并启动瓦片调度。 */
    initialize(): Promise<this>;
    /** 返回 GIS 是否已完成初始化且尚未销毁。 */
    isInitialized(): boolean;
    /** 兼容旧版业务入口，加载 3D Tiles 并返回稳定模型句柄。 */
    load3DTiles(options: GISLoadTilesetOptions & {
        url: string;
        flyTo?: boolean;
    }): Promise<GISLoadedTileset>;
    /** 统一加载在线 3D Tiles、glTF/GLB、GeoJSON 或 BIM 模型。 */
    loadModel(url: string, options?: GISModelLoadOptions): Promise<GISLoadedModel>;
    /** 加载本地 3D Tiles 文件集、glTF/GLB、GeoJSON 或 BIM 文件包。 */
    loadModelFile(files: File[] | FileList, options?: GISLocalLoadOptions & LoadModelOptions): Promise<GISLoadedModel[]>;
    /** 解析 ViewToken 并通过统一 GIS 资源加载链路加载。 */
    loadModelByViewToken(viewToken: string, options?: GISModelLoadOptions): Promise<GISLoadedModel[]>;
    /** 按统一模型句柄或 id 卸载资源。 */
    removeModel(idOrModel: string | GISLoadedModel): boolean;
    /**
     * 运行时切换 GIS 底图，并保留当前 WGS84 相机视角和业务图层。
     * 新底图加载失败时不会修改当前场景。
     */
    switchBaseMap(source: GISImageId | GISSource): Promise<void>;
    /** 同时支持 3D Tiles 图层 id 和 BIM 模型 URL 的 ENU 校准。 */
    applyCalibration(options: GISModelCalibrationOptions): boolean;
    /** 返回全部 3D Tiles 与 BIM 校准状态。 */
    getModelCalibrationItems(): GISModelCalibrationItem[];
    /** 恢复指定 3D Tiles 或 BIM 模型的校准基准矩阵。 */
    resetModelCalibration(id: string): boolean;
    /** 释放控制器、瓦片缓存、事件以及 v3 引擎持有的 GPU 资源。 */
    dispose(): void;
    private configureControls;
    /** WebGPU 不编译 GlobeControls 内置的 GLSL ShaderMaterial，因此禁用该辅助圆圈。 */
    private disableIncompatiblePivotMarker;
    /** WebGPURenderer 可承载 WebGPU 或 WebGL2，兼容逻辑必须按实际后端判断。 */
    private usesWebGpuBackend;
    private readonly update;
    private readonly updateResolution;
    private readonly requestRender;
    private readonly handleLoadError;
    private getBaseLayerSource;
    private requireResourceLoader;
}

/** GIS 场景可切换的控制器模式。 */
export declare const GISControllerMode: {
    readonly GIS: "gis";
    readonly Default: "default";
    readonly FirstPerson: "first-person";
    readonly ThirdPerson: "third-person";
};

export declare type GISControllerMode = typeof GISControllerMode[keyof typeof GISControllerMode];

export declare interface GISControllerSwitchOptions {
    /** 切回 v3 默认控制器时是否保持当前相机姿态。 */
    preserveCameraPose?: boolean;
    /** 原样透传给 v3 第三人称控制器的配置。 */
    thirdPersonOptions?: unknown;
}

/** GIS 对外统一使用的 WGS84 地理坐标，角度单位为度，高度单位为米。 */
export declare interface GISCoordinate {
    longitude: number;
    latitude: number;
    height?: number;
}

/** XYZ 影像采用的经纬度坐标基准。 */
export declare type GISCoordinateSystem = 'wgs84' | 'gcj02';

export declare interface GISCubeSkyBoxOptions {
    urls: GISSkyBoxUrls;
    /** 背景亮度与环境光强度，默认值为 1。 */
    intensity?: number;
    /** 背景模糊度，取值范围为 0 到 1。 */
    blurriness?: number;
    /** 天空盒绕 Y 轴旋转角度，单位为度。 */
    rotation?: number;
}

export declare type GISEngineKernel = EngineKernelV2 | EngineKernelV3;

export declare interface GISFlyToObjectOptions {
    /** 包围球之外的留白倍率，默认 1.25。 */
    padding?: number;
    /** 相机相对局部地平线的仰角，单位为度，默认 35。 */
    elevation?: number;
}

export declare interface GISFlyToOptions {
    durationMs?: number;
    signal?: AbortSignal;
}

export declare interface GISFlyToTilesetOptions extends GISFlyToObjectOptions {
    /** 等待根瓦片元数据的超时时间，默认 15 秒。 */
    timeoutMs?: number;
}

export declare interface GISHdrSkyBoxOptions {
    /** v3 引擎内置 HDR 标识，默认使用晴朗无云的 4。 */
    id?: string;
    /** HDR 环境光强度，默认值为 0.2。 */
    intensity?: number;
    /** HDR 背景亮度，默认值为 1。 */
    backgroundIntensity?: number;
}

/** 引擎内置影像配置标识。 */
export declare type GISImageId = 'cesium' | 'gd' | 'gd2';

/** 管理 WGS84 GIS 标签，并在可见 GIS/BIM 图层上完成选点。 */
export declare class GISLabelManager {
    private readonly engine;
    private readonly coordinateModule;
    private readonly layerManager;
    private readonly manager;
    private readonly worldToScreen;
    private readonly raycaster;
    constructor(engine: EngineKernelV3, coordinateModule: CoordinateModule, layerManager: GISLayerManager);
    /** 进入一次选点模式，结果同时包含 WGS84 和 Three.js 世界坐标。 */
    pickPoint(): Promise<LabelCoordinate | null>;
    /** 兼容旧版回调式选点。 */
    startPickPoint(callback?: (coordinate: LabelCoordinate | null) => void): Promise<LabelCoordinate | null>;
    /** 创建 GIS 标签；经纬度按 WGS84 解释。 */
    createLabel(options: LabelCreateOptions): string;
    /** 更新指定 GIS 标签。 */
    updateLabel(id: string, options: LabelUpdateOptions): boolean;
    /** 删除指定 GIS 标签。 */
    deleteLabel(id: string): boolean;
    /** deleteLabel 的兼容别名。 */
    removeLabel(id: string): boolean;
    /** 清空全部 GIS 标签。 */
    clearLabels(): void;
    /** 查询单个 GIS 标签。 */
    getLabel(id: string): LabelInstance | undefined;
    /** 查询全部 GIS 标签。 */
    getLabels(): LabelInstance[];
    /** 监听标签点击，并返回取消监听函数。 */
    onLabelClick(callback: LabelClickCallback): () => void;
    /** 取消指定标签点击监听。 */
    offLabelClick(callback: LabelClickCallback): void;
    /** 由 GIS 共享帧循环更新标签屏幕位置。 */
    update(): void;
    /** 释放 DOM、选点监听和标签数据。 */
    dispose(): void;
    private projectCoordinate;
    private resolveWorldCoordinate;
    private pickCoordinate;
    private uniqueObjects;
}

export declare interface GISLayerInfo {
    id: string;
    name: string;
    type: GISLayerType;
    source?: string;
    visible: boolean;
    /** 图层对应的 Three.js 场景对象，供高级业务读取。 */
    object: Object3D;
}

/** 统一登记 GIS 数据图层，并通过场景对象显隐实现无损开关。 */
export declare class GISLayerManager {
    private readonly engine;
    private readonly layers;
    private layerSequence;
    constructor(engine: EngineKernelV3);
    /** 登记图层；不同对象不得复用同一个 id，避免产生无法查询的孤立图层。 */
    registerLayer(registration: GISLayerRegistration): GISLayerInfo;
    /** 查询全部 GIS 图层，返回快照以避免外部修改内部登记信息。 */
    getLayers(): GISLayerInfo[];
    /** 按 id 查询单个 GIS 图层。 */
    getLayer(id: string): GISLayerInfo | null;
    /** 仅合并当前可见的业务模型，避免底图、地形和标注放大回家视角。 */
    getModelBoundingBox(): Box3_2 | null;
    /** 设置图层显隐；图层不存在时返回 false。 */
    setLayerVisible(id: string, visible: boolean): boolean;
    /** 开启指定图层。 */
    showLayer(id: string): boolean;
    /** 关闭指定图层，但保留已加载资源。 */
    hideLayer(id: string): boolean;
    /** 切换指定图层，返回切换后的显隐状态；图层不存在时返回 null。 */
    toggleLayer(id: string): boolean | null;
    /** 注销图层登记，不移除或销毁场景资源。 */
    unregisterLayer(id: string): boolean;
    /** 调用资源所有者的释放回调并移除图层；无释放回调时返回 false。 */
    removeLayer(id: string): boolean;
    /** 清空登记信息；实际资源仍由各自加载器负责释放。 */
    dispose(): void;
    private toInfo;
}

export declare interface GISLayerRegistration {
    /** 未指定时由管理器按图层类型生成。 */
    id?: string;
    name: string;
    type: GISLayerType;
    source?: string;
    object: Object3D;
    /** 由资源所有者提供的释放回调；未提供时图层只允许注销登记。 */
    remove?: () => boolean | void;
}

/** GIS 图层分类；天空和控制器不属于可开关的数据图层。 */
export declare type GISLayerType = 'imagery' | 'tileset' | 'model' | 'vector' | 'custom';

/** 对外稳定的 GIS 模型句柄，避免业务依赖具体加载器内部结构。 */
export declare interface GISLoadedModel {
    id: string;
    name: string;
    type: GISModelType;
    source: string;
    object: Object3D;
    raw?: TilesRenderer | Object3D;
}

/** 3D Tiles 模型句柄。 */
export declare interface GISLoadedTileset extends GISLoadedModel {
    type: '3dtiles';
    raw: TilesRenderer;
}

declare interface GISLoaderTilesetLifecycle {
    onTilesetAdded?(tiles: TilesRenderer, layer: {
        id: string;
        name: string;
        source: string;
    }, ready: boolean): void;
    onTilesetReady?(tiles: TilesRenderer): void;
    onTilesetRemoved?(tiles: TilesRenderer, layerId?: string): void;
}

export declare interface GISLoadTilesetOptions {
    /** 图层管理器中的稳定标识；未指定时自动生成。 */
    id?: string;
    /** 图层列表中的显示名称，默认使用 URL。 */
    name?: string;
    /** 高度偏移，单位为米；局部坐标模式下只改变 Y，不改变水平位置。 */
    heightOffset?: number;
    /** 自定义请求入口，供本地 tileset 文件集映射使用。 */
    fetchData?: (url: string, options?: RequestInit) => Promise<Response>;
}

/** GIS 本地文件加载选项。 */
export declare interface GISLocalLoadOptions {
    id?: string;
    name?: string;
    /** GeoJSON 未提供高度时采用的默认高度，单位为米。 */
    height?: number;
}

/** GIS 局部原点；用于消除地心大坐标在 GPU 中产生的浮点精度抖动。 */
declare interface GISLocalOrigin {
    latitude: number;
    longitude: number;
    height?: number;
}

/** 保存和恢复可持久化的 WGS84 GIS 主视角。 */
export declare class GISMainViewManager {
    private cameraModule;
    private readonly initialView;
    private mainView;
    constructor(cameraModule: CameraModule, initialView: GISView);
    /** 切换底图重建相机模块后更新引用，同时保留已经保存的主视角。 */
    setCameraModule(cameraModule: CameraModule): void;
    /** 保存用户当前实际相机姿态，而不是上一次 API 写入的缓存。 */
    saveMainViewPort(): Required<GISView>;
    /** 设置主视角并立即应用；null 表示清除已保存视角。 */
    setMainViewPort(view: GISView | null): void;
    /** 平滑飞行到已保存的主视角；未保存时保持当前视图。 */
    goToMainPort(options?: GISFlyToOptions): Promise<void>;
    /** 清除主视角并回到初始化视图。 */
    resetMainViewPort(): void;
    /** 查询已保存主视角的独立快照。 */
    getMainViewPort(): Required<GISView> | null;
}

/** 3D Tiles 与 BIM 共用的校准状态快照。 */
export declare interface GISModelCalibrationItem {
    id: string;
    name: string;
    source: string;
    type: GISModelCalibrationTargetType;
    offset: GISModelCalibrationOffset;
    rotation: GISModelCalibrationRotation;
    baseMatrix: number[];
    ready: boolean;
}

/** 使用当地 ENU 坐标统一校准附加 3D Tiles 与普通 BIM 模型。 */
export declare class GISModelCalibrationManager {
    private readonly engine;
    private readonly coordinateModule;
    private readonly records;
    constructor(engine: EngineKernelV3, coordinateModule: CoordinateModule);
    /** 登记附加 3D Tiles；根节点就绪后再冻结加载完成矩阵作为校准基准。 */
    registerTileset(id: string, name: string, source: string, tiles: TilesRenderer, ready?: boolean): GISModelCalibrationItem;
    /** 高度偏移和根瓦片变换完成后，记录最终加载矩阵。 */
    markTilesetReady(tiles: TilesRenderer): boolean;
    /** 登记普通 BIM 模型；模型 URL 默认同时作为校准 id。 */
    registerBimModel(url: string, options?: RegisterBimCalibrationOptions): GISModelCalibrationItem;
    /** 查询全部模型校准状态快照。 */
    getItems(): GISModelCalibrationItem[];
    /** 查询单个模型校准状态。 */
    getItem(id: string): GISModelCalibrationItem | null;
    /**
     * 从基准矩阵应用 ENU 偏移与旋转。
     * 每次都从 baseMatrix 重算，避免滑块连续调整时累计产生水平漂移。
     */
    setTransform(options: GISModelCalibrationOptions): boolean;
    /** 恢复模型登记时的矩阵。 */
    reset(id: string): boolean;
    /** 移除模型的校准记录，不改变模型当前矩阵。 */
    unregister(id: string): boolean;
    /** 释放内部快照，模型资源仍由各自加载器管理。 */
    dispose(): void;
    private createRecord;
    private captureBaseState;
    private readAnchorWorld;
    private buildCalibratedLocalMatrix;
    private applyMatrix;
    private resolveOffset;
    private resolveRotation;
    private numberOrCurrent;
    private emitChanged;
    private cloneItem;
    private zeroOffset;
    private zeroRotation;
}

/** 模型在当地 ENU 坐标系中的平移，单位为米。 */
export declare interface GISModelCalibrationOffset {
    east: number;
    north: number;
    up: number;
}

/** 应用模型校准时允许只修改偏移或旋转中的一部分。 */
export declare interface GISModelCalibrationOptions {
    id: string;
    offset?: Partial<GISModelCalibrationOffset>;
    rotation?: Partial<GISModelCalibrationRotation>;
}

/** 模型在当地 ENU 坐标系中的旋转，单位为度。 */
export declare interface GISModelCalibrationRotation {
    heading: number;
    pitch: number;
    roll: number;
}

export declare type GISModelCalibrationTargetType = '3dtiles' | 'bim';

/** GIS 统一模型加载选项；type 可用于无扩展名 URL 的显式分流。 */
export declare interface GISModelLoadOptions extends GISLocalLoadOptions, LoadModelOptions {
    type?: GISModelType;
    /** 3D Tiles 加载后是否自动跳转，默认 true。 */
    flyTo?: boolean;
    /** 3D Tiles 高度偏移，单位为米。 */
    heightOffset?: number;
}

/** 普通 BIM 模型的 WGS84 定位信息；角度单位为度，高度单位为米。 */
export declare interface GISModelPosition {
    longitude: number;
    latitude: number;
    height?: number;
    heading?: number;
    pitch?: number;
    roll?: number;
}

/** GIS 统一模型类型。 */
export declare type GISModelType = '3dtiles' | 'bim' | 'gltf' | 'geojson';

declare interface GISOptions {
    /** 内置影像配置标识，未指定时使用 Cesium。 */
    imageId?: GISImageId;
    /** 物理天空配置；未提供 sky 与 skyBox 时默认使用内置 HDR 天空盒。 */
    sky?: boolean | GISSkyOptions;
    /** 六面图天空盒配置；指定后优先于物理天空。 */
    skyBox?: GISSkyBoxOptions;
    source?: GISSource;
    initialView?: GISView;
    /** 城市级局部原点；默认使用 initialView 经纬度，传 false 可保留地心坐标。 */
    localOrigin?: false | GISLocalOrigin;
    /** Draco 解码器目录；默认使用 SDK 随包发布的 draco/ 资源，通常无需配置。 */
    dracoDecoderPath?: string;
    /** 屏幕空间误差阈值，越小近地瓦片越精细，默认值为 2。 */
    errorTarget?: number;
    loadSiblings?: boolean;
    /** 是否启用瓦片渐隐；WebGPU GIS 默认关闭以避免父子 LOD 边界漏缝。 */
    fade?: boolean;
    /** 是否保留画质预设中的 TRAA；默认跟随模型画质等级，传 false 可显式关闭。 */
    temporalAntialiasing?: boolean;
    creasedNormals?: boolean;
    creaseAngle?: number;
    onError?: (error: Error) => void;
}

/**
 * 统一加载 GIS 数据资源。
 * 3D Tiles 复用 GIS 瓦片加载器，BIM 复用 v3 模型加载器，避免产生两套模型状态。
 */
export declare class GISResourceLoaderModule {
    private readonly engine;
    private readonly tilesLoader;
    private readonly coordinateModule;
    private readonly layerManager;
    private readonly calibrationManager;
    private readonly resources;
    private readonly pendingBimLoads;
    private sequence;
    private disposed;
    constructor(engine: EngineKernelV3, tilesLoader: LoaderModule_3, coordinateModule: CoordinateModule, layerManager: GISLayerManager, calibrationManager: GISModelCalibrationManager);
    /** 按 URL 加载 3D Tiles、glTF/GLB、GeoJSON 或 v3 BIM 模型。 */
    loadModel(url: string, options?: GISModelLoadOptions): Promise<GISLoadedModel>;
    /**
     * 加载浏览器选择的本地资源文件。
     * 支持 3D Tiles 文件集、glTF/GLB、GeoJSON 和 v3 BIM 包，不包含 SHP。
     */
    loadModelFile(files: File[] | FileList, options?: GISLocalLoadOptions & LoadModelOptions): Promise<GISLoadedModel[]>;
    /** 通过 SDK ViewToken 解析资源，再进入相同的类型分流和生命周期。 */
    loadModelByViewToken(viewToken: string, options?: GISModelLoadOptions): Promise<GISLoadedModel[]>;
    /** 移除统一资源句柄对应的模型和图层。 */
    removeModel(idOrModel: string | GISLoadedModel): boolean;
    /** 查询由本模块加载的全部资源句柄。 */
    getModels(): GISLoadedModel[];
    /** 释放独立资源；3D Tiles 与 BIM 分别交还各自底层加载器卸载。 */
    dispose(): void;
    private loadTileset;
    private loadGltfUrl;
    private loadLocalGltf;
    private parseGltf;
    private loadGeoJsonUrl;
    private createGeoJsonModel;
    private loadBimUrl;
    /** 首次加载指定 URL 的 BIM，并把唯一根对象登记到 GIS 资源与图层管理器。 */
    private loadNewBimUrl;
    private loadLocalBim;
    private addBimModel;
    private addStandaloneModel;
    private track;
    /** 按底层唯一键查找已登记资源，返回快照以免调用方修改内部记录。 */
    private findTrackedModel;
    private loadLocalTileset;
    private disposeObject;
    private inferUrlType;
    private inferResolvedType;
    private isGeoJson;
    private resolveId;
    private normalizeUrl;
    private filePath;
    private baseName;
    private baseNameFromPath;
    private normalizePath;
    private assertUsable;
}

export declare type GISSkyBoxOptions = GISCubeSkyBoxOptions | GISHdrSkyBoxOptions;

/** 六面图顺序固定为：右、左、上、下、前、后。 */
export declare type GISSkyBoxUrls = readonly [string, string, string, string, string, string];

/** 为 GIS 提供内置 HDR、六面图和物理天空三种简单配置。 */
export declare class GISSkyManager {
    private readonly engine;
    private readonly cubeTextureLoader;
    private skyBoxTexture;
    private savedSceneState;
    private skyBoxLoadVersion;
    private skyBoxType;
    constructor(engine: EngineKernelV3);
    /** 应用天空配置；传 false 时关闭并保留资源，便于后续快速恢复。 */
    setSky(option?: boolean | GISSkyOptions): void;
    /** 显示天空，并可同时覆盖预设、参数和环境光强度。 */
    show(options?: GISSkyOptions): void;
    /** 设置内置 HDR 或六面图天空盒，未传配置时使用内置晴空。 */
    setSkyBox(options?: GISSkyBoxOptions): Promise<void>;
    /** 清除天空盒并恢复设置前的场景背景和环境光。 */
    clearSkyBox(): void;
    private releaseCubeSkyBox;
    /** 返回 HDR 或六面图天空盒是否已经应用到场景。 */
    isSkyBoxActive(): boolean;
    /** 隐藏当前天空；天空盒纹理会立即释放，物理天空可按需保留资源。 */
    hide(remove?: boolean): void;
    /** 切换 v3 引擎内置天空预设。 */
    setPreset(preset: GISSkyPreset): void;
    /** 增量修改太阳、云层和大气参数。 */
    setParams(params: GISSkyParams): void;
    /** 设置天空生成的环境光强度。 */
    setIntensity(intensity: number): void;
    /** 返回当前天空是否可见。 */
    isActive(): boolean;
    /** 释放 GIS 天空资源，v3 引擎销毁时仍会执行兜底清理。 */
    dispose(): void;
    private captureSceneState;
    private validateSkyBoxOptions;
    private refreshScene;
}

export declare interface GISSkyOptions {
    preset?: GISSkyPreset;
    params?: GISSkyParams;
    intensity?: number;
}

export declare type GISSkyParams = SkyParams_2;

export declare type GISSkyPreset = SkyPresetName_2;

declare type GISSource = {
    type: 'url';
    url: string;
} | {
    type: 'xyz';
    url: string;
    levels?: number;
    tileDimension?: number;
    /** 默认 WGS84；高德等中国大陆影像应指定为 GCJ-02。 */
    coordinateSystem?: GISCoordinateSystem;
} | {
    type: 'cesium-ion';
    assetId?: string | number;
    autoRefreshToken?: boolean;
    /** 可选的自有 Ion Token；未指定时沿用 SDK 内置的评估 Token。 */
    apiToken?: string;
};

declare interface GISView {
    latitude: number;
    longitude: number;
    height?: number;
    heading?: number;
    pitch?: number;
    roll?: number;
}

/** GIS 场景中的 Three.js 世界坐标。 */
export declare interface GISWorldCoordinate {
    x: number;
    y: number;
    z: number;
}

declare class Grid {
    private readonly engine;
    private rootGroup;
    private isVisible;
    private axes;
    coordinateMapper: (p: GridAxisPoint) => THREE.Vector3;
    constructor(engine: any);
    setData(data?: GridAxisData[]): void;
    setMockData(): void;
    show(): void;
    hide(): void;
    toggle(): void;
    getVisible(): boolean;
    update(): void;
    /**
     * 根据三维点计算所在轴网区间。
     * 支持传入 url 以限定到指定模型，避免多模型场景下轴网串用。
     */
    getLocationByPoint(urlOrPoint: string | THREE.Vector3 | {
        x: number;
        y: number;
        z: number;
    }, point?: THREE.Vector3 | {
        x: number;
        y: number;
        z: number;
    }): GridPointLocation | null;
    dispose(): void;
    private _initRoot;
    private _clearAxes;
    private _buildAxis;
    private _makeCircleSprite;
    /**
     * 优先读取指定 url 对应模型的轴网数据；未指定时退回当前已加载轴网或全部模型轴网。
     */
    private getGridData;
    /**
     * 兼容 getLocationByPoint(point) 和 getLocationByPoint(url, point) 两种调用方式。
     */
    private resolvePointLookupArgs;
    /**
     * 根据 url 查找当前引擎中的目标模型。
     */
    private findModelByUrl;
    /**
     * 将轴网按平面方向自动归并为两个主轴族。
     */
    private buildAxisFamilies;
    private createProjection;
    private normalizeDirection;
    /**
     * 在单个轴族内优先返回点位所属的最近轴网区间，避免落在线上时出现空描述。
     */
    private resolveFamilyLocation;
    /**
     * 点压在轴线上时，选取该轴与最近邻轴组成一个可用区间。
     */
    private pickAxisPairAroundIndex;
    /**
     * 点落在最外侧时，退化为该轴族最接近的一组边界轴，避免整体描述为空。
     */
    private pickNearestBoundaryPair;
    /**
     * 优先将字母轴放在前、数字轴放在后，便于输出 A-B交1-2 这种习惯格式。
     */
    private sortFamiliesForDisplay;
    private getFamilySampleLabel;
    private formatAxisPair;
    private formatGridDescription;
    private compareLabels;
    private isNumericLabel;
    private toVector3;
}

declare class Grid_2 {
    private readonly engine;
    private rootGroup;
    private isVisible;
    private axes;
    coordinateMapper: (p: GridAxisPoint_2) => THREE.Vector3;
    constructor(engine: any);
    setData(data?: GridAxisData_2[]): void;
    setMockData(): void;
    show(): void;
    hide(): void;
    toggle(): void;
    getVisible(): boolean;
    update(): void;
    /**
     * 根据三维点计算所在轴网区间。
     * 支持传入 url 以限定到指定模型，避免多模型场景下轴网串用。
     */
    getLocationByPoint(urlOrPoint: string | THREE.Vector3 | {
        x: number;
        y: number;
        z: number;
    }, point?: THREE.Vector3 | {
        x: number;
        y: number;
        z: number;
    }): GridPointLocation_2 | null;
    dispose(): void;
    private _initRoot;
    private _clearAxes;
    private _buildAxis;
    private _makeCircleSprite;
    /**
     * 优先读取指定 url 对应模型的轴网数据；未指定时退回当前已加载轴网或全部模型轴网。
     */
    private getGridData;
    /**
     * 兼容 getLocationByPoint(point) 和 getLocationByPoint(url, point) 两种调用方式。
     */
    private resolvePointLookupArgs;
    /**
     * 根据 url 查找当前引擎中的目标模型。
     */
    private findModelByUrl;
    /**
     * 将轴网按平面方向自动归并为两个主轴族。
     */
    private buildAxisFamilies;
    private createProjection;
    private normalizeDirection;
    /**
     * 在单个轴族内优先返回点位所属的最近轴网区间，避免落在线上时出现空描述。
     */
    private resolveFamilyLocation;
    /**
     * 点压在轴线上时，选取该轴与最近邻轴组成一个可用区间。
     */
    private pickAxisPairAroundIndex;
    /**
     * 点落在最外侧时，退化为该轴族最接近的一组边界轴，避免整体描述为空。
     */
    private pickNearestBoundaryPair;
    /**
     * 优先将字母轴放在前、数字轴放在后，便于输出 A-B交1-2 这种习惯格式。
     */
    private sortFamiliesForDisplay;
    private getFamilySampleLabel;
    private formatAxisPair;
    private formatGridDescription;
    private compareLabels;
    private isNumericLabel;
    private toVector3;
}

declare interface GridAxisData {
    Id: string;
    Name: string;
    Points: [GridAxisPoint, GridAxisPoint];
}

declare interface GridAxisData_2 {
    Id: string;
    Name: string;
    Points: [GridAxisPoint_2, GridAxisPoint_2];
}

declare interface GridAxisPoint {
    X: number;
    Y: number;
    Z: number;
}

declare interface GridAxisPoint_2 {
    X: number;
    Y: number;
    Z: number;
}

declare interface GridFamilyLocation {
    familyIndex: number;
    description: string;
    startAxisName: string | null;
    endAxisName: string | null;
    axisName: string | null;
    pointOffset: number;
    isOnAxis: boolean;
    isInside: boolean;
}

declare interface GridFamilyLocation_2 {
    familyIndex: number;
    description: string;
    startAxisName: string | null;
    endAxisName: string | null;
    axisName: string | null;
    pointOffset: number;
    isOnAxis: boolean;
    isInside: boolean;
}

declare interface GridPointLocation {
    point: {
        x: number;
        y: number;
        z: number;
    };
    description: string;
    families: GridFamilyLocation[];
    isInside: boolean;
}

declare interface GridPointLocation_2 {
    point: {
        x: number;
        y: number;
        z: number;
    };
    description: string;
    families: GridFamilyLocation_2[];
    isInside: boolean;
}

declare class Ground {
    private engine;
    private currentId;
    private readonly groundGroup;
    private groundMesh;
    /** 当前为官方 Water 水面时为 true，用于 update/dispose 分支 */
    private isWaterAddon;
    private groundY;
    /** 默认水面法线贴图路径（项目内为 public/textture/waternormals.jpg） */
    private static readonly DEFAULT_WATER_NORMALS;
    private groundList;
    constructor(engine: any);
    init(): void;
    /**
     * 切换地面类型
     * @param id  地面 id："0" 无 | "1" 草地 | "2" 混凝土 | "3" 地砖 | "4" 湖面 | "5" 海面
     */
    setGround(id: GroundId, config?: GroundConfig): void;
    /**
     * 设置地面高度（默认 0）
     * @param y  世界空间 Y 坐标
     */
    setHeight(y: number): void;
    /** 获取当前地面高度 */
    getHeight(): number;
    /** 每帧调用，驱动水面动画并与场景阳光/相机同步 */
    update(): void;
    /** 获取地面列表（id + 名称） */
    getGroundList(): Array<{
        id: string;
        names: string[];
    }>;
    /** 获取当前地面 id */
    getCurrentId(): GroundId;
    getVisible(): boolean;
    show(): void;
    hide(): void;
    dispose(): void;
    /**
     * 兼容项目内本地 three 渲染器。
     * 本地渲染器会向 lights uniforms 写入 directional/spot/point 的 shadowMap，
     * 但 npm Water 使用的 three 版本没有把这些 sampler 挂到 UniformsLib['lights'] 上。
     */
    private ensureWaterShadowUniforms;
    private _dispose;
}

declare class Ground_2 {
    private engine;
    private currentId;
    private readonly groundGroup;
    private groundMesh;
    /** 当前为官方 Water 水面时为 true，用于 update/dispose 分支 */
    private isWaterAddon;
    /** 未显式配置太阳方向时，使水面高光跟随场景主定向光。 */
    private syncWaterSunDirection;
    private groundY;
    private readonly lightWorldPosition;
    private readonly lightTargetWorldPosition;
    /** 官网案例使用的水面法线贴图。 */
    private static readonly DEFAULT_WATER_NORMALS;
    private groundList;
    constructor(engine: any);
    init(): void;
    /**
     * 切换地面类型
     * @param id 地面预设 ID，其中“13”为湖面，“14”为海面。
     */
    setGround(id: GroundId_2, config?: GroundConfig_2): void;
    /**
     * 设置地面高度（默认 0）
     * @param y  世界空间 Y 坐标
     */
    setHeight(y: number): void;
    /** 获取当前地面高度 */
    getHeight(): number;
    /** 每帧同步场景主光；水面动画和相机位置由 TSL 节点自动更新。 */
    update(): void;
    /** 获取地面列表（id + 名称） */
    getGroundList(): Array<{
        id: string;
        names: string[];
    }>;
    /** 获取当前地面 id */
    getCurrentId(): GroundId_2;
    getVisible(): boolean;
    show(): void;
    hide(): void;
    dispose(): void;
    private _dispose;
    /** 计算从定向光目标指向光源的单位向量，作为水面的太阳方向。 */
    private getSceneSunDirection;
    /** 水面可见时关闭空闲限帧，保证 TSL 时间节点持续产生平滑波纹。 */
    private updateWaterFrameRateExemption;
}

declare interface GroundConfig {
    /** 地面尺寸（默认 300） */
    size?: number;
    /** 贴图 URL（仅实体地面有效） */
    textureUrl?: string;
    /** 阳光方向（默认斜上方） */
    sunDirection?: THREE.Vector3;
    /** 水面透明度（默认 0.82） */
    opacity?: number;
    /** 水面法线贴图 URL（默认使用 public 下的 waternormals.jpg） */
    waterNormalsUrl?: string;
    /** 水面反射扭曲强度，覆盖预设 */
    distortionScale?: number;
    /** 水面波纹密度（size uniform），覆盖预设 */
    waterSize?: number;
}

declare interface GroundConfig_2 {
    /** 地面尺寸；水面默认 10000，其他地面默认 30000 */
    size?: number;
    /** 贴图 URL（仅实体地面有效） */
    textureUrl?: string;
    /** 阳光方向（默认斜上方） */
    sunDirection?: THREE.Vector3;
    /** 水面透明度，范围 0 至 1（默认 0.92） */
    opacity?: number;
    /** 水面法线贴图 URL（默认使用 public 下的 waternormals.jpg） */
    waterNormalsUrl?: string;
    /** @deprecated 官网 WaterMesh 方案只使用一张法线贴图。 */
    waterNormalsUrl2?: string;
    /** 水体颜色，默认与官网案例一致为 0x001e0f */
    waterColor?: THREE.ColorRepresentation;
    /** 太阳光颜色，默认与官网案例一致为白色 */
    sunColor?: THREE.ColorRepresentation;
    /** 水面反射扭曲强度，覆盖预设 */
    distortionScale?: number;
    /** 水面波纹密度（size uniform），覆盖预设 */
    waterSize?: number;
    /** 反射通道的分辨率倍率，默认与官网 WaterMesh 一致为 0.5 */
    resolutionScale?: number;
    /** @deprecated 官网 WaterMesh 方案不使用定向水流。 */
    flowDirection?: THREE.Vector2;
    /** @deprecated 官网 WaterMesh 方案由内置 time 节点驱动波纹。 */
    flowSpeed?: number;
    /** @deprecated 官网 WaterMesh 使用固定的菲涅尔基础反射率。 */
    reflectivity?: number;
}

declare type GroundId = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "10" | "11" | "12" | "13" | "14";

declare type GroundId_2 = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "10" | "11" | "12" | "13" | "14";

/** GTAO 参数。 */
export declare interface GTAOPostProcessingSettings {
    enabled: boolean;
    resolutionScale: number;
    radius: number;
    thickness: number;
    distanceExponent: number;
    distanceFallOff: number;
    scale: number;
    samples: number;
    useTemporalFiltering: boolean;
}

/**
 * 行为处理器 - 管理引擎的交互行为（鼠标、键盘事件等）
 * @param engine 引擎实例
 * @returns 行为处理器对象
 */
declare function HandelBehaved(engine: any): any;

/**
 * 行为处理器 - 管理引擎的交互行为（鼠标、键盘事件等）
 * @param engine 引擎实例
 * @returns 行为处理器对象
 */
declare function HandelBehaved_2(engine: any): any;

declare class Hdr {
    private engine;
    private currentHdrId;
    private isVisible;
    private currentIntensity;
    private currentBackgroundIntensity;
    private currentTexture;
    private currentEnvironmentTexture;
    private skybox;
    private readonly textureCache;
    private previousBackground;
    private previousEnvironment;
    private previousBackgroundIntensity;
    private previousEnvironmentIntensity;
    private previousAmbientLightIntensity;
    private previousToneMapping;
    private previousToneMappingExposure;
    private readonly hdrList;
    constructor(engine: any);
    getHdrList(): HdrItem[];
    setHdr(id: string): Promise<void>;
    setVisible(visible: boolean): void;
    getCurrentHdrId(): string;
    getVisible(): boolean;
    setIntensity(intensity: number): void;
    /** 设置 HDR 背景亮度，不改变场景材质使用的环境光强度。 */
    setBackgroundIntensity(intensity: number): void;
    getIntensity(): number;
    getBackgroundIntensity(): number;
    addHdrItem(item: HdrItem): void;
    dispose(): void;
    private _loadHdr;
    private _applyTexture;
    private _captureSceneState;
    private _createSkybox;
    private _updateSkyboxIntensity;
    private _removeSkybox;
    private _clearHdr;
    private _getAmbientLightIntensity;
    private _setAmbientLightIntensity;
    private _getHdrAmbientLightIntensity;
    private _requestRender;
}

declare class Hdr_2 {
    private engine;
    private currentHdrId;
    private isVisible;
    private currentIntensity;
    private currentBackgroundIntensity;
    private currentTexture;
    private currentEnvironmentTexture;
    private readonly textureCache;
    private previousBackground;
    private previousEnvironment;
    private previousBackgroundIntensity;
    private previousEnvironmentIntensity;
    private previousAmbientLightIntensity;
    private previousToneMapping;
    private previousToneMappingExposure;
    private readonly hdrList;
    constructor(engine: any);
    getHdrList(): HdrItem_2[];
    setHdr(id: string): Promise<void>;
    setVisible(visible: boolean): void;
    getCurrentHdrId(): string;
    getVisible(): boolean;
    setIntensity(intensity: number): void;
    /** 设置 HDR 背景亮度，不改变场景材质使用的环境光强度。 */
    setBackgroundIntensity(intensity: number): void;
    getIntensity(): number;
    getBackgroundIntensity(): number;
    addHdrItem(item: HdrItem_2): void;
    dispose(): void;
    private _loadHdr;
    private _applyTexture;
    private _captureSceneState;
    private _clearHdr;
    private _getAmbientLightIntensity;
    private _setAmbientLightIntensity;
    private _getHdrAmbientLightIntensity;
    private _requestRender;
}

declare interface HdrItem {
    id: string;
    names: string[];
    url?: string;
}

declare interface HdrItem_2 {
    id: string;
    names: string[];
    url?: string;
}

/** 当前高亮构件状态，ids 与 guids 按索引一一对应。 */
export declare interface HighlightModelState {
    url: string;
    ids: any[];
    guids: string[];
}

/** 当前高亮构件状态，ids 与 guids 按索引一一对应。 */
declare interface HighlightModelState_2 {
    url: string;
    ids: any[];
    guids: string[];
}

declare class HoverHighLight {
    private engine;
    private overlayMaterial;
    private overlayMeshes;
    private animState;
    private animStartTime;
    private static readonly FADE_IN_MS;
    private static readonly FADE_OUT_MS;
    private tagDiv;
    constructor(engine: any);
    showModelNameTag(model: any, originPosition: any): void;
    init(): void;
    /**
     * 高亮一个或多个网格，在原模型同位置叠加亮化覆盖层（原模型不受修改）
     * @param meshes  目标网格或网格数组，传 null/[] 则触发淡出清除
     * @param color   叠加颜色（默认白色 0xffffff，越亮越明显）
     * @param intensity 叠加强度 0~1（默认 0.35）
     */
    hightMesh(meshes: THREE.Mesh | THREE.Mesh[] | null, color?: THREE.ColorRepresentation, intensity?: number): void;
    /**
     * 触发淡出动画，结束后自动从场景中移除所有覆盖层
     */
    clearHighlight(): void;
    /**
     * 每帧更新动画 — 由引擎 animate 循环调用
     */
    update(): void;
    /** 仅在悬浮高亮动画实际进行时解除空闲限帧。 */
    private setAnimationFrameRateExempt;
    /** 从场景中移除所有覆盖层（不 dispose geometry，因为与原始 mesh 共享） */
    private removeOverlayMeshes;
    /** 缓出二次方 */
    private easeOutQuad;
    /** 销毁，释放 GPU 资源 */
    dispose(): void;
}

declare class HoverHighLight_2 {
    private engine;
    private overlayMaterial;
    private overlayGroup;
    private overlayMeshes;
    private animState;
    private animStartTime;
    private static readonly FADE_IN_MS;
    private static readonly FADE_OUT_MS;
    private tagDiv;
    constructor(engine: any);
    showModelNameTag(model: any, originPosition: any): void;
    init(): void;
    /** 同步当前剖切模式使用的平面，保证独立 hover 掩码只包含未被裁掉的几何。 */
    syncClippingPlanes(planes?: THREE.Plane[]): void;
    /**
     * 高亮一个或多个网格，在原模型同位置生成轮廓掩码（原模型不受修改）
     * @param meshes  目标网格或网格数组，传 null/[] 则触发淡出清除
     * @param color   轮廓颜色（默认白色 0xffffff）
     * @param intensity 轮廓强度 0~1（默认 0.15）
     */
    hightMesh(meshes: THREE.Mesh | THREE.Mesh[] | null, color?: THREE.ColorRepresentation, intensity?: number): void;
    /**
     * 触发淡出动画，结束后自动从场景中移除所有覆盖层
     */
    clearHighlight(): void;
    /**
     * 每帧更新动画 — 由引擎 animate 循环调用
     */
    update(): void;
    /** 仅在悬浮高亮动画实际进行时解除空闲限帧。 */
    private setAnimationFrameRateExempt;
    /** 从场景中移除所有轮廓掩码并释放克隆几何体。 */
    private removeOverlayMeshes;
    /** 缓出二次方 */
    private easeOutQuad;
    /** 销毁，释放 GPU 资源 */
    dispose(): void;
}

declare interface ICameraPose {
    type: CameraType;
    position: {
        x: number;
        y: number;
        z: number;
    };
    rotation: {
        x: number;
        y: number;
        z: number;
    };
    quaternion: {
        x: number;
        y: number;
        z: number;
        w: number;
    };
    up?: {
        x: number;
        y: number;
        z: number;
    };
    target?: {
        x: number;
        y: number;
        z: number;
    };
    origin?: {
        x: number;
        y: number;
        z: number;
    };
    referenceUp?: {
        x: number;
        y: number;
        z: number;
    };
    viewRight?: {
        x: number;
        y: number;
        z: number;
    };
    zoom?: number;
    orthographicHeight?: number;
}

declare interface ICameraPose_2 {
    type: CameraType_2;
    position: {
        x: number;
        y: number;
        z: number;
    };
    rotation: {
        x: number;
        y: number;
        z: number;
    };
    quaternion: {
        x: number;
        y: number;
        z: number;
        w: number;
    };
    up?: {
        x: number;
        y: number;
        z: number;
    };
    target?: {
        x: number;
        y: number;
        z: number;
    };
    origin?: {
        x: number;
        y: number;
        z: number;
    };
    referenceUp?: {
        x: number;
        y: number;
        z: number;
    };
    viewRight?: {
        x: number;
        y: number;
        z: number;
    };
    zoom?: number;
    orthographicHeight?: number;
}

declare interface IClippingBoxState {
    minX: number;
    minY: number;
    minZ: number;
    maxX: number;
    maxY: number;
    maxZ: number;
}

declare interface IClippingBoxState_2 {
    minX: number;
    minY: number;
    minZ: number;
    maxX: number;
    maxY: number;
    maxZ: number;
}

declare interface IClippingFaceState {
    normal: IPoint3;
    distance: number;
    direction: number;
}

declare interface IClippingFaceState_2 {
    normal: IPoint3_2;
    distance: number;
    direction: number;
}

declare interface IClippingState {
    mode: string;
    fillCutFace: boolean;
    box?: IClippingBoxState;
    face?: IClippingFaceState;
}

declare interface IClippingState_2 {
    mode: string;
    fillCutFace: boolean;
    box?: IClippingBoxState_2;
    face?: IClippingFaceState_2;
}

/**
 * 图标标注配置
 */
declare interface IconAnnotationConfig {
    type: AnnotationType720.ICON;
    position: AnnotationPosition;
    iconUrl: string;
    size?: {
        width: number;
        height: number;
    };
    tooltip?: string;
    metadata?: any;
}

declare interface IDrawingPinCapturePoint extends IPoint3 {
    type?: string;
}

declare interface IDrawingPinCapturePoint_2 extends IPoint3_2 {
    type?: string;
}

declare interface IDrawingPinState {
    cameraPose: ICameraPose_2 | null;
    clipping: IClippingState;
    measureData: Record<string, any> | null;
    annotationData: Record<string, any> | null;
    capturePoint?: IDrawingPinCapturePoint | null;
}

declare interface IDrawingPinState_2 {
    cameraPose: ICameraPose | null;
    clipping: IClippingState_2;
    measureData: Record<string, any> | null;
    annotationData: Record<string, any> | null;
    capturePoint?: IDrawingPinCapturePoint_2 | null;
}

/**
 * 资源加载模块接口
 * 负责模型文件的加载、卸载以及多模型场景下的空间管理。
 */
export declare interface ILoaderModule {
    /**
     * 加载模型
     * @param url 模型文件的 URL (.gltf, .glb, .bim, etc.)
     * @param options 加载配置选项
     * @returns Promise，解析为加载完成的模型对象
     */
    loadModel(url: string, options?: LoadModelOptions): Promise<IModel>;
    loadModels(urls: string[], options?: LoadModelOptions): Promise<void>;
    loadModelFile(files: File[], options?: LoadModelOptions): Promise<void>;
    /**
     * 卸载指定模型
     * @param url 加载模型时使用的 URL
     */
    unloadModel(url: string): void;
    /**
     * 获取当前场景中所有已加载的模型
     */
    getAllModels(): IModel[];
    /**
     * 获取指定模型
     */
    getModel(modelId: string): IModel | undefined;
}

/**
 * 运行时模型对象接口
 */
export declare interface IModel {
    readonly id: string;
    readonly uuid: string;
    name: string;
    visible: boolean;
    /** 获取模型的包围盒 */
    getBoundingBox(): Box3;
    /** 更新模型矩阵 */
    setMatrix(matrix: number[]): void;
}

declare class InteractionModule {
    private engine;
    private behavior;
    private isCtrlDown;
    private isShiftDown;
    private hoverOldId;
    private timeOutEvent;
    private selectionBox;
    private isBoxSelecting;
    private selectionStart;
    private selectionEnd;
    private suppressClickOnce;
    private readonly selectionThreshold;
    private readonly tempInstanceMatrix;
    private readonly tempScale;
    constructor(engine: any);
    init(): void;
    active(): void;
    disActive(): void;
    dispose(): void;
    handelKeyCtrlUp(): void;
    handelKeyCtrlDown(): void;
    handelKeyShiftUp(): void;
    handelKeyShiftDown(): void;
    handleMouseDown(event: any): void;
    handelKeyEscDown(): void;
    handleMouseMove(event: any): void;
    handleMouseUp(event: any): void;
    getCatchMeshs(event: any, retainShow?: boolean): THREE.Mesh<THREE.BufferGeometry<THREE.NormalBufferAttributes, THREE.BufferGeometryEventMap>, THREE.Material<THREE.MaterialEventMap> | THREE.Material<THREE.MaterialEventMap>[], THREE.Object3DEventMap>[] | null;
    handleMouseClick(event: any): void;
    /** 根据模型地址和运行时节点 ID 获取点击构件的 GUID。 */
    private getNodeGuid;
    handleMouseDoubleClick(event: any): void;
    private clearModelHighlightBeforeCameraFlight;
    /** 单击选中后用构件世界包围盒建立控制器速度参照，不改变当前相机姿态。 */
    private setSelectionReference;
    handleMouseClickInstance(raycaster: any): any;
    private ensureSelectionBox;
    private updateSelectionBox;
    private hideSelectionBox;
    private cancelBoxSelection;
    private clearHoverTimeout;
    private clearHoverFeedback;
    private suppressClickForCurrentTick;
    private hasSelectionBox;
    private getSelectionRect;
    private isContainMode;
    private isBoxSelectionModifierDown;
    private isBoxDeselectMode;
    private collectModelsInSelection;
    private getIgnoredSelectionIdsByUrl;
    private isBoxVisibleUnderClipping;
    private getActiveClippingPlanes;
    private applyBoxSelection;
    private applyBoxDeselection;
    private excludeHighlightedModels;
    private keepHighlightedModels;
    private removeModelsFromHighlightState;
    private getNodeWorldBox;
    /**
     * 获取 hover 用的构件网格；实例节点可能同时保留 infos，必须优先按实例索引处理。
     */
    private getNodeCatchMeshes;
    private createInstanceCatchMesh;
    private getInstanceWorldBox;
    private projectBoxToScreenRect;
    private containsRect;
    private intersectsRect;
    private getMergedBox;
    private getSceneModel;
    /** 从射线命中的对象还原真实构件 ID，兼容炸开代理和普通模型对象。 */
    private getHitModelId;
    private getEngineNode;
}

declare class InteractionModule2d {
    private engine;
    private behavior;
    private mouseCoordUI;
    constructor(engine: any);
    init(): void;
    active(): void;
    disActive(): void;
    private oldId;
    handleMouseMove(event: any): void;
    handelKeyEscDown(_event: any): void;
    /** 空白处双击恢复到当前工作空间的适配视角，不影响双击图元的后续扩展。 */
    handleMouseDoubleClick(event: any): void;
    handleMouseClick(event: any): void;
    /** 图层隐藏的图元不允许 hover 高亮和点击选中。 */
    private isModelInteractive;
    /** 布局空间只有打开二三维构件联动时才响应构件 hover 和点击。 */
    private canHandleElementInteraction;
    dispose(): void;
}

declare class InteractionModule_2 {
    private engine;
    private behavior;
    private isCtrlDown;
    private isShiftDown;
    private hoverOldId;
    private timeOutEvent;
    private selectionBox;
    private isBoxSelecting;
    private selectionStart;
    private selectionEnd;
    private suppressClickOnce;
    private readonly selectionThreshold;
    private readonly tempInstanceMatrix;
    private readonly tempScale;
    constructor(engine: any);
    init(): void;
    active(): void;
    disActive(): void;
    dispose(): void;
    handelKeyCtrlUp(): void;
    handelKeyCtrlDown(): void;
    handelKeyShiftUp(): void;
    handelKeyShiftDown(): void;
    handleMouseDown(event: any): void;
    handelKeyEscDown(): void;
    handleMouseMove(event: any): void;
    handleMouseUp(event: any): void;
    getCatchMeshs(event: any, retainShow?: boolean): THREE.Mesh<THREE.BufferGeometry<THREE.NormalBufferAttributes, THREE.BufferGeometryEventMap>, THREE.Material<THREE.MaterialEventMap> | THREE.Material<THREE.MaterialEventMap>[], THREE.Object3DEventMap>[] | null;
    handleMouseClick(event: any): void;
    /** 根据模型地址和运行时节点 ID 获取点击构件的 GUID。 */
    private getNodeGuid;
    handleMouseDoubleClick(event: any): void;
    private clearModelHighlightBeforeCameraFlight;
    /** 单击选中后用构件世界包围盒建立控制器速度参照，不改变当前相机姿态。 */
    private setSelectionReference;
    handleMouseClickInstance(raycaster: any): any;
    private ensureSelectionBox;
    private updateSelectionBox;
    private hideSelectionBox;
    private cancelBoxSelection;
    private clearHoverTimeout;
    private clearHoverFeedback;
    private suppressClickForCurrentTick;
    private hasSelectionBox;
    private getSelectionRect;
    private isContainMode;
    private isBoxSelectionModifierDown;
    private isBoxDeselectMode;
    private collectModelsInSelection;
    private getIgnoredSelectionIdsByUrl;
    private isBoxVisibleUnderClipping;
    private getActiveClippingPlanes;
    private applyBoxSelection;
    private applyBoxDeselection;
    private excludeHighlightedModels;
    private keepHighlightedModels;
    private removeModelsFromHighlightState;
    private getNodeWorldBox;
    /**
     * 获取 hover 用的构件网格；实例节点可能同时保留 infos，必须优先按实例索引处理。
     */
    private getNodeCatchMeshes;
    private createInstanceCatchMesh;
    private getInstanceWorldBox;
    private projectBoxToScreenRect;
    private containsRect;
    private intersectsRect;
    private getMergedBox;
    private getSceneModel;
    /** 从射线命中的对象还原真实构件 ID，兼容炸开代理和普通模型对象。 */
    private getHitModelId;
    private getEngineNode;
}

/**
 * 交互灵敏度等动态配置
 */
declare interface InteractionOptions720 {
    rotateSpeed?: number;
    zoomSpeed?: number;
    enableDamping?: boolean;
    dampingFactor?: number;
    enableRotate?: boolean;
    enableZoom?: boolean;
    minFov?: number;
    maxFov?: number;
}

/** 漫游播放配置；duration 仅统计运动时间，不包含关键帧停留时间。 */
declare interface IPlayOptions {
    duration?: number;
    speed?: number;
    playbackRate?: number;
    /** @deprecated 保留旧调用兼容，当前时间轴固定按距离分配。 */
    timing?: RoamingTimingMode;
    /** @deprecated 保留旧调用兼容，当前位置固定使用直线插值。 */
    positionInterpolation?: RoamingPositionInterpolation;
    /** @deprecated 保留旧调用兼容，当前朝向固定使用方向向量线性插值。 */
    rotationInterpolation?: RoamingRotationInterpolation;
    /** @deprecated 保留旧调用兼容，当前播放固定使用线性时间。 */
    easing?: RoamingEasing;
    /** @deprecated 当前播放不再生成平滑曲线。 */
    smoothTension?: number;
    /** @deprecated 旋转量不再参与移动时长计算。 */
    rotationWeight?: number;
    loop?: boolean;
    loopMode?: RoamingLoopMode;
    loopCount?: number;
    direction?: RoamingDirection;
    maxFrameDelta?: number;
    onUpdate?: (state: IRoamingPlaybackState) => void;
    onPointComplete?: (pointIndex: number) => void;
    onLoop?: (loopIndex: number) => void;
    onComplete?: () => void;
    onStateChange?: (state: IRoamingPlaybackState) => void;
    onError?: (error: Error) => void;
}

/** 漫游播放配置；duration 仅统计运动时间，不包含关键帧停留时间。 */
declare interface IPlayOptions_2 {
    duration?: number;
    speed?: number;
    playbackRate?: number;
    /** @deprecated 保留旧调用兼容，当前时间轴固定按距离分配。 */
    timing?: RoamingTimingMode_2;
    /** @deprecated 保留旧调用兼容，当前位置固定使用直线插值。 */
    positionInterpolation?: RoamingPositionInterpolation_2;
    /** @deprecated 保留旧调用兼容，当前朝向固定使用方向向量线性插值。 */
    rotationInterpolation?: RoamingRotationInterpolation_2;
    /** @deprecated 保留旧调用兼容，当前播放固定使用线性时间。 */
    easing?: RoamingEasing_2;
    /** @deprecated 当前播放不再生成平滑曲线。 */
    smoothTension?: number;
    /** @deprecated 旋转量不再参与移动时长计算。 */
    rotationWeight?: number;
    loop?: boolean;
    loopMode?: RoamingLoopMode_2;
    loopCount?: number;
    direction?: RoamingDirection_2;
    maxFrameDelta?: number;
    onUpdate?: (state: IRoamingPlaybackState_2) => void;
    onPointComplete?: (pointIndex: number) => void;
    onLoop?: (loopIndex: number) => void;
    onComplete?: () => void;
    onStateChange?: (state: IRoamingPlaybackState_2) => void;
    onError?: (error: Error) => void;
}

declare interface IPoint3 {
    x: number;
    y: number;
    z: number;
}

declare interface IPoint3_2 {
    x: number;
    y: number;
    z: number;
}

/** 对外只读的播放状态快照。 */
declare interface IRoamingPlaybackState {
    status: RoamingStatus;
    progress: number;
    currentTime: number;
    totalTime: number;
    playbackRate: number;
    loopIndex: number;
    fromPointIndex: number | null;
    toPointIndex: number | null;
}

/** 对外只读的播放状态快照。 */
declare interface IRoamingPlaybackState_2 {
    status: RoamingStatus_2;
    progress: number;
    currentTime: number;
    totalTime: number;
    playbackRate: number;
    loopIndex: number;
    fromPointIndex: number | null;
    toPointIndex: number | null;
}

/** 单个漫游关键帧，duration 表示从上一关键帧到当前关键帧的运动时长。 */
declare interface IRoamingPoint extends ICameraPose {
    id?: string;
    name?: string;
    stayTime?: number;
    duration?: number;
    easing?: RoamingEasing;
}

/** 单个漫游关键帧，duration 表示从上一关键帧到当前关键帧的运动时长。 */
declare interface IRoamingPoint_2 extends ICameraPose_2 {
    id?: string;
    name?: string;
    stayTime?: number;
    duration?: number;
    easing?: RoamingEasing_2;
}

declare interface IssueCameraPose {
    position: IssuePoint;
    forwardDirection: IssuePoint;
    upDirection: IssuePoint;
}

declare interface IssueCameraPose_2 {
    position: IssuePoint_2;
    forwardDirection: IssuePoint_2;
    upDirection: IssuePoint_2;
}

declare interface IssueContext {
    url?: string;
    point: IssuePoint;
    grid: GridPointLocation | null;
    level: LevelLocationResult | null;
}

declare interface IssueContext_2 {
    url?: string;
    point: IssuePoint_2;
    grid: GridPointLocation_2 | null;
    level: LevelLocationResult_2 | null;
}

declare interface IssuePoint {
    x: number;
    y: number;
    z: number;
}

declare interface IssuePoint_2 {
    x: number;
    y: number;
    z: number;
}

declare class IssueReport {
    private readonly engine;
    constructor(engine: any);
    /**
     * 鏍规嵁鏋勪欢淇℃伅鎻愬彇涓績鐐癸紝骞剁粍瑁呴棶棰樹笂鎶ユ墍闇€鐨勬暟鎹€?
     */
    getMoldePosition(model: any): {
        Floor: string;
        Axis: string;
        ElementId: any;
        ElementName: string;
        modelJson: {
            url: any;
            ids: any[];
            point: IssuePoint;
            camera: IssueCameraPose;
            cameraRestorePose: ICameraPose;
        };
    } | null;
    /**
     * 鐩告満鍥炲鍒版寚瀹氫綅缃?
     * @param item
     */
    jumptoCamera(item: any): void;
    /**
     * 缁熶竴褰掍竴鍖栭棶棰樼偣鍧愭爣锛屼究浜庝笂灞傜洿鎺ユ寔涔呭寲銆?
     */
    getPoint(point: THREE.Vector3 | IssuePoint): IssuePoint;
    /**
     * 璇箟鍖栧埆鍚? 鑾峰彇妯″瀷涓殑闂鐐逛綅缃€?
     */
    getModelPosition(point: THREE.Vector3 | IssuePoint): IssuePoint;
    /**
     * 姹囨€婚棶棰樼偣鎵€鍦ㄧ殑杞寸綉鍜屾爣楂樹笂涓嬫枃銆?
     * 鏀寔浼犲叆 url 浠ラ檺瀹氬埌鎸囧畾妯″瀷锛岄伩鍏嶅妯″瀷鍦烘櫙涓嬫煡璇笉鍑嗙‘銆?
     */
    getPointContext(urlOrPoint: string | THREE.Vector3 | IssuePoint, point?: THREE.Vector3 | IssuePoint): IssueContext;
    /**
     * 鑾峰彇闂涓婃姤闇€瑕佺殑绠€鍖栫浉鏈哄弬鏁般€?
     * 鍙繑鍥炵浉鏈轰綅缃€佹湞鍚戝拰椤堕儴鏂瑰悜銆?
     */
    getCameraPose(): IssueCameraPose;
    /**
     * 璇箟鍖栧埆鍚? 鑾峰彇褰撳墠鐩告満鍙傛暟銆?
     */
    getCameraParams(): IssueCameraPose;
    /**
     * 鑾峰彇瀹屾暣鐩告満濮挎€侊紝涓撻棬鐢ㄤ簬瑙嗚鎭㈠銆?
     */
    getCameraRestorePose(): ICameraPose;
    /**
     * 鎭㈠鐩告満鍒版寚瀹氬畬鏁村Э鎬併€?
     */
    restoreCameraPose(pose: ICameraPose): void;
    /**
     * 涓€娆℃€ф姄鍙栭棶棰樼偣涓婁笅鏂囥€佺畝鍖栫浉鏈哄弬鏁板拰鎭㈠鐢ㄥЭ鎬併€?
     */
    capture(point: THREE.Vector3 | IssuePoint): IssueSnapshot;
    /**
     * 鐩存帴浼犲叆妯″瀷 url 鍜岄棶棰樼偣锛岃繑鍥炲彲鐢ㄤ簬闂涓婃姤鐨勫畬鏁村揩鐓с€?
     */
    captureByUrlAndPoint(url: string, point: THREE.Vector3 | IssuePoint): IssueSnapshotWithUrl;
    /**
     * 鎸夋寚瀹氭ā鍨?url 鎶撳彇闂鐐逛笂涓嬫枃銆佺畝鍖栫浉鏈哄弬鏁板拰鎭㈠鐢ㄥЭ鎬併€?
     */
    captureWithUrl(url: string, point: THREE.Vector3 | IssuePoint): IssueSnapshot;
    /**
     * 鏀寔鐩存帴浼犲畬鏁村揩鐓ф垨鍗曠嫭瀹屾暣濮挎€佽繘琛屾仮澶嶃€?
     */
    restore(snapshotOrPose: IssueSnapshot | ICameraPose): void;
    dispose(): void;
    /**
     * 鍏煎 getPointContext(point) 鍜?getPointContext(url, point) 涓ょ璋冪敤鏂瑰紡銆?
     */
    private resolvePointLookupArgs;
    private resolveModelJson;
    private highlightIssueModel;
    private restoreIssueCameraPose;
    private zoomToIssueModel;
    private syncOrbitOrigin;
    private toVector3;
    private resolveFocusPoint;
    private resolveModelBox;
    private normalizeRestorePose;
    private buildSafeUpDirection;
}

declare class IssueReport_2 {
    private readonly engine;
    constructor(engine: any);
    /**
     * 鏍规嵁鏋勪欢淇℃伅鎻愬彇涓績鐐癸紝骞剁粍瑁呴棶棰樹笂鎶ユ墍闇€鐨勬暟鎹€?
     */
    getMoldePosition(model: any): {
        Floor: string;
        Axis: string;
        ElementId: any;
        ElementName: string;
        modelJson: {
            url: any;
            ids: any[];
            point: IssuePoint_2;
            camera: IssueCameraPose_2;
            cameraRestorePose: ICameraPose_2;
        };
    } | null;
    /**
     * 鐩告満鍥炲鍒版寚瀹氫綅缃?
     * @param item
     */
    jumptoCamera(item: any): void;
    /**
     * 缁熶竴褰掍竴鍖栭棶棰樼偣鍧愭爣锛屼究浜庝笂灞傜洿鎺ユ寔涔呭寲銆?
     */
    getPoint(point: THREE.Vector3 | IssuePoint_2): IssuePoint_2;
    /**
     * 璇箟鍖栧埆鍚? 鑾峰彇妯″瀷涓殑闂鐐逛綅缃€?
     */
    getModelPosition(point: THREE.Vector3 | IssuePoint_2): IssuePoint_2;
    /**
     * 姹囨€婚棶棰樼偣鎵€鍦ㄧ殑杞寸綉鍜屾爣楂樹笂涓嬫枃銆?
     * 鏀寔浼犲叆 url 浠ラ檺瀹氬埌鎸囧畾妯″瀷锛岄伩鍏嶅妯″瀷鍦烘櫙涓嬫煡璇笉鍑嗙‘銆?
     */
    getPointContext(urlOrPoint: string | THREE.Vector3 | IssuePoint_2, point?: THREE.Vector3 | IssuePoint_2): IssueContext_2;
    /**
     * 鑾峰彇闂涓婃姤闇€瑕佺殑绠€鍖栫浉鏈哄弬鏁般€?
     * 鍙繑鍥炵浉鏈轰綅缃€佹湞鍚戝拰椤堕儴鏂瑰悜銆?
     */
    getCameraPose(): IssueCameraPose_2;
    /**
     * 璇箟鍖栧埆鍚? 鑾峰彇褰撳墠鐩告満鍙傛暟銆?
     */
    getCameraParams(): IssueCameraPose_2;
    /**
     * 鑾峰彇瀹屾暣鐩告満濮挎€侊紝涓撻棬鐢ㄤ簬瑙嗚鎭㈠銆?
     */
    getCameraRestorePose(): ICameraPose_2;
    /**
     * 鎭㈠鐩告満鍒版寚瀹氬畬鏁村Э鎬併€?
     */
    restoreCameraPose(pose: ICameraPose_2): void;
    /**
     * 涓€娆℃€ф姄鍙栭棶棰樼偣涓婁笅鏂囥€佺畝鍖栫浉鏈哄弬鏁板拰鎭㈠鐢ㄥЭ鎬併€?
     */
    capture(point: THREE.Vector3 | IssuePoint_2): IssueSnapshot_2;
    /**
     * 鐩存帴浼犲叆妯″瀷 url 鍜岄棶棰樼偣锛岃繑鍥炲彲鐢ㄤ簬闂涓婃姤鐨勫畬鏁村揩鐓с€?
     */
    captureByUrlAndPoint(url: string, point: THREE.Vector3 | IssuePoint_2): IssueSnapshotWithUrl_2;
    /**
     * 鎸夋寚瀹氭ā鍨?url 鎶撳彇闂鐐逛笂涓嬫枃銆佺畝鍖栫浉鏈哄弬鏁板拰鎭㈠鐢ㄥЭ鎬併€?
     */
    captureWithUrl(url: string, point: THREE.Vector3 | IssuePoint_2): IssueSnapshot_2;
    /**
     * 鏀寔鐩存帴浼犲畬鏁村揩鐓ф垨鍗曠嫭瀹屾暣濮挎€佽繘琛屾仮澶嶃€?
     */
    restore(snapshotOrPose: IssueSnapshot_2 | ICameraPose_2): void;
    dispose(): void;
    /**
     * 鍏煎 getPointContext(point) 鍜?getPointContext(url, point) 涓ょ璋冪敤鏂瑰紡銆?
     */
    private resolvePointLookupArgs;
    private resolveModelJson;
    private highlightIssueModel;
    private restoreIssueCameraPose;
    private zoomToIssueModel;
    private syncOrbitOrigin;
    private toVector3;
    private resolveFocusPoint;
    private resolveModelBox;
    private normalizeRestorePose;
    private buildSafeUpDirection;
}

declare interface IssueSnapshot extends IssueContext {
    cameraPose: IssueCameraPose;
    cameraRestorePose: ICameraPose;
}

declare interface IssueSnapshot_2 extends IssueContext_2 {
    cameraPose: IssueCameraPose_2;
    cameraRestorePose: ICameraPose_2;
}

declare interface IssueSnapshotWithUrl extends IssueSnapshot {
    url: string;
}

declare interface IssueSnapshotWithUrl_2 extends IssueSnapshot_2 {
    url: string;
}

declare class Label {
    private readonly engine;
    private readonly manager;
    private readonly worldToScreen;
    private readonly raycaster;
    constructor(engine: any);
    pickPoint(): Promise<LabelCoordinate | null>;
    startPickPoint(callback?: (coordinate: LabelCoordinate | null) => void): Promise<LabelCoordinate | null>;
    createLabel(options: LabelCreateOptions): string;
    updateLabel(id: string, options: LabelUpdateOptions): boolean;
    deleteLabel(id: string): boolean;
    removeLabel(id: string): boolean;
    clearLabels(): void;
    getLabel(id: string): LabelInstance | undefined;
    getLabels(): LabelInstance[];
    onLabelClick(callback: LabelClickCallback): () => void;
    offLabelClick(callback: LabelClickCallback): void;
    update(): void;
    dispose(): void;
    private projectCoordinate;
    private pickCoordinate;
    private pickRawModelIntersection;
}

/**
 * 2D 标签管理器，坐标使用 CAD 世界坐标 x/y，z 固定为 0。
 */
declare class Label2d {
    private readonly engine;
    private readonly manager;
    constructor(engine: any);
    /** 开启一次 2D 图纸选点，返回 CAD 世界坐标。 */
    pickPoint(): Promise<LabelCoordinate | null>;
    startPickPoint(callback?: (coordinate: LabelCoordinate | null) => void): Promise<LabelCoordinate | null>;
    /** 创建 2D 标签，坐标使用图纸世界坐标 x/y。 */
    createLabel(options: LabelCreateOptions): string;
    updateLabel(id: string, options: LabelUpdateOptions): boolean;
    deleteLabel(id: string): boolean;
    removeLabel(id: string): boolean;
    clearLabels(): void;
    getLabel(id: string): LabelInstance | undefined;
    getLabels(): LabelInstance[];
    onLabelClick(callback: LabelClickCallback): () => void;
    offLabelClick(callback: LabelClickCallback): void;
    /** 每帧同步标签位置，跟随 CAD 视图平移和缩放。 */
    update(): void;
    dispose(): void;
    private projectCoordinate;
    private pickCoordinate;
}

declare class Label_2 {
    private readonly engine;
    private readonly manager;
    private readonly worldToScreen;
    private readonly raycaster;
    constructor(engine: any);
    pickPoint(): Promise<LabelCoordinate | null>;
    startPickPoint(callback?: (coordinate: LabelCoordinate | null) => void): Promise<LabelCoordinate | null>;
    createLabel(options: LabelCreateOptions): string;
    updateLabel(id: string, options: LabelUpdateOptions): boolean;
    deleteLabel(id: string): boolean;
    removeLabel(id: string): boolean;
    clearLabels(): void;
    getLabel(id: string): LabelInstance | undefined;
    getLabels(): LabelInstance[];
    onLabelClick(callback: LabelClickCallback): () => void;
    offLabelClick(callback: LabelClickCallback): void;
    update(): void;
    dispose(): void;
    private projectCoordinate;
    private pickCoordinate;
    private pickRawModelIntersection;
}

export declare type LabelClickCallback = (payload: LabelClickPayload) => void;

export declare interface LabelClickPayload {
    id: string;
    label: LabelInstance;
    coordinate: LabelCoordinate;
    originalEvent: MouseEvent;
}

export declare interface LabelCoordinate {
    x?: number;
    y?: number;
    z?: number;
    longitude?: number;
    latitude?: number;
    height?: number;
}

export declare interface LabelCreateOptions {
    id?: string;
    coordinate: LabelCoordinate;
    icon: string;
    name: string;
    data?: any;
    size?: LabelIconSize;
    iconSize?: LabelIconSize;
    visible?: boolean;
}

declare type LabelIconSize = number | LabelIconSizeValue;

declare interface LabelIconSizeValue {
    width: number;
    height: number;
}

export declare interface LabelInstance {
    id: string;
    coordinate: LabelCoordinate;
    icon: string;
    name: string;
    data?: any;
    size: LabelIconSize;
    visible: boolean;
    element: HTMLDivElement;
}

export declare interface LabelUpdateOptions {
    coordinate?: LabelCoordinate;
    icon?: string;
    name?: string;
    data?: any;
    size?: LabelIconSize;
    iconSize?: LabelIconSize;
    visible?: boolean;
}

declare class LayerManager {
    private engine;
    private layerMap;
    private panelUI;
    constructor(engine: any);
    _loadLayers(layers?: DWGLayer[]): void;
    syncFromModel(layers: DWGLayer[]): void;
    getLayers(): LayerState[];
    /** 按当前背景返回图层在面板上的显示色，和场景图元保持一致。 */
    getDisplayColor(color: number): number;
    refresh(): void;
    setLayerVisible(layerName: string, visible: boolean): void;
    toggleLayer(layerName: string): boolean;
    setAllLayersVisible(visible: boolean): void;
    isAllVisible(): boolean;
    /** 判断单个图层是否可见；未登记图层默认可见，避免旧数据被误过滤。 */
    isLayerVisible(layerName?: string): boolean;
    /** 判断指定图元是否仍处在可见图层中，用于 hover 和点击拾取过滤。 */
    isModelVisibleByLayer(modelId: any): boolean;
    private _applyVisibility;
    private applyLayerVisibility;
    private applyPrimaryLayerObjectVisibility;
    /** INSERT 图层作为额外依赖参与显隐；任一依赖图层隐藏时，该图元节点都不可见。 */
    private applyDependentLayerVisibility;
    private setNodeVisible;
    private areNodeLayersVisible;
    private getNodeLayerDeps;
    private getNodeObject;
    /** 图层被隐藏时，清理该图层上已有的 hover/选中高亮。 */
    private clearInteractiveStateForLayer;
    show(): void;
    hide(): void;
    toggle(): void;
    dispose(): void;
}

declare interface LayerState extends DWGLayer {
}

/** 布局纸空间入口，root 与模型空间 octree 节点结构保持一致。 */
declare interface LayoutPaper2d {
    splitType?: string;
    id: string;
    name?: string;
    viewRotation?: number;
    viewExtent?: {
        min: number[];
        max: number[];
    };
    viewExtents?: {
        min: number[];
        max: number[];
    };
    paperWidth?: number;
    paperHeight?: number;
    paperUnits?: string;
    paperRotation?: string;
    min?: number[];
    max?: number[];
    entityCount?: number;
    root?: SplitCadManifestNode;
}

/** 布局索引中的单个布局入口，资源路径均相对 manifest 所在目录。 */
declare interface LayoutSpaceRef2d {
    id: string;
    name: string;
    tabOrder?: number;
    paperUrl: string;
    viewportsUrl?: string;
}

/** 布局 viewport，将模型空间窗口映射到纸空间。 */
declare interface LayoutViewport2d {
    id: string;
    layer?: string;
    visible?: boolean;
    viewportId?: number;
    paperCenter: number[];
    paperWidth: number;
    paperHeight: number;
    viewCenter: number[];
    viewTarget?: number[];
    viewDirection?: number[];
    viewWidth: number;
    viewHeight: number;
    twistAngle?: number;
    scaleFactor?: number;
    frozenLayers?: string[];
    clipBoundary?: number[][];
    boundaryEntity?: any;
}

/** v2 对外暴露的三档渲染模式名称。 */
declare type LegacyRenderMode = 'simple' | 'balance' | 'advanced';

declare class Level {
    private engine;
    private isVisible;
    private levels;
    private svgContainer;
    private svgOverlay;
    private worldToScreen;
    halfSize: number;
    private readonly COLOR;
    private readonly PLANE_OPACITY;
    constructor(engine: any);
    setData(data?: LevelData[], box?: BoundsLike): void;
    setMockData(): void;
    show(): void;
    hide(): void;
    toggle(): void;
    getVisible(): boolean;
    update(): void;
    /**
     * 根据点位高度计算所属标高，描述统一输出为“标高X”。
     * 支持传入 url 以限定到指定模型，避免多模型场景下标高串用。
     */
    getLocationByPoint(urlOrPoint: string | THREE.Vector3 | {
        x: number;
        y: number;
        z: number;
    }, point?: THREE.Vector3 | {
        x: number;
        y: number;
        z: number;
    }): LevelLocationResult | null;
    dispose(): void;
    private _initSvg;
    private _initWorldToScreen;
    private _clearAll;
    private _buildThreeObject;
    private _updateSvgLabels;
    private _makeLabel;
    /**
     * 优先读取指定 url 对应模型的标高数据；未指定时退回当前已加载标高或全部模型标高。
     */
    private getLevelData;
    /**
     * 兼容 getLocationByPoint(point) 和 getLocationByPoint(url, point) 两种调用方式。
     */
    private resolvePointLookupArgs;
    /**
     * 根据 url 查找当前引擎中的目标模型。
     */
    private findModelByUrl;
    /**
     * 点位位于两个标高之间时，归属到距离最近的那个标高。
     */
    private pickNearestLevel;
    /**
     * 合并全部模型包围盒，作为标高辅助面的默认可视范围。
     */
    private getMergedBoundingBox;
}

declare class Level_2 {
    private engine;
    private isVisible;
    private levels;
    private svgContainer;
    private svgOverlay;
    private worldToScreen;
    halfSize: number;
    private readonly COLOR;
    private readonly PLANE_OPACITY;
    constructor(engine: any);
    setData(data?: LevelData_2[], box?: BoundsLike_2): void;
    setMockData(): void;
    show(): void;
    hide(): void;
    toggle(): void;
    getVisible(): boolean;
    update(): void;
    /**
     * 根据点位高度计算所属标高，描述统一输出为“标高X”。
     * 支持传入 url 以限定到指定模型，避免多模型场景下标高串用。
     */
    getLocationByPoint(urlOrPoint: string | THREE.Vector3 | {
        x: number;
        y: number;
        z: number;
    }, point?: THREE.Vector3 | {
        x: number;
        y: number;
        z: number;
    }): LevelLocationResult_2 | null;
    dispose(): void;
    private _initSvg;
    private _initWorldToScreen;
    private _clearAll;
    private _buildThreeObject;
    private _updateSvgLabels;
    private _makeLabel;
    /**
     * 优先读取指定 url 对应模型的标高数据；未指定时退回当前已加载标高或全部模型标高。
     */
    private getLevelData;
    /**
     * 兼容 getLocationByPoint(point) 和 getLocationByPoint(url, point) 两种调用方式。
     */
    private resolvePointLookupArgs;
    /**
     * 根据 url 查找当前引擎中的目标模型。
     */
    private findModelByUrl;
    /**
     * 点位位于两个标高之间时，归属到距离最近的那个标高。
     */
    private pickNearestLevel;
    /**
     * 合并全部模型包围盒，作为标高辅助面的默认可视范围。
     */
    private getMergedBoundingBox;
}

declare interface LevelData {
    Id: string;
    Name: string;
    Elevation: number;
}

declare interface LevelData_2 {
    Id: string;
    Name: string;
    Elevation: number;
}

declare interface LevelLocationResult {
    pointY: number;
    description: string;
    currentLevel: LevelData | null;
    lowerLevel: LevelData | null;
    upperLevel: LevelData | null;
    isOnLevel: boolean;
    isInside: boolean;
}

declare interface LevelLocationResult_2 {
    pointY: number;
    description: string;
    currentLevel: LevelData_2 | null;
    lowerLevel: LevelData_2 | null;
    upperLevel: LevelData_2 | null;
    isOnLevel: boolean;
    isInside: boolean;
}

export declare interface LightingPreset {
    id: LightingPresetCategory;
    name: string;
    category: LightingPresetCategory;
    hdrId: string;
    hdrIntensity: number;
    ambientIntensity: number;
    directionalIntensity: number;
}

export declare type LightingPresetCategory = 'indoor' | 'outdoor';

/**
 * 管理场景基础光照和动态阴影相机范围。
 * 主要职责是创建环境光、补光、投影灯，并随视图和模型范围更新阴影覆盖区域。
 */
declare class LightModule {
    private engine;
    private lastShadowHalfSize;
    private lastShadowNear;
    private lastShadowFar;
    private lastLightPosition;
    private lastLightTarget;
    private lastShadowIntensity;
    private shadowCasterPolicyChecked;
    private lastShadowCasterPolicySceneSize;
    /**
     * 创建光照模块。
     * @param engine BIM 引擎实例，内部会从中读取 scene、controls、octreeBox 等对象。
     */
    constructor(engine: any);
    /**
     * 初始化场景基础光照，并把投影灯引用挂到 scene 上供后续更新使用。
     */
    init(): void;
    /**
     * 兼容旧调用名：更新定向光阴影的有效覆盖范围。
     * @param camera 当前渲染相机；传 null 时只按场景范围或默认值更新。
     */
    updateShadowCameraRange(camera: THREE.Camera | null): void;
    /**
     * 根据当前视图和模型范围移动投影灯、target 与阴影相机。
     * @param camera 当前渲染相机，用于估算屏幕可视范围；传 null 时退回到场景范围。
     */
    updateDirectionalShadow(camera: THREE.Camera | null): void;
    /**
     * 计算场景范围对阴影相机半边长的贡献。
     * @param sceneHalfExtent 场景包围盒最大边的一半，单位为世界坐标。
     * @param cameraHalfExtent 当前相机可视范围最大半边长，单位为世界坐标。
     * @returns 阴影相机应考虑的场景半边长。
     */
    private getSceneShadowHalfSize;
    /**
     * 计算模型包围盒在定向光横向平面上的完整投影范围。
     * @param sceneBox 当前模型包围盒。
     * @param target 阴影相机观察中心。
     * @param lightDirection 光源相对 target 的方向。
     * @returns 能覆盖包围盒横向投影的正交相机半边长。
     */
    private getBoundsShadowHalfSize;
    /**
     * 根据阴影相机范围动态调整 bias，平衡阴影条纹和阴影悬浮。
     * @param light 负责投影的定向光。
     * @param shadowHalfSize 阴影正交相机半边长，单位为世界坐标。
     * @param shadowDepthRange 阴影相机深度范围。
     */
    private updateShadowBias;
    /**
     * 计算阴影相机沿光照方向的 near/far 范围。
     * @param sceneBox 当前场景包围盒；为 null 时使用兜底范围。
     * @param lightPosition 投影灯世界坐标。
     * @param target 投影灯 target 世界坐标。
     * @param sceneDepth 场景包围盒对角线长度，用于兜底 far 估算。
     * @param shadowHalfSize 阴影相机半边长，用于兜底 far 估算。
     * @returns 阴影相机深度范围。
     */
    private getShadowDepthRange;
    /**
     * 获取包围盒 8 个顶点。
     * @param box 需要拆分顶点的 three.js 包围盒。
     * @returns 包围盒所有角点的世界坐标数组。
     */
    private getBoxCorners;
    /**
     * 从场景中找到当前负责投影的定向光。
     * @returns 可投影的 DirectionalLight；找不到时返回 null。
     */
    private getShadowDirectionalLight;
    /**
     * 获取当前场景的有效包围盒。
     * @returns 有效模型包围盒；场景为空或范围异常时返回 null。
     */
    private getSceneBoundingBox;
    /**
     * 规范化包围盒最小点和最大点，兼容 min/max 顺序被反转的输入。
     * @param min 原始最小点。
     * @param max 原始最大点。
     * @returns 规范化后的包围盒；坐标非法或范围异常时返回 null。
     */
    private normalizeBox;
    /**
     * 校验包围盒是否可用于阴影计算。
     * @param box 候选包围盒。
     * @returns 有效包围盒；过小、过大或异常时返回 null。
     */
    private validateBox;
    /**
     * 估算当前相机视图在目标点附近需要覆盖的半边长。
     * @param camera 当前渲染相机。
     * @param fallbackTarget 没有 controls.target 时用于估算距离的目标点。
     * @returns 相机视图最大半边长；没有有效相机时返回 0。
     */
    private getCameraHalfExtent;
    /**
     * 解析阴影应跟随的目标点。
     * @param camera 当前渲染相机。
     * @param fallbackTarget 优先级低于 controls.target 的兜底目标点。
     * @returns 用于定位投影灯 target 的世界坐标。
     */
    private resolveShadowTarget;
    /**
     * 获取投影灯相对 target 的方向。
     * @returns 标准化后的世界空间光源偏移方向。
     */
    private getLightOffsetDirection;
    /**
     * 根据当前视角和阴影贴图密度计算最终显示强度。
     * @param camera 当前渲染相机。
     * @param lightDirection 投影灯相对 target 的方向。
     * @param shadowHalfSize 阴影正交相机半边长。
     * @param mapWidth 阴影贴图宽度。
     * @returns 本帧应使用的阴影强度。
     */
    private getShadowDisplayIntensity;
    /**
     * 把阴影 target 对齐到阴影贴图 texel 网格。
     * @param target 原始阴影目标点。
     * @param lightDirection 投影灯相对 target 的方向。
     * @param shadowHalfSize 阴影正交相机半边长。
     * @param mapWidth 阴影贴图宽度。
     * @returns 对齐后的 target，减少相机远距离移动时的阴影采样抖动和规则纹理。
     */
    private snapShadowTargetToTexel;
    /**
     * 自动降低大面积薄片构件的投影风险。
     * @param sceneBox 当前场景包围盒，用于判断场景尺寸是否变化。
     */
    private updateShadowCasterPolicy;
    /**
     * 对单个 mesh 应用投影策略。
     * @param mesh 候选投影对象。
     */
    private applyShadowCasterPolicy;
    /**
     * 对仍参与投影的实体使用背面写入阴影，降低封闭体表面的自投影条纹。
     * @param material mesh 材质或材质数组。
     */
    private setBackSideShadowCasting;
}

/**
 * 管理 v3 基础光照，参数与 WEBGPUTEMP 保持一致。
 */
declare class LightModule_2 {
    private engine;
    private ambientLight;
    private directionalLight;
    private lastBounds;
    private readonly lightDirection;
    private readonly boundsCenter;
    private readonly boundsSize;
    private readonly lastShadowTarget;
    private lastShadowHalfSize;
    constructor(engine: any);
    /** 创建参考项目使用的环境光和主定向光。 */
    init(): void;
    /** 兼容旧调用名，按当前模型范围更新阴影视锥。 */
    updateShadowCameraRange(camera: THREE.Camera | null): void;
    /** 请求主定向光在下一次场景渲染时重建阴影贴图。 */
    requestShadowUpdate(): void;
    /** 捕获基础灯光状态，供 GIS 等临时场景在退出时无损恢复。 */
    captureState(): LightModuleState | null;
    /** 增量应用场景灯光，不重新创建光源或阴影贴图对象。 */
    applyEnvironment(settings: LightModuleEnvironmentSettings): void;
    /** 恢复先前捕获的基础灯光状态。 */
    restoreState(state: LightModuleState | null): void;
    /** 模型范围变化后刷新缓存，并按当前视区重新拟合定向光阴影视锥。 */
    updateDirectionalShadow(camera: THREE.Camera | null): void;
    /** 相机变化时仅使用缓存模型范围更新阴影，避免重复遍历大型场景。 */
    updateDirectionalShadowView(camera: THREE.Camera | null, force?: boolean): void;
    /** 计算模型包围盒在定向光横向平面上的完整投影范围。 */
    private getBoundsShadowHalfSize;
    /** 估算相机目标深度处的可视半边长。 */
    private getCameraHalfSize;
    /** 优先跟随交互中心；漫游控制器没有 target 时改为覆盖相机前方。 */
    private resolveShadowTarget;
    /** 仅保留模型沿光照方向实际占用的深度段，提高阴影深度精度。 */
    private getShadowDepthRange;
    /** 获取 v3 当前模型的整体包围盒。 */
    private getModelBounds;
}

declare interface LightModuleEnvironmentSettings {
    ambientColor?: THREE.ColorRepresentation;
    ambientIntensity?: number;
    directionalColor?: THREE.ColorRepresentation;
    directionalIntensity?: number;
    direction?: THREE.Vector3;
    castShadow?: boolean;
    shadowMapSize?: number;
    shadowBias?: number;
    shadowNormalBias?: number;
    shadowIntensity?: number;
}

declare interface LightModuleState {
    ambientColor: number;
    ambientIntensity: number;
    directionalColor: number;
    directionalIntensity: number;
    direction: THREE.Vector3;
    position: THREE.Vector3;
    targetPosition: THREE.Vector3;
    castShadow: boolean;
    shadowMapSize: number;
    shadowBias: number;
    shadowNormalBias: number;
    shadowIntensity: number;
}

/**
 * 超链接标注配置
 */
declare interface LinkAnnotationConfig {
    type: AnnotationType720.LINK;
    position: AnnotationPosition;
    url: string;
    text?: string;
    iconUrl?: string;
    style?: {
        color?: string;
        fontSize?: number;
        textDecoration?: string;
    };
    metadata?: any;
}

declare class LinkElement2d3d {
    private engine;
    constructor(engine: any);
    private active;
    private disActive;
    dispose(): void;
    private readonly listenElementClick;
    /** 二三维模型联动开启时保持 3D 引擎全帧渲染，避免等待空闲限帧间隔。 */
    private readonly listenLinkStateChange;
}

declare class LinkElement2d3d_2 {
    private engine;
    constructor(engine: any);
    private active;
    private disActive;
    dispose(): void;
    private readonly listenElementClick;
    /** 二三维模型联动开启时保持 3D 引擎全帧渲染，避免等待空闲限帧间隔。 */
    private readonly listenLinkStateChange;
}

declare class LinkView2d3d {
    private engine;
    constructor(engine: any);
    private active;
    private disActive;
    dispose(): void;
    private readonly listenViewUpdate;
    private applyPosition;
    private applyRotation;
}

declare class LinkView2d3d_2 {
    private engine;
    constructor(engine: any);
    private active;
    private disActive;
    dispose(): void;
    private readonly listenViewUpdate;
    private applyPosition;
    private applyRotation;
}

declare interface Loaded3DTiles {
    tiles: TilesRenderer;
    Controls: typeof GlobeControls;
    cameraFrame: number;
}

/** 已加载的 octree tile，渲染时每个 tile 会对应一个 THREE.Group。 */
declare interface LoadedCadTile2d {
    id: string;
    url: string;
    node: SplitCadManifestNode;
    inserts: any[];
}

/** 已解析的布局空间数据，paperTiles 与模型空间 tile 使用同一 INSERT 结构。 */
declare interface LoadedLayoutSpace2d extends LayoutSpaceRef2d {
    paper?: LayoutPaper2d;
    paperTiles: LoadedCadTile2d[];
    viewports: LayoutViewport2d[];
}

declare type LoaderBuildOptions2d = {
    chunkSize?: number;
    enableChunkedLoading?: boolean;
};

/** Loader 内部模型数据，后续选择、高亮和图层显隐都依赖这些索引。 */
declare interface LoaderModel2d {
    layers: any[];
    modelMap: Map<string, Map<any, THREE.Vector3[]>>;
    hatchMap: Map<string, RenderItem2d[]>;
    textMap: Map<string, RenderItem2d[]>;
    imageMap: Map<string, RenderItem2d[]>;
    nodeMap: Map<any, any[]>;
    textItems: SearchableText2d[];
}

declare class LoaderModule {
    private static localRequestMap;
    private static localObjectUrls;
    private static interceptorInstalled;
    private engine;
    private unloadedModelUrls;
    private modelLoadVersions;
    constructor(engine: any);
    /**
     * 批量加载模型 URL。
     */
    loadModels(urls: string[], options?: LoadModelOptions): Promise<void>;
    /**
     * 下载未加密的轻量化整包 ZIP，解压并生成本地虚拟 URL 后复用常规模型加载链路。
     */
    private loadModelPackageUrls;
    /**
     * 直接加载用户在浏览器中选择的本地模型文件。
     * 支持两种输入：
     * 1. 直接选择 `info / property / edge / lod0...` 这组模型包文件。
     * 2. 选择一个外层 zip，zip 内部包含上述模型包文件或解压后的同名目录。
     */
    loadModelFile(files: File[], options?: LoadModelOptions): Promise<void>;
    /**
     * 卸载指定 URL 的 V2 模型，并释放它持有的 CPU、GPU 和本地 Blob URL 资源。
     * 重复卸载或传入不存在的 URL 时保持幂等，不影响场景中的其他模型。
     */
    unloadModel(url: string): void;
    /** 返回指定 URL 是否已收到卸载请求，供异步加载链路避免卸载后回写。 */
    isModelUnloadRequested(url: string): boolean;
    /** 校验异步任务是否仍属于当前 URL 的最新一次加载。 */
    isModelLoadActive(url: string, loadVersion: number): boolean;
    /** 清理模型运行状态数组，避免后续交互继续引用已卸载构件。 */
    private clearEngineStatus;
    /** 删除模型组缓存；对象索引种子保持单调递增，避免复用旧索引引发状态串线。 */
    private removeModelGroupReference;
    /**
     * 把浏览器 File 列表整理成现有加载器可识别的本地虚拟模型入口。
     */
    private buildLocalModelEntries;
    /**
     * 展开输入文件。
     * 已经是模型包文件时直接保留；仅把“外层容器 zip”解包成内部条目。
     */
    private collectSourceEntries;
    /**
     * 识别已经打好的模型包文件，例如 `info`、`lod0.zip`。
     */
    private parseDirectPackageEntry;
    /**
     * 识别解压后的模型目录，例如 `lod0/nodes.json`、`info/info.json`。
     */
    private parseExtractedPackageEntry;
    /**
     * 把解压目录重新打包成 zip Blob，复用现有按包加载的实现。
     */
    private packEntriesAsZip;
    /**
     * 注册 axios 拦截器，把虚拟模型地址改写为对应的 Blob URL。
     */
    private static ensureLocalRequestInterceptor;
    /**
     * 为某个虚拟请求地址生成 Blob URL 映射。
     */
    private static registerLocalRequest;
    /** 释放某个本地虚拟模型根路径下创建的全部 Blob URL。 */
    private static releaseLocalRequests;
    /**
     * 统一规范虚拟请求 key，兼容传入绝对地址或带 query 的地址。
     */
    private static normalizeRequestKey;
    /**
     * 生成稳定且不会冲突的本地模型虚拟 ID。
     */
    private static createLocalModelId;
}

declare class LoaderModule2d {
    private engine;
    private data;
    private enableValidation;
    model: LoaderModel2d;
    private font;
    private readonly dataSource;
    private lastBuildOptions;
    private activeWorkspace;
    private readonly workspaceCache;
    private readonly workspaceViews;
    private localModelResource;
    constructor(engine: any);
    /**
     * 加载 2D CAD 模型。
     * 只支持新版分包数据：传入 manifest.json 或 CAD 目录地址。
     */
    loadModel(url: string, options?: {
        chunkSize?: number;
        enableChunkedLoading?: boolean;
        enableValidation?: boolean;
    }): Promise<void>;
    loadModelFile(files: File[], options?: {
        chunkSize?: number;
        enableChunkedLoading?: boolean;
        enableValidation?: boolean;
    }): Promise<void>;
    private loadData;
    /** 返回当前图纸可用布局，按导出时的 tabOrder 排序。 */
    getLayouts(): LoadedLayoutSpace2d[];
    /** 返回当前工作空间，供底部模型/布局标签同步高亮状态。 */
    getActiveWorkspace(): {
        type: 'model' | 'layout';
        layoutId?: string;
        name: string;
    };
    /** 返回当前工作空间推荐视图范围；布局空间优先来自 paper.viewExtent。 */
    getActiveWorkspaceExtents(): {
        min: number[];
        max: number[];
    } | undefined;
    /** 切换到指定布局空间；参数可传布局 id、名称或数组下标。 */
    loadLayout(layoutKey: string | number, options?: LoaderBuildOptions2d): Promise<void>;
    /** 切回模型空间，复用最近一次的分块加载参数。 */
    showModelSpace(options?: LoaderBuildOptions2d): Promise<void>;
    private resolveLayout;
    private getLayoutCacheKey;
    private getActiveWorkspaceKey;
    /** 切换工作空间前保存当前视图，避免切回时被 fitToView 重置到初始位置。 */
    private saveActiveWorkspaceView;
    /** 优先恢复该工作空间上一次的相机视图；首次进入时返回 false，让后续流程自动适配范围。 */
    private restoreWorkspaceView;
    /** 激活缓存工作空间，只切换可见性和当前索引，不重新展开图元。 */
    private activateWorkspace;
    /** 模型空间保持旧层级直挂 modelGroup；切布局时只隐藏这些 octree tile，不隐藏整个 modelGroup。 */
    private setModelSpaceVisible;
    /** 读取 metadata 中的整体视图旋转；只应用到模型空间缓存，布局空间保持纸空间坐标。 */
    private getMetadataViewRotation;
    /** 做最小结构校验，避免下游几何生成拿到明显非法的数据。 */
    private parseData;
    /** 校验新版 loader 运行所需的核心字段。 */
    private validateDataStructure;
    /** 构建 2D 场景：字体 -> block 展开 -> 每个 octree tile 单独合批到一个 THREE.Group。 */
    private buildScene;
    /** 构建布局空间：先放 viewport 模型内容，再绘制 paper tile，使图框和标题栏位于上层；构建后会进入缓存。 */
    private buildLayoutScene;
    /** 按 viewport 可见模型范围筛选模型空间 tile，并应用模型空间到纸空间的映射矩阵。 */
    private buildViewportGroups;
    /** 将 tile 展开并合批到指定分组；模型空间、paper tile、viewport tile 共用该路径。 */
    private buildTilesIntoGroup;
    /** 分块加载时让出一次事件循环，降低长时间同步展开造成的页面卡死概率。 */
    private yieldToBrowser;
    /** 创建 octree tile 对应的 Three 分组；min/max 只作为空间索引元数据，不参与定位修正。 */
    private createTileGroup;
    /** Viewport 映射矩阵：T(paperCenter) * S(paperHeight/viewHeight) * R(-twist) * T(-viewCenter)，Z 轴略低于 paper tile。 */
    private buildViewportMatrix;
    /** 根据 viewport 模型空间范围筛选相交 tile；缺少包围盒的 tile 保守加载。 */
    private collectViewportTiles;
    private getViewportModelBounds;
    /** viewport 裁剪边界在模型空间中的四角；twistAngle 不为 0 时返回旋转后的矩形。 */
    private getViewportModelClipPolygon;
    private intersectsBounds;
    private isUsableViewport;
    /** viewport 内模型内容同时受全局图层状态和该 viewport 冻结图层控制。 */
    private isVisibleInViewport;
    private getRenderItemLayerDeps;
    /** 对 viewport 内图元做模型空间裁剪，避免内容溢出到纸空间视口外。 */
    private clipRenderItemToPolygon;
    private clipLinePoints;
    /** 线段先按裁剪边界切分，再通过中点判断保留内部片段。 */
    private clipSegmentByPolygon;
    private getSegmentIntersectionParameter;
    private isPointInPolygon;
    private isPointOnSegment;
    /** 三角网格按 viewport 多边形裁剪；图片几何会同步插值 UV。 */
    private clipGeometry;
    private clipPolygonVertices;
    private isInsideClipEdge;
    private intersectClipEdge;
    private getPolygonOrientation;
    private getGeometryBounds;
    private getPointsBounds;
    private getLayoutExtents;
    private getLayoutViewRotation;
    /** 按图纸实际文字裁剪字体字符集，降低字体转换成本。 */
    private loadFont;
    /** 从 block 实体中收集需要转换的文字字符；根实体来自 tile insert，不包含真实文字。 */
    private collectTextChars;
    /** 统一换行格式，和 TextGeometryFactory 保持一致。 */
    private normalizeText;
    /** 场景构建完成后的视图适配、图层管理和事件通知。 */
    private afterModelLoaded;
    /** 创建一次加载周期内使用的合批容器。 */
    private createEmptyModel;
    /** 清空 Three 组内旧模型对象，但保留 modelGroup 实例供外部引用。 */
    private clearModelGroup;
    /** 释放旧模型占用的 CPU/GPU 资源，避免重复加载或失败重试时内存继续累加。 */
    private disposeObject3d;
    private disposeGeometry;
    private disposeGeometryList;
    private disposeMaterial;
    /** 对外发送加载进度事件。 */
    private _emitProgress;
    getData(): DWGData | null;
    getEntitiesByLayer(layerName: string): DWGEntity[];
    getLayers(): DWGData['layers'];
    clear(): void;
    dispose(): void;
    private revokeLocalModelResource;
    private getLocalModelName;
}

declare class LoaderModule_2 {
    private static localRequestMap;
    private static localObjectUrls;
    private static interceptorInstalled;
    private engine;
    private unloadedModelUrls;
    private modelLoadVersions;
    private hasTriggeredInitialHome;
    private homeBoundingBox;
    constructor(engine: any);
    /**
     * 批量加载模型 URL。
     */
    loadModels(urls: string[], options?: LoadModelOptions): Promise<void>;
    /**
     * 下载未加密的轻量化整包 ZIP，解压并生成本地虚拟 URL 后复用常规模型加载链路。
     */
    private loadModelPackageUrls;
    /**
     * 直接加载用户在浏览器中选择的本地模型文件。
     * 支持两种输入：
     * 1. 直接选择 `info / property / edge / lod0...` 这组模型包文件。
     * 2. 选择一个外层 zip，zip 内部包含上述模型包文件或解压后的同名目录。
     */
    loadModelFile(files: File[], options?: LoadModelOptions): Promise<void>;
    /**
     * 卸载指定 URL 的 V3 模型，并释放场景、索引、Blob URL 与 GPU 资源。
     * 重复调用保持幂等，加载过程中调用会阻止旧任务继续回写。
     */
    unloadModel(url: string): void;
    /** 返回指定 URL 是否已收到卸载请求。 */
    isModelUnloadRequested(url: string): boolean;
    /** 校验异步任务是否仍属于当前 URL 的最新一次加载。 */
    isModelLoadActive(url: string, loadVersion: number): boolean;
    /** info 已读取并登记模型包围盒后立即判断是否需要回正相机。 */
    onModelInfoReady(): void;
    /** 清理模型运行状态数组，避免交互继续引用已卸载构件。 */
    private clearEngineStatus;
    /** 删除模型组缓存；对象索引种子保持单调递增，避免复用旧索引。 */
    private removeModelGroupReference;
    /** 判断当前所有模型的最外层包围盒是否需要触发一次 Home。 */
    private shouldTriggerHomeForCurrentModels;
    /** 卸载后重新计算缓存，避免已删除的大模型范围继续阻止后续 Home。 */
    private refreshHomeBoundingBoxAfterUnload;
    /** 将 OctreeBox 返回的全场景范围转换为独立 Box3，避免引用后续被修改。 */
    private getCurrentModelBoundingBox;
    /**
     * 把浏览器 File 列表整理成现有加载器可识别的本地虚拟模型入口。
     */
    private buildLocalModelEntries;
    /**
     * 展开输入文件。
     * 已经是模型包文件时直接保留；仅把“外层容器 zip”解包成内部条目。
     */
    private collectSourceEntries;
    /**
     * 识别已经打好的模型包文件，例如 `info`、`lod0.zip`。
     */
    private parseDirectPackageEntry;
    /**
     * 识别解压后的模型目录，例如 `lod0/nodes.json`、`info/info.json`。
     */
    private parseExtractedPackageEntry;
    /**
     * 把解压目录重新打包成 zip Blob，复用现有按包加载的实现。
     */
    private packEntriesAsZip;
    /**
     * 注册 axios 拦截器，把虚拟模型地址改写为对应的 Blob URL。
     */
    private static ensureLocalRequestInterceptor;
    /**
     * 为某个虚拟请求地址生成 Blob URL 映射。
     */
    private static registerLocalRequest;
    /** 释放某个本地虚拟模型根路径下创建的全部 Blob URL。 */
    private static releaseLocalRequests;
    /**
     * 统一规范虚拟请求 key，兼容传入绝对地址或带 query 的地址。
     */
    private static normalizeRequestKey;
    /**
     * 生成稳定且不会冲突的本地模型虚拟 ID。
     */
    private static createLocalModelId;
}

/** 负责 GIS 影像与 3D Tiles 数据的创建和插件配置。 */
declare class LoaderModule_3 {
    private readonly engine;
    private readonly options;
    private readonly isWebGpuRenderer;
    private readonly layerManager?;
    private readonly managedTilesets;
    private lifecycle;
    private disposed;
    constructor(engine: EngineKernelV3, options?: GISOptions, isWebGpuRenderer?: boolean, layerManager?: GISLayerManager | undefined);
    /** 注册附加 Tileset 生命周期回调，业务管理器通过此入口维护校准等状态。 */
    setTilesetLifecycle(lifecycle: GISLoaderTilesetLifecycle | null): void;
    /** 加载初始化配置指定的影像，未指定时默认使用 Cesium。 */
    loadImage(): Promise<Loaded3DTiles>;
    /** 按内置配置标识加载影像。 */
    loadImageById(id: GISImageId): Promise<Loaded3DTiles>;
    /** 按 URL 加载自定义 3D Tiles 影像。 */
    loadImageCustomize(url: string): Promise<Loaded3DTiles>;
    /** 当前地形由 3D Tiles 影像一并提供。 */
    loadTerrain(): Promise<Loaded3DTiles>;
    /** 在当前 GIS 底图上叠加通用 3D Tiles，并接入统一渲染生命周期。 */
    loadTileset(url: string, options?: GISLoadTilesetOptions): Promise<TilesRenderer>;
    /** 移除附加的 3D Tiles，并释放其缓存与 GPU 资源。 */
    removeTileset(tiles: TilesRenderer): boolean;
    /** 等待附加 Tileset 就绪，并把相机调整到可完整观察模型的位置。 */
    flyToTileset(tiles: TilesRenderer, options?: GISFlyToTilesetOptions): Promise<void>;
    /** 把相机调整到可完整观察普通 Three.js 模型的位置。 */
    flyToObject(object: Object3D, options?: GISFlyToObjectOptions): void;
    /** 按统一包围球计算 GIS 局部坐标中的观察位姿。 */
    private frameBoundingSphere;
    /** 更新全部附加瓦片的 LOD 调度。 */
    update(): void;
    /** 同步全部附加瓦片使用的屏幕分辨率。 */
    updateResolution(): void;
    /** 释放 LoaderModule 管理的附加瓦片；主底图仍由 GIS 实例释放。 */
    dispose(): void;
    /** 创建 TilesRenderer，并注册官方示例使用的扩展插件。 */
    load3dtiles(source?: GISSource, terrain?: boolean): Promise<Loaded3DTiles>;
    private resolveLocalOrigin;
    /** 将高德瓦片的 GCJ-02 投影适配到引擎统一使用的 WGS84 地表。 */
    private correctGcj02Overlay;
    private registerHeightOffset;
    /** 根瓦片加载完成后再冻结校准基准，避免使用尚未建立的包围球锚点。 */
    private registerTilesetReady;
    private waitForBoundingSphere;
    private assertUsable;
}

/**
 * Gaussian 加载模块。
 * 负责加载、卸载和登记 .ply / .splat / .ksplat / .spz 场景。
 */
declare class LoaderModuleGaussian {
    private viewer;
    private getDefaultRotation;
    private scenes;
    private localSceneResources;
    constructor(viewer: GaussianSplats3D.Viewer, getDefaultRotation: () => GaussianQuaternion);
    loadModel(url: string, options?: GaussianSceneOptions): Promise<GaussianSceneInfo>;
    loadModelFile(files: File[], options?: GaussianSceneOptions): Promise<GaussianSceneInfo>;
    loadModels(items: Array<{
        url: string;
        options?: GaussianSceneOptions;
    }>): Promise<GaussianSceneInfo[]>;
    unloadModel(id: string, showLoadingUI?: boolean): Promise<void>;
    getModel(id: string): GaussianSceneInfo | undefined;
    getAllModels(): GaussianSceneInfo[];
    getRawSplatScene(idOrIndex: string | number): any;
    clear(showLoadingUI?: boolean): Promise<void>;
    private reindexScenesAfterRemove;
}

declare type LoadingStyle2d = 1 | 2;

/**
 * 模型加载配置项
 */
export declare interface LoadModelOptions {
    /** URL 是否为未加密的轻量化整包 ZIP；开启后会先解压并转成本地虚拟 URL 再加载 */
    isZipPackage?: boolean;
    /** 是否加载轻量化模型边线；默认为 true，关闭后不会请求 edge 数据包 */
    loadEdge?: boolean;
    /** 是否要加载解单定额映射数据 */
    loadQuotaList?: boolean;
    /** 自定义模型 ID，若不提供则自动生成 UUID */
    id?: string;
    /** 初始名称 */
    name?: string;
    /** 初始变换矩阵 (平移、旋转、缩放) */
    matrix?: number[];
    /** 初始位置 [x, y, z] (如果提供了 matrix，此项可能被忽略或叠加) */
    position?: [number, number, number];
    /** 初始旋转 [x, y, z] (欧拉角，弧度) */
    rotation?: [number, number, number];
    /** 初始缩放 [x, y, z] */
    scale?: [number, number, number];
    /** 加载进度回调 (0-100) */
    onProgress?: (progress: number) => void;
}

declare interface MainViewPort2d {
    activeCamera: 'orthographic';
    orthographicCamera: CameraViewState2d;
}

/** 2D 图纸标记管理器：以世界坐标保存形状，相机平移/缩放时每帧重新投影到屏幕坐标。 */
declare class Markup2d {
    private readonly engine;
    private readonly container;
    private readonly layer;
    private readonly svg;
    private readonly toolbar;
    private records;
    private isActive;
    private currentType;
    private style;
    private draft;
    private draftStart;
    private polygonPoints;
    private currentWorkspaceKey;
    private mouseDownPoint;
    private hasDraggedAfterMouseDown;
    private buttons;
    constructor(engine: any);
    /** 开启标记功能；传入类型时立即进入对应绘制模式。 */
    active(type?: Markup2dType): void;
    /** 显示核心层顶部标记工具栏，业务侧可直接调用 engine.markup.show()。 */
    show(): void;
    /** 隐藏核心层顶部标记工具栏，并退出当前绘制模式。 */
    hide(): void;
    /** 关闭标记绘制，不删除已完成的标记。 */
    disActive(): void;
    /** 设置当前绘制工具；传入 none 等价于只查看/选择。 */
    setDrawType(type: Markup2dType | 'none'): void;
    /** 每帧刷新屏幕坐标，保证标记跟随 2D 相机平移和缩放。 */
    update(): void;
    /** 切换模型/布局空间时只显示当前空间的标记数据。 */
    setWorkspace(workspaceKey: string): void;
    /** 提取可持久化标记数据，不包含 DOM/SVG 引用。 */
    getData(): Markup2dData[];
    /** 通过持久化数据还原标记形状。 */
    restoreData(data?: Markup2dData[]): void;
    /** 获取类似 3D 图钉的 2D 视图快照：相机状态 + 标记数据。 */
    get(): Markup2dState;
    /** 还原 2D 视图快照；相机恢复后标记会在下一帧重新投影。 */
    restore(state: Markup2dState): void;
    /** 程序化新增一个标记，便于业务从接口数据直接绘制。 */
    addMarkup(data: Partial<Markup2dData> & {
        type: Markup2dType;
        points: Markup2dData['points'];
    }): Markup2dData;
    /** 删除当前工作空间的所有标记。 */
    clearAll(allWorkspaces?: boolean): void;
    /** 删除当前选中的标记。 */
    deleteSelected(): void;
    /** 销毁 DOM 和事件。 */
    dispose(): void;
    private blockDrawingEvent;
    private handleMouseDown;
    private handleMouseMove;
    private handleMouseUp;
    private handleClick;
    private handleDoubleClick;
    private handleKeyDown;
    private createToolbar;
    private createDivider;
    private createIconButton;
    private showToolbar;
    private hideToolbar;
    private syncToolbar;
    private finishDraft;
    private clearDraft;
    private startTwoPointDraft;
    private finishTwoPointDraft;
    private drawMultiPointDraft;
    private createRecord;
    private createElement;
    private bindSelection;
    private cancelSelected;
    private updateElement;
    private updateLine;
    private updateRect;
    private updateEllipse;
    private updateText;
    private updatePolygon;
    private updateCloudLine;
    private drawVertexMarkers;
    private applyStyle;
    private applySvgPaint;
    private createArrowHead;
    private buildCloudPath;
    private isMultiPointType;
    private isTwoPointType;
    private removeTrailingDuplicatePoints;
    private eventToWorld;
    private worldToScreen;
    private pointToData;
    private svgElement;
    private cloneData;
    private hexToTransparent;
    private normalizeNumber;
    private createId;
}

declare interface Markup2dData {
    id: string;
    type: Markup2dType;
    workspaceKey: string;
    points: Array<{
        x: number;
        y: number;
        z?: number;
    }>;
    text?: string;
    style: Markup2dStyle;
}

declare interface Markup2dState {
    cameraViewState: any;
    markupData: Markup2dData[];
}

declare interface Markup2dStyle {
    stroke: string;
    fill: string;
    strokeWidth: number;
    fontSize: number;
    cloudRadius: number;
}

declare type Markup2dType = 'line' | 'arrow' | 'rect' | 'ellipse' | 'text' | 'polygon' | 'cloudline';

export declare interface MaterialEditorMaterialInfo {
    id: string;
    name: string;
    type: string;
    color?: string;
    opacity: number;
    transparent: boolean;
    roughness?: number;
    metalness?: number;
    emissive?: string;
    emissiveIntensity?: number;
    side: number;
    wireframe?: boolean;
    textures: MaterialTextureInfo[];
}

declare interface MaterialEditorMaterialInfo_2 {
    id: string;
    name: string;
    type: string;
    color?: string;
    opacity: number;
    transparent: boolean;
    roughness?: number;
    metalness?: number;
    emissive?: string;
    emissiveIntensity?: number;
    side: number;
    wireframe?: boolean;
    textures: MaterialTextureInfo_2[];
}

export declare interface MaterialEditorOptions {
    visible?: boolean;
    title?: string;
    width?: number;
}

declare interface MaterialEditorOptions_2 {
    visible?: boolean;
    title?: string;
    width?: number;
}

export declare interface MaterialEditorTarget {
    url: string;
    ids?: Array<string | number>;
}

declare interface MaterialEditorTarget_2 {
    url: string;
    ids?: Array<string | number>;
}

export declare type MaterialMapSlot = 'map' | 'normalMap' | 'roughnessMap' | 'metalnessMap' | 'alphaMap' | 'aoMap' | 'bumpMap' | 'emissiveMap';

declare type MaterialMapSlot_2 = 'map' | 'normalMap' | 'roughnessMap' | 'metalnessMap' | 'alphaMap' | 'aoMap' | 'bumpMap' | 'emissiveMap';

export declare interface MaterialModificationRecord {
    id: string;
    name: string;
    type: string;
    objectNames: string[];
    changes: Record<string, {
        before: unknown;
        after: unknown;
    }>;
}

declare interface MaterialModificationRecord_2 {
    id: string;
    name: string;
    type: string;
    objectNames: string[];
    changes: Record<string, {
        before: unknown;
        after: unknown;
    }>;
}

export declare type MaterialNameMatcher = string | RegExp | ((material: THREE.Material) => boolean);

declare interface MaterialOption {
    material: THREE.Material;
    materials?: THREE.Material[];
    owners: THREE.Object3D[];
}

declare interface MaterialOption_2 {
    material: THREE.Material;
    materials?: THREE.Material[];
    owners: THREE.Object3D[];
}

export declare type MaterialReplacementInput = MaterialReplacementOptions | MaterialReplacementRule[] | MaterialNameMatcher;

/** 材质自动替换管理器，负责所有模型材质的匹配、替换和恢复。 */
export declare class MaterialReplacementManager {
    options: {
        enabled: boolean;
        rules: MaterialReplacementRule[];
    };
    private readonly snapshots;
    private isDisposed;
    private eventsBound;
    private readonly handleLoadingCompleted;
    private readonly engine;
    constructor(engine: any, options?: MaterialReplacementOptions);
    constructor(engine: any, materialName: MaterialNameMatcher, materialParams?: MaterialReplacementParameters);
    /** 注册模型加载事件并立即处理当前已有模型。 */
    init(options?: MaterialReplacementOptions): void;
    isEnabled(): boolean;
    /** 开关自动替换；关闭时恢复管理器修改过的材质。 */
    setEnabled(enabled: boolean): number;
    setMaterialName(materialName: MaterialNameMatcher): number;
    setMaterialParams(materialParams: MaterialReplacementParameters): number;
    setRules(rules: MaterialReplacementRule[]): number;
    addRule(rule: MaterialReplacementRule): number;
    removeRule(index: number): number;
    getRules(): MaterialReplacementRule[];
    /** 替换所有已加载模型中匹配名称的材质，返回受影响的材质数量。 */
    replaceAll(): number;
    /** 替换指定模型 URL 或模型对象中的材质。 */
    replaceModel(model: string | THREE.Object3D): number;
    /** 对单个材质执行当前规则，供加载器在合批前调用。 */
    applyMaterial(material: THREE.Material | null | undefined): boolean;
    getReplacedMaterialCount(): number;
    /** 恢复管理器修改过的全部材质。 */
    restoreAll(): void;
    dispose(): void;
    private normalizeRules;
    private normalizeInput;
    private hasRules;
    private applyMaterials;
    private collectObjectMaterials;
    private matches;
    private captureSnapshot;
    private cloneMaterialValue;
    private applyMaterialValue;
}

export declare interface MaterialReplacementOptions {
    /** 是否启用自动替换；未显式设置时，有规则即启用。 */
    enabled?: boolean;
    /** 单组规则的简写写法。配置 rules 后优先使用 rules。 */
    materialName?: MaterialNameMatcher;
    materialParams?: MaterialReplacementParameters;
    /** 多组材质替换规则，按数组顺序合并匹配到的参数。 */
    rules?: MaterialReplacementRule[];
}

export declare interface MaterialReplacementParameters {
    color?: THREE.ColorRepresentation | THREE.Color;
    opacity?: number;
    transparent?: boolean;
    metalness?: number;
    roughness?: number;
    envMapIntensity?: number;
    [key: string]: unknown;
}

export declare interface MaterialReplacementRule {
    /** 材质名称匹配规则；字符串按“包含”匹配。 */
    materialName?: MaterialNameMatcher;
    /** materialName 的简写。 */
    name?: MaterialNameMatcher;
    /** 应用到匹配材质的参数。 */
    materialParams: MaterialReplacementParameters;
}

export declare interface MaterialTextureInfo {
    slot: MaterialMapSlot;
    name: string;
    url: string;
    hasTexture: boolean;
}

declare interface MaterialTextureInfo_2 {
    slot: MaterialMapSlot_2;
    name: string;
    url: string;
    hasTexture: boolean;
}

/** 材质编辑器入口，负责对外 API、事件绑定和材质资源生命周期。 */
export declare class MaterialTool {
    private readonly engine;
    options: Required<MaterialEditorOptions>;
    selectedMaterials: MaterialOption_2[];
    selectedMaterialId: string | null;
    targetText: string;
    visible: boolean;
    private readonly textureLoader;
    private readonly ownedTextures;
    private readonly objectUrls;
    private readonly collector;
    private readonly snapshots;
    private readonly panel;
    private isDisposed;
    private eventsBound;
    private readonly handleSelectionChanged;
    private readonly handleClick;
    private readonly handleLoadingCompleted;
    constructor(engine: any, options?: MaterialEditorOptions);
    /** 初始化 DOM 和事件监听；默认隐藏，业务可调用 show() 打开。 */
    init(options?: MaterialEditorOptions): void;
    /** 显示编辑器，可同时传入目标对象或构件选择信息。 */
    show(target?: THREE.Object3D | MaterialEditorTarget): void;
    /** 隐藏编辑器但保留已有修改记录。 */
    hide(): void;
    /** 切换编辑器显示状态。 */
    toggle(target?: THREE.Object3D | MaterialEditorTarget): void;
    /** 根据场景对象读取其下所有材质并刷新面板。 */
    selectObject(object: THREE.Object3D): MaterialEditorMaterialInfo[];
    /** 根据当前引擎选择数据读取构件材质。 */
    selectTarget(target: MaterialEditorTarget): MaterialEditorMaterialInfo[];
    /** 只读取目标对象材质，不改变当前 UI 选择。 */
    getMaterialsByObject(object: THREE.Object3D): MaterialEditorMaterialInfo[];
    /** 只读取指定构件材质，不改变当前 UI 选择。 */
    getMaterialsByTarget(target: MaterialEditorTarget): MaterialEditorMaterialInfo[];
    /** 读取当前场景中所有可编辑材质。 */
    getAllSceneMaterials(): MaterialEditorMaterialInfo[];
    /** 返回当前选择对象上可编辑的材质信息。 */
    getSelectedMaterials(): MaterialEditorMaterialInfo[];
    /** 返回全场景相对快照发生变化的材质信息。 */
    getModifiedMaterials(): MaterialModificationRecord[];
    /** 重建当前场景基准快照；通常在模型加载完成后由编辑器自动调用。 */
    captureSceneSnapshot(): void;
    /** 批量更新材质参数。 */
    updateMaterial(materialId: string, patch: Partial<Record<string, unknown>>): void;
    /** 通过 URL 或 File 修改指定贴图槽；传入 null 时清除贴图。 */
    setTexture(materialId: string, slot: MaterialMapSlot, source: string | File | null): Promise<void>;
    /** 一键还原所有有基准快照的场景材质。 */
    restoreAll(): void;
    /** 兼容常见命名：重置所有材质修改。 */
    resetAll(): void;
    /** 还原单个材质。 */
    restoreMaterial(materialId: string): void;
    /** 获取当前面板正在编辑的材质。 */
    getActiveMaterial(): THREE.Material | null;
    /** 刷新 DOM 面板。 */
    render(): void;
    /** 销毁 DOM、事件监听和编辑器创建的贴图资源。 */
    dispose(): void;
    private bindEvents;
    private setSelectedMaterials;
    /** 内容完全相同的材质只保留一个卡片，并合并它关联的对象和实际材质实例。 */
    private dedupeMaterials;
    private collectSceneMaterials;
    private findMaterialById;
    private findMaterialGroupById;
    private replaceTexture;
    private loadTexture;
    private requestRender;
    private disposeOwnedTextures;
}

/** 材质编辑器入口，负责对外 API、事件绑定和材质资源生命周期。 */
declare class MaterialTool_2 {
    private readonly engine;
    options: Required<MaterialEditorOptions_2>;
    selectedMaterials: MaterialOption[];
    selectedMaterialId: string | null;
    targetText: string;
    visible: boolean;
    private readonly textureLoader;
    private readonly ownedTextures;
    private readonly objectUrls;
    private readonly collector;
    private readonly snapshots;
    private readonly panel;
    private isDisposed;
    private eventsBound;
    private readonly handleSelectionChanged;
    private readonly handleClick;
    private readonly handleLoadingCompleted;
    constructor(engine: any, options?: MaterialEditorOptions_2);
    /** 初始化 DOM 和事件监听；默认隐藏，业务可调用 show() 打开。 */
    init(options?: MaterialEditorOptions_2): void;
    /** 显示编辑器，可同时传入目标对象或构件选择信息。 */
    show(target?: THREE.Object3D | MaterialEditorTarget_2): void;
    /** 隐藏编辑器但保留已有修改记录。 */
    hide(): void;
    /** 切换编辑器显示状态。 */
    toggle(target?: THREE.Object3D | MaterialEditorTarget_2): void;
    /** 根据场景对象读取其下所有材质并刷新面板。 */
    selectObject(object: THREE.Object3D): MaterialEditorMaterialInfo_2[];
    /** 根据当前引擎选择数据读取构件材质。 */
    selectTarget(target: MaterialEditorTarget_2): MaterialEditorMaterialInfo_2[];
    /** 只读取目标对象材质，不改变当前 UI 选择。 */
    getMaterialsByObject(object: THREE.Object3D): MaterialEditorMaterialInfo_2[];
    /** 只读取指定构件材质，不改变当前 UI 选择。 */
    getMaterialsByTarget(target: MaterialEditorTarget_2): MaterialEditorMaterialInfo_2[];
    /** 读取当前场景中所有可编辑材质。 */
    getAllSceneMaterials(): MaterialEditorMaterialInfo_2[];
    /** 返回当前选择对象上可编辑的材质信息。 */
    getSelectedMaterials(): MaterialEditorMaterialInfo_2[];
    /** 返回全场景相对快照发生变化的材质信息。 */
    getModifiedMaterials(): MaterialModificationRecord_2[];
    /** 重建当前场景基准快照；通常在模型加载完成后由编辑器自动调用。 */
    captureSceneSnapshot(): void;
    /** 批量更新材质参数。 */
    updateMaterial(materialId: string, patch: Partial<Record<string, unknown>>): void;
    /** 通过 URL 或 File 修改指定贴图槽；传入 null 时清除贴图。 */
    setTexture(materialId: string, slot: MaterialMapSlot_2, source: string | File | null): Promise<void>;
    /** 一键还原所有有基准快照的场景材质。 */
    restoreAll(): void;
    /** 兼容常见命名：重置所有材质修改。 */
    resetAll(): void;
    /** 还原单个材质。 */
    restoreMaterial(materialId: string): void;
    /** 获取当前面板正在编辑的材质。 */
    getActiveMaterial(): THREE.Material | null;
    /** 刷新 DOM 面板。 */
    render(): void;
    /** 销毁 DOM、事件监听和编辑器创建的贴图资源。 */
    dispose(): void;
    private bindEvents;
    private setSelectedMaterials;
    /** 内容完全相同的材质只保留一个卡片，并合并它关联的对象和实际材质实例。 */
    private dedupeMaterials;
    private collectSceneMaterials;
    private findMaterialById;
    private findMaterialGroupById;
    private replaceTexture;
    private loadTexture;
    private requestRender;
    private disposeOwnedTextures;
}

declare class Measure {
    private isActive;
    private engine;
    private clearHeightMeasure;
    private distanceMeasure;
    private clearDistanceMeasure;
    private elevationMeasure;
    private pointMeasure;
    private angleMeasure;
    private areaMeasure;
    private slopeMeasure;
    private faceDistanceMeasure;
    private tools;
    private annotationContainer;
    private annotationData;
    constructor(engine: any);
    private setContextMenuDisabled;
    active(): void;
    disActive(): void;
    quitDraw(): void;
    clearAllPoints(): void;
    clearAll(): void;
    saveSetting(setting: any): void;
    getSetting(): any;
    update(): void;
    dispose(): void;
}

declare class Measure_2 {
    private isActive;
    private engine;
    private clearHeightMeasure;
    private distanceMeasure;
    private clearDistanceMeasure;
    private elevationMeasure;
    private pointMeasure;
    private angleMeasure;
    private areaMeasure;
    private slopeMeasure;
    private faceDistanceMeasure;
    private tools;
    private annotationContainer;
    private annotationData;
    constructor(engine: any);
    private setContextMenuDisabled;
    active(): void;
    disActive(): void;
    quitDraw(): void;
    clearAllPoints(): void;
    clearAll(): void;
    saveSetting(setting: any): void;
    getSetting(): any;
    update(): void;
    dispose(): void;
}

declare class Measure_3 {
    readonly distanceMeasure: DistanceMeasure2d;
    readonly areaMeasure: AreaMeasure2d;
    readonly angleMeasure: AngleMeasure2d;
    annotationData: Record<string, MeasureRecord2d[]>;
    private readonly engine;
    private readonly container;
    readonly annotationContainer: HTMLDivElement;
    private setting;
    private isActive;
    private currentTool;
    private previewRecord;
    private mouseDownPoint;
    private hasDraggedAfterMouseDown;
    private currentWorkspaceKey;
    constructor(engine: any);
    /** 开启 2D 测量事件；只停用图元点选，不停用 pan/zoom 视图控制。 */
    active(): void;
    /** 关闭测量并恢复图元点选，已完成测量保留在视图中。 */
    disActive(): void;
    /** 退出当前绘制，不删除已完成的测量结果。 */
    quitDraw(): void;
    /** 统一激活入口，业务侧可直接调用 engine.measure.activate('distance')。 */
    activate(type: MeasureType2d): void;
    /** 清空当前未完成测量点。 */
    clearAllPoints(): void;
    /** 清空所有 2D 测量标注。 */
    clearAll(): void;
    /** 取消当前选中的测量标注，高亮状态与 3D 测量保持一致。 */
    cancelCurrentSelectedAnnotation(): void;
    /** 保存测量显示设置，保留精度、单位和比例尺接口。 */
    saveSetting(setting: Partial<MeasureSetting2d>): void;
    /** 单独设置小数位，方便业务 UI 绑定。 */
    setPrecision(precision: number): void;
    /** 获取当前测量设置。 */
    getSetting(): MeasureSetting2d;
    /** 每帧同步 SVG 坐标，保持与 3D 测量一样的覆盖层标注效果。 */
    update(): void;
    /** 切换模型/布局空间时只显示当前工作空间的测量标注，避免互相影响。 */
    setWorkspace(workspaceKey: string): void;
    /** 销毁测量相关 DOM 和事件。 */
    dispose(): void;
    setCurrentTool(tool: BaseMeasureTool2d): void;
    drawPreview(type: MeasureType2d, points: THREE.Vector3[]): void;
    clearPreview(): void;
    addMeasurement(type: MeasureType2d, points: THREE.Vector3[]): MeasureRecord2d;
    /** 删除当前选中的测量标注。 */
    deleteSelected(): void;
    /** 双击结束面积时，去掉浏览器第二次 click 产生的重复尾点。 */
    removeTrailingDuplicatePoint(points: THREE.Vector3[]): THREE.Vector3[];
    private disActiveMeasureTools;
    private handleMouseDown;
    private handleClick;
    private handleMove;
    private handleDoubleClick;
    private handleContextMenu;
    private handleKeyDown;
    private eventToWorld;
    private createRecord;
    private createSvg;
    private bindRecordSelection;
    private applyRecordHighlight;
    private svgElement;
    private updateRecords;
    private updateRecordSvg;
    private updateDistanceSvg;
    private updateAreaSvg;
    private updateAngleSvg;
    private updateLabel;
    private worldToScreen;
    private computeValue;
    private computeArea;
    private computeAngle;
    private formatValue;
    private refreshLabels;
    private refreshWorkspaceVisibility;
    private removeRecords;
    private getRecords;
    private normalizePrecision;
    private createId;
}

declare interface MeasureRecord2d {
    id: string;
    type: MeasureType2d;
    workspaceKey: string;
    points: THREE.Vector3[];
    container: HTMLDivElement;
    svg: SVGSVGElement;
    value: number;
    text: string;
    isSelect?: boolean;
    highlight?: boolean;
}

declare interface MeasureSetting2d {
    precision: number;
    unit: string;
    areaUnit?: string;
    scale: number;
}

declare type MeasureType2d = 'distance' | 'area' | 'angle';

/**
 * 生成与 boundingBox 同大的剖切面并贴到剖面上（仅负责平面 mesh 的创建与展示，剖切逻辑在 Clipping 中）
 */
declare class Merge2d {
    private engine;
    private sectionPlaneGroup;
    private loaderModule2d;
    constructor(engine: any);
    /**
     * 根据剖切面原点与视线方向，生成与场景 boundingBox 同大的平面 mesh 并添加到场景（贴到剖面上）
     * @param origin 剖面上的点 {x, y, z}
     * @param viewDirection 视线方向 {x, y, z}，剖切面法向取反后指向相机侧
     */
    attachSectionPlane(url: string, viewId: string, origin: {
        x: number;
        y: number;
        z: number;
    }, viewDirection: {
        x: number;
        y: number;
        z: number;
    }): Promise<void>;
    /**
     * 移除由 attachSectionPlane 添加的剖切面平面
     */
    removeSectionPlane(): void;
    private getMatrix;
    computeMatrixFromOriginAndDirection(origin: any, direction: any): THREE.Matrix4;
}

/**
 * 生成与 boundingBox 同大的剖切面并贴到剖面上（仅负责平面 mesh 的创建与展示，剖切逻辑在 Clipping 中）
 */
declare class Merge2d_2 {
    private engine;
    private sectionPlaneGroup;
    private loaderModule2d;
    constructor(engine: any);
    /**
     * 根据剖切面原点与视线方向，生成与场景 boundingBox 同大的平面 mesh 并添加到场景（贴到剖面上）
     * @param origin 剖面上的点 {x, y, z}
     * @param viewDirection 视线方向 {x, y, z}，剖切面法向取反后指向相机侧
     */
    attachSectionPlane(url: string, viewId: string, origin: {
        x: number;
        y: number;
        z: number;
    }, viewDirection: {
        x: number;
        y: number;
        z: number;
    }): Promise<void>;
    /**
     * 移除由 attachSectionPlane 添加的剖切面平面
     */
    removeSectionPlane(): void;
    private getMatrix;
    computeMatrixFromOriginAndDirection(origin: any, direction: any): THREE.Matrix4;
}

declare class MiniMap {
    private engine;
    private miniMapCamera;
    private miniMapRenderer;
    private miniMapContainer;
    private overlayCanvas;
    private overlayCtx;
    private levelToolbar;
    private sizeToggleButton;
    private resizeHandle;
    private modelSelect;
    private levelSelect;
    private levelModels;
    private levelDataSignature;
    private selectedModelUrl;
    private isVisible;
    private readonly defaultMapSize;
    private readonly minMapSize;
    private currentMapWidth;
    private currentMapHeight;
    private isExpanded;
    private readonly levelJumpEyeOffset;
    private currentHalfSize;
    private readonly minHalfSize;
    private readonly maxHalfSize;
    private halfSizeInitialized;
    private camY;
    private selectedLevelCamY;
    private centerX;
    private centerZ;
    private dragMode;
    private readonly moveHandleRadius;
    private readonly rotateHandleRadius;
    private lastMouseX;
    private lastMouseY;
    private dragPointerOffsetX;
    private dragPointerOffsetY;
    private isResizingMap;
    private resizeStartMouseX;
    private resizeStartMouseY;
    private resizeStartSize;
    private centerInitialized;
    private isMouseInsideMiniMap;
    private readonly loadingCompletedEventName;
    private readonly onLoadingCompleted;
    constructor(engine: any);
    getstate(): boolean;
    private isMobileDevice;
    private applyContainerPosition;
    private applySizeToggleButtonPosition;
    private applyResizeHandlePosition;
    private init;
    private initLevelSelectors;
    private initSizeToggleButton;
    private initResizeHandle;
    private getSizeToggleIcon;
    private readonly onSizeToggleClick;
    private readonly onResizeHandleMouseDown;
    private setExpanded;
    private resizeMap;
    setSize(width: number, height: number): void;
    private applyMapSize;
    private clampMapSize;
    private resizeOverlayCanvas;
    private createSelectElement;
    private bindControlEventBlock;
    private readonly onModelChange;
    private readonly onLevelChange;
    private refreshLevelSelectors;
    private pickSelectedModelUrl;
    private fillModelSelect;
    private refreshLevelOptionsByModel;
    private jumpToElevation;
    private collectModelLevels;
    private normalizeLevelData;
    private getModelDisplayName;
    private buildLevelSignature;
    private worldToPixel;
    private pixelToWorld;
    private getHorizontalHalfSize;
    private isRoamingActive;
    private getThirdPersonControl;
    private getActiveControlPosition;
    private setupEvents;
    private readonly onWheel;
    private readonly onMouseDown;
    private readonly onMouseMove;
    private readonly onMouseUp;
    private readonly onMouseEnter;
    private readonly onMouseLeave;
    private readonly onWindowResize;
    private handleResizeMapByDrag;
    private handleMoveControlByDrag;
    private handlePanMapByDrag;
    private handleRotateByDrag;
    private drawOverlay;
    show(): void;
    hide(): void;
    toggle(): void;
    update(): void;
    dispose(): void;
}

declare class MiniMap_2 {
    private engine;
    private miniMapCamera;
    private miniMapRenderer;
    private miniMapContainer;
    private overlayCanvas;
    private overlayCtx;
    private levelToolbar;
    private sizeToggleButton;
    private resizeHandle;
    private modelSelect;
    private levelSelect;
    private levelModels;
    private levelDataSignature;
    private selectedModelUrl;
    private isVisible;
    private readonly defaultMapSize;
    private readonly minMapSize;
    private currentMapWidth;
    private currentMapHeight;
    private isExpanded;
    private readonly levelJumpEyeOffset;
    private currentHalfSize;
    private readonly minHalfSize;
    private readonly maxHalfSize;
    private halfSizeInitialized;
    private camY;
    private selectedLevelCamY;
    private centerX;
    private centerZ;
    private dragMode;
    private readonly moveHandleRadius;
    private readonly rotateHandleRadius;
    private lastMouseX;
    private lastMouseY;
    private dragPointerOffsetX;
    private dragPointerOffsetY;
    private isResizingMap;
    private resizeStartMouseX;
    private resizeStartMouseY;
    private resizeStartSize;
    private centerInitialized;
    private isMouseInsideMiniMap;
    private readonly loadingCompletedEventName;
    private readonly onLoadingCompleted;
    constructor(engine: any);
    getstate(): boolean;
    private isMobileDevice;
    private applyContainerPosition;
    private applySizeToggleButtonPosition;
    private applyResizeHandlePosition;
    private init;
    private initLevelSelectors;
    private initSizeToggleButton;
    private initResizeHandle;
    private getSizeToggleIcon;
    private readonly onSizeToggleClick;
    private readonly onResizeHandleMouseDown;
    private setExpanded;
    private resizeMap;
    setSize(width: number, height: number): void;
    private applyMapSize;
    private clampMapSize;
    private resizeOverlayCanvas;
    private createSelectElement;
    private bindControlEventBlock;
    private readonly onModelChange;
    private readonly onLevelChange;
    private refreshLevelSelectors;
    private pickSelectedModelUrl;
    private fillModelSelect;
    private refreshLevelOptionsByModel;
    private jumpToElevation;
    private collectModelLevels;
    private normalizeLevelData;
    private getModelDisplayName;
    private buildLevelSignature;
    private worldToPixel;
    private pixelToWorld;
    private getHorizontalHalfSize;
    private isRoamingActive;
    private getThirdPersonControl;
    /**
     * 小地图使用 WebGL，而 V3 主视图使用 WebGPU；同一骨骼模型不能交给两个后端交替更新。
     * 人物位置已由小地图覆盖层绘制，因此渲染小地图场景时临时隐藏人物模型即可。
     */
    private renderSceneWithoutThirdPersonAvatar;
    private getActiveControlPosition;
    private setupEvents;
    private readonly onWheel;
    private readonly onMouseDown;
    private readonly onMouseMove;
    private readonly onMouseUp;
    private readonly onWindowBlur;
    private readonly onMouseEnter;
    private readonly onMouseLeave;
    private readonly onWindowResize;
    private handleResizeMapByDrag;
    private handleMoveControlByDrag;
    private handlePanMapByDrag;
    private handleRotateByDrag;
    private drawOverlay;
    show(): void;
    hide(): void;
    toggle(): void;
    update(): void;
    dispose(): void;
}

declare interface MobileMemoryProfile {
    readonly maxTextureSize: 2 | 2048 | 4096 | 10240;
    readonly samples: 0 | 2 | 4 | 6;
    readonly restrictTextureSize: boolean;
}

export declare interface ModelAnimationInfo {
    name: string;
    duration: number;
}

declare interface ModelAnimationInfo_2 {
    name: string;
    duration: number;
}

export declare interface ModelAnimationOptions {
    loop?: boolean;
    repetitions?: number;
    timeScale?: number;
    clampWhenFinished?: boolean;
    fadeIn?: number;
    stopOthers?: boolean;
}

declare interface ModelAnimationOptions_2 {
    loop?: boolean;
    repetitions?: number;
    timeScale?: number;
    clampWhenFinished?: boolean;
    fadeIn?: number;
    stopOthers?: boolean;
}

/** 三维模型点击事件中的单个构件数据。 */
export declare interface ModelClickEventItem {
    url: string;
    ids: Array<string | number>;
    /** 与 ids 按索引一一对应的构件 GUID。 */
    guids: string[];
}

/**
 * 以当前引擎为基准版本，对另一个引擎的 nodesMap 进行手动差异比较。
 * 模块不会在模型加载后自动执行，只有调用 compare 后才会开始或等待加载完成。
 */
export declare class ModelComparison {
    private readonly engine;
    private readonly listeners;
    private activeRun;
    private visualizationState;
    private readonly loadingOverlays;
    private nextRunId;
    constructor(engine: any);
    /** 订阅对比进度、完成、取消或异常事件；返回取消订阅函数。 */
    on<K extends keyof ModelComparisonEventMap_2>(event: K, callback: (data: ModelComparisonEventMap_2[K]) => void): () => void;
    /** 取消指定事件的监听。 */
    off<K extends keyof ModelComparisonEventMap_2>(event: K, callback: (data: ModelComparisonEventMap_2[K]) => void): void;
    /**
     * 手动开始一次对比；当前引擎为基准版本，targetEngine 为待比较版本。
     * 同一实例同一时间只允许一个任务，避免两个大模型扫描任务争抢主线程。
     */
    compare(targetEngine: any, options?: ModelComparisonOptions): Promise<ModelComparisonResult>;
    /** 请求停止当前任务；批处理中的任务会在下一批开始前结束。 */
    cancel(): boolean;
    /** 恢复最近一次模型对比改动过的构件颜色与透明度，不影响其他构件。 */
    restoreColors(): boolean;
    /** 释放事件监听，并停止仍在运行的对比。 */
    dispose(): void;
    private normalizeOptions;
    /** 在每个引擎自己的画布容器内创建精简的 DOM 等待层。 */
    private showLoadingOverlays;
    /** 创建一侧的等待层；无法定位画布容器时静默跳过，不影响无 DOM 场景下的对比。 */
    private createLoadingOverlay;
    /** 根据进度事件更新对应引擎；未指定引擎时同步更新两侧。 */
    private updateLoadingOverlay;
    /** 清理本次任务创建的 DOM 和动画，并还原容器定位样式。 */
    private removeLoadingOverlays;
    /** 等待至少一次实际绘制并短暂保留遮罩，保证小模型也能看到进度反馈。 */
    private waitForLoadingOverlayPaint;
    /** 仅在用户已发起 compare 后等待，避免加载完成事件驱动自动对比。 */
    private waitForEngineReady;
    /** 轻量模型以 loading_completed 为准；空模型也允许参与对比，从而得出全新增或全删除。 */
    private isEngineReady;
    /** 等待已取消任务的 finally 释放互斥状态，防止旧任务和新任务同时扫描同一批模型。 */
    private waitForRunRelease;
    private compareSnapshots;
    /** 按 GUID 建立数值包围盒快照；原始节点 ID 仅保留给后续改色和定位。 */
    private createSnapshot;
    /** 兼容普通构件 infos、实例构件 info 与 MEP 节点的 min/max 数据。 */
    private extractBox;
    private toBox;
    private toVector;
    private isBoxEqual;
    /**
     * 以半透明白色弱化未变化构件，并在各自所属引擎内标记新增、删除和修改构件。
     * 删除只存在于基准引擎，新增只存在于目标引擎，修改则在两侧都使用黄色。
     */
    private applyColors;
    /** 按模型地址聚合 ID，以符合 modelToolModule 的 [{ url, ids }] 入参格式。 */
    private toModelColorRefs;
    /** 对比结果同时暴露 GUID，并保留运行时 ID 供定位和改色使用。 */
    private toComparisonRef;
    /** 空数组不调用工具模块，避免不必要地触发其状态清理逻辑。 */
    private setColor;
    /** 颜色或实例副本变化后主动请求渲染，避免空闲降帧导致第二次对比看起来未生效。 */
    private requestRender;
    private getNodeCount;
    /** 输出精简诊断日志，帮助区分未比出差异与改色未落到模型两类问题。 */
    private log;
    /** 获取当前引擎模型及其 nodesMap 数量，不输出完整节点以避免控制台过载。 */
    private describeEngineModels;
    /** 仅输出加载状态摘要，定位等待阶段卡住的具体模型而不暴露大体量模型数据。 */
    private describeLoadStatuses;
    /** 汇总模型定位引用数量，用于核对传给改色接口的实际构件数。 */
    private countModelRefs;
    /** 查询 modelToolModule 已登记的改色记录；旧引擎未提供查询接口时也不会影响对比。 */
    private describeCustomColors;
    private createProgress;
    private throwIfCancelled;
    /** 分批让出浏览器主线程，保证页面能够绘制最新进度。 */
    private yieldToBrowser;
    private emit;
}

/**
 * 以当前引擎为基准版本，对另一个引擎的 nodesMap 进行手动差异比较。
 * 模块不会在模型加载后自动执行，只有调用 compare 后才会开始或等待加载完成。
 */
declare class ModelComparison_2 {
    private readonly engine;
    private readonly listeners;
    private activeRun;
    private visualizationState;
    private readonly loadingOverlays;
    private nextRunId;
    constructor(engine: any);
    /** 订阅对比进度、完成、取消或异常事件；返回取消订阅函数。 */
    on<K extends keyof ModelComparisonEventMap>(event: K, callback: (data: ModelComparisonEventMap[K]) => void): () => void;
    /** 取消指定事件的监听。 */
    off<K extends keyof ModelComparisonEventMap>(event: K, callback: (data: ModelComparisonEventMap[K]) => void): void;
    /**
     * 手动开始一次对比；当前引擎为基准版本，targetEngine 为待比较版本。
     * 同一实例同一时间只允许一个任务，避免两个大模型扫描任务争抢主线程。
     */
    compare(targetEngine: any, options?: ModelComparisonOptions_2): Promise<ModelComparisonResult_2>;
    /** 请求停止当前任务；批处理中的任务会在下一批开始前结束。 */
    cancel(): boolean;
    /** 恢复最近一次模型对比改动过的构件颜色与透明度，不影响其他构件。 */
    restoreColors(): boolean;
    /** 释放事件监听，并停止仍在运行的对比。 */
    dispose(): void;
    private normalizeOptions;
    /** 在每个引擎自己的画布容器内创建精简的 DOM 等待层。 */
    private showLoadingOverlays;
    /** 创建一侧的等待层；无法定位画布容器时静默跳过，不影响无 DOM 场景下的对比。 */
    private createLoadingOverlay;
    /** 根据进度事件更新对应引擎；未指定引擎时同步更新两侧。 */
    private updateLoadingOverlay;
    /** 清理本次任务创建的 DOM 和动画，并还原容器定位样式。 */
    private removeLoadingOverlays;
    /** 等待至少一次实际绘制并短暂保留遮罩，保证小模型也能看到进度反馈。 */
    private waitForLoadingOverlayPaint;
    /** 仅在用户已发起 compare 后等待，避免加载完成事件驱动自动对比。 */
    private waitForEngineReady;
    /** 轻量模型以 loading_completed 为准；空模型也允许参与对比，从而得出全新增或全删除。 */
    private isEngineReady;
    /** 等待已取消任务的 finally 释放互斥状态，防止旧任务和新任务同时扫描同一批模型。 */
    private waitForRunRelease;
    private compareSnapshots;
    /** 按 GUID 建立数值包围盒快照；原始节点 ID 仅保留给后续改色和定位。 */
    private createSnapshot;
    /** 兼容普通构件 infos、实例构件 info 与 MEP 节点的 min/max 数据。 */
    private extractBox;
    private toBox;
    private toVector;
    private isBoxEqual;
    /**
     * 以半透明白色弱化未变化构件，并在各自所属引擎内标记新增、删除和修改构件。
     * 删除只存在于基准引擎，新增只存在于目标引擎，修改则在两侧都使用黄色。
     */
    private applyColors;
    /** 按模型地址聚合 ID，以符合 modelToolModule 的 [{ url, ids }] 入参格式。 */
    private toModelColorRefs;
    /** 对比结果同时暴露 GUID，并保留运行时 ID 供定位和改色使用。 */
    private toComparisonRef;
    /** 空数组不调用工具模块，避免不必要地触发其状态清理逻辑。 */
    private setColor;
    /** 颜色或实例副本变化后主动请求渲染，避免空闲降帧导致第二次对比看起来未生效。 */
    private requestRender;
    private getNodeCount;
    /** 输出精简诊断日志，帮助区分未比出差异与改色未落到模型两类问题。 */
    private log;
    /** 获取当前引擎模型及其 nodesMap 数量，不输出完整节点以避免控制台过载。 */
    private describeEngineModels;
    /** 仅输出加载状态摘要，定位等待阶段卡住的具体模型而不暴露大体量模型数据。 */
    private describeLoadStatuses;
    /** 汇总模型定位引用数量，用于核对传给改色接口的实际构件数。 */
    private countModelRefs;
    /** 查询 modelToolModule 已登记的改色记录；旧引擎未提供查询接口时也不会影响对比。 */
    private describeCustomColors;
    private createProgress;
    private throwIfCancelled;
    /** 分批让出浏览器主线程，保证页面能够绘制最新进度。 */
    private yieldToBrowser;
    private emit;
}

/** 包围盒使用数值数组保存，避免对比结果继续持有引擎对象的引用。 */
export declare interface ModelComparisonBox {
    min: [number, number, number];
    max: [number, number, number];
}

/** 包围盒使用数值数组保存，避免对比结果继续持有引擎对象的引用。 */
declare interface ModelComparisonBox_2 {
    min: [number, number, number];
    max: [number, number, number];
}

/** 用户主动取消对比时抛出的可识别错误。 */
export declare class ModelComparisonCancelledError extends Error {
    constructor();
}

declare interface ModelComparisonEventMap {
    progress: ModelComparisonProgress_2;
    completed: ModelComparisonResult_2;
    cancelled: ModelComparisonProgress_2;
    error: Error;
}

declare interface ModelComparisonEventMap_2 {
    progress: ModelComparisonProgress;
    completed: ModelComparisonResult;
    cancelled: ModelComparisonProgress;
    error: Error;
}

/** 单个构件在某一引擎中的可比较快照。 */
export declare interface ModelComparisonNode {
    key: string;
    modelKey: string;
    /** 用于调用 modelToolModule 的运行时模型地址。 */
    modelUrl: string;
    /** 原始节点键仅用于改色和定位，不参与差异匹配。 */
    nodeId: any;
    /** 跨版本构件匹配使用的稳定 GUID。 */
    guid: string;
    box: ModelComparisonBox | null;
}

/** 单个构件在某一引擎中的可比较快照。 */
declare interface ModelComparisonNode_2 {
    key: string;
    modelKey: string;
    /** 用于调用 modelToolModule 的运行时模型地址。 */
    modelUrl: string;
    /** 原始节点键仅用于改色和定位，不参与差异匹配。 */
    nodeId: any;
    /** 跨版本构件匹配使用的稳定 GUID。 */
    guid: string;
    box: ModelComparisonBox_2 | null;
}

/** 用户可按版本、URL 或业务模型 ID 将两侧模型配对为同一个比较键。 */
export declare interface ModelComparisonOptions {
    /** 两个边界值差异不超过该阈值时视为未修改；默认 0.001。 */
    boxTolerance?: number;
    /** 每处理一批节点便让出一次主线程，使进度条和取消操作可以响应。 */
    batchSize?: number;
    /** 发起手动对比时，如引擎尚在加载则监听其完成事件；默认 true。 */
    waitForEngines?: boolean;
    /** 是否按差异类型改色；默认 false，开启后可通过 restoreColors() 恢复。 */
    changeColor?: boolean;
    /** 是否在两个引擎画布容器内显示对比等待层；默认 true。 */
    showLoadingUI?: boolean;
    /** 默认采用业务 key 或数组下标；模型顺序不一致时可通过该函数完成模型配对。 */
    getModelKey?: (model: any, index: number, role: 'baseline' | 'target') => string;
}

/** 用户可按版本、URL 或业务模型 ID 将两侧模型配对为同一个比较键。 */
declare interface ModelComparisonOptions_2 {
    /** 两个边界值差异不超过该阈值时视为未修改；默认 0.001。 */
    boxTolerance?: number;
    /** 每处理一批节点便让出一次主线程，使进度条和取消操作可以响应。 */
    batchSize?: number;
    /** 发起手动对比时，如引擎尚在加载则监听其完成事件；默认 true。 */
    waitForEngines?: boolean;
    /** 是否按差异类型改色；默认 false，开启后可通过 restoreColors() 恢复。 */
    changeColor?: boolean;
    /** 是否在两个引擎画布容器内显示对比等待层；默认 true。 */
    showLoadingUI?: boolean;
    /** 默认采用业务 key 或数组下标；模型顺序不一致时可通过该函数完成模型配对。 */
    getModelKey?: (model: any, index: number, role: 'baseline' | 'target') => string;
}

/** 对比任务可直接用于页面进度条的数据。 */
export declare interface ModelComparisonProgress {
    runId: number;
    stage: 'waiting' | 'snapshot' | 'diff' | 'completed' | 'cancelled' | 'error';
    percent: number | null;
    processed: number;
    total: number;
    message: string;
    engine?: 'baseline' | 'target';
}

/** 对比任务可直接用于页面进度条的数据。 */
declare interface ModelComparisonProgress_2 {
    runId: number;
    stage: 'waiting' | 'snapshot' | 'diff' | 'completed' | 'cancelled' | 'error';
    percent: number | null;
    processed: number;
    total: number;
    message: string;
    engine?: 'baseline' | 'target';
}

/** 面向调用方的构件定位结果，url 可直接作为 modelToolModule 的模型定位键。 */
export declare interface ModelComparisonRef {
    url: string;
    id: any;
    guid: string;
}

/** 面向调用方的构件定位结果，url 可直接作为 modelToolModule 的模型定位键。 */
declare interface ModelComparisonRef_2 {
    url: string;
    id: any;
    guid: string;
}

/** 模型对比的完整结果。 */
export declare interface ModelComparisonResult {
    runId: number;
    /** 新增构件：只存在于目标引擎。 */
    addedIds: ModelComparisonRef[];
    /** 删除构件：只存在于基准引擎。 */
    removedIds: ModelComparisonRef[];
    /** 包围盒修改构件：同时保留基准与目标模型中的 url、运行时 id 与 guid。 */
    modifiedBoxIds: ModifiedModelComparisonRef[];
    added: ModelComparisonNode[];
    removed: ModelComparisonNode[];
    modifiedBox: ModifiedBoxNode[];
    unchanged: UnchangedModelNode[];
    boxUnavailable: ModelComparisonNode[];
    summary: {
        added: number;
        removed: number;
        modifiedBox: number;
        unchanged: number;
        boxUnavailable: number;
    };
}

/** 模型对比的完整结果。 */
declare interface ModelComparisonResult_2 {
    runId: number;
    /** 新增构件：只存在于目标引擎。 */
    addedIds: ModelComparisonRef_2[];
    /** 删除构件：只存在于基准引擎。 */
    removedIds: ModelComparisonRef_2[];
    /** 包围盒修改构件：同时保留基准与目标模型中的 url、运行时 id 与 guid。 */
    modifiedBoxIds: ModifiedModelComparisonRef_2[];
    added: ModelComparisonNode_2[];
    removed: ModelComparisonNode_2[];
    modifiedBox: ModifiedBoxNode_2[];
    unchanged: UnchangedModelNode_2[];
    boxUnavailable: ModelComparisonNode_2[];
    summary: {
        added: number;
        removed: number;
        modifiedBox: number;
        unchanged: number;
        boxUnavailable: number;
    };
}

declare class ModelEdge {
    private engine;
    private isActive;
    private groupEdge;
    private highlightEdgeGroup;
    private material;
    private highlightEdgeMaterial;
    private baseOpacity;
    private modelEdgeLoaded;
    private modelEdgeLoadingPromise;
    private indexes;
    private highlightIndexes;
    private highlightEdgeSyncVersion;
    private explodeHidden;
    private groupVisibleBeforeExplode;
    private highlightVisibleBeforeExplode;
    private getModelEntry;
    /** 判断模型是否允许加载边线；旧模型记录未包含该字段时按允许处理。 */
    private shouldLoadModelEdge;
    private getFilteredIdSet;
    private getOrCreateItemIndex;
    private getEdgePointsByIndex;
    private getLineByUrl;
    private getHighlightIndex;
    constructor(engine: any);
    active(): void;
    disActive(): void;
    isEnabled(): boolean;
    getOpacity(): number;
    /** 炸开期间临时隐藏所有边线；退出炸开时恢复进入炸开前的可见状态。 */
    setExplodeHidden(hidden: boolean): void;
    update(): void;
    private hasPendingModelEdges;
    private loadZipJsonAsync;
    private ensureModelEdgeData;
    loadModelEdge(): Promise<void>;
    private show;
    /**
     * 同步某个模型 url 的边线整体变换，使边线与被校准后的模型保持一致。
     */
    setModelEdgeTransform(url: string, matrix: THREE.Matrix4): void;
    private setLineTransform;
    syncHighlightModelEdges(models: any[]): void;
    clearHighlightModelEdges(): void;
    /** 清理指定模型的普通边线、高亮边线和索引缓存。 */
    releaseModel(url: string): void;
    releaseIndexes(url?: string): void;
    private syncHighlightModelEdgesAsync;
    private appendEdgePositions;
    private disposeHighlightEdges;
    getModelEdge(url: string, id: Number): any[] | null;
    hideModelEdge(url: string, id: Number): void;
    setOpacity(opacity: number): void;
    showModelEdge(url: string, id: Number): void;
}

declare class ModelEdge_2 {
    private engine;
    private isActive;
    private groupEdge;
    private highlightEdgeGroup;
    private material;
    private highlightEdgeMaterial;
    private baseOpacity;
    private modelEdgeLoaded;
    private modelEdgeLoadingPromise;
    private indexes;
    private highlightIndexes;
    private highlightEdgeSyncVersion;
    private explodeHidden;
    private groupVisibleBeforeExplode;
    private highlightVisibleBeforeExplode;
    private getModelEntry;
    /** 判断模型是否允许加载边线；旧模型记录未包含该字段时按允许处理。 */
    private shouldLoadModelEdge;
    private getFilteredIdSet;
    private getOrCreateItemIndex;
    private getEdgePointsByIndex;
    private getLineByUrl;
    private getHighlightIndex;
    constructor(engine: any);
    active(): void;
    disActive(): void;
    isEnabled(): boolean;
    getOpacity(): number;
    /** 炸开期间临时隐藏所有边线；退出炸开时恢复进入炸开前的可见状态。 */
    setExplodeHidden(hidden: boolean): void;
    update(): void;
    private hasPendingModelEdges;
    private loadZipJsonAsync;
    private ensureModelEdgeData;
    loadModelEdge(): Promise<void>;
    private show;
    /**
     * 同步某个模型 url 的边线整体变换，使边线与被校准后的模型保持一致。
     */
    setModelEdgeTransform(url: string, matrix: THREE.Matrix4): void;
    private setLineTransform;
    syncHighlightModelEdges(models: any[]): void;
    clearHighlightModelEdges(): void;
    /** 清理指定模型的普通边线、高亮边线和索引缓存。 */
    releaseModel(url: string): void;
    releaseIndexes(url?: string): void;
    private syncHighlightModelEdgesAsync;
    private appendEdgePositions;
    private disposeHighlightEdges;
    getModelEdge(url: string, id: Number): any[] | null;
    hideModelEdge(url: string, id: Number): void;
    setOpacity(opacity: number): void;
    showModelEdge(url: string, id: Number): void;
}

declare class ModelEditor {
    private engine;
    constructor(engine_: any);
}

/**
 * 模型炸开管理器。
 *
 * 设计目标：
 * 1. 炸开期间不直接修改原始构件顶点，而是创建临时代理网格承载位移。
 * 2. 代理对象保留原始 url/id，点选、高亮、显隐、框选和双击定位仍按完整构件工作。
 * 3. 原始渲染对象被临时隐藏或拆分隐藏，避免原位模型与代理模型重复显示。
 * 4. 炸开期间临时隐藏边线，避免边线与代理模型出现错位。
 */
declare class ModelExplode {
    private engine;
    /** 当前是否处于炸开模式；供外部滑块、交互模块判断是否需要走代理逻辑。 */
    private active;
    /** 当前炸开倍数。真实代理位移 = record.offsetLocal * factor。 */
    private factor;
    /** 本轮炸开创建的所有代理记录，按渲染片段保存。 */
    private records;
    /** 非空时表示动画仍在推进，EngineKernel 每帧会调用 update。 */
    private animation;
    /** 炸开期间被临时隐藏的高亮/透明/自定义颜色运行时对象，reset 时恢复可见性。 */
    private hiddenRuntimeObjects;
    /** 炸开代理专用高亮材质，避免复用原高亮对象导致位置不同步。 */
    private readonly highlightMaterial;
    /** 炸开代理专用半透明材质，与原模型透明状态保持一致。 */
    private readonly translucentMaterial;
    /** 初始化代理材质，并继承当前剖切平面配置。 */
    constructor(engine: any);
    /**
     * 启动炸开模式。
     *
     * 流程：
     * 1. 清理上一轮代理并恢复边线显示状态，保证重复调用不会叠加状态。
     * 2. 解析目标构件，未指定 targets 时默认对所有已加载模型执行整模型炸开。
     * 3. 基于目标包围盒计算每个构件的基础世界位移 offsetWorld。
     * 4. 为普通网格或实例网格创建代理对象，并隐藏对应原始渲染片段。
     * 5. 同步当前高亮、隐藏、半透明、自定义颜色状态，并在炸开期间隐藏边线。
     */
    explode(options?: ModelExplodeOptions_2): void;
    /**
     * 设置炸开系数，常用于外部滑杆实时控制。
     *
     * factor 只改变代理 position，不重新创建代理，因此拖动滑块时不会破坏
     * 构件的交互身份和材质状态。
     */
    setFactor(factor: number): void;
    /**
     * 每帧推进炸开动画；由 EngineKernel 的主渲染循环调用。
     * 动画本质上只是在 from/to 之间插值 factor，最终仍复用 setFactor 的统一同步链路。
     */
    update(): void;
    /**
     * 清理炸开代理并按当前构件状态恢复原始渲染对象。
     *
     * reset 不简单地把所有原对象显示出来，而是重新检查隐藏/高亮/半透明/自定义颜色状态，
     * 避免用户在炸开期间执行显隐或改色后，退出炸开时丢失业务状态。
     */
    reset(): void;
    /** 只释放指定模型的炸开代理和管理器引用，保留其他模型的炸开状态。 */
    releaseModel(url: string): void;
    /** 释放炸开管理器持有的专用材质，通常由 EngineKernel 销毁时调用。 */
    dispose(): void;
    /** 返回当前是否处于炸开模式。 */
    isActive(): boolean;
    /**
     * 判断某个构件是否已由炸开代理接管。
     * 八叉树、拾取和框选逻辑可据此跳过原位对象，避免命中已隐藏但仍存在于场景中的源构件。
     */
    hasRecord(url: string, id: any): boolean;
    /**
     * 从命中的代理对象还原真实构件 ID，避免 Object3D.name 字符串化造成 nodesMap 查询失败。
     */
    getObjectComponentId(object: any): string | number | null;
    /**
     * 返回炸开后用于悬浮高亮的代理网格。
     * 一个构件可能拆成多个代理片段，调用方应把返回数组整体当作一个完整构件处理。
     */
    getCatchMeshes(url: string, id: any): THREE.Mesh[];
    /**
     * 返回炸开后的构件世界包围盒，供框选、双击定位等交互使用。
     * 这里以代理对象的实时 matrixWorld 为准，因此滑块拖动和动画过程中也能得到正确位置。
     */
    getExplodedWorldBox(url: string, id: any): THREE.Box3 | null;
    /**
     * 对炸开代理做独立射线拾取；返回结构与 three.js Raycaster 结果兼容。
     * 调用方命中代理后，需要再通过 getObjectComponentId 还原真实构件 id。
     */
    raycast(raycaster: THREE.Raycaster): THREE.Intersection[];
    /**
     * 同步当前高亮、隐藏、半透明和自定义颜色状态到炸开代理。
     * 该方法在模型工具模块改变状态后调用，保证炸开期间仍支持完整构件交互。
     */
    syncVisualState(): void;
    private resolveTargets;
    /**
     * 构建本轮炸开需要的空间上下文。
     * 这里提前缓存整体包围盒、模型中心和分组包围盒，避免每个构件重复遍历 nodesMap。
     */
    private buildExplodeContext;
    /**
     * 计算单个构件或分组的基础世界位移。
     *
     * radial/type/major 模式按爆炸原点到构件中心的原始向量移动：
     * newCenter = origin + (center - origin) * (1 + factor)，
     * 因此真正应用到代理上的位移是 (center - origin) * factor。
     */
    private computeOffset;
    /** 获取本模型的爆炸原点；优先使用业务传入的世界坐标 origin。 */
    private getExplodeCenter;
    /**
     * 根据构件索引创建一条炸开记录。
     * node.indexes 中的每一项对应一个普通合并网格 group 或一个 InstancedMesh 实例。
     */
    private createRecord;
    /** 为普通合并网格中的单个构件片段创建代理网格。 */
    private createMeshProxy;
    /**
     * 为 InstancedMesh 中的单个实例创建代理网格。
     * 实例矩阵会被烘焙进 geometry，后续炸开只移动代理 position，拾取也按普通 Mesh 处理。
     */
    private createInstanceProxy;
    /** 给代理对象写入稳定交互身份，避免依赖 name 的字符串化 id。 */
    private assignProxyIdentity;
    /**
     * 隐藏源渲染片段，避免与代理对象重复显示。
     * 普通合并网格通过重建 geometry groups 隐藏局部片段，实例网格通过零缩放矩阵隐藏单个实例。
     */
    private hideSource;
    /**
     * 恢复源渲染片段。
     * 如果构件在炸开期间仍处于隐藏、高亮、半透明或自定义颜色状态，实例源对象继续保持隐藏，
     * 由对应状态对象负责显示，避免 reset 后出现原模型和状态模型叠加。
     */
    private restoreSource;
    /**
     * 确保普通合并网格已进入可按构件片段控制的拆分状态。
     * 第一次拆分时保存原始片段状态，后续重复同步不覆盖 sourceState。
     */
    private ensureSplitState;
    /**
     * 根据每个构件片段的可见性和材质槽位重建 geometry groups。
     * 连续且材质一致的片段会被合并成一个 group，减少炸开期间状态切换带来的 draw call。
     */
    private rebuildSplitModelGroups;
    /**
     * 将业务状态映射到代理对象。
     * 代理对象不能依赖原场景中的高亮/透明临时对象，因为那些对象仍位于原模型位置。
     */
    private applyProxyVisualState;
    /**
     * 生成代理专用自定义颜色材质。
     * 颜色和透明度相同的请求复用 record.customMaterial，避免滑块或状态同步时反复创建材质。
     */
    private getCustomMaterial;
    /**
     * 隐藏原模型位置上的运行时状态对象。
     * 高亮、半透明和自定义颜色模块通常会创建额外 mesh；炸开时这些 mesh 不会自动跟随代理，
     * 因此这里临时隐藏它们，并由代理自己承载相同视觉状态。
     */
    private hideRuntimeObjectsForExplodedRecords;
    /** 恢复 hideRuntimeObjectsForExplodedRecords 临时隐藏的运行时对象。 */
    private restoreRuntimeObjects;
    /** 从场景中移除代理对象，并释放代理持有的 geometry 和材质资源。 */
    private removeProxy;
    /**
     * 克隆源材质用于代理。
     * 当前普通构件代理以主材质为准；高亮、半透明和自定义颜色会在 applyProxyVisualState 中覆盖。
     */
    private cloneProxyMaterial;
    /**
     * 读取构件节点的世界包围盒。
     * 节点 box 通常是模型局部坐标，返回前统一乘以模型组的 matrixWorld。
     */
    private getNodeWorldBox;
    /** 计算单个模型在世界坐标下的整体包围盒，作为默认爆炸原点的依据。 */
    private getModelWorldBox;
    /** 兼容数字 id 和字符串 id 的 nodesMap 查询。 */
    private getNode;
    /** 按 url 从引擎模型列表中查找模型条目。 */
    private getEngineModel;
    /**
     * 获取分组 key。
     * radial/axis 使用构件自身作为分组；level/type/major 使用映射信息让同组构件共享位移方向。
     */
    private getGroupKey;
    /**
     * 获取 InstancedMesh 单个实例的原始矩阵。
     * 优先读取加载器缓存的 matrixsClone/matrixs，避免 getMatrixAt 读到已被隐藏流程改写后的零矩阵。
     */
    private getInstanceMatrix;
    /**
     * 将世界坐标位移转换成某个父节点下的局部位移。
     * 代理对象挂在源 mesh 的父节点下，直接使用世界位移会在模型组存在变换时产生偏差。
     */
    private worldDeltaToLocalDelta;
    /** 判断构件当前是否处于高亮状态。 */
    private isHighlighted;
    /** 判断构件当前是否处于隐藏状态。 */
    private isHidden;
    /** 判断构件当前是否处于半透明状态。 */
    private isTranslucent;
    /**
     * reset 时判断实例源对象是否仍应保持隐藏。
     * 某些状态由独立运行时对象或代理承担显示，如果直接恢复原实例会造成重复显示。
     */
    private shouldKeepOriginalInstanceHidden;
    /** 统一比较构件 id，兼容业务侧传入数字或字符串。 */
    private isSameId;
    /** 归一化炸开系数，非法值按 0 处理，负数不允许反向收缩。 */
    private normalizeFactor;
    /** 将任意值转为稳定数字，用于 level 模式缺少可靠排序时生成确定性偏移。 */
    private getStableNumber;
}

/**
 * 模型炸开管理器。
 *
 * 设计目标：
 * 1. 炸开期间不直接修改原始构件顶点，而是创建临时代理网格承载位移。
 * 2. 代理对象保留原始 url/id，点选、高亮、显隐、框选和双击定位仍按完整构件工作。
 * 3. 原始渲染对象被临时隐藏或拆分隐藏，避免原位模型与代理模型重复显示。
 * 4. 炸开期间临时隐藏边线，避免边线与代理模型出现错位。
 */
declare class ModelExplode_2 {
    private engine;
    /** 当前是否处于炸开模式；供外部滑块、交互模块判断是否需要走代理逻辑。 */
    private active;
    /** 当前炸开倍数。真实代理位移 = record.offsetLocal * factor。 */
    private factor;
    /** 本轮炸开创建的所有代理记录，按渲染片段保存。 */
    private records;
    /** 非空时表示动画仍在推进，EngineKernel 每帧会调用 update。 */
    private animation;
    /** 炸开期间被临时隐藏的高亮/透明/自定义颜色运行时对象，reset 时恢复可见性。 */
    private hiddenRuntimeObjects;
    /** 炸开代理专用高亮材质，避免复用原高亮对象导致位置不同步。 */
    private readonly highlightMaterial;
    /** 炸开代理专用半透明材质，与原模型透明状态保持一致。 */
    private readonly translucentMaterial;
    /** 初始化代理材质，并继承当前剖切平面配置。 */
    constructor(engine: any);
    /**
     * 启动炸开模式。
     *
     * 流程：
     * 1. 清理上一轮代理并恢复边线显示状态，保证重复调用不会叠加状态。
     * 2. 解析目标构件，未指定 targets 时默认对所有已加载模型执行整模型炸开。
     * 3. 基于目标包围盒计算每个构件的基础世界位移 offsetWorld。
     * 4. 为普通网格或实例网格创建代理对象，并隐藏对应原始渲染片段。
     * 5. 同步当前高亮、隐藏、半透明、自定义颜色状态，并在炸开期间隐藏边线。
     */
    explode(options?: ModelExplodeOptions): void;
    /**
     * 设置炸开系数，常用于外部滑杆实时控制。
     *
     * factor 只改变代理 position，不重新创建代理，因此拖动滑块时不会破坏
     * 构件的交互身份和材质状态。
     */
    setFactor(factor: number): void;
    /**
     * 每帧推进炸开动画；由 EngineKernel 的主渲染循环调用。
     * 动画本质上只是在 from/to 之间插值 factor，最终仍复用 setFactor 的统一同步链路。
     */
    update(): void;
    /**
     * 清理炸开代理并按当前构件状态恢复原始渲染对象。
     *
     * reset 不简单地把所有原对象显示出来，而是重新检查隐藏/高亮/半透明/自定义颜色状态，
     * 避免用户在炸开期间执行显隐或改色后，退出炸开时丢失业务状态。
     */
    reset(): void;
    /**
     * 只释放指定模型的炸开代理，其他模型的炸开状态保持不变。
     * 目标模型随后会被卸载，因此它关联的临时运行时对象无需恢复可见性。
     */
    releaseModel(url: string): void;
    /** 释放炸开管理器持有的专用材质，通常由 EngineKernel 销毁时调用。 */
    dispose(): void;
    /** 返回当前是否处于炸开模式。 */
    isActive(): boolean;
    /**
     * 判断某个构件是否已由炸开代理接管。
     * 八叉树、拾取和框选逻辑可据此跳过原位对象，避免命中已隐藏但仍存在于场景中的源构件。
     */
    hasRecord(url: string, id: any): boolean;
    /**
     * 从命中的代理对象还原真实构件 ID，避免 Object3D.name 字符串化造成 nodesMap 查询失败。
     */
    getObjectComponentId(object: any): string | number | null;
    /**
     * 返回炸开后用于悬浮高亮的代理网格。
     * 一个构件可能拆成多个代理片段，调用方应把返回数组整体当作一个完整构件处理。
     */
    getCatchMeshes(url: string, id: any): THREE.Mesh[];
    /**
     * 返回炸开后的构件世界包围盒，供框选、双击定位等交互使用。
     * 这里以代理对象的实时 matrixWorld 为准，因此滑块拖动和动画过程中也能得到正确位置。
     */
    getExplodedWorldBox(url: string, id: any): THREE.Box3 | null;
    /**
     * 对炸开代理做独立射线拾取；返回结构与 three.js Raycaster 结果兼容。
     * 调用方命中代理后，需要再通过 getObjectComponentId 还原真实构件 id。
     */
    raycast(raycaster: THREE.Raycaster): THREE.Intersection[];
    /**
     * 同步当前高亮、隐藏、半透明和自定义颜色状态到炸开代理。
     * 该方法在模型工具模块改变状态后调用，保证炸开期间仍支持完整构件交互。
     */
    syncVisualState(): void;
    private resolveTargets;
    /**
     * 构建本轮炸开需要的空间上下文。
     * 这里提前缓存整体包围盒、模型中心和分组包围盒，避免每个构件重复遍历 nodesMap。
     */
    private buildExplodeContext;
    /**
     * 计算单个构件或分组的基础世界位移。
     *
     * radial/type/major 模式按爆炸原点到构件中心的原始向量移动：
     * newCenter = origin + (center - origin) * (1 + factor)，
     * 因此真正应用到代理上的位移是 (center - origin) * factor。
     */
    private computeOffset;
    /** 获取本模型的爆炸原点；优先使用业务传入的世界坐标 origin。 */
    private getExplodeCenter;
    /**
     * 根据构件索引创建一条炸开记录。
     * node.indexes 中的每一项对应一个普通合并网格 group 或一个 InstancedMesh 实例。
     */
    private createRecord;
    /** 为普通合并网格中的单个构件片段创建代理网格。 */
    private createMeshProxy;
    /**
     * 为 InstancedMesh 中的单个实例创建代理网格。
     * 实例矩阵会被烘焙进 geometry，后续炸开只移动代理 position，拾取也按普通 Mesh 处理。
     */
    private createInstanceProxy;
    /** 给代理对象写入稳定交互身份，避免依赖 name 的字符串化 id。 */
    private assignProxyIdentity;
    /**
     * 隐藏源渲染片段，避免与代理对象重复显示。
     * 普通合并网格通过重建 geometry groups 隐藏局部片段，实例网格通过零缩放矩阵隐藏单个实例。
     */
    private hideSource;
    /**
     * 恢复源渲染片段。
     * 如果构件在炸开期间仍处于隐藏、高亮、半透明或自定义颜色状态，实例源对象继续保持隐藏，
     * 由对应状态对象负责显示，避免 reset 后出现原模型和状态模型叠加。
     */
    private restoreSource;
    /**
     * 确保普通合并网格已进入可按构件片段控制的拆分状态。
     * 第一次拆分时保存原始片段状态，后续重复同步不覆盖 sourceState。
     */
    private ensureSplitState;
    /**
     * 根据每个构件片段的可见性和材质槽位重建 geometry groups。
     * 连续且材质一致的片段会被合并成一个 group，减少炸开期间状态切换带来的 draw call。
     */
    private rebuildSplitModelGroups;
    /**
     * 将业务状态映射到代理对象。
     * 代理对象不能依赖原场景中的高亮/透明临时对象，因为那些对象仍位于原模型位置。
     */
    private applyProxyVisualState;
    /**
     * 生成代理专用自定义颜色材质。
     * 颜色和透明度相同的请求复用 record.customMaterial，避免滑块或状态同步时反复创建材质。
     */
    private getCustomMaterial;
    /**
     * 隐藏原模型位置上的运行时状态对象。
     * 高亮、半透明和自定义颜色模块通常会创建额外 mesh；炸开时这些 mesh 不会自动跟随代理，
     * 因此这里临时隐藏它们，并由代理自己承载相同视觉状态。
     */
    private hideRuntimeObjectsForExplodedRecords;
    /** 恢复 hideRuntimeObjectsForExplodedRecords 临时隐藏的运行时对象。 */
    private restoreRuntimeObjects;
    /** 从场景中移除代理对象，并释放代理持有的 geometry 和材质资源。 */
    private removeProxy;
    /**
     * 克隆源材质用于代理。
     * 当前普通构件代理以主材质为准；高亮、半透明和自定义颜色会在 applyProxyVisualState 中覆盖。
     */
    private cloneProxyMaterial;
    /**
     * 读取构件节点的世界包围盒。
     * 节点 box 通常是模型局部坐标，返回前统一乘以模型组的 matrixWorld。
     */
    private getNodeWorldBox;
    /** 计算单个模型在世界坐标下的整体包围盒，作为默认爆炸原点的依据。 */
    private getModelWorldBox;
    /** 兼容数字 id 和字符串 id 的 nodesMap 查询。 */
    private getNode;
    /** 按 url 从引擎模型列表中查找模型条目。 */
    private getEngineModel;
    /**
     * 获取分组 key。
     * radial/axis 使用构件自身作为分组；level/type/major 使用映射信息让同组构件共享位移方向。
     */
    private getGroupKey;
    /**
     * 获取 InstancedMesh 单个实例的原始矩阵。
     * 优先读取加载器缓存的 matrixsClone/matrixs，避免 getMatrixAt 读到已被隐藏流程改写后的零矩阵。
     */
    private getInstanceMatrix;
    /**
     * 将世界坐标位移转换成某个父节点下的局部位移。
     * 代理对象挂在源 mesh 的父节点下，直接使用世界位移会在模型组存在变换时产生偏差。
     */
    private worldDeltaToLocalDelta;
    /** 判断构件当前是否处于高亮状态。 */
    private isHighlighted;
    /** 判断构件当前是否处于隐藏状态。 */
    private isHidden;
    /** 判断构件当前是否处于半透明状态。 */
    private isTranslucent;
    /**
     * reset 时判断实例源对象是否仍应保持隐藏。
     * 某些状态由独立运行时对象或代理承担显示，如果直接恢复原实例会造成重复显示。
     */
    private shouldKeepOriginalInstanceHidden;
    /** 统一比较构件 id，兼容业务侧传入数字或字符串。 */
    private isSameId;
    /** 归一化炸开系数，非法值按 0 处理，负数不允许反向收缩。 */
    private normalizeFactor;
    /** 将任意值转为稳定数字，用于 level 模式缺少可靠排序时生成确定性偏移。 */
    private getStableNumber;
}

export declare type ModelExplodeAxis = 'x' | 'y' | 'z';

declare type ModelExplodeAxis_2 = 'x' | 'y' | 'z';

export declare type ModelExplodeMode = 'radial' | 'axis' | 'level' | 'type' | 'major';

declare type ModelExplodeMode_2 = 'radial' | 'axis' | 'level' | 'type' | 'major';

/**
 * 炸开配置。
 * factor 表示炸开位移倍数：0 为原位，1 为基础位移，2 为基础位移的两倍。
 * origin 用世界坐标表达，未传时默认使用模型自身包围盒中心。
 */
export declare type ModelExplodeOptions = {
    targets?: ModelExplodeTarget[];
    factor?: number;
    mode?: ModelExplodeMode;
    axis?: ModelExplodeAxis;
    origin?: THREE.Vector3;
    animate?: boolean;
    duration?: number;
};

/**
 * 炸开配置。
 * factor 表示炸开位移倍数：0 为原位，1 为基础位移，2 为基础位移的两倍。
 * origin 用世界坐标表达，未传时默认使用模型自身包围盒中心。
 */
declare type ModelExplodeOptions_2 = {
    targets?: ModelExplodeTarget_2[];
    factor?: number;
    mode?: ModelExplodeMode_2;
    axis?: ModelExplodeAxis_2;
    origin?: THREE.Vector3;
    animate?: boolean;
    duration?: number;
};

/** 炸开目标。未传 ids 时表示对该 url 下的所有构件执行炸开。 */
export declare type ModelExplodeTarget = {
    url: string;
    ids?: Array<string | number>;
};

/** 炸开目标。未传 ids 时表示对该 url 下的所有构件执行炸开。 */
declare type ModelExplodeTarget_2 = {
    url: string;
    ids?: Array<string | number>;
};

/**
 * 通过 window CustomEvent 实现同页面内多个 3D 引擎实例的轻量联动。
 */
declare class ModelLink3d {
    readonly viewerGuid: string;
    private readonly engine;
    private options;
    private applyingLinkedEvent;
    private disposed;
    private originalMethods;
    private lastCameraEmitTime;
    private pendingCameraTimer;
    private firstPersonSyncFrame;
    constructor(engine: any, options?: ModelLink3dOptions);
    /**
     * 初始化全局事件监听、相机监听和模型工具方法包装。
     */
    init(): void;
    /**
     * 更新联动配置数据，不改变当前启停状态。
     */
    setOptions(options: ModelLink3dOptions): void;
    /**
     * 激活联动，只负责启用状态。
     */
    active(): void;
    /**
     * 停止联动，只负责禁用状态。
     */
    disActive(): void;
    /**
     * 主动广播当前相机状态，给第一人称等非 OrbitControls 驱动的场景使用。
     */
    syncCameraNow(): void;
    isApplyingLinkedEvent(): boolean;
    dispose(): void;
    private normalizeOptions;
    /** 模型联动开启后需要持续响应外部视图变化，不能进入空闲限帧。 */
    private syncIdleFrameRateExempt;
    private createViewerGuid;
    private wrapModelToolMethods;
    private restoreModelToolMethods;
    private bindCameraEvents;
    private unbindCameraEvents;
    private handleCameraChange;
    private handleCameraEnd;
    private handleFirstPersonCameraChange;
    private startFirstPersonCameraLoop;
    private isCurrentFirstPersonSource;
    private emitCameraThrottled;
    private emitCamera;
    private emitModelAction;
    private emitEvent;
    private handleWindowEvent;
    private shouldEmit;
    private shouldApply;
    private isActionEnabled;
    private applyLinkedAction;
    private toLinkedModelGroups;
    private toLocalModelGroups;
    private resolveLocalModelUrl;
    private getModelIndexByUrl;
    private removeHighlightState;
}

/**
 * 通过 window CustomEvent 实现同页面内多个 3D 引擎实例的轻量联动。
 */
declare class ModelLink3d_2 {
    readonly viewerGuid: string;
    private readonly engine;
    private options;
    private applyingLinkedEvent;
    private disposed;
    private originalMethods;
    private lastCameraEmitTime;
    private pendingCameraTimer;
    private firstPersonSyncFrame;
    constructor(engine: any, options?: ModelLink3dOptions_2);
    /**
     * 初始化全局事件监听、相机监听和模型工具方法包装。
     */
    init(): void;
    /**
     * 更新联动配置数据，不改变当前启停状态。
     */
    setOptions(options: ModelLink3dOptions_2): void;
    /**
     * 激活联动，只负责启用状态。
     */
    active(): void;
    /**
     * 停止联动，只负责禁用状态。
     */
    disActive(): void;
    /**
     * 主动广播当前相机状态，给第一人称等非 OrbitControls 驱动的场景使用。
     */
    syncCameraNow(): void;
    isApplyingLinkedEvent(): boolean;
    dispose(): void;
    private normalizeOptions;
    /** 模型联动开启后需要持续响应外部视图变化，不能进入空闲限帧。 */
    private syncIdleFrameRateExempt;
    private createViewerGuid;
    private wrapModelToolMethods;
    private restoreModelToolMethods;
    private bindCameraEvents;
    private unbindCameraEvents;
    private handleCameraChange;
    private handleCameraEnd;
    private handleFirstPersonCameraChange;
    private startFirstPersonCameraLoop;
    private isCurrentFirstPersonSource;
    private emitCameraThrottled;
    private emitCamera;
    private emitModelAction;
    private emitEvent;
    private handleWindowEvent;
    private shouldEmit;
    private shouldApply;
    private isActionEnabled;
    private applyLinkedAction;
    private toLinkedModelGroups;
    private toLocalModelGroups;
    private resolveLocalModelUrl;
    private getModelIndexByUrl;
    private removeHighlightState;
}

declare type ModelLink3dOptions = {
    enabled?: boolean;
    groupId?: string;
    modelId?: string;
    highlight?: boolean;
    visibility?: boolean;
    translucent?: boolean;
    camera?: boolean;
    cameraMode?: CameraSyncMode;
    cameraThrottleMs?: number;
};

declare type ModelLink3dOptions_2 = {
    enabled?: boolean;
    groupId?: string;
    modelId?: string;
    highlight?: boolean;
    visibility?: boolean;
    translucent?: boolean;
    camera?: boolean;
    cameraMode?: CameraSyncMode_2;
    cameraThrottleMs?: number;
};

declare class ModelMapperBatch {
    private engine;
    constructor(engine: any);
    getModelTypes(): any[];
    getModelMajors(): any[];
    getModelLevels(): any[];
    getModelMappers(models: any[]): void;
    getModelMapper(url: string, id: number): any;
    getModelsWithLevelType(level: string, type: string, callback?: any): any[];
    getModelsWithType(type: string, callback?: any): any[];
    getModelsWithLevel(level: string, callback: any): any[];
    getModelsWithMajor(major: string, callback: any): any[];
}

declare class ModelMapperBatch_2 {
    private engine;
    constructor(engine: any);
    getModelTypes(): any[];
    getModelMajors(): any[];
    getModelLevels(): any[];
    getModelMappers(models: any[]): void;
    getModelMapper(url: string, id: number): any;
    getModelsWithLevelType(level: string, type: string, callback?: any): any[];
    getModelsWithType(type: string, callback?: any): any[];
    getModelsWithLevel(level: string, callback: any): any[];
    getModelsWithMajor(major: string, callback: any): any[];
}

/** 管理独立于 BIM 主模型的第三方 GLB 摆放、编辑与场景持久化。 */
declare class ModelPlace {
    private readonly engine;
    private loader;
    private dracoLoader;
    private dracoDecoderPath;
    private readonly modelList;
    private readonly modelTransforms;
    private readonly animationTimer;
    private transformControl;
    private transformHelper;
    private selectedModelId;
    private copiedModelData;
    private editingEnabled;
    private isRestoring;
    private isUndoing;
    private isPasting;
    private activeLoadCount;
    private readonly pendingModelIds;
    private bimHighlightDisabledBeforeEditing;
    private selectionPointerDown;
    private readonly onPointerDown;
    private readonly onPointerUp;
    private readonly onKeyDown;
    constructor(engine: any);
    /** 释放控制柄、事件和已加载模型；引擎销毁时应调用。 */
    dispose(): void;
    /**
     * 设置 Draco 解码器目录；相对路径会按 SDK 静态资源规则解析。
     * 路径应指向包含 draco_decoder.js、draco_wasm_wrapper.js 和 draco_decoder.wasm 的目录。
     */
    setDracoDecoderPath(path?: string | null): void;
    /** 获取当前实际使用的 Draco 解码器目录。 */
    getDracoDecoderPath(): string;
    /** 每帧同步控制柄并推进第三方模型动画。 */
    update(): void;
    /**
     * 加载 GLB 并放入场景。未指定 position 时，调用方需在开启捕捉的视图中单击确认落点。
     */
    placeModel(options: ModelPlaceOptions_2): Promise<SceneModelData_2>;
    /** 以预览方式放置已准备好的模型数据；预览未确认前不会写入模型列表或历史。 */
    private placePreparedModel;
    /** 选中模型并显示指定模式的操作柄；未传模式时沿用移动模式。 */
    editModel(modelId: string, mode?: ModelTransformMode_2): void;
    /** 结束编辑并隐藏操作柄，不改变当前模型数据。 */
    endEdit(): void;
    /** 获取当前显示操作柄的模型 ID；没有选中模型时返回 null。 */
    getSelectedModelId(): string | null;
    /** 复制当前显示操作柄的模型配置，供 Ctrl/Command+V 或 pasteModel 使用。 */
    copySelectedModel(): boolean;
    /** 将已复制模型作为捕捉预览粘贴；确认落点后生成具有新 ID 的独立模型。 */
    pasteModel(): Promise<SceneModelData_2 | null>;
    /** 按材质槽位或精确名称替换贴图；同名材质会一并替换并持久化。 */
    replaceMaterial(modelId: string, materialTarget: number | string, textureUrl: string): Promise<void>;
    /** 获取模型可替换的材质槽位和名称，供业务层按名称替换前查询。 */
    getModelMaterials(modelId: string): Array<{
        materialIndex: number;
        materialName: string;
    }>;
    /** 查询 GLB 内可播放的动画片段；数组首项即默认动画。 */
    getModelAnimations(modelId: string): ModelAnimationInfo_2[];
    /** 播放指定动画；未传名称时播放 GLB 的第一个默认片段。 */
    playAnimation(modelId: string, animationName?: string, options?: ModelAnimationOptions_2): ModelAnimationInfo_2;
    /** 停止指定动画；未传名称时停止该模型的全部动画。 */
    stopAnimation(modelId: string, animationName?: string): void;
    /**
     * 实时更新模型位置和方向，不写入撤销历史，适用于遥测刷新和路径动画。
     * direction 默认把模型本地 +Z 轴对准目标方向，可通过 forwardAxis 调整模型前向轴。
     */
    updateModelPose(modelId: string, pose: ModelPoseOptions_2): SceneModelData_2;
    /** 高频更新模型位置的便捷接口。 */
    updateModelPosition(modelId: string, position: THREE.Vector3Tuple): SceneModelData_2;
    /** 高频更新模型方向的便捷接口。 */
    updateModelDirection(modelId: string, direction: THREE.Vector3Tuple, forwardAxis?: THREE.Vector3Tuple): SceneModelData_2;
    /** 删除模型及其场景对象。 */
    deleteModel(modelId: string): void;
    /** 清空场景中的全部第三方模型并释放资源；该操作可通过 undo 撤回。 */
    clearModels(): void;
    /** 隐藏指定模型，并保留它以支持后续显示和场景还原。 */
    hideModel(modelId: string): void;
    /** 显示当前管理器中的所有第三方模型。 */
    showAllModels(): void;
    /** 获取可 JSON 序列化的第三方模型场景状态。 */
    getSceneModels(): SceneModelData_2[];
    /** 清空现有第三方模型后，重新加载并恢复已导出的场景状态。 */
    restoreSceneModels(sceneModels: SceneModelData_2[]): Promise<SceneModelData_2[]>;
    /** 撤回最近一次会改变模型状态的操作。 */
    undo(): Promise<boolean>;
    private loadRecord;
    /** 创建挂载 Draco 解码能力的 GLTFLoader，普通 GLB 仍沿用同一加载入口。 */
    private createGltfLoader;
    /** 创建独立解码器实例，便于管理器销毁或切换资源目录时释放 worker。 */
    private createDracoLoader;
    private resolveDracoDecoderPath;
    /** 加载模型资源并创建记录，调用方可决定何时正式加入模型列表。 */
    private createRecord;
    /** 将已加载对象登记为正式模型，使其可被选中、导出和撤回。 */
    private addRecord;
    private applyTexture;
    private ensureTransformControl;
    /** 透视相机使用更小的屏幕尺寸系数，正交相机维持原有尺寸。 */
    private syncTransformControlCamera;
    /** 使用引擎统一的捕捉器等待用户单击，并在取消或完成后恢复常规交互。 */
    private pickPlacementPoint;
    /** 将捕捉点转换为最终放置点：沿世界法线外移 1mm，防止 GLB 与 BIM 面片重叠。 */
    private getPlacementPoint;
    private handlePointerDown;
    /** 仅把未拖动的点击视为选中/取消选中，避免旋转视图时隐藏操作柄。 */
    private handlePointerUp;
    /** 处理第三方模型编辑快捷键：复制粘贴、删除、Tab 切换、Esc 和 Ctrl/Command+Z。 */
    private handleKeyDown;
    /** Ctrl+Z / Command+Z 仅在非文本输入焦点且存在历史时接管，避免影响表单编辑。 */
    private isUndoShortcut;
    /** Ctrl/Command+C 仅复制当前操作柄所属的第三方模型。 */
    private isCopyShortcut;
    /** Ctrl/Command+V 以捕捉预览方式粘贴，避免新旧模型直接重叠。 */
    private isPasteShortcut;
    /** Delete 键删除当前操作模型；文本输入焦点保留原生删除行为。 */
    private isDeleteShortcut;
    /** 判断是否正处于表单输入，避免劫持浏览器原生编辑快捷键。 */
    private isTextInputTarget;
    /** 仅在操作柄实际显示且非文本输入焦点时接管 Tab，避免破坏常规表单焦点导航。 */
    private isTransformModeShortcut;
    /** 按移动、旋转、缩放顺序循环切换；Shift+Tab 可反向切换。 */
    private switchTransformMode;
    /** 隐藏当前操作柄，但不关闭编辑模式。 */
    private clearSelection;
    /** 进入第三方模型编辑模式时，屏蔽 BIM 构件的悬浮和点击高亮，避免射线穿透。 */
    private enableModelEditing;
    /** 恢复进入编辑模式前的 BIM 构件交互高亮配置。 */
    private disableModelEditing;
    private syncSelectedTransform;
    private saveHistory;
    private requireRecord;
    private getMaterials;
    /** 将数值槽位或材质名称转换为实际材质索引；同名材质应保持同一替换结果。 */
    private getMaterialIndices;
    private normalizeData;
    private cloneData;
    private createId;
    /** 统一停止动画并释放模型资源，避免模型删除后动画混合器继续持有场景对象。 */
    private removeRecord;
    private removeObject;
    private requestRender;
}

/** 管理独立于 BIM 主模型的第三方 GLB 摆放、编辑与场景持久化。 */
declare class ModelPlace_2 {
    private readonly engine;
    private loader;
    private dracoLoader;
    private dracoDecoderPath;
    private readonly modelList;
    private readonly modelTransforms;
    private readonly animationTimer;
    private transformControl;
    private transformHelper;
    private selectedModelId;
    private copiedModelData;
    private editingEnabled;
    private isRestoring;
    private isUndoing;
    private isPasting;
    private activeLoadCount;
    private readonly pendingModelIds;
    private bimHighlightDisabledBeforeEditing;
    private selectionPointerDown;
    private readonly onPointerDown;
    private readonly onPointerUp;
    private readonly onKeyDown;
    constructor(engine: any);
    /** 释放控制柄、事件和已加载模型；引擎销毁时应调用。 */
    dispose(): void;
    /**
     * 设置 Draco 解码器目录；相对路径会按 SDK 静态资源规则解析。
     * 路径应指向包含 draco_decoder.js、draco_wasm_wrapper.js 和 draco_decoder.wasm 的目录。
     */
    setDracoDecoderPath(path?: string | null): void;
    /** 获取当前实际使用的 Draco 解码器目录。 */
    getDracoDecoderPath(): string;
    /** 每帧同步控制柄并推进第三方模型动画。 */
    update(): void;
    /**
     * 加载 GLB 并放入场景。未指定 position 时，调用方需在开启捕捉的视图中单击确认落点。
     */
    placeModel(options: ModelPlaceOptions): Promise<SceneModelData>;
    /** 以预览方式放置已准备好的模型数据；预览未确认前不会写入模型列表或历史。 */
    private placePreparedModel;
    /** 选中模型并显示指定模式的操作柄；未传模式时沿用移动模式。 */
    editModel(modelId: string, mode?: ModelTransformMode): void;
    /** 结束编辑并隐藏操作柄，不改变当前模型数据。 */
    endEdit(): void;
    /** 获取当前显示操作柄的模型 ID；没有选中模型时返回 null。 */
    getSelectedModelId(): string | null;
    /** 复制当前显示操作柄的模型配置，供 Ctrl/Command+V 或 pasteModel 使用。 */
    copySelectedModel(): boolean;
    /** 将已复制模型作为捕捉预览粘贴；确认落点后生成具有新 ID 的独立模型。 */
    pasteModel(): Promise<SceneModelData | null>;
    /** 按材质槽位或精确名称替换贴图；同名材质会一并替换并持久化。 */
    replaceMaterial(modelId: string, materialTarget: number | string, textureUrl: string): Promise<void>;
    /** 获取模型可替换的材质槽位和名称，供业务层按名称替换前查询。 */
    getModelMaterials(modelId: string): Array<{
        materialIndex: number;
        materialName: string;
    }>;
    /** 查询 GLB 内可播放的动画片段；数组首项即默认动画。 */
    getModelAnimations(modelId: string): ModelAnimationInfo[];
    /** 播放指定动画；未传名称时播放 GLB 的第一个默认片段。 */
    playAnimation(modelId: string, animationName?: string, options?: ModelAnimationOptions): ModelAnimationInfo;
    /** 停止指定动画；未传名称时停止该模型的全部动画。 */
    stopAnimation(modelId: string, animationName?: string): void;
    /**
     * 实时更新模型位置和方向，不写入撤销历史，适用于遥测刷新和路径动画。
     * direction 默认把模型本地 +Z 轴对准目标方向，可通过 forwardAxis 调整模型前向轴。
     */
    updateModelPose(modelId: string, pose: ModelPoseOptions): SceneModelData;
    /** 高频更新模型位置的便捷接口。 */
    updateModelPosition(modelId: string, position: THREE.Vector3Tuple): SceneModelData;
    /** 高频更新模型方向的便捷接口。 */
    updateModelDirection(modelId: string, direction: THREE.Vector3Tuple, forwardAxis?: THREE.Vector3Tuple): SceneModelData;
    /** 删除模型及其场景对象。 */
    deleteModel(modelId: string): void;
    /** 清空场景中的全部第三方模型并释放资源；该操作可通过 undo 撤回。 */
    clearModels(): void;
    /** 隐藏指定模型，并保留它以支持后续显示和场景还原。 */
    hideModel(modelId: string): void;
    /** 显示当前管理器中的所有第三方模型。 */
    showAllModels(): void;
    /** 获取可 JSON 序列化的第三方模型场景状态。 */
    getSceneModels(): SceneModelData[];
    /** 清空现有第三方模型后，重新加载并恢复已导出的场景状态。 */
    restoreSceneModels(sceneModels: SceneModelData[]): Promise<SceneModelData[]>;
    /** 撤回最近一次会改变模型状态的操作。 */
    undo(): Promise<boolean>;
    private loadRecord;
    /** 创建挂载 Draco 解码能力的 GLTFLoader，普通 GLB 仍沿用同一加载入口。 */
    private createGltfLoader;
    /** 创建独立解码器实例，便于管理器销毁或切换资源目录时释放 worker。 */
    private createDracoLoader;
    private resolveDracoDecoderPath;
    /** 加载模型资源并创建记录，调用方可决定何时正式加入模型列表。 */
    private createRecord;
    /** 将已加载对象登记为正式模型，使其可被选中、导出和撤回。 */
    private addRecord;
    private applyTexture;
    private ensureTransformControl;
    /** 透视相机使用更小的屏幕尺寸系数，正交相机维持原有尺寸。 */
    private syncTransformControlCamera;
    /** 使用引擎统一的捕捉器等待用户单击，并在取消或完成后恢复常规交互。 */
    private pickPlacementPoint;
    /** 将捕捉点转换为最终放置点：沿世界法线外移 1mm，防止 GLB 与 BIM 面片重叠。 */
    private getPlacementPoint;
    private handlePointerDown;
    /** 仅把未拖动的点击视为选中/取消选中，避免旋转视图时隐藏操作柄。 */
    private handlePointerUp;
    /** 处理第三方模型编辑快捷键：复制粘贴、删除、Tab 切换、Esc 和 Ctrl/Command+Z。 */
    private handleKeyDown;
    /** Ctrl+Z / Command+Z 仅在非文本输入焦点且存在历史时接管，避免影响表单编辑。 */
    private isUndoShortcut;
    /** Ctrl/Command+C 仅复制当前操作柄所属的第三方模型。 */
    private isCopyShortcut;
    /** Ctrl/Command+V 以捕捉预览方式粘贴，避免新旧模型直接重叠。 */
    private isPasteShortcut;
    /** Delete 键删除当前操作模型；文本输入焦点保留原生删除行为。 */
    private isDeleteShortcut;
    /** 判断是否正处于表单输入，避免劫持浏览器原生编辑快捷键。 */
    private isTextInputTarget;
    /** 仅在操作柄实际显示且非文本输入焦点时接管 Tab，避免破坏常规表单焦点导航。 */
    private isTransformModeShortcut;
    /** 按移动、旋转、缩放顺序循环切换；Shift+Tab 可反向切换。 */
    private switchTransformMode;
    /** 隐藏当前操作柄，但不关闭编辑模式。 */
    private clearSelection;
    /** 进入第三方模型编辑模式时，屏蔽 BIM 构件的悬浮和点击高亮，避免射线穿透。 */
    private enableModelEditing;
    /** 恢复进入编辑模式前的 BIM 构件交互高亮配置。 */
    private disableModelEditing;
    private syncSelectedTransform;
    private saveHistory;
    private requireRecord;
    private getMaterials;
    /** 将数值槽位或材质名称转换为实际材质索引；同名材质应保持同一替换结果。 */
    private getMaterialIndices;
    private normalizeData;
    private cloneData;
    private createId;
    /** 统一停止动画并释放模型资源，避免模型删除后动画混合器继续持有场景对象。 */
    private removeRecord;
    private removeObject;
    private requestRender;
}

export declare interface ModelPlaceOptions {
    id?: string;
    url: string;
    name?: string;
    position?: THREE.Vector3Tuple;
    rotation?: THREE.EulerTuple;
    scale?: THREE.Vector3Tuple;
    visible?: boolean;
}

declare interface ModelPlaceOptions_2 {
    id?: string;
    url: string;
    name?: string;
    position?: THREE.Vector3Tuple;
    rotation?: THREE.EulerTuple;
    scale?: THREE.Vector3Tuple;
    visible?: boolean;
}

/** 第三方 GLB 被选中后，通过 EventType.ModelPlaceSelected 发出的事件数据。 */
export declare interface ModelPlaceSelectionEvent {
    modelId: string;
    data: SceneModelData;
    object: THREE.Object3D;
}

export declare interface ModelPoseOptions {
    position?: THREE.Vector3Tuple;
    rotation?: THREE.EulerTuple;
    direction?: THREE.Vector3Tuple;
    forwardAxis?: THREE.Vector3Tuple;
}

declare interface ModelPoseOptions_2 {
    position?: THREE.Vector3Tuple;
    rotation?: THREE.EulerTuple;
    direction?: THREE.Vector3Tuple;
    forwardAxis?: THREE.Vector3Tuple;
}

/** 将 v3 普通 BIM 模型根分组定位到地球表面的指定经纬度与朝向。 */
export declare class ModelPositionManager {
    private readonly engine;
    private tiles;
    private readonly layerManager?;
    private readonly calibrationManager?;
    private readonly records;
    private readonly inverseParentMatrix;
    constructor(engine: EngineKernelV3, tiles: TilesRenderer, layerManager?: GISLayerManager | undefined, calibrationManager?: GISModelCalibrationManager | undefined);
    /** 切换底图后更新地理参考，已有 BIM 模型的世界定位保持不变。 */
    setTiles(tiles: TilesRenderer): void;
    /** 定位已加载模型；模型本地 +Y 为上方，heading 从正北向东顺时针增加。 */
    setPosition(url: string, position: GISModelPosition): ResolvedGISModelPosition;
    /** 模型未加载时先通过 v3 Loader 加载，再应用地理定位。 */
    loadAndPosition(url: string, position: GISModelPosition, loadOptions?: LoadModelOptions): Promise<ResolvedGISModelPosition>;
    /** 获取指定模型最近一次由本管理器应用的定位信息。 */
    getPosition(url: string): ResolvedGISModelPosition | null;
    /** 恢复模型定位前的根分组矩阵。 */
    resetPosition(url: string): boolean;
    /** 释放内部记录；模型资源由引擎统一管理。 */
    dispose(): void;
    private requireModelGroup;
    private resolvePosition;
    private assertUrl;
    private normalizeAngle;
    private getLayerId;
}

declare class ModelProperties {
    private engine;
    extended‌: Map<string, any>;
    constructor(engine: any);
    init(): void;
    updateExtended(url: string, data: any): void;
    loadProperties(url: string, callback: any): void;
    getModelPropertiesWithName(url: string, id: string, names: [], callback: (properties: any) => void): void;
    getModelProperties(url: string, id: string, callback: (properties: any) => void): {
        properties: any[];
        materials: any[];
    };
}

declare class ModelProperties_2 {
    private engine;
    extended‌: Map<string, any>;
    constructor(engine: any);
    init(): void;
    updateExtended(url: string, data: any): void;
    loadProperties(url: string, callback: any): void;
    getModelPropertiesWithName(url: string, id: string, names: [], callback: (properties: any) => void): void;
    getModelProperties(url: string, id: string, callback: (properties: any) => void): {
        properties: any[];
        materials: any[];
    };
}

declare class ModelQuantityList {
    private engine;
    constructor(engine: any);
    getQuantityData(): {
        id: string;
        name: string;
        type: string;
    }[];
}

declare class ModelToolModule {
    private engine;
    private highlightMaterial;
    private translucentMaterial;
    private pickBoxMaterial;
    private customModelColorRecords;
    private customInstanceColorBatches;
    constructor(engine_: any);
    /**
     * 为名称匹配的普通构件新增透明拾取 Box，并追加到原节点 infos 中。
     * @param names 构件名称关键词，任一关键词被包含即视为匹配
     * @param minSize Box 三个方向的最小尺寸，单位为米
     * @returns 成功新增的拾取 Box 数量
     */
    addPickBoxByNames(names: string[], minSize?: number): number;
    /** 合并节点已有的本地包围盒，作为拾取 Box 的位置和尺寸来源。 */
    private getNodeLocalBox;
    split_merge_model(model: any): void;
    un_split_merge_model(model: any): void;
    private shouldKeepSplitState;
    private areAllGroupsHidden;
    /** 更新单个构件的材质/可见状态，真正的 geometry group 在一轮操作结束后统一重建。 */
    private setSplitComponentState;
    /** 获取拆分构件当前材质索引，供高亮恢复时保留自定义颜色。 */
    private getSplitComponentMaterialIndex;
    /** 将连续且材质相同的构件区间压缩为一个 group，减少改色、隔离后的 draw call。 */
    private rebuildSplitModelGroups;
    /** 一轮状态修改完成后统一压缩所有拆分网格，并在无特殊状态时恢复原始合批 geometry。 */
    private rebatchSplitModels;
    private getEngineModelByUrl;
    private appendUniqueIds;
    /** 按构件 ID 顺序从 nodesMap 读取 GUID，确保状态数组可通过相同索引关联。 */
    private getModelGuids;
    private restoreSplitModelsOnIdle;
    getSceneModel(index: number): any;
    /** 炸开模式下，原模型状态变化后需要同步到代理构件，保证交互语义一致。 */
    private syncExplodeVisualState;
    getModelCenter(models?: any[]): THREE.Vector3 | null;
    updateMaterial(): void;
    private syncHighlightModelEdges;
    private getUniqueHighlightModels;
    private getHighlightModelsAfterRemove;
    highlightModel(models: any): void;
    unhighlightModel(models: any): void;
    unhighlightAllModels(isClear?: boolean): void;
    hideModel(models: any): void;
    showModel(models: any, skipStateCleanup?: boolean): void;
    isolateModel(models: any, opacity?: number): void;
    translucentOtherModel(models: any, opacity?: number): void;
    /** 设置构件自定义颜色，入参与高亮接口一致：[{ url, ids }]，同时兼容旧的直接 Mesh 入参。 */
    setModelColor(models: any, color?: THREE.ColorRepresentation, opacity?: number): void;
    /** 恢复指定构件的自定义颜色，入参与高亮接口一致：[{ url, ids }]。 */
    restoreModelColor(models: any[]): void;
    /** 设置全部已加载构件颜色。 */
    setAllModelsColor(color: THREE.ColorRepresentation, opacity?: number): void;
    /** 恢复所有通过 setModelColor/setAllModelsColor 设置过的构件颜色。 */
    restoreAllModelsColor(): void;
    /** 获取所有通过 setModelColor/setAllModelsColor 改过颜色的构件，返回 [{url, ids}]。 */
    getCustomColorModels(): {
        url: string;
        ids: any[];
    }[];
    /** 获取指定构件的自定义颜色，未设置时返回 null。 */
    getCustomColorModel(url: string, id: any): {
        url: string;
        id: any;
        color: string;
        opacity: number;
    } | null;
    /**
     * 删除指定模型的改色记录，并重建其他模型仍需保留的实例改色批次。
     * 模型即将卸载，不再回放原材质状态，避免对待释放网格做无意义写入。
     */
    releaseModelRuntimeState(url: string): void;
    /** 还原序列化到 key 中的 id：纯数字字符串转回数字，其余保持原样（不同 loader 的 id 类型不统一）。 */
    private parseId;
    private setSimpleModelColor;
    private restoreSimpleColorRecord;
    private setInstanceModelColor;
    private restoreInstanceColorRecord;
    private getCustomColorRecordKey;
    private cloneModelRefs;
    /** 返回目标构件中当前确实处于高亮态的部分，保持颜色恢复不影响无关选择。 */
    private getHighlightedTargets;
    private removeModelsFromStatusList;
    private getCustomSimpleMaterialIndex;
    private getCustomColorMaterialIndex;
    private hideOriginalInstance;
    private getOriginalInstanceMatrix;
    private isModelHighlighted;
    private isModelHidden;
    /** 按原始实例网格、颜色和透明度合并改色实例，避免每个构件产生一个 draw call。 */
    private rebuildCustomInstanceColorBatches;
    /** 创建同一颜色状态下的 InstancedMesh 批次。 */
    private createCustomInstanceBatch;
    private normalizeOpacity;
    private clearMaterialTextures;
    translucentModel(models: any[], opacity?: number): void;
    unTranslucentModel(): void;
    hideAllModels(): void;
    showAllModels(): void;
    batchSelectSameLevelTypeModel(models: any[]): void;
    batchSelectSameLevelModel(models: any[]): void;
    batchSelectSameTypeModel(models: any[]): void;
}

/** 负责 2D 模型的高亮、悬浮高亮和显隐控制。 */
declare class ModelToolModule2d {
    private engine;
    private highlightMaterial;
    private hideMaterial;
    private translucentMaterial;
    private readonly lightBackgroundWhiteColor;
    private readonly darkBackgroundWhiteColor;
    private readonly maxHoverLineCoordinateCount;
    private readonly maxHoverMeshVertexCount;
    constructor(engine_: any);
    /** 拆分合并网格，让单个子几何可以通过 materialIndex 独立高亮或隐藏。 */
    split_merge_model(model: any): void;
    un_split_merge_model(_model: any): void;
    /** 分组加载后 nodeMap 直接保存真实对象；旧索引只作为兼容兜底。 */
    private getNodeObject;
    /** 根据 nodeMap 遍历指定模型节点。 */
    private forEachNode;
    /** 根据当前 2D 背景亮度选择 hover 高亮色，浅色背景避免继续使用白色。 */
    private getHoverHighlightColor;
    /** 白色背景下把原始白色图元显示为黑色，切回黑色背景时恢复白色。 */
    updateColorsForBackground(backgroundColor: number): void;
    /** 图层面板和场景对象共享同一套白色转黑色规则。 */
    getDisplayColor(color: number): number;
    private updateObjectMaterialColor;
    private updateVertexColors;
    private resolveOriginalColor;
    private isCurrentBackgroundLight;
    private isLightBackground;
    private isWhiteColor;
    private isWhiteRgb;
    highlightModelHover(models: any[]): void;
    unHighlightModelHover(): void;
    /** 设置模型高亮。 */
    highlightModel(models: any): void;
    /** 取消指定模型高亮。 */
    unhighlightModel(models: any): void;
    /** 取消全部模型高亮。 */
    unhighlightAllModels(isClear?: boolean): void;
    /** 隐藏模型。 */
    hideModel(models: any): void;
    /** 显示模型。 */
    showModel(models: any): void;
    /** 显示所有模型，恢复隐藏和高亮状态。 */
    showAllModels(): void;
    /** 渲染线段高亮覆盖层。 */
    private getLineNodePoints;
    /** 渲染线段高亮覆盖层。 */
    highLightRenderLine(ps: ArrayLike<number>): void;
    unhighLightRenderLine(): void;
    /** 渲染悬浮线段高亮覆盖层。 */
    highLightRenderLineHover(ps: ArrayLike<number>): void;
    unhighLightRenderLineHover(): void;
    /** 移除临时高亮对象时同步释放几何和材质，避免交互后内存残留。 */
    private disposeTemporaryObject;
    /** 图层隐藏的图元不能再被 hover 或选中高亮。 */
    private filterVisibleLayerModels;
    /** 过大的图块跳过 hover 高亮，保留点击选中，避免大几何在鼠标移动中反复触发高成本操作。 */
    private filterHoverableModels;
    private isHoverableModel;
}

declare class ModelToolModule_2 {
    private engine;
    private highlightMaterial;
    private translucentMaterial;
    private pickBoxMaterial;
    private customModelColorRecords;
    private customInstanceColorBatches;
    constructor(engine_: any);
    /**
     * 为名称匹配的普通构件新增透明拾取 Box，并追加到原节点 infos 中。
     * @param names 构件名称关键词，任一关键词被包含即视为匹配
     * @param minSize Box 三个方向的最小尺寸，单位为米
     * @returns 成功新增的拾取 Box 数量
     */
    addPickBoxByNames(names: string[], minSize?: number): number;
    /** 合并节点已有的本地包围盒，作为拾取 Box 的位置和尺寸来源。 */
    private getNodeLocalBox;
    split_merge_model(model: any): void;
    un_split_merge_model(model: any): void;
    private shouldKeepSplitState;
    private areAllGroupsHidden;
    /** 更新单个构件的材质/可见状态，真正的 geometry group 在一轮操作结束后统一重建。 */
    private setSplitComponentState;
    /** 获取拆分构件当前材质索引，供高亮恢复时保留自定义颜色。 */
    private getSplitComponentMaterialIndex;
    /** 将连续且材质相同的构件区间压缩为一个 group，减少改色、隔离后的 draw call。 */
    private rebuildSplitModelGroups;
    /** 一轮状态修改完成后统一压缩所有拆分网格，并在无特殊状态时恢复原始合批 geometry。 */
    private rebatchSplitModels;
    private getEngineModelByUrl;
    private appendUniqueIds;
    /** 按构件 ID 顺序从 nodesMap 读取 GUID，确保状态数组可通过相同索引关联。 */
    private getModelGuids;
    private restoreSplitModelsOnIdle;
    getSceneModel(index: number): any;
    /** 炸开模式下，原模型状态变化后需要同步到代理构件，保证交互语义一致。 */
    private syncExplodeVisualState;
    getModelCenter(models?: any[]): THREE.Vector3 | null;
    updateMaterial(): void;
    private syncHighlightModelEdges;
    private getUniqueHighlightModels;
    private getHighlightModelsAfterRemove;
    highlightModel(models: any): void;
    unhighlightModel(models: any): void;
    unhighlightAllModels(isClear?: boolean): void;
    hideModel(models: any): void;
    showModel(models: any, skipStateCleanup?: boolean): void;
    isolateModel(models: any, opacity?: number): void;
    translucentOtherModel(models: any, opacity?: number): void;
    /** 设置构件自定义颜色，入参与高亮接口一致：[{ url, ids }]，同时兼容旧的直接 Mesh 入参。 */
    setModelColor(models: any, color?: THREE.ColorRepresentation, opacity?: number): void;
    /** 恢复指定构件的自定义颜色，入参与高亮接口一致：[{ url, ids }]。 */
    restoreModelColor(models: any[]): void;
    /** 设置全部已加载构件颜色。 */
    setAllModelsColor(color: THREE.ColorRepresentation, opacity?: number): void;
    /** 恢复所有通过 setModelColor/setAllModelsColor 设置过的构件颜色。 */
    restoreAllModelsColor(): void;
    /** 获取所有通过 setModelColor/setAllModelsColor 改过颜色的构件，返回 [{url, ids}]。 */
    getCustomColorModels(): {
        url: string;
        ids: any[];
    }[];
    /** 获取指定构件的自定义颜色，未设置时返回 null。 */
    getCustomColorModel(url: string, id: any): {
        url: string;
        id: any;
        color: string;
        opacity: number;
    } | null;
    /** 还原序列化到 key 中的 id：纯数字字符串转回数字，其余保持原样（不同 loader 的 id 类型不统一）。 */
    private parseId;
    private setSimpleModelColor;
    private restoreSimpleColorRecord;
    private setInstanceModelColor;
    private restoreInstanceColorRecord;
    private getCustomColorRecordKey;
    private cloneModelRefs;
    /** 返回目标构件中当前确实处于高亮态的部分，保持颜色恢复不影响无关选择。 */
    private getHighlightedTargets;
    private removeModelsFromStatusList;
    private getCustomSimpleMaterialIndex;
    private getCustomColorMaterialIndex;
    private hideOriginalInstance;
    private getOriginalInstanceMatrix;
    private isModelHighlighted;
    private isModelHidden;
    /** 删除指定模型的改色记录，并重建其他模型仍需保留的实例改色批次。 */
    releaseModelRuntimeState(url: string): void;
    /** 按原始实例网格、颜色和透明度合并改色实例，避免每个构件产生一个 draw call。 */
    private rebuildCustomInstanceColorBatches;
    /** 创建同一颜色状态下的 InstancedMesh 批次。 */
    private createCustomInstanceBatch;
    private normalizeOpacity;
    private clearMaterialTextures;
    translucentModel(models: any[], opacity?: number): void;
    unTranslucentModel(): void;
    hideAllModels(): void;
    showAllModels(): void;
    batchSelectSameLevelTypeModel(models: any[]): void;
    batchSelectSameLevelModel(models: any[]): void;
    batchSelectSameTypeModel(models: any[]): void;
}

export declare type ModelTransformMode = 'translate' | 'rotate' | 'scale';

declare type ModelTransformMode_2 = 'translate' | 'rotate' | 'scale';

declare class ModelTree {
    private engine;
    constructor(engine: any);
    getLevelTreeData(): any[];
    getTypeTreeData(): any[];
    getMajorTreeData(): any[];
}

declare class ModelTree_2 {
    private engine;
    constructor(engine: any);
    getLevelTreeData(): any[];
    getTypeTreeData(): any[];
    getMajorTreeData(): any[];
}

/** 包围盒发生变化时，保留前后值以支持列表详情、定位或可视化。 */
export declare interface ModifiedBoxNode {
    key: string;
    modelKey: string;
    guid: string;
    baselineBox: ModelComparisonBox;
    targetBox: ModelComparisonBox;
    baselineNode: ModelComparisonNode;
    targetNode: ModelComparisonNode;
}

/** 包围盒发生变化时，保留前后值以支持列表详情、定位或可视化。 */
declare interface ModifiedBoxNode_2 {
    key: string;
    modelKey: string;
    guid: string;
    baselineBox: ModelComparisonBox_2;
    targetBox: ModelComparisonBox_2;
    baselineNode: ModelComparisonNode_2;
    targetNode: ModelComparisonNode_2;
}

/** 修改构件同时返回两个版本中的定位信息。 */
export declare interface ModifiedModelComparisonRef {
    baseline: ModelComparisonRef;
    target: ModelComparisonRef;
}

/** 修改构件同时返回两个版本中的定位信息。 */
declare interface ModifiedModelComparisonRef_2 {
    baseline: ModelComparisonRef_2;
    target: ModelComparisonRef_2;
}

declare class NodeBox {
    private readonly engine;
    private readonly rootGroup;
    private readonly meshMaterial;
    private readonly instanceMaterial;
    private readonly handleLoadingCompleted;
    private isVisible;
    private filterState;
    constructor(engine: any);
    show(options?: NodeBoxShowOptions): void;
    hide(): void;
    toggle(options?: NodeBoxShowOptions): void;
    getVisible(): boolean;
    getFilters(): NodeBoxShowOptions;
    rebuild(options?: NodeBoxShowOptions): void;
    clear(): void;
    setModelBoxTransform(url: string, matrix: THREE.Matrix4): void;
    dispose(): void;
    private createMaterial;
    private normalizeFilterState;
    private shouldIncludeUrl;
    private shouldIncludeId;
    private collectNodeBoxes;
    private isInstanceNode;
    private addLineGroup;
    private appendBoxPositions;
    private pushSegment;
    private setLineTransform;
}

declare class NodeBox_2 {
    private readonly engine;
    private readonly rootGroup;
    private readonly meshMaterial;
    private readonly instanceMaterial;
    private readonly handleLoadingCompleted;
    private isVisible;
    private filterState;
    constructor(engine: any);
    show(options?: NodeBoxShowOptions_2): void;
    hide(): void;
    toggle(options?: NodeBoxShowOptions_2): void;
    getVisible(): boolean;
    getFilters(): NodeBoxShowOptions_2;
    rebuild(options?: NodeBoxShowOptions_2): void;
    clear(): void;
    setModelBoxTransform(url: string, matrix: THREE.Matrix4): void;
    dispose(): void;
    private createMaterial;
    private normalizeFilterState;
    private shouldIncludeUrl;
    private shouldIncludeId;
    private collectNodeBoxes;
    private isInstanceNode;
    private addLineGroup;
    private appendBoxPositions;
    private pushSegment;
    private setLineTransform;
}

declare interface NodeBoxShowOptions {
    urls?: string[];
    ids?: Array<string | number>;
    showMesh?: boolean;
    showInstance?: boolean;
}

declare interface NodeBoxShowOptions_2 {
    urls?: string[];
    ids?: Array<string | number>;
    showMesh?: boolean;
    showInstance?: boolean;
}

/** 基于 2D octree 的粗筛拾取管理器。 */
declare class OctreeBox2d {
    private engine;
    private pickBoxElementIds;
    private worldToScreen;
    private readonly invisibleMaterial;
    private readonly maxHoverLineCoordinateCount;
    private readonly maxHoverMeshVertexCount;
    constructor(engine: any);
    init(): void;
    /** 先通过 octree 包围盒筛候选 linkId，再对线和面做精确拾取。 */
    pick2d(rayCaster: any, event: any): any;
    /** 分组加载后 nodeMap 会保存真实对象；旧索引只作为兜底。 */
    private getNodeObject;
    /** 将合批线段的局部坐标转为世界坐标，布局视口拾取必须使用变换后的纸空间位置。 */
    private readLineWorldPoints;
    /** 模型空间继续走 octree 粗筛；布局空间没有独立 octree，直接使用当前工作空间 nodeMap 候选。 */
    private collectPickCandidates;
    /** 从合并后的 geometry group 中临时提取单个图元几何，避免加载期常驻每个子 geometry。 */
    private getNodeGeometry;
    /** 获取鼠标射线经过的 octree 节点内元素。 */
    RecurrentIteration(rayCaster: any, box: any): void;
    /** 新版 min/max 是数组，这里也兼容对象形式，避免外部数据轻微差异导致拾取失效。 */
    private getBox3;
    private toVector3;
    /** 隐藏或已经高亮的元素不参与普通拾取，保持原有交互语义。 */
    private isElementPickable;
    /** 图层隐藏后，命中的子几何不再参与线/面精确拾取。 */
    private isNodePickable;
    private getNodeLayerDeps;
    /** hover 阶段跳过超大节点的精确拾取；click 不带 isHover 标记，仍走完整命中。 */
    private isLargeHoverNode;
    private pointToLineDistance;
}

declare class OneClickEncoding {
    private readonly engine;
    private readonly apiKey;
    private readonly baseURL;
    constructor(engine: any, apiKey?: string);
    /**
     * 查询模型是否有编码（检查扩展属性中是否存在编码数据）
     */
    exitModelCode(url: string): boolean;
    /**
     * 保存编码到缓存（localStorage），根据url去存
     */
    savaModelCodeToStoge(url: string): void;
    /**
     * 从缓存（localStorage）读取编码数据并写入扩展属性
     */
    readModelCodeFormStoge(url: string): void;
    /**
     * 查询模型编码 - 通过构件ID查询扩展属性中的编码信息
     */
    getModelCode(url: string, id: number): Promise<any>;
    /**
     * 订阅编码事件
     */
    on(event: string, callback: (data: any) => void): void;
    /**
     * 取消订阅编码事件
     */
    off(event: string, callback: (data: any) => void): void;
    start(): Promise<void>;
    /**
     * 批量查询构件属性
     */
    private queryProperties;
    startChat(url: string, str: string): Promise<any[]>;
    chat(str: string): Promise<any>;
}

declare class OneClickEncoding_2 {
    private readonly engine;
    private readonly apiKey;
    private readonly baseURL;
    constructor(engine: any, apiKey?: string);
    /**
     * 查询模型是否有编码（检查扩展属性中是否存在编码数据）
     */
    exitModelCode(url: string): boolean;
    /**
     * 保存编码到缓存（localStorage），根据url去存
     */
    savaModelCodeToStoge(url: string): void;
    /**
     * 从缓存（localStorage）读取编码数据并写入扩展属性
     */
    readModelCodeFormStoge(url: string): void;
    /**
     * 查询模型编码 - 通过构件ID查询扩展属性中的编码信息
     */
    getModelCode(url: string, id: number): Promise<any>;
    /**
     * 订阅编码事件
     */
    on(event: string, callback: (data: any) => void): void;
    /**
     * 取消订阅编码事件
     */
    off(event: string, callback: (data: any) => void): void;
    start(): Promise<void>;
    /**
     * 批量查询构件属性
     */
    private queryProperties;
    startChat(url: string, str: string): Promise<any[]>;
    chat(str: string): Promise<any>;
}

declare type OrbitCenterResolver = ThirdPersonPlacementResolver;

declare type OrbitCenterResolver_2 = ThirdPersonPlacementResolver_2;

declare class Pan2dControls extends THREE.EventDispatcher {
    object: THREE.OrthographicCamera;
    domElement: HTMLElement;
    enabled: boolean;
    enableZoom: boolean;
    enablePan: boolean;
    enableDamping: boolean;
    dampingFactor: number;
    zoomSpeed: number;
    touchZoomSpeed: number;
    minZoom: number;
    maxZoom: number;
    private isDragging;
    private mouseButton;
    private previousMousePosition;
    private targetPosition;
    private targetZoom;
    private isTouchZooming;
    private previousTouchDistance;
    private previousTouchCenter;
    private lastClickTime;
    private doubleClickDelay;
    constructor(object: THREE.OrthographicCamera, domElement?: HTMLElement);
    /**
     * 绑定事件监听
     */
    private bindEvents;
    /**
     * 鼠标按下
     */
    private onMouseDown;
    /**
     * 鼠标移动
     */
    private onMouseMove;
    /**
     * 鼠标释放
     */
    private onMouseUp;
    /**
     * 鼠标滚轮（缩放）
     */
    /**
     * 按屏幕像素位移平移 2D 视图，双指缩放时用中心点移动同步拖动画布。
     */
    private panByScreenDelta;
    /**
     * 围绕屏幕坐标缩放，保证手势中心对应的图纸位置尽量不漂移。
     */
    private zoomAroundScreenPoint;
    /**
     * 非阻尼模式立即同步相机，阻尼模式交给 update 平滑过渡。
     */
    private applyImmediateIfNeeded;
    private onWheel;
    /**
     * 双击事件（重置视图）
     */
    private onDoubleClick;
    /**
     * 单击事件
     */
    private onClick;
    /**
     * 触摸开始
     */
    private onTouchStart;
    /**
     * 触摸移动
     */
    private onTouchMove;
    /**
     * 触摸结束
     */
    private onTouchEnd;
    /**
     * 更新控制器（在动画循环中调用）
     */
    update(): void;
    /**
     * 重置控制器
     */
    reset(): void;
    /**
     * 设置相机位置
     * @param x X 坐标
     * @param y Y 坐标
     */
    setPosition(x: number, y: number): void;
    /**
     * 设置缩放级别
     * @param zoom 缩放级别
     */
    setZoom(zoom: number): void;
    /**
     * 销毁控制器
     */
    dispose(): void;
}

/**
 * 全景图控制器
 * 基于修改的 OrbitControls，禁用平移，限制旋转范围
 */
declare class PanoramaControls {
    private camera;
    private domElement;
    private cameraModule;
    enableZoom: boolean;
    enableRotate: boolean;
    minFov: number;
    maxFov: number;
    rotateSpeed: number;
    zoomSpeed: number;
    enableDamping: boolean;
    dampingFactor: number;
    private isDragging;
    private startX;
    private startY;
    private thetaDelta;
    private phiDelta;
    private isPinching;
    private pinchStartDistance;
    private pinchStartFov;
    private _onMouseDown;
    private _onMouseMove;
    private _onMouseUp;
    private _onWheel;
    private _onTouchStart;
    private _onTouchMove;
    private _onTouchEnd;
    private onViewAngleChange?;
    constructor(cameraModule: any, domElement: HTMLElement);
    /**
     * 初始化控制器
     */
    private init;
    /**
     * 鼠标按下
     */
    private onMouseDown;
    /**
     * 鼠标移动
     */
    private onMouseMove;
    /**
     * 鼠标弹起
     */
    private onMouseUp;
    /**
     * 鼠标滚轮
     */
    private onWheel;
    /**
     * 触摸开始
     */
    private onTouchStart;
    /**
     * 触摸移动
     */
    private onTouchMove;
    /**
     * 触摸结束
     */
    private onTouchEnd;
    /**
     * 应用旋转
     */
    private applyRotation;
    /**
     * 根据容器尺寸计算旋转灵敏度
     */
    private getRotationFactors;
    /**
     * 统一缩放逻辑
     */
    private applyZoom;
    /**
     * 计算多指距离
     */
    private getTouchDistance;
    /**
     * 每帧更新（用于阻尼效果）
     */
    update(): void;
    /**
     * 设置相机朝向（通过经纬度）
     * @param theta 水平角度（弧度）
     * @param phi 垂直角度（弧度）
     */
    lookAt(theta: number, phi: number): void;
    /**
     * 获取当前视角
     */
    getViewAngle(): {
        theta: number;
        phi: number;
    };
    /**
     * 设置视角变化回调
     */
    setOnViewAngleChange(callback: (theta: number, phi: number) => void): void;
    /**
     * 重置控制器
     */
    reset(): void;
    /**
     * 更新旋转灵敏度
     */
    setRotateSpeed(value: number): void;
    /**
     * 更新缩放灵敏度
     */
    setZoomSpeed(value: number): void;
    /**
     * 更新阻尼配置
     */
    setEnableDamping(enabled: boolean): void;
    setDampingFactor(value: number): void;
    /**
     * 更新 FOV 限制
     */
    setZoomLimits(minFov: number, maxFov: number): void;
    /**
     * 销毁控制器
     */
    dispose(): void;
}

/**
 * 全景图加载管理器
 * 负责加载全景图片纹理，支持进度回调
 */
declare class PanoramaLoader {
    private textureCache;
    private currentUrl;
    private loadProgress;
    private onProgressCallback?;
    constructor();
    /**
     * 加载全景图纹理
     * @param url 全景图 URL
     * @returns 纹理对象 Promise
     */
    loadTexture(url: string): Promise<THREE.Texture>;
    /**
     * 内部加载方法（支持进度）
     */
    private loadTextureInternal;
    /**
     * 预加载多个全景图
     * @param urls 全景图 URL 数组
     * @returns Promise，所有纹理加载完成后 resolve
     */
    preloadPanoramas(urls: string[]): Promise<void>;
    /**
     * 获取当前加载进度
     * @returns 进度百分比（0-100）
     */
    getLoadProgress(): number;
    /**
     * 设置进度回调
     * @param callback 进度回调函数
     */
    setOnProgress(callback: (progress: number) => void): void;
    /**
     * 获取当前加载的 URL
     */
    getCurrentUrl(): string | null;
    /**
     * 检查纹理是否已缓存
     * @param url 纹理 URL
     */
    isCached(url: string): boolean;
    /**
     * 获取缓存的纹理
     * @param url 纹理 URL
     */
    getCachedTexture(url: string): THREE.Texture | undefined;
    /**
     * 清除纹理缓存
     */
    clearCache(): void;
    /**
     * 移除特定纹理缓存
     * @param url 纹理 URL
     */
    removeCachedTexture(url: string): void;
    /**
     * 销毁加载器
     */
    dispose(): void;
}

/** 可序列化的通用路径数据，不包含 Three.js 运行时对象。 */
export declare interface PathDrawData {
    version: 1;
    id: string;
    lineType: PathDrawLineType;
    coordinateSystem: 'world';
    closed: false;
    roundedRadius: number;
    points: PathDrawPointData[];
    samples: PathDrawVector3[];
    length: number;
}

/** 可序列化的通用路径数据，不包含 Three.js 运行时对象。 */
declare interface PathDrawData_2 {
    version: 1;
    id: string;
    lineType: PathDrawLineType_2;
    coordinateSystem: 'world';
    closed: false;
    roundedRadius: number;
    points: PathDrawPointData_2[];
    samples: PathDrawVector3_2[];
    length: number;
}

export declare type PathDrawLineType = 'bezier' | 'straight' | 'rounded';

declare type PathDrawLineType_2 = 'bezier' | 'straight' | 'rounded';

/** 管理模型表面采点、路径预览、点位编辑和通用数据导出。 */
declare class PathDrawManager {
    readonly type = "path-draw";
    private readonly engine;
    private readonly root;
    private readonly pointsGroup;
    private readonly points;
    private readonly history;
    private options;
    private lineType;
    private roundedRadius;
    private line;
    private previewLine;
    private previewMarker;
    private transformControl;
    private transformHelper;
    private selectedPointId;
    private panel;
    private pointsList;
    private statusElement;
    private addButton;
    private completeButton;
    private radiusInput;
    private mode;
    private active;
    private closing;
    private transformDragging;
    private suppressNextCanvasClick;
    private controlsEnabledBeforeDrag;
    private pointSequence;
    private pathId;
    private readonly onKeyDown;
    constructor(engine: any);
    /** 打开路径编辑器；重复打开会先彻底清理上一次会话。 */
    open(options?: PathDrawOptions_2): void;
    /** 点击“添加点”后进入单次拾取，成功落点会立即回到编辑状态。 */
    startAddPoint(): boolean;
    /** 切换路径线型并记录为一条可撤销操作。 */
    setLineType(lineType: PathDrawLineType_2): void;
    /** 撤销最近一次采点、删点、移动、坐标或线型修改。 */
    undo(): boolean;
    /** 清空当前路径但保留编辑器，清空操作本身可以撤销。 */
    clear(): void;
    /** 返回与 Three.js 解耦的路径快照；少于两个点时路径尚未成立。 */
    getPathData(): PathDrawData_2 | null;
    /** 完成并返回路径数据，回调结束后关闭编辑器和所有临时对象。 */
    complete(): PathDrawData_2 | null;
    /** 判断编辑器当前是否处于打开状态。 */
    isActive(): boolean;
    /** 关闭功能并清除点位、UI、线条、操作柄、历史和事件监听。 */
    close(): void;
    private closeInternal;
    /** 引擎销毁时释放长期持有的 Three.js 资源。 */
    dispose(): void;
    /** 相机类型切换后同步操作柄相机，保证正交与透视视图都可编辑。 */
    update(): void;
    /** 行为系统切换到其他工具时，按关闭语义清理整个路径会话。 */
    disActive(): void;
    /** 拾取状态更新虚线预览；编辑状态不接管模型悬浮反馈。 */
    handleMouseMove(event: any): void;
    /** 拾取状态提交一个点，编辑状态则选择场景中的点位。 */
    handleMouseClick(event: any): void;
    /** Esc 只退出本次拾取；再次操作仍保留已绘制路径。 */
    handelKeyEscDown(): void;
    private activateBehavior;
    private restoreDefaultBehavior;
    private ensureTransformControl;
    private detachTransformControl;
    private createPointRecord;
    private selectPoint;
    private clearSelection;
    private getSelectedPoint;
    private getCatchPoint;
    private pickPointMesh;
    private updatePreview;
    private clearPreview;
    private refreshAll;
    private refreshLine;
    /** 使用 Line2 保证 WebGL 环境下的像素线宽真实生效。 */
    private updateLineObject;
    private syncLineResolution;
    private disposeLine;
    private buildSamplePoints;
    /** 使用 De Casteljau 算法支持任意数量的贝塞尔控制点。 */
    private sampleBezier;
    /** 每个折点分别截取进出线段，并用二次曲线生成稳定圆角。 */
    private sampleRoundedPolyline;
    private calculateLength;
    private getPointRole;
    private getRoleLabel;
    private saveHistory;
    private createSnapshot;
    private restoreSnapshot;
    private clearPointRecords;
    private removePoint;
    private updatePointCoordinate;
    private createPanel;
    private createIconButton;
    private refreshPanel;
    private renderPointRows;
    private setButtonDisabled;
    private setStatus;
    private handleKeyDown;
    private isTextInputTarget;
    private emitChange;
    private requestRender;
    private toPlainVector;
}

/** 管理模型表面采点、路径预览、点位编辑和通用数据导出。 */
declare class PathDrawManager_2 {
    readonly type = "path-draw";
    private readonly engine;
    private readonly root;
    private readonly pointsGroup;
    private readonly points;
    private readonly history;
    private options;
    private lineType;
    private roundedRadius;
    private line;
    private previewLine;
    private previewMarker;
    private transformControl;
    private transformHelper;
    private selectedPointId;
    private panel;
    private pointsList;
    private statusElement;
    private addButton;
    private completeButton;
    private radiusInput;
    private mode;
    private active;
    private closing;
    private transformDragging;
    private suppressNextCanvasClick;
    private controlsEnabledBeforeDrag;
    private pointSequence;
    private pathId;
    private readonly onKeyDown;
    constructor(engine: any);
    /** 打开路径编辑器；重复打开会先彻底清理上一次会话。 */
    open(options?: PathDrawOptions): void;
    /** 点击“添加点”后进入单次拾取，成功落点会立即回到编辑状态。 */
    startAddPoint(): boolean;
    /** 切换路径线型并记录为一条可撤销操作。 */
    setLineType(lineType: PathDrawLineType): void;
    /** 撤销最近一次采点、删点、移动、坐标或线型修改。 */
    undo(): boolean;
    /** 清空当前路径但保留编辑器，清空操作本身可以撤销。 */
    clear(): void;
    /** 返回与 Three.js 解耦的路径快照；少于两个点时路径尚未成立。 */
    getPathData(): PathDrawData | null;
    /** 完成并返回路径数据，回调结束后关闭编辑器和所有临时对象。 */
    complete(): PathDrawData | null;
    /** 判断编辑器当前是否处于打开状态。 */
    isActive(): boolean;
    /** 关闭功能并清除点位、UI、线条、操作柄、历史和事件监听。 */
    close(): void;
    private closeInternal;
    /** 引擎销毁时释放长期持有的 Three.js 资源。 */
    dispose(): void;
    /** 相机类型切换后同步操作柄相机，保证正交与透视视图都可编辑。 */
    update(): void;
    /** 行为系统切换到其他工具时，按关闭语义清理整个路径会话。 */
    disActive(): void;
    /** 拾取状态更新虚线预览；编辑状态不接管模型悬浮反馈。 */
    handleMouseMove(event: any): void;
    /** 拾取状态提交一个点，编辑状态则选择场景中的点位。 */
    handleMouseClick(event: any): void;
    /** Esc 只退出本次拾取；再次操作仍保留已绘制路径。 */
    handelKeyEscDown(): void;
    private activateBehavior;
    private restoreDefaultBehavior;
    private ensureTransformControl;
    private detachTransformControl;
    private createPointRecord;
    private selectPoint;
    private clearSelection;
    private getSelectedPoint;
    private getCatchPoint;
    private pickPointMesh;
    private updatePreview;
    private clearPreview;
    private refreshAll;
    private refreshLine;
    /** 使用 Line2 保证 WebGL 环境下的像素线宽真实生效。 */
    private updateLineObject;
    private syncLineResolution;
    private disposeLine;
    private buildSamplePoints;
    /** 使用 De Casteljau 算法支持任意数量的贝塞尔控制点。 */
    private sampleBezier;
    /** 每个折点分别截取进出线段，并用二次曲线生成稳定圆角。 */
    private sampleRoundedPolyline;
    private calculateLength;
    private getPointRole;
    private getRoleLabel;
    private saveHistory;
    private createSnapshot;
    private restoreSnapshot;
    private clearPointRecords;
    private removePoint;
    private updatePointCoordinate;
    private createPanel;
    private createIconButton;
    private refreshPanel;
    private renderPointRows;
    private setButtonDisabled;
    private setStatus;
    private handleKeyDown;
    private isTextInputTarget;
    private emitChange;
    private requestRender;
    private toPlainVector;
}

export declare interface PathDrawOptions {
    id?: string;
    lineType?: PathDrawLineType;
    lineColor?: string;
    previewColor?: string;
    pointColor?: string;
    selectedPointColor?: string;
    pointSize?: number;
    /** 线条屏幕宽度，单位为 CSS 像素。 */
    lineWidth?: number;
    sampleCount?: number;
    roundedRadius?: number;
    historyLimit?: number;
    onChange?: (data: PathDrawData | null) => void;
    onComplete?: (data: PathDrawData) => void;
}

declare interface PathDrawOptions_2 {
    id?: string;
    lineType?: PathDrawLineType_2;
    lineColor?: string;
    previewColor?: string;
    pointColor?: string;
    selectedPointColor?: string;
    pointSize?: number;
    /** 线条屏幕宽度，单位为 CSS 像素。 */
    lineWidth?: number;
    sampleCount?: number;
    roundedRadius?: number;
    historyLimit?: number;
    onChange?: (data: PathDrawData_2 | null) => void;
    onComplete?: (data: PathDrawData_2) => void;
}

export declare interface PathDrawPointData {
    id: string;
    order: number;
    role: PathDrawPointRole;
    position: PathDrawVector3;
}

declare interface PathDrawPointData_2 {
    id: string;
    order: number;
    role: PathDrawPointRole_2;
    position: PathDrawVector3_2;
}

export declare type PathDrawPointRole = 'start' | 'control' | 'end';

declare type PathDrawPointRole_2 = 'start' | 'control' | 'end';

export declare interface PathDrawVector3 {
    x: number;
    y: number;
    z: number;
}

declare interface PathDrawVector3_2 {
    x: number;
    y: number;
    z: number;
}

/**
 * 商业级关键帧漫游时间轴。
 *
 * 所有运动、停留和循环统一由一个播放头驱动；关键帧在播放前编译，运行期间不修改源数据。
 */
declare class PathRoaming {
    private readonly engine;
    private points;
    private status;
    private options;
    private activePointIndices;
    private activePoints;
    private segments;
    private animationFrameId;
    private animationSessionId;
    private lastFrameTime;
    private playhead;
    private totalTime;
    private loopIndex;
    private currentPose;
    private completedSegmentIndices;
    private orientationUp;
    constructor(engine: any);
    /** 初始化漫游管理器。 */
    init(): void;
    /** 读取当前相机并生成可持久化关键帧。 */
    getCurrentPoint(): IRoamingPoint;
    /** 将当前相机姿态添加为关键帧。 */
    addPoint(stayTime?: number): number;
    /** 添加一个指定姿态的关键帧。 */
    addKeyframe(point: IRoamingPoint): number;
    /** 批量追加关键帧。 */
    addPoints(points: IRoamingPoint[]): number;
    /** 兼容旧接口，继续采用追加语义。 */
    savePoints(points: IRoamingPoint[]): number;
    /** 使用新关键帧集合完整替换当前数据。 */
    setPoints(points: IRoamingPoint[]): number;
    /** 删除指定关键帧。 */
    removePoint(index: number): boolean;
    /** 清空全部关键帧。 */
    clearPoints(): void;
    /** 返回关键帧深拷贝，调用方修改结果不会污染内部时间轴。 */
    getPoints(): IRoamingPoint[];
    /** 获取关键帧数量。 */
    getPointCount(): number;
    /** 更新指定关键帧。 */
    updatePoint(index: number, point: IRoamingPoint): boolean;
    /** 更新关键帧的停留时间。 */
    setPointStayTime(index: number, stayTime: number): boolean;
    /** 将关键帧序列化为 JSON。 */
    serialize(pretty?: boolean): string;
    /** 从 JSON 导入关键帧；replace=false 时采用追加模式。 */
    deserialize(serialized: string, replace?: boolean): number;
    /** 无动画跳转到指定关键帧。 */
    jumpToPoint(index: number): boolean;
    /** 从第一帧到最后一帧播放完整时间轴。 */
    play(options?: IPlayOptions): boolean;
    /** 播放指定关键帧范围，支持正向和反向。 */
    playRange(fromIndex: number, toIndex: number, options?: IPlayOptions): boolean;
    /** 暂停并保留播放头、当前姿态和循环状态。 */
    pause(): boolean;
    /** 从暂停位置继续播放。 */
    resume(): boolean;
    /** 停止在当前姿态，并把最终状态一次性同步给控制器。 */
    stop(): void;
    /** 设置播放倍速，运行中即时生效。 */
    setPlaybackRate(playbackRate: number): boolean;
    /** 跳到时间轴归一化进度；默认不补发跨越关键帧的完成回调。 */
    seek(progress: number, emitPointCallbacks?: boolean): boolean;
    /** 获取当前播放状态快照。 */
    getState(): IRoamingPlaybackState;
    /** 兼容旧接口。 */
    getIsPlaying(): boolean;
    /** 释放动画和关键帧数据。 */
    dispose(): void;
    /** 校验范围、编译时间轴并启动播放。 */
    private startPlayback;
    /** 使用帧间增量推进全局播放头，浏览器失焦后限制单次跳跃。 */
    private readonly animate;
    /** 根据循环策略重建下一轮时间轴。 */
    private advanceLoop;
    /** 完成播放并保持终点姿态。 */
    private completePlayback;
    /** 将当前关键帧顺序编译成包含运动和停留的不可变片段。 */
    private compileTimeline;
    /** 只按相机直线移动距离分配时间，旋转量不再改变移动速度。 */
    private getSegmentWeights;
    /** 按折线累计距离生成全局匀速时间轴；原地转向仅占一个最小帧时长。 */
    private getSegmentDurations;
    /** 根据播放头计算并应用当前姿态。 */
    private applyPlayhead;
    /** 位置、目标点和方向向量全部按同一个线性进度插值。 */
    private interpolateSegment;
    /** 所有空间向量统一使用直线插值，不再生成曲线或过冲。 */
    private interpolateTrackVector;
    /** 将关键帧观察向量线性插值后归一化，再据此生成相机姿态。 */
    private interpolateDirectionRotation;
    /** 记录首帧参考上方向，整段动画不再额外插值滚转角。 */
    private prepareOrientationTrack;
    /** 关键帧端点也按方向向量生成姿态，避免端点采用另一套旋转规则。 */
    private createEndpointPose;
    /** 使用位置到目标点的方向向量生成相机姿态。 */
    private createLookAtQuaternion;
    /** 使用相机本地 -Z 轴对准方向，并在接近极点时保持右方向连续。 */
    private createDirectionQuaternion;
    /** 直接更新相机；只有相机类型切换时才调用完整恢复流程。 */
    private applyPose;
    /** 返回给定播放时间所在片段，停留时间属于其前面的运动片段。 */
    private findSegment;
    /** 补发播放头跨越的关键帧完成事件，并保证每轮只触发一次。 */
    private reportCompletedSegments;
    /** 跳播回退时重建已完成集合，避免后续回调丢失或重复。 */
    private rebuildCompletedSegments;
    /** 规范化播放配置，并兼容旧版 loop 布尔值。 */
    private resolvePlayOptions;
    /** 规范化外部关键帧，并以四元数作为旋转的权威数据。 */
    private normalizePoint;
    /** 当外部四元数无效时才回退到欧拉角，避免 NaN 进入渲染循环。 */
    private normalizeQuaternion;
    /** 创建连续关键帧索引，并按播放方向排序。 */
    private createPointIndexRange;
    /** 播放期间修改关键帧会先停止时间轴，避免编译数据与源数据不一致。 */
    private stopForMutation;
    /** 源关键帧变化后立即失效编译缓存，禁止旧时间轴继续 seek 或 resume。 */
    private invalidateTimeline;
    /** 切换状态并通知外部。 */
    private setStatus;
    /** 发送逐帧更新。 */
    private emitUpdate;
    /** 发送状态变更。 */
    private emitStateChange;
    /** 统一报告配置或数据错误。 */
    private emitError;
    /** 播放启动失败时优先使用本次调用提供的错误回调。 */
    private failPlayback;
    /** 用户回调异常不能中断引擎动画循环。 */
    private invokeCallback;
    /** 取消当前动画帧。 */
    private cancelAnimationFrame;
    /** 播放期间解除引擎空闲限帧。 */
    private setFrameRateExempt;
    private isValidPointIndex;
    private isEasing;
    private interpolateOptionalNumber;
    private clonePoint;
    private normalizeVector;
    private normalizeDirection;
    private normalizeOptionalPositiveNumber;
    private toFiniteNumber;
    private toPositiveNumber;
    private toNonNegativeNumber;
    private toVector3;
    private fromVector3;
    private toQuaternion;
    private fromQuaternion;
}

/**
 * 商业级关键帧漫游时间轴。
 *
 * 所有运动、停留和循环统一由一个播放头驱动；关键帧在播放前编译，运行期间不修改源数据。
 */
declare class PathRoaming_2 {
    private readonly engine;
    private points;
    private status;
    private options;
    private activePointIndices;
    private activePoints;
    private segments;
    private animationFrameId;
    private animationSessionId;
    private lastFrameTime;
    private playhead;
    private totalTime;
    private loopIndex;
    private currentPose;
    private completedSegmentIndices;
    private orientationUp;
    constructor(engine: any);
    /** 初始化漫游管理器。 */
    init(): void;
    /** 读取当前相机并生成可持久化关键帧。 */
    getCurrentPoint(): IRoamingPoint_2;
    /** 将当前相机姿态添加为关键帧。 */
    addPoint(stayTime?: number): number;
    /** 添加一个指定姿态的关键帧。 */
    addKeyframe(point: IRoamingPoint_2): number;
    /** 批量追加关键帧。 */
    addPoints(points: IRoamingPoint_2[]): number;
    /** 兼容旧接口，继续采用追加语义。 */
    savePoints(points: IRoamingPoint_2[]): number;
    /** 使用新关键帧集合完整替换当前数据。 */
    setPoints(points: IRoamingPoint_2[]): number;
    /** 删除指定关键帧。 */
    removePoint(index: number): boolean;
    /** 清空全部关键帧。 */
    clearPoints(): void;
    /** 返回关键帧深拷贝，调用方修改结果不会污染内部时间轴。 */
    getPoints(): IRoamingPoint_2[];
    /** 获取关键帧数量。 */
    getPointCount(): number;
    /** 更新指定关键帧。 */
    updatePoint(index: number, point: IRoamingPoint_2): boolean;
    /** 更新关键帧的停留时间。 */
    setPointStayTime(index: number, stayTime: number): boolean;
    /** 将关键帧序列化为 JSON。 */
    serialize(pretty?: boolean): string;
    /** 从 JSON 导入关键帧；replace=false 时采用追加模式。 */
    deserialize(serialized: string, replace?: boolean): number;
    /** 无动画跳转到指定关键帧。 */
    jumpToPoint(index: number): boolean;
    /** 从第一帧到最后一帧播放完整时间轴。 */
    play(options?: IPlayOptions_2): boolean;
    /** 播放指定关键帧范围，支持正向和反向。 */
    playRange(fromIndex: number, toIndex: number, options?: IPlayOptions_2): boolean;
    /** 暂停并保留播放头、当前姿态和循环状态。 */
    pause(): boolean;
    /** 从暂停位置继续播放。 */
    resume(): boolean;
    /** 停止在当前姿态，并把最终状态一次性同步给控制器。 */
    stop(): void;
    /** 设置播放倍速，运行中即时生效。 */
    setPlaybackRate(playbackRate: number): boolean;
    /** 跳到时间轴归一化进度；默认不补发跨越关键帧的完成回调。 */
    seek(progress: number, emitPointCallbacks?: boolean): boolean;
    /** 获取当前播放状态快照。 */
    getState(): IRoamingPlaybackState_2;
    /** 兼容旧接口。 */
    getIsPlaying(): boolean;
    /** 释放动画和关键帧数据。 */
    dispose(): void;
    /** 校验范围、编译时间轴并启动播放。 */
    private startPlayback;
    /** 使用帧间增量推进全局播放头，浏览器失焦后限制单次跳跃。 */
    private readonly animate;
    /** 根据循环策略重建下一轮时间轴。 */
    private advanceLoop;
    /** 完成播放并保持终点姿态。 */
    private completePlayback;
    /** 将当前关键帧顺序编译成包含运动和停留的不可变片段。 */
    private compileTimeline;
    /** 只按相机直线移动距离分配时间，旋转量不再改变移动速度。 */
    private getSegmentWeights;
    /** 按折线累计距离生成全局匀速时间轴；原地转向仅占一个最小帧时长。 */
    private getSegmentDurations;
    /** 根据播放头计算并应用当前姿态。 */
    private applyPlayhead;
    /** 位置、目标点和方向向量全部按同一个线性进度插值。 */
    private interpolateSegment;
    /** 所有空间向量统一使用直线插值，不再生成曲线或过冲。 */
    private interpolateTrackVector;
    /** 将关键帧观察向量线性插值后归一化，再据此生成相机姿态。 */
    private interpolateDirectionRotation;
    /** 记录首帧参考上方向，整段动画不再额外插值滚转角。 */
    private prepareOrientationTrack;
    /** 关键帧端点也按方向向量生成姿态，避免端点采用另一套旋转规则。 */
    private createEndpointPose;
    /** 使用位置到目标点的方向向量生成相机姿态。 */
    private createLookAtQuaternion;
    /** 使用相机本地 -Z 轴对准方向，并在接近极点时保持右方向连续。 */
    private createDirectionQuaternion;
    /** 直接更新相机；只有相机类型切换时才调用完整恢复流程。 */
    private applyPose;
    /** 返回给定播放时间所在片段，停留时间属于其前面的运动片段。 */
    private findSegment;
    /** 补发播放头跨越的关键帧完成事件，并保证每轮只触发一次。 */
    private reportCompletedSegments;
    /** 跳播回退时重建已完成集合，避免后续回调丢失或重复。 */
    private rebuildCompletedSegments;
    /** 规范化播放配置，并兼容旧版 loop 布尔值。 */
    private resolvePlayOptions;
    /** 规范化外部关键帧，并以四元数作为旋转的权威数据。 */
    private normalizePoint;
    /** 当外部四元数无效时才回退到欧拉角，避免 NaN 进入渲染循环。 */
    private normalizeQuaternion;
    /** 创建连续关键帧索引，并按播放方向排序。 */
    private createPointIndexRange;
    /** 播放期间修改关键帧会先停止时间轴，避免编译数据与源数据不一致。 */
    private stopForMutation;
    /** 源关键帧变化后立即失效编译缓存，禁止旧时间轴继续 seek 或 resume。 */
    private invalidateTimeline;
    /** 切换状态并通知外部。 */
    private setStatus;
    /** 发送逐帧更新。 */
    private emitUpdate;
    /** 发送状态变更。 */
    private emitStateChange;
    /** 统一报告配置或数据错误。 */
    private emitError;
    /** 播放启动失败时优先使用本次调用提供的错误回调。 */
    private failPlayback;
    /** 用户回调异常不能中断引擎动画循环。 */
    private invokeCallback;
    /** 取消当前动画帧。 */
    private cancelAnimationFrame;
    /** 播放期间解除引擎空闲限帧。 */
    private setFrameRateExempt;
    private isValidPointIndex;
    private isEasing;
    private interpolateOptionalNumber;
    private clonePoint;
    private normalizeVector;
    private normalizeDirection;
    private normalizeOptionalPositiveNumber;
    private toFiniteNumber;
    private toPositiveNumber;
    private toNonNegativeNumber;
    private toVector3;
    private fromVector3;
    private toQuaternion;
    private fromQuaternion;
}

/**
 * 性能统计
 */
declare interface PerformanceStats {
    fps: number;
    renderTime: number;
    entityCount: number;
    visibleEntityCount: number;
    memoryUsage?: number;
}

/** 启动四点捕捉校准所需参数。 */
export declare interface PointCalibrationOptions {
    url: string;
    /** 四点采集完成并应用校准后触发。 */
    onChange?: CalibrationChangeCallback;
}

/** 启动四点捕捉校准所需参数。 */
declare interface PointCalibrationOptions_2 {
    url: string;
    /** 四点采集完成并应用校准后触发。 */
    onChange?: CalibrationChangeCallback_2;
}

declare type QualityEffect = Exclude<WebGPUPostProcessingEffect, 'bloom'>;

/**
 * RangeScale - 范围缩放工具
 *
 * 功能：
 * 1. 用户在屏幕上绘制一个区域（通过鼠标拖拽）
 * 2. 将屏幕区域转换为世界坐标
 * 3. 计算该区域在世界空间中的包围盒
 * 4. 调整相机位置和视角，使该区域适合视口
 */
declare class RangeScale {
    private engine;
    private isDrawing;
    private startPoint;
    private endPoint;
    private selectionBox;
    private worldToScreen;
    private boundMouseDown;
    private boundMouseMove;
    private boundMouseUp;
    private boundKeyDown;
    constructor(engine: any);
    /**
     * 初始化工具
     * 创建绘制框UI元素，初始化坐标转换工具
     */
    init(): void;
    /**
     * 激活工具
     * 禁用控制器，添加鼠标事件监听器和键盘事件监听器
     */
    active(): void;
    /**
     * 停用工具
     * 启用控制器，移除鼠标事件监听器和键盘事件监听器
     */
    disActive(): void;
    /**
     * 创建绘制框UI元素
     * 用于在屏幕上显示用户绘制的区域
     */
    private createSelectionBoxElement;
    /**
     * 鼠标按下事件处理
     * 开始绘制区域
     */
    private onMouseDown;
    /**
     * 鼠标移动事件处理
     * 更新绘制框的显示
     */
    private onMouseMove;
    /**
     * 鼠标释放事件处理
     * 结束绘制，执行缩放操作
     */
    private onMouseUp;
    /**
     * 键盘按下事件处理
     * 按下 ESC 键时退出功能
     */
    private onKeyDown;
    /**
     * 结束绘制
     * 隐藏绘制框
     */
    private endDrawing;
    /**
     * 更新绘制框UI
     * 根据起点和终点更新绘制框的位置和大小
     */
    private updateSelectionBoxUI;
    /**
     * 执行缩放操作
     * 将屏幕区域转换为世界坐标，计算包围盒，调整相机视角
     */
    private performZoom;
    /**
     * 调整相机视角以适应包围盒
     * @param boundingBox - 要适应的包围盒
     */
    private fitCameraToBoundingBox;
    dispose(): void;
}

/**
 * RangeScale - 范围缩放工具
 *
 * 功能：
 * 1. 用户在屏幕上绘制一个区域（通过鼠标拖拽）
 * 2. 将屏幕区域转换为世界坐标
 * 3. 计算该区域在世界空间中的包围盒
 * 4. 调整相机位置和视角，使该区域适合视口
 */
declare class RangeScale_2 {
    private engine;
    private isDrawing;
    private startPoint;
    private endPoint;
    private selectionBox;
    private worldToScreen;
    private boundMouseDown;
    private boundMouseMove;
    private boundMouseUp;
    private boundKeyDown;
    constructor(engine: any);
    /**
     * 初始化工具
     * 创建绘制框UI元素，初始化坐标转换工具
     */
    init(): void;
    /**
     * 激活工具
     * 禁用控制器，添加鼠标事件监听器和键盘事件监听器
     */
    active(): void;
    /**
     * 停用工具
     * 启用控制器，移除鼠标事件监听器和键盘事件监听器
     */
    disActive(): void;
    /**
     * 创建绘制框UI元素
     * 用于在屏幕上显示用户绘制的区域
     */
    private createSelectionBoxElement;
    /**
     * 鼠标按下事件处理
     * 开始绘制区域
     */
    private onMouseDown;
    /**
     * 鼠标移动事件处理
     * 更新绘制框的显示
     */
    private onMouseMove;
    /**
     * 鼠标释放事件处理
     * 结束绘制，执行缩放操作
     */
    private onMouseUp;
    /**
     * 键盘按下事件处理
     * 按下 ESC 键时退出功能
     */
    private onKeyDown;
    /**
     * 结束绘制
     * 隐藏绘制框
     */
    private endDrawing;
    /**
     * 更新绘制框UI
     * 根据起点和终点更新绘制框的位置和大小
     */
    private updateSelectionBoxUI;
    /**
     * 执行缩放操作
     * 将屏幕区域转换为世界坐标，计算包围盒，调整相机视角
     */
    private performZoom;
    /**
     * 调整相机视角以适应包围盒
     * @param boundingBox - 要适应的包围盒
     */
    private fitCameraToBoundingBox;
    dispose(): void;
}

export declare interface RegisterBimCalibrationOptions {
    id?: string;
    name?: string;
}

/** 渲染中间态，block 展开后先统一转成这种结构，再按图层和颜色合批。 */
declare interface RenderItem2d {
    kind: RenderKind2d;
    layer: string;
    /** 图元可见性依赖的所有图层，包含块内图元图层和外层 INSERT 图层。 */
    layerDeps?: string[];
    color: number;
    lineType?: string | null;
    lineTypeScale?: number;
    lineTypePattern?: number[];
    linkId: any;
    points?: THREE.Vector3[];
    geometry?: THREE.BufferGeometry;
    useVertexColors?: boolean;
    imageUrl?: string;
    opacity?: number;
    min?: THREE.Vector3;
    max?: THREE.Vector3;
    textAnchor?: THREE.Vector3;
    info: any;
}

declare type RenderKind2d = 'line' | 'text' | 'hatch' | 'image';

declare type RenderMode = 'simple' | 'balance' | 'advanced';

declare type RenderMode_2 = RenderQualityInput;

declare class RenderModule {
    private engine;
    renderer: THREE.WebGLRenderer | null;
    private watermark;
    constructor(engine: any);
    createRenderer(): THREE.WebGLRenderer;
    disposeRenderer(): void;
    /**
     * 在最终渲染结果上追加 canvas 内嵌水印。
     */
    drawWatermark(): void;
}

declare class RenderModule2d {
    private engine;
    renderer: THREE.WebGLRenderer;
    private container;
    private options;
    private watermark;
    private antialias;
    private alpha;
    private precision;
    constructor(engine: any, container: HTMLElement, options: Engine2dOptions);
    /**
     * 创建 WebGL 渲染器
     */
    private createRenderer;
    /**
     * 渲染场景
     * @param scene Three.js 场景
     * @param camera Three.js 相机
     */
    render(scene: THREE.Scene, camera: THREE.Camera): void;
    /**
     * 处理窗口大小变化
     */
    private handleResize;
    /**
     * 窗口大小变化处理
     */
    private onWindowResize;
    /**
     * 手动调整渲染器尺寸
     * @param width 宽度
     * @param height 高度
     */
    setSize(width: number, height: number): void;
    /**
     * 获取渲染器尺寸
     * @returns 尺寸对象 { width, height }
     */
    getSize(): {
        width: number;
        height: number;
    };
    /**
     * 设置背景色
     * @param color 颜色值
     */
    setBackgroundColor(color: number): void;
    /**
     * 设置像素比率
     * @param pixelRatio 像素比率
     */
    setPixelRatio(pixelRatio: number): void;
    /**
     * 获取像素比率
     * @returns 像素比率
     */
    getPixelRatio(): number;
    /**
     * 启用/禁用抗锯齿
     * @param enabled 是否启用
     */
    setAntialias(enabled: boolean): void;
    /**
     * 清除渲染缓冲
     * @param color 是否清除颜色缓冲
     * @param depth 是否清除深度缓冲
     * @param stencil 是否清除模板缓冲
     */
    clear(color?: boolean, depth?: boolean, stencil?: boolean): void;
    /**
     * 将水印绘制到当前 WebGL canvas，供主循环和截图的强制渲染复用。
     */
    drawWatermark(): void;
    /**
     * 获取渲染器信息
     * @returns 渲染器信息
     */
    getInfo(): {
        renderer: string;
        version: string;
        vendor: string;
        capabilities: any;
    };
    /**
     * 销毁渲染模块
     */
    dispose(): void;
}

/**
 * 渲染模块 - 管理 WebGL 渲染器和渲染循环
 */
declare class RenderModule720 {
    private renderer;
    private container;
    private animationId;
    private isRenderingPaused;
    private watermark;
    private fpsFrameCount;
    private fpsLastTime;
    private currentFps;
    private onBeforeRenderCallback?;
    private onAfterRenderCallback?;
    constructor(container: HTMLElement, antialias?: boolean);
    /**
     * 创建 WebGL 渲染器
     */
    private createRenderer;
    /**
     * 初始化渲染器
     */
    private init;
    /**
     * 设置渲染前回调
     */
    setOnBeforeRender(callback: () => void): void;
    /**
     * 设置渲染后回调
     */
    setOnAfterRender(callback: () => void): void;
    /**
     * 渲染场景
     */
    render(scene: THREE.Scene, camera: THREE.Camera): void;
    /**
     * 启动渲染循环
     * @param scene Three.js 场景
     * @param camera Three.js 相机
     */
    startRenderLoop(scene: THREE.Scene, camera: THREE.Camera): void;
    /**
     * 动画循环
     */
    private animate;
    /**
     * 暂停渲染
     */
    pauseRendering(): void;
    /**
     * 恢复渲染
     */
    resumeRendering(scene: THREE.Scene, camera: THREE.Camera): void;
    /**
     * 检查渲染是否暂停
     */
    isRenderingPausedState(): boolean;
    /**
     * 更新 FPS
     */
    private updateFps;
    /**
     * 获取当前 FPS
     */
    getCurrentFps(): number;
    /**
     * 调整渲染器大小
     * @param width 容器宽度
     * @param height 容器高度
     */
    resize(width: number, height: number): void;
    /**
     * 获取渲染器 DOM 元素
     */
    getDomElement(): HTMLCanvasElement;
    /**
     * 获取渲染器对象
     */
    getRenderer(): THREE.WebGLRenderer;
    /**
     * 销毁渲染器
     */
    dispose(): void;
}

declare class RenderModule_2 {
    private engine;
    renderer: WebGPURenderer | null;
    private watermark;
    private backgroundHdrTexture;
    private isDisposed;
    constructor(engine: any);
    createRenderer(): WebGPURenderer;
    /** WebGPU 设备初始化是异步的，初始化顺序之外保持与 v2 一致。 */
    initRenderer(): Promise<WebGPURenderer>;
    disposeRenderer(): void;
    /**
     * 在最终渲染结果上追加 canvas 内嵌水印。
     */
    drawWatermark(): void;
}

/**
 * Gaussian 渲染模块。
 * 统一管理 WebGLRenderer、GaussianSplats3D Viewer 和 FPS 统计。
 */
declare class RenderModuleGaussian {
    private renderer;
    private viewer;
    private container;
    private animationId;
    private isRenderingPaused;
    private fpsFrameCount;
    private fpsLastTime;
    private fpsInfo;
    private watermark;
    private onBeforeRenderCallback?;
    private onAfterRenderCallback?;
    private onFpsUpdatedCallback?;
    constructor(container: HTMLElement, scene: THREE.Scene, camera: THREE.Camera, options: Required<Pick<EngineGaussianOptions, 'cameraUp' | 'initialCameraPosition' | 'initialCameraLookAt' | 'antialias' | 'sharedMemoryForWorkers' | 'gpuAcceleratedSort' | 'sphericalHarmonicsDegree'>> & Pick<EngineGaussianOptions, 'viewerOptions'>);
    private createRenderer;
    setOnBeforeRender(callback: () => void): void;
    setOnAfterRender(callback: () => void): void;
    setOnFpsUpdated(callback: (info: GaussianFpsInfo) => void): void;
    startRenderLoop(): void;
    private animate;
    render(): void;
    private updateFps;
    resetFpsStats(): void;
    pauseRendering(): void;
    resumeRendering(): void;
    isRenderingPausedState(): boolean;
    resize(width: number, height: number): void;
    getViewer(): GaussianSplats3D.Viewer;
    getRenderer(): THREE.WebGLRenderer;
    getDomElement(): HTMLCanvasElement;
    getFpsInfo(): GaussianFpsInfo;
    dispose(): Promise<void>;
}

declare type RenderQualityEffectState = Record<QualityEffect, boolean>;

/** v3 原生数字等级与 v2 三档模式共用的输入类型。 */
declare type RenderQualityInput = RenderQualityLevel | LegacyRenderMode;

export declare type RenderQualityLevel = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;

declare type RenderQualityParameters = {
    [K in QualityEffect]: WebGPUPostProcessingParameterMap[K];
};

export declare interface RenderQualityPreset {
    level: RenderQualityLevel;
    name: string;
    /** 质量等级切换时应用的颜色分级对比度倍率，1 为原始对比度。 */
    contrast: number;
    shadow: {
        enabled: boolean;
        mapSize: 512 | 1024 | 2048 | 4096;
    };
    effects: RenderQualityEffectState;
    parameters: RenderQualityParameters;
}

export declare interface ResolvedAutoExposureOptions {
    enabled: boolean;
    targetLuminance: number;
    minExposure: number;
    maxExposure: number;
    darkAdaptationSpeed: number;
    brightAdaptationSpeed: number;
    measurementInterval: number;
    probeWidth: number;
    probeHeight: number;
    lowPercentile: number;
    highPercentile: number;
}

export declare type ResolvedGISModelPosition = Required<GISModelPosition>;

/**
 * 解析 SDK 内置 public 资源 URL。绝对 URL 和 data/blob URL 原样返回。
 */
export declare function resolveSdkAsset(path: string, moduleUrl?: string): string;

declare type RoamingDirection = 'forward' | 'backward';

declare type RoamingDirection_2 = 'forward' | 'backward';

declare type RoamingEasing = 'linear' | 'easeIn' | 'easeOut' | 'easeInOut';

declare type RoamingEasing_2 = 'linear' | 'easeIn' | 'easeOut' | 'easeInOut';

declare type RoamingLoopMode = 'none' | 'repeat' | 'pingPong';

declare type RoamingLoopMode_2 = 'none' | 'repeat' | 'pingPong';

declare type RoamingPositionInterpolation = 'linear' | 'smooth';

declare type RoamingPositionInterpolation_2 = 'linear' | 'smooth';

declare type RoamingRotationInterpolation = 'direction' | 'auto' | 'lookAt' | 'slerp' | 'euler';

declare type RoamingRotationInterpolation_2 = 'direction' | 'auto' | 'lookAt' | 'slerp' | 'euler';

declare type RoamingStatus = 'idle' | 'playing' | 'paused';

declare type RoamingStatus_2 = 'idle' | 'playing' | 'paused';

declare type RoamingTimingMode = 'uniform' | 'distance' | 'keyframe';

declare type RoamingTimingMode_2 = 'uniform' | 'distance' | 'keyframe';

/** 漫游视角拖拽方向：1 为默认方向，-1 为反向。 */
export declare interface RoamLookDirection {
    horizontal?: 1 | -1;
    vertical?: 1 | -1;
}

/** 漫游视角拖拽方向：1 为默认方向，-1 为反向。 */
declare interface RoamLookDirection_2 {
    horizontal?: 1 | -1;
    vertical?: 1 | -1;
}

declare class RoomSpace {
    private engine;
    constructor(engine: any);
}

declare class RxQuotaListMapper {
    private engine;
    private codeMap;
    private continusIds;
    constructor(engine: any);
    loadNodeMap(model_: any): void;
    seachModels(codes: string[]): {
        id: number;
        name: string;
        url: string;
        attibute: any[];
    }[];
    private setelementInfo;
}

declare class RxQuotaListMapper_2 {
    private engine;
    private codeMap;
    private continusIds;
    constructor(engine: any);
    loadNodeMap(model_: any): void;
    seachModels(codes: string[]): {
        id: number;
        name: string;
        url: string;
        attibute: any[];
    }[];
    private setelementInfo;
}

export declare interface SceneModelData extends Required<Omit<ModelPlaceOptions, 'id'>> {
    id: string;
    materials: SceneModelMaterial[];
}

declare interface SceneModelData_2 extends Required<Omit<ModelPlaceOptions_2, 'id'>> {
    id: string;
    materials: SceneModelMaterial_2[];
}

export declare interface SceneModelMaterial {
    materialIndex: number;
    materialName?: string;
    mapUrl?: string;
}

declare interface SceneModelMaterial_2 {
    materialIndex: number;
    materialName?: string;
    mapUrl?: string;
}

declare class SceneModule {
    private engine;
    scene: THREE.Scene | null;
    constructor(engine: any);
}

declare class SceneModule2d {
    private engine;
    scene: THREE.Scene;
    private options;
    private adaptiveGrid?;
    private axesHelper?;
    constructor(engine: any, options: Engine2dOptions);
    /**
     * 创建 2D 场景
     */
    private createScene;
    /**
     * 初始化辅助工具
     */
    private initHelpers;
    /**
     * 延迟初始化网格（在所有模块创建完成后调用）
     */
    initGrid(): void;
    /**
     * 创建网格辅助（自适应网格）
     */
    createGrid(size?: number, divisions?: number): void;
    /**
     * 创建坐标轴辅助
     */
    createAxes(size?: number): void;
    /**
     * 设置背景颜色
     * @param color 颜色值
     */
    setBackgroundColor(color: number): void;
    /**
     * 根据背景颜色更新网格颜色
     * @param backgroundColor 背景颜色值
     */
    private updateGridColorsByBackground;
    /**
     * 添加对象到场景
     * @param object Three.js 对象
     */
    addObject(object: THREE.Object3D): void;
    /**
     * 从场景移除对象
     * @param object Three.js 对象
     */
    removeObject(object: THREE.Object3D): void;
    /**
     * 清空场景
     */
    clearScene(): void;
    /**
     * 获取场景中的所有对象
     * @param includeHelpers 是否包含辅助对象
     * @returns 对象数组
     */
    getObjects(includeHelpers?: boolean): THREE.Object3D[];
    /**
     * 获取场景统计信息
     * @returns 统计信息对象
     */
    getSceneStats(): {
        objectCount: number;
        meshCount: number;
        lineCount: number;
        groupCount: number;
    };
    /**
     * 显示/隐藏网格
     * @param visible 是否可见
     */
    setGridVisible(visible: boolean): void;
    /**
     * 显示/隐藏坐标轴
     * @param visible 是否可见
     */
    setAxesVisible(visible: boolean): void;
    /**
     * 销毁场景模块
     */
    dispose(): void;
}

/**
 * 场景模块 - 管理 720 全景场景
 * 负责创建球体几何体、应用全景纹理、管理场景对象
 */
declare class SceneModule720 {
    private scene;
    private panoramaSphere;
    private sphereRadius;
    constructor(radius?: number);
    /**
     * 初始化场景
     */
    private init;
    /**
     * 创建全景球体
     * @param radius 球体半径（建议 500-1000）
     * @param segments 分段数（建议 64）
     * @returns 球体网格对象
     */
    private createPanoramaSphere;
    /**
     * 更新全景图纹理
     * @param texture Three.js 纹理对象
     */
    updatePanoramaTexture(texture: THREE.Texture): void;
    /**
     * 清除当前全景纹理
     */
    clearPanoramaTexture(): void;
    /**
     * 获取场景对象
     */
    getScene(): THREE.Scene;
    /**
     * 获取全景球体对象
     */
    getPanoramaSphere(): THREE.Mesh | null;
    /**
     * 设置球体半径（需要重新创建球体）
     * @param radius 新的半径
     */
    setSphereRadius(radius: number): void;
    /**
     * 获取球体半径
     */
    getSphereRadius(): number;
    /**
     * 销毁模块
     */
    dispose(): void;
}

declare class SceneModule_2 {
    private engine;
    scene: THREE.Scene | null;
    constructor(engine: any);
}

/**
 * Gaussian 场景模块。
 * 负责维护可和高斯点云一起渲染的 Three.js 场景对象。
 */
declare class SceneModuleGaussian {
    private scene;
    constructor(backgroundColor?: string);
    getScene(): THREE.Scene;
    setBackgroundColor(color: string | null): void;
    dispose(): void;
}

export declare interface SdkAuthOptions {
    endpoint: string;
    token?: string;
    appId?: string;
    appKey?: string;
    appSecret?: string;
    origin?: string;
    product?: string;
    timeoutMs?: number;
}

export declare type SdkEngineType = '3d' | '2d' | '720' | 'gaussian';

export declare interface SdkVerifySession {
    authorized: boolean;
    expiresIn: number;
    sdkToken?: string;
    appId: string;
    applicationId: number;
    teamId: number;
    engineType: string;
    origin?: string;
    enginePermissions: string[];
}

/** 可被右键搜索面板检索的文字实体索引。 */
declare interface SearchableText2d {
    id: string;
    text: string;
    layer?: string;
    layerDeps?: string[];
    min?: THREE.Vector3;
    max?: THREE.Vector3;
    anchor?: THREE.Vector3;
    info?: any;
}

declare class SearchManager {
    private engine;
    private searchUI;
    constructor(engine: any);
    /** 只查询已加载的文字实体，支持连续包含和按字符顺序的模糊匹配。 */
    search(query: string): SearchResult[];
    /** 点击结果后定位到文字包围盒，并高亮对应文字图元。 */
    onResultSelect(result: SearchResult): void;
    /** 将搜索结果定位到视口中央，极小文字用锚点补一个可见范围。 */
    private fitToText;
    private getPositionDescription;
    private normalize;
    private getMatchScore;
    show(): void;
    hide(): void;
    toggle(): void;
    dispose(): void;
}

/** 三维模型检索与定位管理器，数据源为已加载模型的 nodesMap 和 rooms。 */
declare class SearchManager3d {
    private engine;
    private searchUI;
    constructor(engine: any);
    /** 按名称、ID、房间名称/编号检索已加载模型。 */
    search(query: string | number, options?: SearchOptions3d): SearchResult3d[];
    /** 仅按构件名称检索。 */
    searchByName(name: string, limit?: number): SearchResult3d[];
    /** 仅按构件 ID 检索。 */
    searchById(id: string | number, exact?: boolean): SearchResult3d[];
    /** 仅按房间名称、编号或房间 ID 检索。 */
    searchRooms(query: string | number, limit?: number): SearchResult3d[];
    /** 高亮并飞行定位到单个检索结果。 */
    focus(result: SearchResult3d): void;
    /** 批量高亮并定位，适合“定位全部搜索结果”的业务按钮。 */
    focusAll(results: SearchResult3d[]): void;
    /** 清除由检索触发的构件高亮。 */
    clearHighlight(): void;
    /** 显示居中检索框。 */
    show(): void;
    /** 隐藏居中检索框。 */
    hide(): void;
    /** 切换居中检索框显示状态。 */
    toggle(): void;
    /** 设置检索框明暗主题；也可在引擎初始化参数中传入 searchTheme。 */
    setTheme(theme: SearchTheme3d): void;
    /** 销毁检索界面及其事件监听。 */
    dispose(): void;
    private collectModelResult;
    private collectElementResults;
    private collectRoomResults;
    private toSelections;
    private mergeSelections;
    private getRoomElementIds;
    private toArray;
    private toBox3;
    private normalize;
    private getMatchScore;
}

/** 三维模型检索与定位管理器，数据源为已加载模型的 nodesMap 和 rooms。 */
declare class SearchManager3d_2 {
    private engine;
    private searchUI;
    constructor(engine: any);
    /** 按名称、ID、房间名称/编号检索已加载模型。 */
    search(query: string | number, options?: SearchOptions3d_2): SearchResult3d_2[];
    /** 仅按构件名称检索。 */
    searchByName(name: string, limit?: number): SearchResult3d_2[];
    /** 仅按构件 ID 检索。 */
    searchById(id: string | number, exact?: boolean): SearchResult3d_2[];
    /** 仅按房间名称、编号或房间 ID 检索。 */
    searchRooms(query: string | number, limit?: number): SearchResult3d_2[];
    /** 高亮并飞行定位到单个检索结果。 */
    focus(result: SearchResult3d_2): void;
    /** 批量高亮并定位，适合“定位全部搜索结果”的业务按钮。 */
    focusAll(results: SearchResult3d_2[]): void;
    /** 清除由检索触发的构件高亮。 */
    clearHighlight(): void;
    /** 显示居中检索框。 */
    show(): void;
    /** 隐藏居中检索框。 */
    hide(): void;
    /** 切换居中检索框显示状态。 */
    toggle(): void;
    /** 设置检索框明暗主题；也可在引擎初始化参数中传入 searchTheme。 */
    setTheme(theme: SearchTheme3d_2): void;
    /** 销毁检索界面及其事件监听。 */
    dispose(): void;
    private collectModelResult;
    private collectElementResults;
    private collectRoomResults;
    private toSelections;
    private mergeSelections;
    private getRoomElementIds;
    private toArray;
    private toBox3;
    private normalize;
    private getMatchScore;
}

export declare interface SearchOptions3d {
    /** 检索范围，默认同时检索构件、房间和模型名称。 */
    types?: Array<SearchResult3d['type']>;
    /** 限制返回条数，默认 100。 */
    limit?: number;
    /** ID 检索使用严格匹配；未指定时仍支持按 ID 片段匹配。 */
    exactId?: boolean;
}

declare interface SearchOptions3d_2 {
    /** 检索范围，默认同时检索构件、房间和模型名称。 */
    types?: Array<SearchResult3d_2['type']>;
    /** 限制返回条数，默认 100。 */
    limit?: number;
    /** ID 检索使用严格匹配；未指定时仍支持按 ID 片段匹配。 */
    exactId?: boolean;
}

declare interface SearchResult {
    id: string;
    name: string;
    type: string;
    layer?: string;
    description?: string;
    score?: number;
    target?: SearchableText2d;
}

/** 三维检索结果：构件结果可直接用于高亮，房间结果可包含关联构件或空间包围盒。 */
export declare interface SearchResult3d {
    id: string | number;
    name: string;
    type: 'element' | 'room' | 'model';
    url: string;
    modelName?: string;
    roomId?: string | number;
    roomNumber?: string;
    elementIds?: Array<string | number>;
    box?: THREE.Box3;
    score: number;
}

/** 三维检索结果：构件结果可直接用于高亮，房间结果可包含关联构件或空间包围盒。 */
declare interface SearchResult3d_2 {
    id: string | number;
    name: string;
    type: 'element' | 'room' | 'model';
    url: string;
    modelName?: string;
    roomId?: string | number;
    roomNumber?: string;
    elementIds?: Array<string | number>;
    box?: THREE.Box3;
    score: number;
}

export declare type SearchTheme3d = 'light' | 'dark';

declare type SearchTheme3d_2 = 'light' | 'dark';

declare class SectionBox {
    private engine;
    private isActive;
    private isCtrlDown;
    private listenersAttached;
    private box;
    private pickPoint;
    private pickNormal;
    private pickMesh;
    private box_;
    private plane;
    private meshs;
    private isDrag;
    maxBox: any;
    private readonly faceIdleOpacity;
    private readonly faceHoverOpacity;
    private readonly mobileLongPressDelay;
    private readonly mobileLongPressMoveTolerance;
    private touchLongPressTimer;
    private touchLongPressActive;
    private touchStartPosition;
    private touchLatestEvent;
    private readonly transformControls;
    private readonly transformAnchors;
    private readonly transformHelpers;
    private readonly faceMetaMap;
    private isSyncingTransform;
    private readonly transformHandleSize;
    private readonly transformHandleColor;
    private readonly transformHandleHoverColor;
    private readonly handleNativeMouseDown;
    private readonly handleNativeMouseMove;
    private readonly handleNativeMouseUp;
    private readonly handleNativeTouchStart;
    private readonly handleNativeTouchMove;
    private readonly handleNativeTouchEnd;
    private readonly handleNativeKeyDown;
    private readonly handleNativeKeyUp;
    constructor(engine: any, options?: {
        useCsgClipping?: boolean;
    });
    active(): void;
    disActive(): void;
    disabled(): void;
    recover(): void;
    init(updateFill?: boolean): void;
    getboxXyz(): {
        minX: any;
        minY: any;
        minZ: any;
        maxX: any;
        maxY: any;
        maxZ: any;
    };
    setboxXyz(xyz: any): void;
    setBox(box: any): void;
    reverseBox(): void;
    handleMouseDown(event: any): void;
    handleMouseUp(_event: any, updateFill?: boolean): void;
    private clampVector3;
    handleMouseMove(event: any): void;
    calculate_ratio(): void;
    private toPercent;
    private getInteractiveMeshes;
    private createRaycasterFromMouseEvent;
    private isMobileDevice;
    private getTouchPoint;
    private createMouseEventFromTouch;
    private clearTouchLongPressTimer;
    private resetTouchLongPressState;
    private attachListeners;
    private detachListeners;
    private resetMeshOpacity;
    private updateClippingBoxFill;
    private clearClippingBoxFill;
    private getFaceTransformOffset;
    private keepSingleDirectionArrow;
    private setTransformControlsVisible;
    private ensureFaceTransformControl;
    private updateFaceTransformControl;
    private getDominantAxis;
    private handleTransformObjectChange;
    updata_face(box: any): void;
    private createFace;
}

declare class SectionFace {
    private engine;
    private isActive;
    private isDrag;
    private isCtrlDown;
    private listenersAttached;
    private meshs;
    private box;
    private pickPoint;
    private pickNormal;
    private plane;
    private angleX;
    private angleY;
    private angleZ;
    private direction;
    private normal;
    private distance;
    private center;
    private current_center;
    private dragStartDistance;
    private dragStartCenter;
    private readonly idleOpacity;
    private readonly hoverOpacity;
    private transformControl;
    private transformAnchor;
    private transformHelper;
    private rotateControl;
    private rotateAnchor;
    private rotateHelper;
    private rotatePivot;
    private isSyncingTransformControl;
    private isSyncingRotateControl;
    private activeControlMode;
    private readonly moveEpsilon;
    private readonly transformHandleSize;
    private readonly rotateHandleSize;
    private readonly transformHandleColor;
    private readonly transformHandleHoverColor;
    private readonly mobileLongPressDelay;
    private readonly mobileLongPressMoveTolerance;
    private touchLongPressTimer;
    private touchLongPressActive;
    private touchStartPosition;
    private touchLatestEvent;
    private readonly handleNativePointerDown;
    private readonly handleNativePointerUp;
    private readonly handleNativeMouseDown;
    private readonly handleNativeMouseMove;
    private readonly handleNativeMouseUp;
    private readonly handleNativeTouchStart;
    private readonly handleNativeTouchMove;
    private readonly handleNativeTouchEnd;
    private readonly handleNativeKeyDown;
    private readonly handleNativeKeyUp;
    private readonly handleTransformObjectChange;
    private readonly handleRotateObjectChange;
    constructor(engine: any);
    active(): void;
    disActive(): void;
    init(skipFaceCreation?: boolean): void;
    disabled(): void;
    recover(): void;
    setFaceAngle(angleX: any, angleY: any, angleZ: any): void;
    setFaceNormal(normal: any, dis?: any): void;
    setFaceNormalPlaneOnly(normal: any, dis: any): void;
    activateClippingOnly(): void;
    reverse(): void;
    getFaceAngle(): {
        angleX: any;
        angleY: any;
        angleZ: any;
        direction: any;
    };
    updata_face(dis: any, planeCenter?: THREE.Vector3): void;
    private createFace;
    private getDirectionSign;
    private getEffectiveNormal;
    private applyClippingToModelMeshes;
    private applyClippingToMaterial;
    private requestShadowRefresh;
    private lockControlMode;
    private releaseControlModeLock;
    private applyControlModeLock;
    private pickControlModeFromPointer;
    private raycastTransformControlPicker;
    private getPlaneBasis;
    private getBoxCorners;
    private getDistanceRange;
    private getInteractiveMeshes;
    private getTransformHandleOffset;
    private getPlaneQuaternion;
    private keepSingleDirectionArrow;
    private ensureTransformControl;
    private ensureRotateControl;
    private setTransformControlVisible;
    private updateTransformControl;
    private updateRotateControl;
    private createRaycasterFromMouseEvent;
    private isMobileDevice;
    private getTouchPoint;
    private createMouseEventFromTouch;
    private clearTouchLongPressTimer;
    private resetTouchLongPressState;
    private attachListeners;
    private detachListeners;
    private resetMeshOpacity;
    private updateClippingFaceFill;
    private clearClippingFaceFill;
    handleMouseDown(event: any): void;
    handleMouseUp(_event: any, updateFill?: boolean): void;
    handleMouseMove(event: any): void;
}

export declare interface SegmentCalibrationOptions {
    url: string;
    source: CalibrationSegmentInput_2;
    target: CalibrationSegmentInput_2;
    /** 校准成功后返回当前模型的偏移、旋转和矩阵，便于业务侧保存手动调节结果。 */
    onChange?: CalibrationChangeCallback;
}

declare interface SegmentCalibrationOptions_2 {
    url: string;
    source: CalibrationSegmentInput;
    target: CalibrationSegmentInput;
    /** 校准成功后返回当前模型的偏移、旋转和矩阵，便于业务侧保存手动调节结果。 */
    onChange?: CalibrationChangeCallback_2;
}

/**
 * 设置 SDK 内置 public 资源根路径，适用于 CDN 目录结构被网关改写的场景。
 */
export declare function setSdkAssetBaseUrl(baseUrl?: string | null): void;

/**
 * 注册单个 SDK 静态资源文件。
 * 常用于直接传入一个静态资源 zip 包。
 */
export declare function setSdkAssetFile(file?: File | null): Promise<void>;

/**
 * 注册 SDK 静态资源文件列表。
 * 支持直接传解压后的目录文件列表，也支持传入 zip 文件后由 SDK 自动解压建立映射。
 */
export declare function setSdkAssetFiles(files?: File[] | FileList | null): Promise<void>;

/** 寮曟搸璁剧疆绠＄悊鍣紝璐熻矗娓叉煋銆佹樉绀哄拰鐜鍙傛暟鐨勭粺涓€绠＄悊 */
declare class Setting {
    /** 寮曟搸瀹炰緥寮曠敤 */
    private engine;
    private defaultSettings;
    /** 褰撳墠鐢熸晥鐨勮缃」 */
    private settings;
    /** 鐜璁剧疆鐨勫簲鐢ㄧ増鏈彿锛岀敤浜庨槻姝㈠紓姝ユ搷浣滅殑绔炴€佹潯浠?*/
    private environmentApplyVersion;
    constructor(engine: any);
    /** 鍒濆鍖栵紙褰撳墠涓虹┖瀹炵幇锛?*/
    init(): void;
    /** 鑾峰彇褰撳墠璁剧疆鐨勬繁鎷疯礉 */
    getSettings(): EngineSettings;
    /** 鑾峰彇鍦伴潰銆丠DR銆佸ぉ绌虹殑棰勮鍒楄〃 */
    getPresetLists(): {
        ground: SettingPresetItem[];
        hdr: SettingPresetItem[];
        sky: SettingPresetItem[];
    };
    /** 鎵归噺鏇存柊璁剧疆锛堟敮鎸侀儴鍒嗘洿鏂帮級 */
    setSettings(data: Partial<EngineSettings>): Promise<void>;
    /** 閲嶇疆鎵€鏈夎缃负榛樿鍊?*/
    resetToDefault(): Promise<void>;
    /** 璁剧疆娓叉煋妯″紡锛坰imple: 绠€鏄? balance: 鍧囪　, advanced: 楂樼骇锛?*/
    setRenderMode(mode: RenderMode): void;
    /** 璁剧疆瀵规瘮搴︼紙0~100锛?*/
    setContrast(value: number): void;
    /** 璁剧疆楗卞拰搴︼紙0~100锛?*/
    setSaturation(value: number): void;
    /** 璁剧疆闃村奖寮哄害锛?~100锛?*/
    setShadowIntensity(value: number): void;
    /** 璁剧疆鍏夌収寮哄害锛?~100锛夛紝璋冩暣鐜鍏変寒搴?*/
    setLightIntensity(value: number): void;
    /** 璁剧疆 GTAO锛堝睆骞曠┖闂寸幆澧冨厜閬斀锛夊己搴︼紙0~100锛?*/
    setGTAOIntensity(value: number): void;
    /** 璁剧疆鏄惁鏄剧ず妯″瀷杈圭紭绾?*/
    setShowEdge(show: boolean): void;
    /** 璁剧疆杈圭紭绾块€忔槑搴︼紙0~100锛?*/
    setEdgeOpacity(value: number): void;
    /** 璁剧疆鏄惁鏄剧ず缃戞牸 */
    setShowGrid(show: boolean): void;
    /** 璁剧疆鏄惁鏄剧ず妤煎眰 */
    setShowLevel(show: boolean): void;
    /** 璁剧疆鏄惁鏄剧ず鍦伴潰 */
    setShowGround(show: boolean): void;
    /** 璁剧疆褰撳墠浣跨敤鐨勫湴闈?ID */
    setGroundId(id: string): void;
    /** 璁剧疆鍦伴潰楂樺害 */
    setGroundHeight(height: number): void;
    /** 璁剧疆鐜绫诲瀷锛坣one: 鏃? hdr: HDR璐村浘, sky: 澶╃┖锛?*/
    setEnvironmentType(type: EnvironmentType): Promise<void>;
    /** 璁剧疆 HDR 璐村浘 ID锛屽綋鍓嶇幆澧冧负 hdr 鏃剁珛鍗崇敓鏁?*/
    setHdrId(id: string): Promise<void>;
    /** 璁剧疆 HDR 寮哄害锛?~100锛夛紝浠呭湪 hdr 妯″紡涓嬬敓鏁?*/
    setHdrIntensity(value: number): void;
    /** 璁剧疆澶╃┖棰勮鏂规锛屽綋鍓嶇幆澧冧负 sky 鏃剁珛鍗崇敓鏁?*/
    setSkyPreset(preset: SkyPresetName): void;
    /** 璁剧疆澶╃┖鑷畾涔夊弬鏁帮紝褰撳墠鐜涓?sky 鏃剁珛鍗崇敓鏁?*/
    setSkyParams(params: SkyParams): void;
    /** 璁剧疆澶╃┖浜害锛?~100锛夛紝浠呭湪 sky 妯″紡涓嬬敓鏁?*/
    setSkyIntensity(value: number): void;
    /** 鐩存帴璁剧疆鍦烘櫙涓幆澧冨厜鐨勫己搴?*/
    setAmbientLightIntensity(intensity: number): void;
    /** 涓€娆℃€у簲鐢ㄦ墍鏈夋覆鏌撹缃?*/
    private _syncSettingsFromModules;
    private _buildDefaultSettingsFromModules;
    private _readCurrentSettingsFromModules;
    private _toRenderMode;
    private _uniformToPercent;
    private _shadowToPercent;
    private _exposureToPercent;
    private _unitToPercent;
    private _clampPercent;
    private _getDirectionalLightShadowIntensity;
    private _applyRenderSettings;
    /** 涓€娆℃€у簲鐢ㄦ墍鏈夋樉绀鸿缃?*/
    private _applyDisplaySettings;
    /**
     * 搴旂敤鐜璁剧疆銆?     * 鍏堝叧闂綋鍓?HDR 鍜屽ぉ绌猴紝鍐嶆牴鎹被鍨嬮噸鏂板惎鐢ㄣ€?     * 浣跨敤鐗堟湰鍙锋満鍒堕槻姝㈠娆″紓姝ヨ皟鐢ㄤ箣闂寸殑绔炴€佹潯浠躲€?     */
    private _applyEnvironmentSettings;
    private _updateDirectionalLight;
    /** 鍚堝苟鐜璁剧疆锛屽鐞?skyPreset 涓?skyParams 鐨勮仈鍔ㄥ叧绯?*/
    private _mergeEnvironmentSettings;
    /** 灏嗗師濮嬫暟鎹浆鎹负鏍囧噯棰勮椤?*/
    private _toPresetItem;
    /** 娣辨嫹璐濆伐鍏锋柟娉?*/
    private _clone;
}

/** 寮曟搸璁剧疆绠＄悊鍣紝璐熻矗娓叉煋銆佹樉绀哄拰鐜鍙傛暟鐨勭粺涓€绠＄悊 */
declare class Setting_2 {
    /** 寮曟搸瀹炰緥寮曠敤 */
    private engine;
    private defaultSettings;
    /** 褰撳墠鐢熸晥鐨勮缃」 */
    private settings;
    /** 鐜璁剧疆鐨勫簲鐢ㄧ増鏈彿锛岀敤浜庨槻姝㈠紓姝ユ搷浣滅殑绔炴€佹潯浠?*/
    private environmentApplyVersion;
    constructor(engine: any);
    /** 鍒濆鍖栵紙褰撳墠涓虹┖瀹炵幇锛?*/
    init(): void;
    /** 鑾峰彇褰撳墠璁剧疆鐨勬繁鎷疯礉 */
    getSettings(): EngineSettings_2;
    /** 鑾峰彇鍦伴潰銆丠DR銆佸ぉ绌虹殑棰勮鍒楄〃 */
    getPresetLists(): {
        ground: SettingPresetItem_2[];
        hdr: SettingPresetItem_2[];
        sky: SettingPresetItem_2[];
    };
    /** 鎵归噺鏇存柊璁剧疆锛堟敮鎸侀儴鍒嗘洿鏂帮級 */
    setSettings(data: Partial<EngineSettings_2>): Promise<void>;
    /** 閲嶇疆鎵€鏈夎缃负榛樿鍊?*/
    resetToDefault(): Promise<void>;
    /** 设置 1 至 12 的手动等级，或使用 v2 的 simple、balance、advanced 三档模式。 */
    setRenderMode(mode: RenderMode_2): void;
    /** 璁剧疆瀵规瘮搴︼紙0~100锛?*/
    setContrast(value: number): void;
    /** 璁剧疆楗卞拰搴︼紙0~100锛?*/
    setSaturation(value: number): void;
    /** 璁剧疆闃村奖寮哄害锛?~100锛?*/
    setShadowIntensity(value: number): void;
    /** 璁剧疆鍏夌収寮哄害锛?~100锛夛紝璋冩暣鐜鍏変寒搴?*/
    setLightIntensity(value: number): void;
    /** 璁剧疆 GTAO锛堝睆骞曠┖闂寸幆澧冨厜閬斀锛夊己搴︼紙0~100锛?*/
    setGTAOIntensity(value: number): void;
    /** 璁剧疆鏄惁鏄剧ず妯″瀷杈圭紭绾?*/
    setShowEdge(show: boolean): void;
    /** 璁剧疆杈圭紭绾块€忔槑搴︼紙0~100锛?*/
    setEdgeOpacity(value: number): void;
    /** 璁剧疆鏄惁鏄剧ず缃戞牸 */
    setShowGrid(show: boolean): void;
    /** 璁剧疆鏄惁鏄剧ず妤煎眰 */
    setShowLevel(show: boolean): void;
    /** 璁剧疆鏄惁鏄剧ず鍦伴潰 */
    setShowGround(show: boolean): void;
    /** 璁剧疆褰撳墠浣跨敤鐨勫湴闈?ID */
    setGroundId(id: string): void;
    /** 璁剧疆鍦伴潰楂樺害 */
    setGroundHeight(height: number): void;
    /** 璁剧疆鐜绫诲瀷锛坣one: 鏃? hdr: HDR璐村浘, sky: 澶╃┖锛?*/
    setEnvironmentType(type: EnvironmentType_2): Promise<void>;
    /** 璁剧疆 HDR 璐村浘 ID锛屽綋鍓嶇幆澧冧负 hdr 鏃剁珛鍗崇敓鏁?*/
    setHdrId(id: string): Promise<void>;
    /** 璁剧疆 HDR 寮哄害锛?~100锛夛紝浠呭湪 hdr 妯″紡涓嬬敓鏁?*/
    setHdrIntensity(value: number): void;
    /** 设置 HDR 背景亮度（0~100），不改变模型受环境光影响的亮度。 */
    setHdrBackgroundIntensity(value: number): void;
    /** 设置 HDR 环境亮度（0~100），不改变背景显示亮度。 */
    setHdrEnvironmentIntensity(value: number): void;
    /** 璁剧疆澶╃┖棰勮鏂规锛屽綋鍓嶇幆澧冧负 sky 鏃剁珛鍗崇敓鏁?*/
    setSkyPreset(preset: SkyPresetName_2): void;
    /** 璁剧疆澶╃┖鑷畾涔夊弬鏁帮紝褰撳墠鐜涓?sky 鏃剁珛鍗崇敓鏁?*/
    setSkyParams(params: SkyParams_2): void;
    /** 璁剧疆澶╃┖浜害锛?~100锛夛紝浠呭湪 sky 妯″紡涓嬬敓鏁?*/
    setSkyIntensity(value: number): void;
    /** 设置场景基础环境光百分比，0~100 对应 AmbientLight 实际强度 0~5。 */
    setAmbientLightIntensity(value: number): void;
    /** 涓€娆℃€у簲鐢ㄦ墍鏈夋覆鏌撹缃?*/
    private _syncSettingsFromModules;
    private _buildDefaultSettingsFromModules;
    private _readCurrentSettingsFromModules;
    private _toRenderMode;
    private _uniformToPercent;
    private _shadowToPercent;
    private _exposureToPercent;
    private _intensityToPercent;
    private _percentToIntensity;
    private _normalizeExposure;
    private _readToneMappingExposure;
    private _isAutoExposureEnabled;
    private _readSceneLightIntensities;
    private _normalizeLightIntensity;
    private _unitToPercent;
    private _clampPercent;
    private _getDirectionalLightShadowIntensity;
    private _applyRenderSettings;
    /** 恢复曝光模式和原始曝光值；旧快照仍沿用 lightIntensity 的手动曝光语义。 */
    private _applyExposureSettings;
    private _writeToneMappingExposure;
    /** 在 HDR 等环境资源完成切换后恢复基础灯光，避免异步加载再次覆盖强度。 */
    private _applySceneLightSettings;
    private _writeAmbientLightIntensity;
    /** 涓€娆℃€у簲鐢ㄦ墍鏈夋樉绀鸿缃?*/
    private _applyDisplaySettings;
    /**
     * 搴旂敤鐜璁剧疆銆?     * 鍏堝叧闂綋鍓?HDR 鍜屽ぉ绌猴紝鍐嶆牴鎹被鍨嬮噸鏂板惎鐢ㄣ€?     * 浣跨敤鐗堟湰鍙锋満鍒堕槻姝㈠娆″紓姝ヨ皟鐢ㄤ箣闂寸殑绔炴€佹潯浠躲€?     */
    private _applyEnvironmentSettings;
    private _updateDirectionalLight;
    /** 鍚堝苟鐜璁剧疆锛屽鐞?skyPreset 涓?skyParams 鐨勮仈鍔ㄥ叧绯?*/
    private _mergeEnvironmentSettings;
    /** 灏嗗師濮嬫暟鎹浆鎹负鏍囧噯棰勮椤?*/
    private _toPresetItem;
    /** 娣辨嫹璐濆伐鍏锋柟娉?*/
    private _clone;
}

declare interface SettingPresetItem {
    id: string;
    name: string;
    names: string[];
}

declare interface SettingPresetItem_2 {
    id: string;
    name: string;
    names: string[];
}

/** 直接渲染天空着色器；立方贴图只供 BIM 模型获取环境反射。 */
declare class SkyManager {
    private readonly engine;
    private sky;
    private environmentSky;
    private skyScene;
    private cubeCamera;
    private cubeTarget;
    private sceneState;
    private params;
    private currentPreset;
    private currentIntensity;
    private readonly sun;
    private readonly skyPosition;
    private active;
    constructor(engine: any);
    /** 启用程序化天空；保留 BIM 当前色调映射和模型曝光。 */
    activate(): void;
    /** 隐藏天空并恢复此前的背景与环境光；remove=false 保留捕获资源。 */
    close(remove?: boolean): void;
    isActive(): boolean;
    getParams(): Readonly<Required<SkyParams>>;
    setParams(params: SkyParams): void;
    setPreset(name: SkyPresetName): void;
    getCurrentPreset(): SkyPresetName;
    getPresetNames(): SkyPresetName[];
    getPresetList(): SkyPresetInfo[];
    setIntensity(intensity: number): void;
    getIntensity(): number;
    /** 与主场景同帧更新云层和环境反射，避免天空与模型反光错位。 */
    update(time?: number): void;
    private _ensureResources;
    /** 保留云量与运动，但限制自定义云着色器产生大面积深色斑块。 */
    private _stabilizeClouds;
    private _applyParams;
    private _renderEnvironment;
    private _updateSkyPosition;
    /** 天空直绘时仅调整自身辐亮度，不改变 BIM 模型的曝光。 */
    private _updateSkyExposure;
    private _updateAnimationState;
    private _disposeResources;
}

/** 管理 v3 WebGPU 物理天空，并按官方示例生成动态立方环境贴图。 */
declare class SkyManager_2 {
    private readonly engine;
    private sky;
    private environmentSky;
    private environmentScene;
    private cubeCamera;
    private cubeTarget;
    private skyExposureNode;
    private environmentExposureNode;
    private readonly sun;
    private readonly skyPosition;
    private params;
    private currentPreset;
    private currentIntensity;
    private readonly skyName;
    private savedCameraFar;
    private environmentDirty;
    private previousBackground;
    private previousEnvironment;
    private previousBackgroundIntensity;
    private previousEnvironmentIntensity;
    private hasCapturedSceneState;
    constructor(engine: any);
    /** 启用天空；复用已创建的 SkyMesh 和立方渲染资源。 */
    activate(): void;
    /** 关闭天空并恢复此前场景；remove=false 时保留 GPU 资源。 */
    close(remove?: boolean): void;
    isActive(): boolean;
    getParams(): Readonly<Required<SkyParams_2>>;
    /** 合并并约束增量参数，防止非法数值导致 TSL 着色结果出现 NaN。 */
    setParams(params: SkyParams_2): void;
    setPreset(name: SkyPresetName_2): void;
    getCurrentPreset(): SkyPresetName_2;
    getPresetNames(): SkyPresetName_2[];
    getPresetList(): SkyPresetInfo_2[];
    /** 设置天空生成的 IBL 环境光强度。 */
    setIntensity(intensity: number): void;
    getIntensity(): number;
    /** 同步相机位置和动态云环境，行为与官方 WebGPU 示例的逐帧捕获一致。 */
    update(_time?: number): void;
    private _ensureResources;
    private _syncSkyToCamera;
    private _isOrthographicCamera;
    private _getEffectiveExposure;
    private _updateSkyExposure;
    private _expandCameraFarForSky;
    private _restoreCameraFar;
    private _applyParamsToSky;
    private _renderEnvironment;
    private _captureSceneState;
    private _restoreSceneState;
    private _hasAnimatedClouds;
    private _updateAnimationState;
    private _disposeResources;
    private _resolveParams;
    private _requestRender;
}

declare interface SkyParams {
    turbidity?: number;
    rayleigh?: number;
    mieCoefficient?: number;
    mieDirectionalG?: number;
    elevation?: number;
    azimuth?: number;
    exposure?: number;
    orthoExposureScale?: number;
    cloudCoverage?: number;
    cloudDensity?: number;
    cloudElevation?: number;
    showSunDisc?: boolean;
}

declare interface SkyParams_2 {
    turbidity?: number;
    rayleigh?: number;
    mieCoefficient?: number;
    mieDirectionalG?: number;
    elevation?: number;
    azimuth?: number;
    exposure?: number;
    orthoExposureScale?: number;
    cloudScale?: number;
    cloudSpeed?: number;
    cloudCoverage?: number;
    cloudDensity?: number;
    cloudElevation?: number;
    showSunDisc?: boolean;
}

declare interface SkyPresetInfo {
    id: SkyPresetName;
    names: string[];
    params: SkyParams;
}

declare interface SkyPresetInfo_2 {
    id: SkyPresetName_2;
    names: string[];
    params: SkyParams_2;
}

declare type SkyPresetName = 'sunrise_clear' | 'morning_mist' | 'noon_clear' | 'afternoon_cloudy' | 'sunset_glow' | 'blue_hour' | 'overcast_day' | 'storm_rain' | 'snow_day' | 'moonlit_night';

declare type SkyPresetName_2 = 'sunrise_clear' | 'morning_mist' | 'noon_clear' | 'afternoon_cloudy' | 'sunset_glow' | 'blue_hour' | 'overcast_day' | 'storm_rain' | 'snow_day' | 'moonlit_night';

/** 分包 CAD manifest 中的空间树节点。 */
declare interface SplitCadManifestNode {
    id: string;
    min?: number[];
    max?: number[];
    tileUrl?: string;
    entityCount?: number;
    totalEntityCount?: number;
    children?: SplitCadManifestNode[];
    elements?: any[];
}

/** SSGI 参数。 */
export declare interface SSGIPostProcessingSettings {
    enabled: boolean;
    sliceCount: number;
    stepCount: number;
    aoIntensity: number;
    giIntensity: number;
    radius: number;
    useScreenSpaceSampling: boolean;
    expFactor: number;
    thickness: number;
    useLinearThickness: boolean;
    backfaceLighting: number;
    useTemporalFiltering: boolean;
}

/** SSR 参数。 */
export declare interface SSRPostProcessingSettings {
    enabled: boolean;
    stochastic: boolean;
    envImportanceSampling: boolean;
    environmentNode: any | null;
    reflectNonMetals: boolean;
    binaryRefine: boolean;
    resolutionScale: number;
    maxDistance: number;
    thickness: number;
    intensity: number;
    screenEdgeFade: number;
    screenEdgeFadeBlack: boolean;
    maxLuminance: number;
    quality: number;
    mirrorBias: number;
    blurQuality: number;
    stepExponent: number;
    environmentIntensity: number;
}

declare class Text_2 {
    private engine;
    constructor(engine: any);
    update(): void;
}

declare class Text_3 {
    private engine;
    constructor(engine: any);
    update(): void;
}

/**
 * 文字标注配置
 */
declare interface TextAnnotationConfig {
    type: AnnotationType720.TEXT;
    position: AnnotationPosition;
    text: string;
    style?: {
        color?: string;
        fontSize?: number;
        backgroundColor?: string;
        padding?: string;
    };
    tooltip?: string;
    metadata?: any;
}

/**
 * 2D 引擎主题管理器
 * 通过在容器元素上切换 CSS 自定义属性实现暗色 / 亮色主题
 */
declare type Theme2d = 'dark' | 'light';

declare class ThemeManager {
    private container;
    private current;
    constructor(container: HTMLElement, initial?: Theme2d);
    private _apply;
    setTheme(theme: Theme2d): void;
    getTheme(): Theme2d;
    toggle(): void;
    dispose(): void;
}

declare interface ThirdPersonPlacementHit {
    point: THREE.Vector3;
    normal?: THREE.Vector3;
    distance?: number;
}

declare interface ThirdPersonPlacementHit_2 {
    point: THREE.Vector3;
    normal?: THREE.Vector3;
    distance?: number;
}

declare type ThirdPersonPlacementResolver = (raycaster: THREE.Raycaster) => ThirdPersonPlacementHit | null;

declare type ThirdPersonPlacementResolver_2 = (raycaster: THREE.Raycaster) => ThirdPersonPlacementHit_2 | null;

/** TRAA 参数。 */
export declare interface TRAAPostProcessingSettings {
    enabled: boolean;
    depthThreshold: number;
    edgeDepthDiff: number;
    maxVelocityLength: number;
    useSubpixelCorrection: boolean;
}

/** 两侧均存在且包围盒未变化的构件对。 */
export declare interface UnchangedModelNode {
    baselineNode: ModelComparisonNode;
    targetNode: ModelComparisonNode;
}

/** 两侧均存在且包围盒未变化的构件对。 */
declare interface UnchangedModelNode_2 {
    baselineNode: ModelComparisonNode_2;
    targetNode: ModelComparisonNode_2;
}

/**
 * 视图边界
 */
declare interface ViewBounds {
    minX: number;
    minY: number;
    maxX: number;
    maxY: number;
    width: number;
    height: number;
}

declare class ViewCube {
    private engine;
    private homeBoundingBoxProvider;
    cubeTool: any;
    mainViewPort: any;
    constructor(engine: any);
    init(): void;
    hide(): void;
    show(): void;
    CameraGoHome(time: number): void;
    cameraGoHome(time: number): void;
    setHomeBoundingBoxProvider(provider: (() => THREE.Box3 | null) | null): void;
    getHomeBoundingBox(): THREE.Box3 | null | undefined;
    zoomToModel(box: any, time?: number): void;
    zoomToModels(m: any): void;
    flyToModels(ms?: any[]): void;
    saveMainViewPort(): any;
    setMainViewPort(data: any): void;
    goToMainPort(): void;
    resetMainViewPort(): void;
    screenshot(): void;
}

declare class ViewCube2d {
    private engine;
    mainViewPort: MainViewPort2d | null;
    constructor(engine: any);
    /** 保存当前 2D 正交相机视口，接口名与 3D viewCube 保持一致。 */
    saveMainViewPort(): MainViewPort2d | null;
    /** 设置外部传入的主视角数据，并立即跳转到该视角。 */
    setMainViewPort(data: MainViewPort2d | CameraViewState2d | null): void;
    /** 跳转到已保存的 2D 主视角；未保存时保持当前视图不变。 */
    goToMainPort(): void;
    /** 清空主视角并回到当前图纸的默认视图。 */
    resetMainViewPort(): void;
    private normalizeMainViewPort;
}

declare class ViewCube_2 {
    private engine;
    private homeBoundingBoxProvider;
    cubeTool: any;
    mainViewPort: any;
    constructor(engine: any);
    init(): void;
    hide(): void;
    show(): void;
    CameraGoHome(time: number): void;
    cameraGoHome(time: number): void;
    setHomeBoundingBoxProvider(provider: (() => THREE.Box3 | null) | null): void;
    getHomeBoundingBox(): THREE.Box3 | null | undefined;
    zoomToModel(box: any, time?: number): void;
    zoomToModels(m: any): void;
    flyToModels(ms?: any[]): void;
    saveMainViewPort(): any;
    setMainViewPort(data: any): void;
    goToMainPort(): void;
    resetMainViewPort(): void;
    screenshot(): void;
}

declare class ViewTree {
    private static readonly OPEN_VIEW_ANIMATION_DURATION;
    private engine;
    private dynamicElevationViewGenerator;
    private dynamicViewVisibility;
    /** 管理模型原生视图与运行时动态视图的统一入口。 */
    constructor(engine: any);
    /** 汇总所有已加载模型的视图树数据。 */
    getAllViewTreeData(): any[];
    /** 获取单个模型的视图树数据，并补充运行时生成的动态视图分类。 */
    getViewTreeData(url: string): ViewTreeResult;
    /**
     * 获取指定构件所属的动态视图，可选择直接切换到第一个匹配视图。
     * 先按相机朝向筛选，再通过多点射线排除被其他构件完全遮挡的结果。
     */
    getElementVisibleViews(url: string, id: string | number, switchToView?: boolean): ViewTreeResult;
    /** 打开指定视图，并根据视图类型决定是否启用剖切和正交投影。 */
    openView(url: string, viewId: string | number): void;
    /** 内部视图打开流程允许在相机动画结束后继续处理构件朝向。 */
    private openViewInternal;
    private getResolvedViewTree;
    private createViewRangePlanes;
    private createPlane;
    /** 兼容历史字符串编码异常，统一识别视图类型。 */
    private normalizeViewType;
    private toRevitVector;
    private toEnginePoint;
    private toEnginePointFromLike;
    private toEngineDirection;
    private shouldCorrectViewRangeOrigin;
    private zoomToCurrentViewRange;
}

declare class ViewTree_2 {
    private static readonly OPEN_VIEW_ANIMATION_DURATION;
    private engine;
    private dynamicElevationViewGenerator;
    private dynamicViewVisibility;
    /** 管理模型原生视图与运行时动态视图的统一入口。 */
    constructor(engine: any);
    /** 汇总所有已加载模型的视图树数据。 */
    getAllViewTreeData(): any[];
    /** 获取单个模型的视图树数据，并补充运行时生成的动态视图分类。 */
    getViewTreeData(url: string): ViewTreeResult_2;
    /**
     * 获取指定构件所属的动态视图，可选择直接切换到第一个匹配视图。
     * 先按相机朝向筛选，再通过多点射线排除被其他构件完全遮挡的结果。
     */
    getElementVisibleViews(url: string, id: string | number, switchToView?: boolean): ViewTreeResult_2;
    /** 打开指定视图，并根据视图类型决定是否启用剖切和正交投影。 */
    openView(url: string, viewId: string | number): void;
    /** 内部视图打开流程允许在相机动画结束后继续处理构件朝向。 */
    private openViewInternal;
    private getResolvedViewTree;
    private createViewRangePlanes;
    private createPlane;
    /** 兼容历史字符串编码异常，统一识别视图类型。 */
    private normalizeViewType;
    private toRevitVector;
    private toEnginePoint;
    private toEnginePointFromLike;
    private toEngineDirection;
    private shouldCorrectViewRangeOrigin;
    private zoomToCurrentViewRange;
}

declare type ViewTreeItem = {
    id: string | number;
    name: string;
    url: string;
};

declare type ViewTreeItem_2 = {
    id: string | number;
    name: string;
    url: string;
};

declare type ViewTreeResult = {
    ceilingPlans: ViewTreeItem[];
    elevations: ViewTreeItem[];
    dynamicViews: ViewTreeItem[];
    floorPlans: ViewTreeItem[];
    sections: ViewTreeItem[];
};

declare type ViewTreeResult_2 = {
    ceilingPlans: ViewTreeItem_2[];
    elevations: ViewTreeItem_2[];
    dynamicViews: ViewTreeItem_2[];
    floorPlans: ViewTreeItem_2[];
    sections: ViewTreeItem_2[];
};

/** VXGI 体素锥追踪参数。 */
export declare interface VXGIPostProcessingSettings {
    enabled: boolean;
    resolution: number;
    coneCount: number;
    coneAngle: number;
    giIntensity: number;
    aoIntensity: number;
    aoMinVisibility: number;
    aoDistance: number;
    normalOffset: number;
    maxDistance: number;
    stepScale: number;
    bounces: number;
    directionalRadiance: boolean;
    useTemporalFiltering: boolean;
    /** 是否在场景或材质变化后重新体素化。 */
    updateOnChange: boolean;
}

/** WebGPU 剖切状态：平面对象沿用 V2，模型裁剪由原生 ClippingGroup 接管。 */
declare class WebGPUClippingState {
    readonly planes: THREE.Plane[];
    mode: ClippingMode;
    fillCutFace: boolean;
    private readonly engine;
    constructor(engine: any, planes: THREE.Plane[]);
    /** 将当前模式的平面同步到所有模型根节点。平面对象不复制，V2 拖动后可立即生效。 */
    apply(): void;
    clear(): void;
    getActivePlanes(): THREE.Plane[];
}

/** 将 V2 已验证的 CSG 补面结果接入 WebGPU 原生剖切组。 */
declare class WebGPUFillAdapter {
    private readonly engine;
    private readonly state;
    private readonly fillGroup;
    private readonly delegate;
    constructor(engine: any, state: WebGPUClippingState);
    clear(): void;
    updataFace(plane: THREE.Plane): void;
    updataFaces(planes: THREE.Plane[]): void;
    refresh(): void;
    dispose(): void;
    private syncClippingPlanes;
    private requestRender;
}

/** 一次性更新多个后期效果，避免质量档切换时重复重建节点图。 */
declare interface WebGPUPostProcessingConfiguration {
    effects?: Partial<EffectState>;
    /** 与效果参数一起原子更新颜色分级，避免连续重建最终节点图。 */
    colorGrading?: Partial<ColorGradingSettings>;
    parameters?: {
        [K in WebGPUPostProcessingEffect]?: Partial<WebGPUPostProcessingParameterMap[K]>;
    };
}

export declare type WebGPUPostProcessingEffect = 'vxgi' | 'ssgi' | 'traa' | 'ssr' | 'bloom' | 'gtao';

export declare interface WebGPUPostProcessingOptions {
    /** VXGI 初始化开关；具体参数统一使用 defaults.ts 中的默认值。 */
    vxgi?: boolean;
    ssgi?: boolean | Partial<SSGIPostProcessingSettings>;
    traa?: boolean | Partial<TRAAPostProcessingSettings>;
    ssr?: boolean | Partial<SSRPostProcessingSettings>;
    bloom?: boolean | Partial<BloomPostProcessingSettings>;
    gtao?: boolean | Partial<GTAOPostProcessingSettings>;
    colorGrading?: Partial<ColorGradingSettings>;
}

export declare type WebGPUPostProcessingParameterMap = {
    [K in WebGPUPostProcessingEffect]: Omit<WebGPUPostProcessingSettings[K], 'enabled'>;
};

export declare interface WebGPUPostProcessingSettings {
    vxgi: VXGIPostProcessingSettings;
    ssgi: SSGIPostProcessingSettings;
    traa: TRAAPostProcessingSettings;
    ssr: SSRPostProcessingSettings;
    bloom: BloomPostProcessingSettings;
    gtao: GTAOPostProcessingSettings;
    colorGrading: ColorGradingSettings;
}

/**
 * V2 剖切框的完整交互实现：TransformControls、Ctrl 拾取、触摸长按、边界限制和比例回调均原样保留。
 * WebGPU 只替换最终的模型裁剪通道，避免重新实现已经验证过的交互逻辑。
 */
declare class WebGPUSectionBox extends SectionBox {
    private readonly webgpuState;
    private readonly interactionScene;
    constructor(engine: any, state: WebGPUClippingState);
    /** V2 每次重建六个面后同步 WebGPU ClippingGroup，并唤醒按需渲染。 */
    updata_face(box: any): void;
    /** 释放 V2 覆盖层，防止引擎销毁后控制器继续响应。 */
    dispose(): void;
}

/** V2 剖切面的完整平移/旋转控制器实现，裁剪结果由 WebGPU 平面状态提供。 */
declare class WebGPUSectionFace extends SectionFace {
    private readonly webgpuState;
    private readonly interactionScene;
    constructor(engine: any, state: WebGPUClippingState);
    /** V2 每次移动或旋转剖切面后同步 WebGPU 平面。 */
    updata_face(distance: any, planeCenter?: THREE.Vector3): void;
    /** 释放剖切面、平移控制器和旋转控制器。 */
    dispose(): void;
}

/**
 * 世界坐标与屏幕坐标转换工具类
 * 提供世界坐标（3D空间坐标）与屏幕坐标（2D像素坐标）之间的双向转换功能
 */
declare class WorldToScreen {
    private camera;
    private renderer;
    private scene?;
    private raycaster;
    /**
     * 构造函数
     * @param camera - Three.js 相机对象（用于投影计算）
     * @param renderer - Three.js 渲染器对象（用于获取画布尺寸）
     * @param scene - Three.js 场景对象（用于屏幕坐标转世界坐标时的射线检测，可选）
     */
    constructor(camera: THREE.Camera, renderer: THREE.WebGLRenderer, scene?: THREE.Scene | undefined);
    /**
     * 将世界坐标转换为屏幕坐标（归一化坐标，范围 -1 到 1）
     * @param worldPos - 世界空间中的3D坐标点
     * @returns 归一化的屏幕坐标，x 和 y 的范围都是 -1 到 1
     *          x: -1 表示屏幕左边缘，1 表示屏幕右边缘
     *          y: -1 表示屏幕下边缘，1 表示屏幕上边缘
     */
    worldToScreenNormalized(worldPos: THREE.Vector3): THREE.Vector2;
    /**
     * 将世界坐标转换为屏幕坐标（像素坐标）
     * @param worldPos - 世界空间中的3D坐标点
     * @returns 屏幕像素坐标，x 和 y 表示在画布上的实际像素位置
     *          x: 0 表示屏幕左边缘，width 表示屏幕右边缘
     *          y: 0 表示屏幕上边缘，height 表示屏幕下边缘
     */
    worldToScreen(worldPos: THREE.Vector3): THREE.Vector2;
    /**
     * 将世界坐标转换为屏幕坐标，仅在点位于当前相机可见裁剪空间内时返回结果。
     * 透视相机背后的点经过 project 后会翻转到屏幕异常位置，这里提前过滤。
     * @param worldPos - 世界空间中的 3D 坐标点
     * @returns 屏幕像素坐标；如果点不可见或投影结果无效，返回 null
     */
    worldToScreenIfVisible(worldPos: THREE.Vector3): THREE.Vector2 | null;
    /**
     * 将屏幕坐标（像素坐标）转换为归一化坐标
     * @param screenX - 屏幕像素 X 坐标
     * @param screenY - 屏幕像素 Y 坐标
     * @returns 归一化的屏幕坐标，范围 -1 到 1
     */
    screenToNormalized(screenX: number, screenY: number): THREE.Vector2;
    /**
     * 将屏幕坐标（像素坐标）转换为世界坐标
     * 使用射线检测，返回与场景中第一个相交对象的世界坐标点
     * @param screenX - 屏幕像素 X 坐标
     * @param screenY - 屏幕像素 Y 坐标
     * @param objects - 可选，指定要检测的对象数组。如果不提供且 scene 存在，则检测场景中的所有对象
     * @returns 世界坐标点，如果没有相交则返回 null
     */
    screenToWorld(screenX: number, screenY: number, objects?: THREE.Object3D[]): THREE.Vector3 | null;
    /**
     * 将屏幕坐标转换为指定深度的世界坐标
     * @param screenX - 屏幕像素 X 坐标
     * @param screenY - 屏幕像素 Y 坐标
     * @param depth - 沿射线方向的距离（世界单位）
     * @returns 世界坐标点
     */
    screenToWorldWithDepth(screenX: number, screenY: number, depth?: number): THREE.Vector3;
    /**
     * 更新相机引用（当相机发生变化时调用）
     * @param camera - 新的相机对象
     */
    updateCamera(camera: THREE.Camera): void;
    /**
     * 更新渲染器引用（当渲染器发生变化时调用）
     * @param renderer - 新的渲染器对象
     */
    updateRenderer(renderer: THREE.WebGLRenderer): void;
    /**
     * 更新场景引用（当场景发生变化时调用）
     * @param scene - 新的场景对象
     */
    updateScene(scene: THREE.Scene): void;
}

export { }
