feat: add C++ ImGui functions for core UI and visualization
Funciones C++/ImGui para dashboards (grid, panel, docking, sidebar, tabs), visualizaciones (candlestick, gauge, histogram, pie, sparkline, heatmap, scatter, line, bar, surface3d, kpi, table), grafos (force layout, renderer, viewport, spatial hash, types) y utilidades (time series buffer, tracy zones, memory/fps overlay, plot theme). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
---
|
||||
name: sparkline
|
||||
kind: component
|
||||
lang: cpp
|
||||
domain: viz
|
||||
version: "1.0.0"
|
||||
purity: pure
|
||||
signature: "void sparkline(const char* id, const float* values, int count, float width = 100.0f, float height = 20.0f)"
|
||||
description: "Renderiza un mini grafico de lineas inline para uso en tablas, headers y KPI cards"
|
||||
tags: [imgui, visualization, sparkline, inline, dashboard]
|
||||
uses_functions: []
|
||||
uses_types: []
|
||||
returns: []
|
||||
returns_optional: false
|
||||
error_type: ""
|
||||
imports: [imgui]
|
||||
tested: false
|
||||
tests: []
|
||||
test_file_path: ""
|
||||
file_path: "cpp/functions/viz/sparkline.cpp"
|
||||
framework: imgui
|
||||
params:
|
||||
- name: id
|
||||
desc: "Identificador unico del widget, usado con PushID/PopID para garantizar unicidad en tablas"
|
||||
- name: values
|
||||
desc: "Array de valores float del sparkline (serie temporal)"
|
||||
- name: count
|
||||
desc: "Numero de valores en el array"
|
||||
- name: width
|
||||
desc: "Ancho en pixels del sparkline (default 100.0)"
|
||||
- name: height
|
||||
desc: "Alto en pixels del sparkline (default 20.0)"
|
||||
output: "Renderiza el sparkline inline en el frame ImGui actual, reservando espacio con ImGui::Dummy"
|
||||
---
|
||||
|
||||
# sparkline
|
||||
|
||||
Mini grafico de lineas inline construido sobre ImGui draw primitives. No requiere ImPlot.
|
||||
|
||||
Auto-escala el eje Y al rango minimo/maximo de los valores. Dibuja una polyline con relleno semitransparente bajo la curva. Disenado para encajar en celdas de tablas, headers y tarjetas KPI.
|
||||
|
||||
Ofrece dos overloads:
|
||||
- Sin color: usa verde suave por defecto (`ImVec4(0.35, 0.85, 0.45, 1.0)`)
|
||||
- Con color: acepta cualquier `ImVec4` para personalizar la linea y el relleno
|
||||
|
||||
Debe llamarse dentro del render callback de `fn::run_app` (o cualquier contexto con un frame ImGui activo).
|
||||
|
||||
## Ejemplo
|
||||
|
||||
```cpp
|
||||
// En una celda de tabla
|
||||
ImGui::TableNextColumn();
|
||||
sparkline("##revenue_spark", revenue.data(), (int)revenue.size(), 80.0f, 18.0f);
|
||||
|
||||
// Con color personalizado (rojo para valores negativos)
|
||||
sparkline("##pnl", pnl.data(), (int)pnl.size(),
|
||||
ImVec4(0.9f, 0.3f, 0.3f, 1.0f), 100.0f, 20.0f);
|
||||
|
||||
// KPI card inline con label
|
||||
ImGui::Text("Revenue"); ImGui::SameLine();
|
||||
sparkline("kpi_rev", data, count);
|
||||
```
|
||||
|
||||
## Notas
|
||||
|
||||
- El relleno bajo la curva usa alpha 40/255 del mismo color de la linea.
|
||||
- Si todos los valores son iguales (rango < 1e-6), la linea se dibuja en el centro verticalmente.
|
||||
- El grosor de linea es 1.5px para que sea legible a alturas de 16-24px.
|
||||
- `id` no se muestra visualmente; solo se pasa a `PushID` para que ImGui diferencie widgets con los mismos datos en la misma tabla.
|
||||
Reference in New Issue
Block a user