#pragma once // Contour plot 2D via marching squares. // Layout puro (contour_compute) separado del render (contour). #include "imgui.h" #include struct ContourLine { std::vector pts; // segmentos: pts[2k], pts[2k+1] forman un segmento float level; }; // Marching squares clasico (16 casos). Para cada nivel, devuelve un ContourLine // con los segmentos en coords [0..nx-1] x [0..ny-1] del grid (no escaladas). std::vector contour_compute(const float* grid, int nx, int ny, const float* levels, int n_levels); // Render. size.x <= 0 => ancho disponible. Escala los segmentos a la region dada. void contour(const char* id, const float* grid, int nx, int ny, const float* levels, int n_levels, ImVec2 size = ImVec2(-1.0f, 300.0f));