#pragma once #include "imgui.h" namespace fn { // Configuracion para surface_plot_3d. // // `z` es la malla de alturas en row-major: z[j * nx + i] es la altura en // (x_i, y_j). Las coordenadas X / Y se generan automaticamente entre // [x_min, x_max] y [y_min, y_max] (lineales, mismo nx / ny que `z`). // // `size.x = -1` extiende el plot a todo el ancho disponible. `size.y` define // la altura en pixeles (default 400). struct SurfacePlot3DConfig { const float* z = nullptr; // length = nx * ny, row-major int nx = 0; int ny = 0; float x_min = 0.f; float x_max = 1.f; float y_min = 0.f; float y_max = 1.f; const char* x_label = "x"; const char* y_label = "y"; const char* z_label = "z"; ImVec2 size = ImVec2(-1.f, 400.f); bool show_colormap = true; }; // Renderiza una superficie 3D usando ImPlot3D::PlotSurface. // // Llamar dentro de un frame ImGui activo (p.ej. dentro de la lambda render // pasada a fn::run_app). Si `cfg.z == nullptr` o nx / ny < 2 la funcion // renderiza un mensaje informativo en lugar del plot. void surface_plot_3d(const char* title, const SurfacePlot3DConfig& cfg); } // namespace fn