View System
뷰 관리 시스템 - 레이어, 선택, 공간 인덱싱, 타일 렌더링
모듈 개요
View System은 CAD 도면의 시각적 표현을 관리합니다. 레이어 기반 표시/숨김, 아이템 선택, R-tree 공간 인덱싱, 타일 기반 대규모 도면 최적화 등을 제공합니다.
10 header files R-tree Indexing Tile Rendering
c_view - 뷰 컨테이너
모든 뷰 가능 요소를 관리하는 최상위 컨테이너입니다.
👁
레이어 기반 표시/숨김
각 레이어의 가시성을 독립 제어. PCB 동박, 실크스크린, 솔더마스크 등 개별 전환.
🖱
선택 관리
단일/다중/영역 선택. 하이라이트 표시 및 Object Inspector 연동.
🔎
줌 / 팬 상태
줌 레벨, 팬 오프셋, 회전 각도 관리. 뷰 히스토리 유지.
c_view_item - 뷰 가능 요소
모든 CAD 도형이 상속하는 기본 클래스입니다.
| 속성 | 설명 |
|---|---|
viewBBox() | 바운딩 박스 반환 (R-tree 인덱싱) |
viewLayer() | 소속 레이어 ID |
viewVisible() | 가시성 상태 |
viewSelected() | 선택 상태 |
viewDraw() | GAL을 통한 자기 렌더링 |
c_view_layer - 레이어별 뷰
개별 레이어의 가시성, 색상, 렌더링 순서(Z-order)를 제어합니다.
레이어 렌더링 순서 (아래에서 위로)
Background
↑
CU_BK
SM_BK
SILK_BK
↑
CU_IN_1 ~ CU_IN_60
↑
CU_FR
SM_FR
SILK_FR
↑
Overlay (Selection, Snap)
c_view_controls - 뷰 제어
| 조작 | 동작 | 처리 |
|---|---|---|
| 마우스 휠 | 줌 인/아웃 | 커서 위치 기준 |
| 중버튼 드래그 | 팬 | 뷰 오프셋 이동 |
| Ctrl+휠 | 수평 스크롤 | 뷰 수평 이동 |
| Home/Fit | 전체 보기 | 전체 아이템 줌 |
c_view_rtree - R-tree 공간 인덱싱
수만 개의 CAD 아이템 중 화면에 보이는 영역만 빠르게 검색하기 위한 공간 인덱스입니다.
성능 특성
R-tree로 영역 검색이 O(log N) 시간에 수행됩니다. 10만 개 아이템에서도 밀리초 단위 검색.
BOX2I viewport = view->GetViewport();
std::vector<c_view_item*> items;
rtree->Query(viewport, items);
c_tile_manager - 타일 기반 렌더링
대규모 도면을 타일로 분할하여 화면에 보이는 타일만 렌더링합니다.
타일 렌더링 개념
Tile(0,0)
Tile(1,0)
Tile(2,0)
Tile(3,0)
Tile(0,1)
Tile(1,1)
Tile(2,1)
Tile(3,1)
Tile(0,2)
Tile(1,2)
Tile(2,2)
Tile(3,2)
highlight = 현재 뷰포트, blue = 인접 프리로드
c_offscreen_view - 오프스크린 렌더링
썸네일 생성
라이브러리 브라우저에서 심볼/풋프린트 미리보기를 오프스크린으로 렌더링.
출력/내보내기
PDF, SVG, PNG 출력 시 고해상도 이미지 생성.
c_view_overlay - 오버레이 표시
| 유형 | 설명 |
|---|---|
| 선택 하이라이트 | 선택된 아이템을 강조 색상으로 표시 |
| 스냅 포인트 | 그리드, 끝점, 중점 등 스냅 위치 표시 |
| HV 스냅라인 | 수평/수직 정렬 가이드라인 |
| 러버밴드 | 드로잉 도구 실시간 미리보기 |
| 선택 영역 | 영역 선택 시 반투명 사각형 |
주요 헤더 파일
| 파일 | 설명 |
|---|---|
view.h | 뷰 컨테이너 |
view_item.h | 뷰 가능 요소 기본 클래스 |
view_layer.h | 레이어별 뷰 속성 |
view_controls.h | 마우스/키보드 뷰 제어 |
view_rtree.h | R-tree 공간 인덱싱 |
tile_manager.h | 타일 기반 렌더링 |
offscreen_view.h | 오프스크린 렌더링 |
view_overlay.h | 오버레이 표시 |