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_dllInfrastructure공통 인프라 - 액션 관리, 이벤트, 파일시스템, 다국어, UI 메트릭스
app_dllInfrastructure애플리케이션 초기화, 워크스페이스 관리, DLL 로딩
ribbon_dllInfrastructurewxRibbonBar 기반 메인 메뉴/툴바
bridge_dllEditorimapp-imengine 브릿지 (C++ API, Lua 커맨드, 경로 동기화)
cadframes_dllEditorCAD 문서 프레임 (SCH, EPD, SLIB, FP, PCB)
imgui_dllEditorImGui 렌더링 컨텍스트 관리, OpenGL 통합
dialog_dllDialogImGui 기반 다이얼로그 (설정, 색상표, 단축키 등)
widget_project_dllWidget프로젝트 트리 위젯
widget_filemgr_dllWidget파일 매니저 위젯
widget_schlibmgr_dllWidget심볼 라이브러리 매니저 위젯
widget_fplibmgr_dllWidget풋프린트 라이브러리 매니저 위젯
widget_inspector_dllWidget오브젝트 인스펙터 위젯
widget_console_dllWidget콘솔 출력 위젯
widget_navigator_dllWidget문서 네비게이터 위젯
widget_search_dllWidget검색 위젯
converter_dllI/O외부 CAD 포맷 변환 (Altium, KiCad, Eagle, EasyEDA)
csiedaio_dllI/OImEDA 네이티브 파일 I/O (.imsch, .impcb 등)
dxfio_dllI/ODXF 파일 가져오기/내보내기
imsexpr_dllI/OS-Expression 파서 (스니펫, 라이브러리 파싱)
gerber_dllI/OGerber/Drill 파일 출력
bom_dllI/OBOM(Bill of Materials) 생성
netlist_dllI/O넷리스트 생성/비교
imai_service_dllAI/MLAI 서비스 (LLM API 연동, 데이터시트 분석)
imvecdb_dllAI/ML벡터 데이터베이스 (sqlite-vec 기반 RAG)
whisper_dllAI/ML음성 인식 (whisper.cpp 통합)
pdfextract_dllAI/MLPDF 텍스트/이미지 추출 (PDFium 기반)
wizard_dllTool마법사 및 유틸리티 도구

서드파티 라이브러리

imapp은 다양한 오픈소스 라이브러리를 활용합니다. 모든 서드파티 의존성은 imapp/thirdparty/ 디렉터리에서 관리됩니다.

라이브러리용도비고
imgui즉시 모드(Immediate Mode) GUI 렌더링다이얼로그, 위젯, 인스펙터 등 모든 커스텀 UI
ImGuiColorTextEdit코드 에디터 (구문 강조)Lua 스크립트 편집기
sqlite-vec벡터 유사도 검색AI RAG 파이프라인용 벡터 DB
pdfiumPDF 렌더링 및 텍스트 추출데이터시트 분석
whisper.cpp음성-텍스트 변환로컬 음성 인식
cpp-httplibHTTP 클라이언트/서버AI API 통신
libclipboard크로스플랫폼 클립보드복사/붙여넣기
stb이미지 로딩/저장stb_image, stb_image_write
nanosvgSVG 파싱 및 래스터화아이콘 로딩
nlohmann/jsonJSON 파싱/직렬화설정 파일, 데이터 교환
fmt문자열 포맷팅C++20 format 호환
sol2Lua-C++ 바인딩Lua 스크립팅 인터페이스
SQLiteCppSQLite 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, 커스텀 명령 등 스크립트 확장.