CAD Frames - CAD 문서 프레임

CAD Frame은 열린 CAD 문서의 편집 환경을 제공합니다. c_cadframe_document 기반으로 문서 타입별 확장 클래스가 렌더링, Undo/Redo를 구현합니다.

c_cadframe_document - 기본 클래스

클래스 계층

                    c_cadframe_document
                           |
            +--------------+-----------------+
      SchDocument    EpdDocument       PcbDocument
      (.imsch)       (.imepd)         (.impcb)
            |
      SlibDocument   FpDocument
      (.imslib)      (.imfp)
    
클래스확장자ContentType설명
SchDocument.imsch0회로도 - 계층구조, HierSheet
EpdDocument.imepd1전자부품 심볼 - 핀, 필드
SlibDocument.imslib2심볼 라이브러리
FpDocument.imfp3풋프린트 - 패드, 실크
PcbDocument.impcb4PCB - 다층 레이어

렌더링 시스템

OpenGL FBO 캐시 기반 고성능 렌더링.

렌더링 갱신 (3개 모두 필수)

doc->setNeedsRender();                  // FBO 무효화
c_cadframe_document::RequestRepaint();  // 뷰 갱신
if (m_host) m_host->requestRepaint();   // UI 갱신
setNeedsRender() 빠뜨리면 캐시 재사용으로 변경 미반영.

FBO 렌더링 흐름

    변경 -> setNeedsRender() -> FBO 무효화
        -> RequestRepaint() -> 다음 프레임 렌더링
        -> needsRender? Y: GAL렌더링+FBO저장 / N: 캐시 사용
        -> FBO 텍스처를 화면에 블리팅
    

Undo/Redo - c_unified_commit

Commit 패턴

c_unified_commit(frame,
                 frame->GetStreamUndoManager(),
                 frame->GetStreamSerializer());
레거시 commit 금지. 반드시 c_unified_commit 사용.

인쇄 - c_cad_printout

wxWidgets 인쇄 프레임워크와 통합된 CAD 문서 인쇄.

bridge_dll - imapp/imengine 브릿지

통신 구조

      imapp                              imengine
      c_cadframe_document -- C++ API --> cadframe_api
      onEngineEvent()    <-- Events --- c_face::FireEvent
      s_luaCommand()     -- Lua Call --> on_lua_command_call()
      syncPaths()        -- Paths ----> cdf_sync_paths()
    

Lua Command Call

lua_settop(L, 0);        // 스택 초기화 필수
lua_pushnil(L);          // pos 1: self
lua_pushstring(L, cmd);  // pos 2: cmd
lua_pushboolean(L, val); // pos 3: value
s_luaCommand(m_frame, cmd, L);
STR_CASE는 존재하지 않는 매크로. 반드시 CASE 사용.
방향메커니즘설명
Engine → Appc_face::FireEvent이벤트 발생
App → EngineC++ API / Lua Command함수 호출 / 커맨드
Widget → DocLua Callback간접 호출

DLL Export

함수설명
cdf_set_event_callback이벤트 콜백
cdf_set_lua_printf_callbackLua printf 콜백
cdf_sync_paths경로 동기화