--- name: gauge kind: component lang: cpp domain: viz version: "1.0.0" purity: pure signature: "void gauge(const char* label, float value, float min_val, float max_val, float radius = 60.0f)" description: "Renderiza un indicador circular tipo gauge/velocimetro usando ImGui draw primitives" tags: [imgui, visualization, gauge, kpi, dashboard] uses_functions: [] uses_types: [] returns: [] returns_optional: false error_type: "" imports: [imgui] tested: false tests: [] test_file_path: "" file_path: "cpp/functions/viz/gauge.cpp" framework: imgui params: - name: label desc: "Etiqueta del gauge, se muestra centrada debajo del valor numerico" - name: value desc: "Valor actual a mostrar en el gauge" - name: min_val desc: "Valor minimo de la escala (extremo izquierdo del arco)" - name: max_val desc: "Valor maximo de la escala (extremo derecho del arco)" - name: radius desc: "Radio del gauge en pixels (default 60.0)" output: "Renderiza el gauge en el frame ImGui actual, reservando espacio con ImGui::Dummy" --- # gauge Indicador circular tipo gauge/velocimetro construido sobre ImGui draw primitives. No requiere ImPlot. El arco ocupa 240 grados (de 150deg a 390deg en sentido horario). El color del arco de valor interpolado de verde (minimo) a amarillo (mitad) a rojo (maximo). Una aguja blanca apunta al valor actual. Debe llamarse dentro del render callback de `fn::run_app` (o cualquier contexto con un frame ImGui activo). ## Ejemplo ```cpp // KPI card con gauge de temperatura gauge("CPU Temp", 72.5f, 0.0f, 100.0f, 50.0f); // Gauge grande para dashboard principal gauge("Velocidad", 3200.0f, 0.0f, 5000.0f, 80.0f); ``` ## Notas - El arco de fondo es gris oscuro (IM_COL32(60,60,60,220)), 6px de grosor. - La aguja tiene longitud del 75% del radio para evitar solapar el arco. - Usa solo `float`; no ofrece overload `double` porque ImGui DrawList trabaja en coordenadas de pantalla (float). - El espacio reservado es `diameter x (diameter + line_height)` para incluir la etiqueta.