도면에 척도 개념이 없어 도각을 콘텐츠 크기에 맞춰 늘렸다 줄였다. 사용자가 정한
작성 척도로 그림 크기가 결정되도록 좌표를 종이 밀리미터로 옮긴다.
- config_system에 DRAWING_SCALE_* 상수 추가 (종단 1/1,000 x 1/200, 횡단 1/100, A1)
- 종단 좌표를 종이 mm로: 거리 x1.0, 표고는 기준선 기준 x5.0 (세로 5배 과장)
- 기준선(datum)을 종이 y=0으로 정규화, Y축 눈금 라벨은 실제 표고 유지
- frame_entities(fit=False) 추가 — 도각을 실치수 1:1로 두고 위치만 맞춘다.
콘텐츠가 작도 영역(693x468mm)을 넘으면 경고 로그
- 실측: 도각 840x594mm(A1 실치수), 콘텐츠 370x213mm (노선 350m = 350mm)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
확대가 이벤트 1회당 10% 고정이라 트랙패드처럼 잔 델타를 초당 수십 번 보내는
입력에서 튀었고, 두 손가락 이동은 팬이 아니라 확대로 먹혔다.
- zoomScreen을 부호 기반에서 델타 비례 지수식 exp(-delta*지수)로 변경.
마우스 휠 한 칸(deltaY 100)은 종전과 같은 10%, 트랙패드 잔 델타는 그만큼만
- 트랙패드 두 손가락 이동은 panScreen으로 — 마우스 휠은 한 칸이 100/120px로
딱 떨어지고 가로 델타가 없다는 성질로 기기를 가른다
- 핀치(ctrl+휠)는 기기 무관 확대, 전용 지수로 천천히
- deltaMode(줄·쪽 단위) 픽셀 환산 추가
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
핀치는 ctrl+wheel 이벤트인데 CAD 휠 처리가 preventDefault를 하지 않아 브라우저
기본 확대가 그대로 실행됐다. 캔버스 밖(리본·패널)에는 휠 핸들러조차 없었다.
- 캔버스 휠 리스너를 passive:false로 등록하고 handleMouseWheel에서 preventDefault
- document에 ctrl+wheel만 막는 리스너 — 리본·패널 위 핀치도 브라우저 확대 금지,
ctrl 없는 휠은 남겨 패널 스크롤 유지
확대 감각(세기)·방향·로그는 건드리지 않았다 — 별도 제안으로 PLAN.md 보류 항목.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
iframe 안 CAD가 다크 색을 하드코딩하고 있어 앱의 화이트/블랙 토글과 따로 놀던
것을 고친다. 색 정의처는 앱과 같은 ui_template_theme.css 하나로 모은다.
- openwebcad가 ui_template_theme.css를 직접 import — App.css의 하드코딩 색
88개를 var(--color-*)로 전량 치환, CAD 골격용 별칭 토큰만 새로 붙임
- src/theme.ts 신설: 동일 오리진 localStorage(frd_theme) + storage 이벤트로
부모 토글을 리로드 없이 추종(부모 코드 수정 없음), 시스템 폴백 유지
- 캔버스 배경·그리드는 토큰 경유, 저장된 도면 색은 라이트 모드에서 그릴 때만
휘도 보정(paintColor) — 저장 데이터는 불변
- 테마 변경 시 bumpSceneVersion()으로 정적 장면 캐시 비트맵 재생성
- Button/LayerManager의 tailwind 색 유틸 제거, index.html의 bg-* 고정 제거
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>