--- name: chart_demo lang: cpp domain: viz description: "Demo ImGui de primitivos viz del registry: line_plot, scatter_plot, bar_chart, heatmap. Cada chart en su propia tab del TabBar. Usado como showcase y como build gate de las funciones viz/." tags: [imgui, demo, charts, viz, showcase] uses_functions: - line_plot_cpp_viz - scatter_plot_cpp_viz - bar_chart_cpp_viz - heatmap_cpp_viz # logger, app_menubar viven en fn_framework — no se listan aqui uses_types: [] framework: "imgui" entry_point: "main.cpp" dir_path: "cpp/apps/chart_demo" repo_url: "" --- ## Que hace App de una sola ventana con cuatro tabs (Line / Scatter / Bar / Heatmap) que renderiza datos sinteticos para mostrar el aspecto y la API de los primitivos viz del registry. Sirve como: - **Showcase visual** de las funciones viz existentes — al añadir una nueva primitiva, anadir su tab aqui es la forma natural de probar el binding. - **Build gate**: si una de las funciones rompe API, esta app deja de compilar y lo cazamos sin tener que tocar `registry_dashboard` o `graph_explorer`. ## Estructura `main.cpp` (~93 lineas): - `init_data()` — genera arrays sinteticos una vez (estado modulo). - `render()` — DockSpaceOverViewport + TabBar con 4 tabs, cada una invoca un primitivo del registry. - `main()` → `fn::run_app(...)` con AppConfig estandar (titulo, tamaño, about, log). ## Build ```bash # Linux cd cpp && cmake -B build/linux -S . && cmake --build build/linux --target chart_demo # Windows (cross-compile) cd cpp && cmake -B build/windows -S . -DCMAKE_TOOLCHAIN_FILE=toolchains/mingw-w64.cmake \ && cmake --build build/windows --target chart_demo ``` ## Decisiones - `viewports = true` (default de `fn::run_app`): las ventanas se pueden arrastrar fuera del main window. - `init_gl_loader = false`: solo usa ImGui/ImPlot, sin gl* directo. - Sin persistencia propia (no abre BD). - `log: file_path = "chart_demo.log"` con nivel Debug — el `init_data` emite info+debug para verificar que el logger funciona.