@voxel-3d/docs
    Preparing search index...

    Interface Voxel3DEvents

    뷰어 event map

    interface Voxel3DEvents {
        "viewer:ready": undefined;
        "viewer:stateChange": { state: ViewerState; prevState: ViewerState };
        "viewer:resize": { width: number; height: number };
        "viewer:frame": { delta: number; elapsed: number };
        "viewer:error": { error: Error; context?: string };
        "viewer:disposed": undefined;
        "viewer:select": SelectionEvent;
        "viewer:scene:change": { settings: SceneSettings };
        "viewer:scene:theme": { theme: SceneTheme };
        "viewer:clipping:create": { planeId: string; axis: string };
        "viewer:clipping:delete": { planeId: string };
        "viewer:clipping:change": { planeId: string; constant: number };
        "viewer:clipping:toggle": { enabled: boolean };
        "viewer:clipping:modeChange": { side: ClipSide };
        "viewer:clipping:planeSideChange": { planeId: string; side: ClipSide };
        "viewer:clipping:edgeVisibleChange": { visible: boolean };
        "viewer:clipping:edgeColorChange": { color: number };
        "viewer:clipping:edgeLineWidthChange": { width: number };
        "viewer:clipping:preciseEdgeChange": { enabled: boolean };
        "viewer:clipping:gizmoVisibleChange": { visible: boolean };
        "viewer:clipping:boundsVisibleChange": { visible: boolean };
        "viewer:clipping:select": {
            planeId: string | null;
            previousPlaneId: string | null;
        };
        "viewer:clipping:dragChange": { planeId: string; dragging: boolean };
        "viewer:clipping:restore": { planeCount: number };
        "viewer:clipping:alignModeChange": {
            planeId: string | null;
            enabled: boolean;
        };
        "viewer:clipping:align": {
            planeId: string;
            normal: [number, number, number];
            point: [number, number, number];
        };
        "viewer:clipping:scopeChange": { meshCount: number
        | null };
        "viewer:clipping:sectionBoxChange": {
            enabled: boolean;
            min: [number, number, number] | null;
            max: [number, number, number] | null;
        };
        "viewer:clipping:slabChange": {
            enabled: boolean;
            normal: [number, number, number]
            | null;
            center: number | null;
            thickness: number | null;
        };
        "viewer:measure:start": { mode: MeasureMode };
        "viewer:measure:complete": { id: string; data: MeasurementData };
        "viewer:measure:cancel": undefined;
        "viewer:measure:preview": undefined;
        "viewer:measure:added": { id: string; data: MeasurementData };
        "viewer:measure:deleted": { id: string };
        "viewer:measure:cleared": undefined;
        "viewer:measure:analysisReady": Record<string, never>;
        "viewer:measure:analysisProgress": {
            current: number;
            total: number;
            meshId: string;
        };
        "viewer:measure:labelMoved": { id: string; position: Vector3 };
        "viewer:sceneGraph:nodeAdded": { node: SceneNode };
        "viewer:sceneGraph:nodeRemoved": { node: SceneNode };
        "viewer:sceneGraph:visibilityChange": {
            nodeId: string;
            visible: boolean;
            state: NodeState;
            prevState: NodeState;
        };
        "viewer:sceneGraph:selectionChange": { selectedIds: string[] };
        "viewcube:hover": ViewCubeHoverEvent;
        "viewcube:click": ViewCubeClickEvent;
        "viewcube:animationStart": ViewCubeAnimationStartEvent;
        "viewcube:animationEnd": ViewCubeAnimationEndEvent;
        "import:progress": OverallProgress;
        "import:fileComplete": ImportResult;
        "import:complete": ImportCompleteInfo;
        "import:report": ImportPerformanceReport;
        "import:error": { error: Error; fileName?: string };
        "import:texture:missing": {
            entries: MissingTextureEntry[];
            sourceModel: string;
        };
        "import:texture:resolved": { resolved: string[]; remaining: string[] };
        "import:texture:cleared": undefined;
        "batchRender:batchComplete": BatchRenderedEvent;
        "batchRender:allComplete": AllRenderedEvent;
        "bvh:complete": { buildTime: number; objectCount: number };
        "viewer:batched:build": {
            batchCount: number;
            instanceCount: number;
            skippedCount: number;
            buildTimeMs: number;
        };
        "viewer:batched:dispose": { batchCount: number };
        "viewer:batched:instanceEject": { nodeId: string };
        "transform:start": { object: Object3D };
        "transform:change": { object: Object3D; data: TransformData };
        "transform:end": { object: Object3D; data: TransformData };
        "transform:modeChange": { enabled: boolean };
        "material:select": { mesh: Mesh };
        "material:deselect": {
            previousMesh:
                | Mesh<
                    BufferGeometry<NormalBufferAttributes, BufferGeometryEventMap>,
                    Material<MaterialEventMap> | Material<MaterialEventMap>[],
                    Object3DEventMap,
                >
                | null;
        };
        "material:change": MaterialChangeEvent;
        "material:undo": { mesh: Mesh };
        "material:redo": { mesh: Mesh };
        "material:reset": { mesh: Mesh };
        "texture:select": { mesh: Mesh; state: TextureState };
        "texture:deselect": { mesh: Mesh };
        "texture:change": TextureChangeEvent;
        "texture:load": { mesh: Mesh; slot: TextureSlot; info: TextureInfo };
        "texture:remove": { mesh: Mesh; slot: TextureSlot };
        "animation:play": AnimationEventData;
        "animation:pause": AnimationEventData;
        "animation:stop": AnimationEventData;
        "markup:created": { id: string; type: MarkupType };
        "markup:updated": { id: string; type: MarkupType };
        "markup:deleted": { id: string; type: MarkupType };
        "markup:selected": { id: string; type: MarkupType } | null;
        "markup:modeChange": { mode: MarkupAddMode };
        "viewer:camera:fit": {
            target: { x: number; y: number; z: number };
            mode: "object" | "bounds";
        };
        "viewer:camera:upAxis": { axis: UpAxis; upVector: Position3D };
        "viewer:camera:flipUp": { upVector: Position3D };
        "viewer:camera:fixedUp": { fixed: boolean };
        "viewer:camera:projectionChange": { mode: ProjectionMode };
        "viewer:camera:navigationMode": { mode: NavigationMode };
        "viewer:camera:mouseControlMode": { mode: MouseControlMode };
        "viewer:camera:view": { view: StandardView; animated: boolean };
        "viewer:camera:upVector": {
            dir: UpVectorDir;
            up: Position3D;
            animated: boolean;
        };
        "viewer:snapshot:create": { snapshot: SnapshotData };
        "viewer:snapshot:apply": { snapshotId: string };
        "viewer:snapshot:delete": { snapshotId: string };
        "viewer:snapshot:import": {
            count: number;
            matchResults: SnapshotMatchResult[];
        };
        "viewer:snapshot:clear": undefined;
        "cache:hit": { key: string };
        "cache:miss": { key: string; reason?: string };
        "cache:store": { key: string; byteSize?: number };
        "cache:clear": undefined;
        "cache:evict": { key: string };
        "cache:error": { key: string; error?: string };
        [event: string]: unknown;
    }

    Indexable

    • [event: string]: unknown

      인덱스 시그니처 (EventMap 호환)

    Index

    Properties

    viewer:ready viewer:stateChange viewer:resize viewer:frame viewer:error viewer:disposed viewer:select viewer:scene:change viewer:scene:theme viewer:clipping:create viewer:clipping:delete viewer:clipping:change viewer:clipping:toggle viewer:clipping:modeChange viewer:clipping:planeSideChange viewer:clipping:edgeVisibleChange viewer:clipping:edgeColorChange viewer:clipping:edgeLineWidthChange viewer:clipping:preciseEdgeChange viewer:clipping:gizmoVisibleChange viewer:clipping:boundsVisibleChange viewer:clipping:select viewer:clipping:dragChange viewer:clipping:restore viewer:clipping:alignModeChange viewer:clipping:align viewer:clipping:scopeChange viewer:clipping:sectionBoxChange viewer:clipping:slabChange viewer:measure:start viewer:measure:complete viewer:measure:cancel viewer:measure:preview viewer:measure:added viewer:measure:deleted viewer:measure:cleared viewer:measure:analysisReady viewer:measure:analysisProgress viewer:measure:labelMoved viewer:sceneGraph:nodeAdded viewer:sceneGraph:nodeRemoved viewer:sceneGraph:visibilityChange viewer:sceneGraph:selectionChange viewcube:hover viewcube:click viewcube:animationStart viewcube:animationEnd import:progress import:fileComplete import:complete import:report import:error import:texture:missing import:texture:resolved import:texture:cleared batchRender:batchComplete batchRender:allComplete bvh:complete viewer:batched:build viewer:batched:dispose viewer:batched:instanceEject transform:start transform:change transform:end transform:modeChange material:select material:deselect material:change material:undo material:redo material:reset texture:select texture:deselect texture:change texture:load texture:remove animation:play animation:pause animation:stop markup:created markup:updated markup:deleted markup:selected markup:modeChange viewer:camera:fit viewer:camera:upAxis viewer:camera:flipUp viewer:camera:fixedUp viewer:camera:projectionChange viewer:camera:navigationMode viewer:camera:mouseControlMode viewer:camera:view viewer:camera:upVector viewer:snapshot:create viewer:snapshot:apply viewer:snapshot:delete viewer:snapshot:import viewer:snapshot:clear cache:hit cache:miss cache:store cache:clear cache:evict cache:error

    Properties

    "viewer:ready": undefined

    initialization 완료

    "viewer:stateChange": { state: ViewerState; prevState: ViewerState }

    state 변경

    "viewer:resize": { width: number; height: number }

    리사이즈

    "viewer:frame": { delta: number; elapsed: number }

    렌더링 프레임

    "viewer:error": { error: Error; context?: string }

    에러 발생

    "viewer:disposed": undefined

    cleanup 완료

    "viewer:select": SelectionEvent

    오브젝트 선택

    "viewer:scene:change": { settings: SceneSettings }

    Scene 설정 변경

    "viewer:scene:theme": { theme: SceneTheme }

    Scene 테마 변경

    "viewer:clipping:create": { planeId: string; axis: string }

    클리핑 플레인 생성

    "viewer:clipping:delete": { planeId: string }

    클리핑 플레인 삭제

    "viewer:clipping:change": { planeId: string; constant: number }

    클리핑 플레인 constant 변경

    "viewer:clipping:toggle": { enabled: boolean }

    클리핑 활성화/비활성화

    "viewer:clipping:modeChange": { side: ClipSide }

    클리핑 모드 변경 (far/near/both, 전역 일괄 적용)

    "viewer:clipping:planeSideChange": { planeId: string; side: ClipSide }

    개별 평면 절단 방향 변경 (far/near/both)

    "viewer:clipping:edgeVisibleChange": { visible: boolean }

    교차선 표시 여부 변경

    "viewer:clipping:edgeColorChange": { color: number }

    교차선 색상 변경

    "viewer:clipping:edgeLineWidthChange": { width: number }

    교차선 굵기 변경

    "viewer:clipping:preciseEdgeChange": { enabled: boolean }

    정밀 엣지 모드(BVH 지오메트리 라인) 변경

    "viewer:clipping:gizmoVisibleChange": { visible: boolean }

    Gizmo 표시 여부 변경

    "viewer:clipping:boundsVisibleChange": { visible: boolean }

    바운딩박스 헬퍼 표시 여부 변경

    "viewer:clipping:select": {
        planeId: string | null;
        previousPlaneId: string | null;
    }

    클리핑 플레인 선택 변경 (planeId가 null이면 선택 해제)

    "viewer:clipping:dragChange": { planeId: string; dragging: boolean }

    클리핑 기즈모 드래그 시작/종료 (네비게이션 차단 등 외부 연동용)

    "viewer:clipping:restore": { planeCount: number }

    클리핑 스냅샷 복원 완료

    "viewer:clipping:alignModeChange": { planeId: string | null; enabled: boolean }

    면 정렬 모드 진입/종료 (planeId가 null이면 종료)

    "viewer:clipping:align": {
        planeId: string;
        normal: [number, number, number];
        point: [number, number, number];
    }

    면 정렬 스냅 완료 (평면 normal/point가 클릭한 면에 맞춰짐, 월드 좌표)

    "viewer:clipping:scopeChange": { meshCount: number | null }

    클립 대상 스코프 변경 (meshCount null이면 전체 모델) / Clip target scope change

    "viewer:clipping:sectionBoxChange": {
        enabled: boolean;
        min: [number, number, number] | null;
        max: [number, number, number] | null;
    }

    섹션 박스 상태 변경 (생성/설정/토글/삭제, 박스 없으면 min/max null)

    "viewer:clipping:slabChange": {
        enabled: boolean;
        normal: [number, number, number] | null;
        center: number | null;
        thickness: number | null;
    }

    슬랩 상태 변경 (생성/위치/두께/토글/삭제, 슬랩 없으면 normal/center/thickness null)

    "viewer:measure:start": { mode: MeasureMode }

    측정 시작

    "viewer:measure:complete": { id: string; data: MeasurementData }

    측정 완료

    "viewer:measure:cancel": undefined

    측정 취소

    "viewer:measure:preview": undefined

    측정 hover 프리뷰 변경 (스냅 인디케이터/임시 시각화 렌더 요청)

    "viewer:measure:added": { id: string; data: MeasurementData }

    측정 추가

    "viewer:measure:deleted": { id: string }

    측정 삭제

    "viewer:measure:cleared": undefined

    전체 측정 초기화

    "viewer:measure:analysisReady": Record<string, never>

    Mesh 분석 완료 (원형 구조 사전 감지)

    "viewer:measure:analysisProgress": {
        current: number;
        total: number;
        meshId: string;
    }

    Mesh 분석 진행률

    "viewer:measure:labelMoved": { id: string; position: Vector3 }

    라벨 드래그 완료 (월드 위치 이동) / Label drag completed

    "viewer:sceneGraph:nodeAdded": { node: SceneNode }

    SceneGraph 노드 추가

    "viewer:sceneGraph:nodeRemoved": { node: SceneNode }

    SceneGraph 노드 삭제

    "viewer:sceneGraph:visibilityChange": {
        nodeId: string;
        visible: boolean;
        state: NodeState;
        prevState: NodeState;
    }

    SceneGraph 가시성 변경 / SceneGraph visibility change

    "viewer:sceneGraph:selectionChange": { selectedIds: string[] }

    SceneGraph 선택 변경

    "viewcube:hover": ViewCubeHoverEvent

    ViewCube 호버

    "viewcube:click": ViewCubeClickEvent

    ViewCube 클릭

    "viewcube:animationStart": ViewCubeAnimationStartEvent

    ViewCube 애니메이션 시작

    "viewcube:animationEnd": ViewCubeAnimationEndEvent

    ViewCube 애니메이션 종료

    "import:progress": OverallProgress

    Import 진행률

    "import:fileComplete": ImportResult

    Import 개별 파일 완료

    "import:complete": ImportCompleteInfo

    Import 전체 완료

    "import:report": ImportPerformanceReport

    Import 성능 리포트 확정

    "import:error": { error: Error; fileName?: string }

    Import 에러

    "import:texture:missing": {
        entries: MissingTextureEntry[];
        sourceModel: string;
    }

    누락 텍스처 발견 (파일 로드 완료 시점)

    "import:texture:resolved": { resolved: string[]; remaining: string[] }

    누락 텍스처 해결 (재적용 완료 시점)

    "import:texture:cleared": undefined

    누락 텍스처 목록 비움

    "batchRender:batchComplete": BatchRenderedEvent

    배치 렌더 완료

    "batchRender:allComplete": AllRenderedEvent

    전체 배치 렌더 완료

    "bvh:complete": { buildTime: number; objectCount: number }

    BVH 생성 완료 (fire-and-forget)

    "viewer:batched:build": {
        batchCount: number;
        instanceCount: number;
        skippedCount: number;
        buildTimeMs: number;
    }

    BatchedMesh 빌드 완료 / BatchedMesh build completed

    "viewer:batched:dispose": { batchCount: number }

    BatchedMesh 전체 해제 / All BatchedMesh disposed

    "viewer:batched:instanceEject": { nodeId: string }

    배치 인스턴스 이탈 (머티리얼/텍스처 개별 편집) / Batch instance ejected

    "transform:start": { object: Object3D }

    Transform 시작

    "transform:change": { object: Object3D; data: TransformData }

    Transform 변경

    "transform:end": { object: Object3D; data: TransformData }

    Transform 완료

    "transform:modeChange": { enabled: boolean }

    Transform 모드 변경

    "material:select": { mesh: Mesh }

    Material 선택

    "material:deselect": {
        previousMesh:
            | Mesh<
                BufferGeometry<NormalBufferAttributes, BufferGeometryEventMap>,
                Material<MaterialEventMap> | Material<MaterialEventMap>[],
                Object3DEventMap,
            >
            | null;
    }

    Material 선택 해제

    "material:change": MaterialChangeEvent

    Material 변경

    "material:undo": { mesh: Mesh }

    Material Undo

    "material:redo": { mesh: Mesh }

    Material Redo

    "material:reset": { mesh: Mesh }

    Material 리셋

    "texture:select": { mesh: Mesh; state: TextureState }

    Texture 선택

    "texture:deselect": { mesh: Mesh }

    Texture 선택 해제

    "texture:change": TextureChangeEvent

    Texture 변경

    "texture:load": { mesh: Mesh; slot: TextureSlot; info: TextureInfo }

    Texture 로드

    "texture:remove": { mesh: Mesh; slot: TextureSlot }

    Texture 제거

    "animation:play": AnimationEventData

    Animation 재생

    "animation:pause": AnimationEventData

    Animation 일시정지

    "animation:stop": AnimationEventData

    Animation 정지

    "markup:created": { id: string; type: MarkupType }

    Markup 생성

    "markup:updated": { id: string; type: MarkupType }

    Markup 업데이트

    "markup:deleted": { id: string; type: MarkupType }

    Markup 삭제

    "markup:selected": { id: string; type: MarkupType } | null

    Markup 선택

    "markup:modeChange": { mode: MarkupAddMode }

    Markup 추가 모드 변경

    "viewer:camera:fit": {
        target: { x: number; y: number; z: number };
        mode: "object" | "bounds";
    }

    카메라 fitToBounds/focusOnObject 완료

    "viewer:camera:upAxis": { axis: UpAxis; upVector: Position3D }

    카메라 Up 축 변경

    "viewer:camera:flipUp": { upVector: Position3D }

    카메라 Up Vector 반전

    "viewer:camera:fixedUp": { fixed: boolean }

    고정 Up Vector 변경

    "viewer:camera:projectionChange": { mode: ProjectionMode }

    카메라 투영 모드 변경 (perspective/orthographic)

    "viewer:camera:navigationMode": { mode: NavigationMode }

    내비게이션 모드 변경 (turntable/trackball)

    "viewer:camera:mouseControlMode": { mode: MouseControlMode }

    마우스 컨트롤 모드 변경 (default/catia)

    "viewer:camera:view": { view: StandardView; animated: boolean }

    표준 뷰 이동

    "viewer:camera:upVector": {
        dir: UpVectorDir;
        up: Position3D;
        animated: boolean;
    }

    Up 벡터 방향 설정

    "viewer:snapshot:create": { snapshot: SnapshotData }

    스냅샷 생성

    "viewer:snapshot:apply": { snapshotId: string }

    스냅샷 적용

    "viewer:snapshot:delete": { snapshotId: string }

    스냅샷 삭제

    "viewer:snapshot:import": { count: number; matchResults: SnapshotMatchResult[] }

    스냅샷 세션 가져오기

    "viewer:snapshot:clear": undefined

    스냅샷 세션 초기화

    "cache:hit": { key: string }

    모델 캐시 히트

    "cache:miss": { key: string; reason?: string }

    모델 캐시 미스

    "cache:store": { key: string; byteSize?: number }

    모델 캐시 저장

    "cache:clear": undefined

    모델 캐시 초기화

    "cache:evict": { key: string }

    모델 캐시 퇴거

    "cache:error": { key: string; error?: string }

    모델 캐시 에러