도면편집기 v2.1 — Stage 2 기능 추가
개요
CrownyDoc 도면 모듈 Stage 2. OmniGraffle급 기능 5종을 도면편집기에 추가했다.
무엇을 했는지
- 도형 라이브러리 (
도면/도형라이브러리.js신규, 594줄)
{id, name, category, svg, defaultWidth, defaultHeight} 형식- 레이어 시스템 (우측 패널 "레이어" 섹션)
display:none 처리
- 🔒 잠금 토글 → 클릭/이동/리사이즈 불가 (cursor:not-allowed)
- DiagramLayer {이름, 가시, 잠금} 객체 배열로 저장
- 이전 string[] 레이어 데이터 역호환 로드 처리- 그룹/언그룹 (Ctrl+G / Ctrl+Shift+G)
종류:'group', 자식들:[id...])
- 그룹 선택 후 Ctrl+Shift+G → 자식 ID 다중선택으로 복원
- bbox는 자식 도형 전체를 포함하는 최소 직사각형으로 자동 계산- 회전·미러 (속성 패널)
transform="rotate(N cx cy) scale(±1, ±1)" 방식- SVG / PNG 내보내기
XMLSerializer → Blob → Image.onload → Canvas → toBlob 순수 브라우저 API
- 선택 핸들·가이드선은 내보내기 시 임시 제거 후 복원관련 파일 경로
/Users/ef/CrownyDoc/도면/도면편집기.html— 2424줄 (기존 1911줄 → +513)/Users/ef/CrownyDoc/도면/도형라이브러리.js— 신규 594줄/Users/ef/CrownyDoc/도면/도면출력.html— 430줄 (기존 397줄 → +33)/Users/ef/CrownyDoc/lib/cdf-v2-spec.md— DiagramShape/DiagramLayer 스키마 갱신
스키마 변경 (cdf-v2-spec.md)
DiagramShape.종류—"svg라이브러리","group"추가DiagramShape—회전?, 미러X?, 미러Y?, 자식들?, 라이브러리ID?필드 추가레이어목록: DiagramLayer[]—string[]→{이름,가시,잠금}[](역호환 포함)
알려진 한계
- 그룹은 bbox 표시만 함 — 자식 도형은 개별 SVG요소로 그대로 유지 (중첩 그룹 없음)
- 미러 + 회전 동시 적용 시 SVG transform 순서에 따른 미러 기준 이동 있음
- 베지어 컨트롤 핸들 (선택사항 항목)은 미구현
- PNG 내보내기: SVG 내부
foreignObject(범례) 는 일부 브라우저에서 렌더링 안 됨