주석 명령
이 페이지는 cad-viewer에서 주석 명령이 어떻게 구현되는지, 즉 명령 계층과 UI 상호 작용 계층을 모두 소개합니다.
설계는 시스템 변수, 현재 레이어, 엔티티 그리기 스타일과 같은 AutoCAD 유사 개념을 충실히 따릅니다.
개요
cad-viewer의 주석(주석 원, 사각형, 클라우드 사각형, 스케치 등)은 다음과 같이 구현됩니다:
- 공통 기본 클래스에서 파생된 특수화된 명령
- 전용 주석 레이어에 동적으로 생성되는 엔티티
- 레이어 스타일 대신 시스템 변수로 제어되는 그리기 스타일
- 명령 실행 중 시스템 변수를 변경하는 임시 UI 툴바
이 접근 방식은 다음을 보장합니다:
- 모든 주석 명령에서 일관된 동작
- 모든 주석의 간편한 표시/숨기기
- AutoCAD 스타일 작업 흐름에 대한 친숙함
명령 파트
기본 명령 클래스
모든 주석 관련 명령은 동일한 기본 클래스를 상속합니다:
이 기본 클래스는 다음과 같은 공통 동작을 중앙 집중화합니다:
- 주석 레이어 관리
- 시스템 변수 백업 및 복원
- 명령 수명 주기 처리(시작 / 종료 / 취소)
AcApBaseRevCmd를 상속함으로써 모든 주석 명령은 동일한 실행 패턴과 시스템 변수 동작을 따릅니다.
주석 레이어 관리
모든 주석 엔티티는 전용 주석 레이어에 생성되며, 이 레이어는:
- 존재하지 않으면 동적으로 생성됩니다
- 주석 명령 실행 중에만 사용됩니다
내부적으로는 다음 시스템 변수를 조작하여 이를 달성합니다:
clayer(현재 레이어)
작업 흐름
주석 엔티티를 생성하기 전:
clayer의 원래 값이 저장됩니다clayer가 주석 레이어로 전환됩니다
주석 엔티티가 생성됩니다
명령이 끝난 후(또는 취소된 후):
clayer가 원래 값으로 복원됩니다
이를 통해 다음이 보장됩니다:
- 주석은 항상 올바른 레이어에 배치됩니다
- 사용자의 레이어 상태가 영구적으로 변경되지 않습니다
주석 표시 / 숨기기
주석 숨기기 또는 표시는 단순히 다음을 통해 구현됩니다:
- 주석 레이어를 숨기거나 표시
엔티티별 가시성 로직이 필요하지 않습니다.
이로써 주석 가시성 관리가 효율적이고 일관되게 유지됩니다.
엔티티 그리기 스타일 확인
주석 엔티티는 외형에 레이어 스타일을 사용하지 않습니다.
대신 그리기 스타일은 다음을 포함한 시스템 변수에서 확인됩니다:
cecolor— 현재 엔티티 색상celweight— 현재 엔티티 선 가중치
이 설계는 다음을 가능하게 합니다:
- 각 주석이 생성 시점의 시각적 스타일을 유지합니다
- 레이어 스타일 변경이 기존 주석에 영향을 주지 않습니다
UI 파트
엔티티 그리기 스타일 툴바
주석 엔티티를 생성할 때 다음 UI 컴포넌트가 표시됩니다:
동작
뷰어의 상단 중앙에 나타납니다
사용자가 다음을 수정할 수 있습니다:
- 색상
- 선 가중치
- 기타 엔티티 그리기 스타일
이 툴바가 파일 이름 표시와 겹치기 때문에:
- 툴바가 표시되는 동안 파일 이름이 일시적으로 숨겨집니다
시스템 변수 바인딩
MlEntityDrawStyleToolbar에 대한 사용자 상호 작용은 다음과 같은 시스템 변수를 직접 수정합니다:
cecolorcelweight
이 시스템 변수는 생성 중에 주석 엔티티에서 사용되며, 다음을 보장합니다:
- 사용자가 툴바에서 보는 내용이 그려지는 내용과 일치합니다
- 주석 동작이 AutoCAD 스타일 작업 흐름과 일관됩니다
시스템 변수 복원
주석 명령이 끝난 후(성공 여부와 관계없이):
- 수정된 시스템 변수(
cecolor,celweight등)가 원래 값으로 복원됩니다
이를 통해 다음이 보장됩니다:
- 주석 명령이 전역 도면 상태에 영구적으로 영향을 주지 않습니다
- 사용자가 주석 명령과 일반 그리기 명령 사이를 안전하게 전환할 수 있습니다
요약
cad-viewer의 주석 시스템은 세 가지 핵심 아이디어를 중심으로 구축됩니다:
명령 상속
- 모든 주석 명령이 공통 기본 구현을 공유합니다
레이어 기반 구성
- 모든 주석이 동적으로 관리되는 주석 레이어에 존재합니다
시스템 변수 기반 스타일
- 그리기 스타일이 레이어 스타일이 아닌 시스템 변수로 제어됩니다
이 아키텍처는 다음을 제공합니다:
- 예측 가능한 명령 동작
- 간편한 주석 관리
- 익숙한 CAD 스타일 사용자 경험