Document Model - 문서 모델
SCH, PCB, EPD, FP - 4가지 문서 타입의 데이터 모델 아키텍처
개요
imengine의 문서 모델은 4가지 CAD 문서 타입을 지원합니다. 모든 문서는 공통 기반 클래스를 상속하며, 각 문서 타입별로 특화된 아이템 클래스를 포함합니다. 직렬화는 S-expression 포맷을 사용하며, Undo/Redo는 c_unified_commit을 통해 스트림 기반으로 동작합니다.
클래스 계층 구조
c_view_item
모든 뷰 요소의 최상위 기반
모든 뷰 요소의 최상위 기반
↓
c_geo_item
기하학적 속성 (위치, 바운딩박스, 변환)
기하학적 속성 (위치, 바운딩박스, 변환)
↓ ↓
c_sch_item
회로도 아이템 기반
회로도 아이템 기반
c_board_item
PCB 아이템 기반
PCB 아이템 기반
회로도 문서 계층
c_schematic
전체 회로도 관리자
전체 회로도 관리자
c_sch
서브시트 문서 (TypeName: "SCH")
서브시트 문서 (TypeName: "SCH")
c_sch_sheet
아이템 컨테이너 (TypeName: "SCHSHEET")
아이템 컨테이너 (TypeName: "SCHSHEET")
PCB 문서 계층
c_board
PCB 보드 전체 관리
PCB 보드 전체 관리
c_footprint
풋프린트 컨테이너 (pad + 도형)
풋프린트 컨테이너 (pad + 도형)
문서 타입
| 타입 | ContentType | ImEDA 확장자 | 레거시 | Root 클래스 | 아이템 기반 |
|---|---|---|---|---|---|
| SCH 회로도 | SchDocument (0) | .imsch | .sch, .csisch | c_schematic | c_sch_item |
| EPD 심볼 | EpdDocument (1) | .imepd | .epd, .csiepd | c_schematic | c_sch_item |
| SLIB 심볼 라이브러리 | SlibDocument (2) | .imslib / .imsym | .slib | c_schematic | c_lib_symbol |
| FP 풋프린트 | FpDocument (3) | .imfp | .fp, .pcblib | c_footprint | c_board_item |
| PCB 보드 | PcbDocument (4) | .impcb | .pcb | c_board | c_board_item |
확장자 규칙: 레거시 확장자(CSI*)는 읽기 전용입니다. 새 파일은 반드시 ImEDA 확장자를 사용합니다. 정의:
imapp/src/common_dll/document_types.hUndo/Redo 시스템
모든 문서 편집은 c_unified_commit을 통해 Undo/Redo가 가능합니다. 스트림 기반 직렬화로 변경 전/후 상태를 기록합니다.
c_unified_commit(frame,
frame->GetStreamUndoManager(),
frame->GetStreamSerializer());StreamUndoManager
변경사항을 스트림으로 기록하고, Undo/Redo 스택을 관리합니다. 메모리 효율적인 바이너리 직렬화를 사용합니다.
StreamSerializer
각 아이템의 상태를 직렬화/역직렬화합니다. S-expression 포맷과 호환됩니다.
직렬화 - S-expression
imengine의 모든 문서는 S-expression 포맷으로 직렬화됩니다. 사람이 읽을 수 있는 텍스트 형식이며, 버전 관리와 호환됩니다.
(lib_symbol
(name "R_10K")
(pin_count 2)
(property "Reference" "R"
(at 0 -2.54 0)
(effects (font (size 1.27 1.27)))))파서 마이그레이션: Snippet 파싱은
imsexpr_dll을 사용합니다. 엔진 레거시 파서(CSIEDA_LEXER 등)는 제거 예정입니다.