imapp - Application Layer
imapp은 ImEDA의 애플리케이션 계층으로, wxWidgets 기반의 데스크톱 UI와 27개 이상의 동적 로딩 DLL 모듈로 구성됩니다. ImGui를 활용한 고성능 렌더링 UI, Lua 스크립팅, AI 서비스 통합을 제공하며, imengine CAD 엔진과 bridge_dll을 통해 연동됩니다.
아키텍처 개요
imapp은 5개의 논리적 계층으로 구성되며, 각 계층은 독립적인 DLL 모듈로 분리되어 있습니다.
imapp 모듈 계층 구조
+-------------------------------------------------------------------+
| Layer 5: AI / ML Services |
| [ imai_service ] [ imvecdb ] [ whisper ] [ pdfextract ] |
+-------------------------------------------------------------------+
| Layer 4: I/O & Converters |
| [ converter_dll ] [ csiedaio ] [ dxfio ] [ imsexpr ] |
+-------------------------------------------------------------------+
| Layer 3: Dialogs & Widgets |
| [ dialog_dll ] [ widget_*_dll ] [ wizard_dll ] |
+-------------------------------------------------------------------+
| Layer 2: Editor Core |
| [ cadframes_dll ] [ imgui_dll ] [ bridge_dll ] |
+-------------------------------------------------------------------+
| Layer 1: Infrastructure |
| [ common_dll ] [ app_dll ] [ ribbon_dll ] |
+-------------------------------------------------------------------+
| |
v v
+-------------------------------------------------------------------+
| imengine (CAD Engine) | Third-party (wxWidgets, ImGui) |
+-------------------------------------------------------------------+
DLL 모듈 목록
imapp의 모든 기능은 동적 로딩 DLL로 분리되어 있으며, 필요 시 런타임에 로딩됩니다.
| 모듈 | 계층 | 설명 |
|---|---|---|
common_dll | Infrastructure | 공통 인프라 - 액션 관리, 이벤트, 파일시스템, 다국어, UI 메트릭스 |
app_dll | Infrastructure | 애플리케이션 초기화, 워크스페이스 관리, DLL 로딩 |
ribbon_dll | Infrastructure | wxRibbonBar 기반 메인 메뉴/툴바 |
bridge_dll | Editor | imapp-imengine 브릿지 (C++ API, Lua 커맨드, 경로 동기화) |
cadframes_dll | Editor | CAD 문서 프레임 (SCH, EPD, SLIB, FP, PCB) |
imgui_dll | Editor | ImGui 렌더링 컨텍스트 관리, OpenGL 통합 |
dialog_dll | Dialog | ImGui 기반 다이얼로그 (설정, 색상표, 단축키 등) |
widget_project_dll | Widget | 프로젝트 트리 위젯 |
widget_filemgr_dll | Widget | 파일 매니저 위젯 |
widget_schlibmgr_dll | Widget | 심볼 라이브러리 매니저 위젯 |
widget_fplibmgr_dll | Widget | 풋프린트 라이브러리 매니저 위젯 |
widget_inspector_dll | Widget | 오브젝트 인스펙터 위젯 |
widget_console_dll | Widget | 콘솔 출력 위젯 |
widget_navigator_dll | Widget | 문서 네비게이터 위젯 |
widget_search_dll | Widget | 검색 위젯 |
converter_dll | I/O | 외부 CAD 포맷 변환 (Altium, KiCad, Eagle, EasyEDA) |
csiedaio_dll | I/O | ImEDA 네이티브 파일 I/O (.imsch, .impcb 등) |
dxfio_dll | I/O | DXF 파일 가져오기/내보내기 |
imsexpr_dll | I/O | S-Expression 파서 (스니펫, 라이브러리 파싱) |
gerber_dll | I/O | Gerber/Drill 파일 출력 |
bom_dll | I/O | BOM(Bill of Materials) 생성 |
netlist_dll | I/O | 넷리스트 생성/비교 |
imai_service_dll | AI/ML | AI 서비스 (LLM API 연동, 데이터시트 분석) |
imvecdb_dll | AI/ML | 벡터 데이터베이스 (sqlite-vec 기반 RAG) |
whisper_dll | AI/ML | 음성 인식 (whisper.cpp 통합) |
pdfextract_dll | AI/ML | PDF 텍스트/이미지 추출 (PDFium 기반) |
wizard_dll | Tool | 마법사 및 유틸리티 도구 |
서드파티 라이브러리
imapp은 다양한 오픈소스 라이브러리를 활용합니다. 모든 서드파티 의존성은 imapp/thirdparty/ 디렉터리에서 관리됩니다.
| 라이브러리 | 용도 | 비고 |
|---|---|---|
imgui | 즉시 모드(Immediate Mode) GUI 렌더링 | 다이얼로그, 위젯, 인스펙터 등 모든 커스텀 UI |
ImGuiColorTextEdit | 코드 에디터 (구문 강조) | Lua 스크립트 편집기 |
sqlite-vec | 벡터 유사도 검색 | AI RAG 파이프라인용 벡터 DB |
pdfium | PDF 렌더링 및 텍스트 추출 | 데이터시트 분석 |
whisper.cpp | 음성-텍스트 변환 | 로컬 음성 인식 |
cpp-httplib | HTTP 클라이언트/서버 | AI API 통신 |
libclipboard | 크로스플랫폼 클립보드 | 복사/붙여넣기 |
stb | 이미지 로딩/저장 | stb_image, stb_image_write |
nanosvg | SVG 파싱 및 래스터화 | 아이콘 로딩 |
nlohmann/json | JSON 파싱/직렬화 | 설정 파일, 데이터 교환 |
fmt | 문자열 포맷팅 | C++20 format 호환 |
sol2 | Lua-C++ 바인딩 | Lua 스크립팅 인터페이스 |
SQLiteCpp | SQLite C++ 래퍼 | 라이브러리 DB, 설정 저장 |
빌드 환경
컴파일러
C++20 표준 사용. Windows(MSVC), Linux(GCC), Mac(Clang) 크로스플랫폼 지원.
빌드 시스템
make.bat (증분 빌드) 및 build.bat (클린 빌드) 사용. 병렬 빌드 -j8 지원.
UI 프레임워크
wxWidgets (메인 프레임, Ribbon UI) + ImGui (커스텀 렌더링, 다이얼로그, 위젯).
스크립팅
Lua 5.4 + sol2 바인딩. Drawing tool, 커스텀 명령 등 스크립트 확장.