/** * 객체 분리·숨기기 상태 (ISOLATEOBJECTS·HIDEOBJECTS·UNISOLATEOBJECTS). * 도면층 가시성과 달리 객체 단위이며 저장하지 않는 일시 상태다. */ import { HtmlEvent } from '../App.types'; import type { Entity } from '../entities/Entity'; import { notifyWindow } from '../state'; import { bumpSceneVersion } from './scene-version'; let hiddenEntityIds = new Set(); export const isEntityHidden = (entity: Entity): boolean => hiddenEntityIds.has(entity.id); export const getHiddenEntityCount = (): number => hiddenEntityIds.size; function apply(ids: Set): void { hiddenEntityIds = ids; bumpSceneVersion(); notifyWindow(HtmlEvent.UPDATE_STATE); } /** 지정 객체를 숨긴다 */ export const hideEntities = (entities: Entity[]): void => { const next = new Set(hiddenEntityIds); for (const entity of entities) next.add(entity.id); apply(next); }; /** 지정 객체만 남기고 나머지를 숨긴다 */ export const isolateEntities = (entities: Entity[], allEntities: Entity[]): void => { const keep = new Set(entities.map((entity) => entity.id)); apply(new Set(allEntities.filter((entity) => !keep.has(entity.id)).map((entity) => entity.id))); }; /** 숨김 해제 */ export const showAllEntities = (): void => apply(new Set());