Files
Aislo/B07_DesignDetail/openwebcad/src/helpers/debug-hook.ts
T
eomsangdonandClaude Opus 5.5 26772b87bd fix(B07 CAD·M02): 16장 점검 — 테마 어긋남 · 첫 맞춤 · 불러온 양식 떠나기 · 작도 영역 안내
- CAD 테마: 저장값이 없으면 부모 문서 테마(호스트 기본 밝음)를 따름 — 시스템 설정을 따라 CAD 만 어둡던 것
- 맞춤 뒤 화면을 안 옮겼으면 캔버스 크기가 바뀔 때 다시 맞춤 — 첫 표시 때 iframe 이 늦게 커져 어긋나던 것 · 빈 도면은 원점을 가운데로
- 도면 양식 📂 불러온 뒤 저장 안 하고 떠나면 물음
- 작도 영역 칸: 빈 칸 · 숫자 아님은 그 칸만 짚음
- 화면 검증용 창구에 기준점 · 보기 전용 상태 추가

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019qWfH6MMhLwjhtLYnDVUXv
2026-09-28 22:18:59 +09:00

62 lines
2.1 KiB
TypeScript

/**
* 화면 검증용 상태 조회 창구 — 브라우저 콘솔·자동화 스크립트가
* window.__aisloCad로 현재 객체·도면층·선택을 읽는다. 앱 동작에는 관여하지 않는다.
*/
import {
getDesignMeta,
getEntities,
getHighlightedEntityIds,
getLayers,
getSelectedEntityIds,
getScreenCanvasDrawController,
getSnapPoint,
isDrawingDirty,
isDrawingReadOnly,
isOriginMarker,
isViewOnly,
} from '../state';
import { Point } from '@flatten-js/core';
import { isEntityHidden } from './visibility';
export function registerCadDebugHook(): void {
(window as unknown as Record<string, unknown>).__aisloCad = {
entities: () =>
getEntities().map((entity) => {
const box = entity.getBoundingBox();
return {
id: entity.id,
type: entity.getType(),
layerId: entity.layerId,
groupId: entity.groupId ?? null,
opacity: entity.opacity ?? null,
hidden: isEntityHidden(entity),
color: entity.lineColor,
box: [
Math.round(box.xmin),
Math.round(box.ymin),
Math.round(box.xmax),
Math.round(box.ymax),
],
};
}),
layers: () => getLayers(),
selection: () => getSelectedEntityIds(),
// 마우스 위치의 객체 스냅점 — 잠금 도면층(도각)이 스냅에 끼는지 검증할 때 읽는다.
snap: () => getSnapPoint(),
// 마우스가 스친 객체 — 잠금층(도각·등고선)이 밝아지는지 수치로 본다.
highlighted: () => getHighlightedEntityIds(),
// 확정 도면의 편집 잠금과 미저장 표시 — 화면 검증이 상태를 직접 읽는다.
readOnly: () => isDrawingReadOnly(),
dirty: () => isDrawingDirty(),
meta: () => getDesignMeta(),
// 기준점 십자 · 미리보기(보기 전용) 켜짐 — 그림이 안 도는 탭에서도 수치로 본다.
originMarker: () => isOriginMarker(),
viewOnly: () => isViewOnly(),
// 세계 좌표 → 화면 좌표. 그림·글자가 "제 자리에 그려졌나"를 픽셀로 판정할 때 쓴다.
screen: (x: number, y: number) => {
const point = getScreenCanvasDrawController().worldToTarget(new Point(x, y));
return { x: point.x, y: point.y };
},
};
}