---
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.
