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 | .imsch | 0 | 회로도 - 계층구조, HierSheet |
EpdDocument | .imepd | 1 | 전자부품 심볼 - 핀, 필드 |
SlibDocument | .imslib | 2 | 심볼 라이브러리 |
FpDocument | .imfp | 3 | 풋프린트 - 패드, 실크 |
PcbDocument | .impcb | 4 | PCB - 다층 레이어 |
렌더링 시스템
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 → App | c_face::FireEvent | 이벤트 발생 |
| App → Engine | C++ API / Lua Command | 함수 호출 / 커맨드 |
| Widget → Doc | Lua Callback | 간접 호출 |
DLL Export
| 함수 | 설명 |
|---|---|
cdf_set_event_callback | 이벤트 콜백 |
cdf_set_lua_printf_callback | Lua printf 콜백 |
cdf_sync_paths | 경로 동기화 |