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 아이템 기반

회로도 문서 계층

c_schematic
전체 회로도 관리자
c_sch
서브시트 문서 (TypeName: "SCH")
c_sch_sheet
아이템 컨테이너 (TypeName: "SCHSHEET")

PCB 문서 계층

c_board
PCB 보드 전체 관리
c_footprint
풋프린트 컨테이너 (pad + 도형)

문서 타입

타입ContentTypeImEDA 확장자레거시Root 클래스아이템 기반
SCH 회로도SchDocument (0).imsch.sch, .csischc_schematicc_sch_item
EPD 심볼EpdDocument (1).imepd.epd, .csiepdc_schematicc_sch_item
SLIB 심볼 라이브러리SlibDocument (2).imslib / .imsym.slibc_schematicc_lib_symbol
FP 풋프린트FpDocument (3).imfp.fp, .pcblibc_footprintc_board_item
PCB 보드PcbDocument (4).impcb.pcbc_boardc_board_item
확장자 규칙: 레거시 확장자(CSI*)는 읽기 전용입니다. 새 파일은 반드시 ImEDA 확장자를 사용합니다. 정의: imapp/src/common_dll/document_types.h

Undo/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 등)는 제거 예정입니다.