import { Component, RealObject } from '@hatiolab/things-scene'; import * as THREE from 'three'; /** * Stock material/legend 정보를 제공하는 컴포넌트 인터페이스. * Visualizer와 RackTable 모두 이를 구현한다. */ export interface StockMaterialProvider { _stock_materials: THREE.Material[]; _default_material?: THREE.Material; _empty_material?: THREE.Material; legendTarget?: Component; hideEmptyStock?: boolean; } export declare class Stock extends RealObject { /** * 기본 재질 둘 — 창고에서 받는다. * * 전에는 클래스에 만들어 두고 모든 Stock 이 함께 썼다. 공유는 맞았지만 **창고 표식이 * 없어**, Stock 하나가 씬에서 치워질 때 공용 teardown 이 이 재질을 버렸다. 남은 Stock * 전부가 다음 렌더에 GPU 로 다시 올라갔다 — `box`·`pallet` 이 그래서 걸렸다. * * 여기서 돌려주는 것은 **고치면 안 되는 공유물**이다. 색이 다르면 다른 것을 받는다. */ static get defaultMaterial(): THREE.MeshStandardMaterial; static get defaultEmptyMaterial(): THREE.MeshStandardMaterial; /** * 단위 상자 — 치수는 `object3d.scale` 에 실린다(createStock). * * 전에는 클래스에 직접 만들어 뒀는데, 창고 표식이 없어 Stock 하나가 치워질 때 * 공용 teardown(`disposeObject3D`)이 이것을 dispose 했다. 남은 Stock 전부가 다음 * 렌더에 GPU 로 다시 올라간다. 창고에서 받으면 `__bankOwned` 가 붙어 걸러진다. */ static get stockGeometry(): THREE.BufferGeometry; _hideEmptyStock: boolean; _focused: boolean; _focusedAt?: number; _instancedMesh?: THREE.InstancedMesh; _instanceIndex: number; _basePosition?: { x: number; y: number; z: number; }; _baseScale?: { x: number; y: number; z: number; }; model: any; _data?: any; constructor(component: Component, model: any); get isInstanced(): boolean; protected getObject3dInstance(): THREE.Mesh, THREE.Material | THREE.Material[], THREE.Object3DEventMap>; /** * 가장 가까운 StockMaterialProvider 조상을 찾는다 (RackTable 또는 Visualizer). */ get provider(): StockMaterialProvider | undefined; private get _legendStatus(); /** * InstancedMesh의 해당 인스턴스 색상을 설정한다. */ private _setInstanceColor; /** * 색상을 결정하고 InstancedMesh에 반영한다. */ private _applyMaterialColor; private _getDefaultColor; getMaterial(index: number): THREE.Material; get stockMaterials(): THREE.Material[]; get userDefineDefaultMaterial(): THREE.Material; get emptyMaterial(): THREE.Material; build(): void; createStock(w: number, h: number, d: number): void; onchangeStockData(data: any): void; /** * InstancedMesh 모드에서의 데이터 변경 처리. * 개별 mesh의 material 대신 instanceColor를 변경한다. */ private _onchangeStockDataInstanced; private _aggregate; onBeforeRender: () => void; onmouseup(e: MouseEvent, _context: unknown, callback: (arg: { data: any; location: string; }) => void): void; private _getCurrentColorHex; updateTransform(): void; updateDimension(): void; updateAlpha(): void; updateFillStyle(): void; updateStrokeStyle(): void; updateHidden(): void; updateText(): void; }