Files
fn_registry/cpp/functions/viz/surface_plot_3d.h
T
egutierrez cebf87cb4e feat(viz): surface_plot_3d real (ImPlot3D) + scatter_3d nuevo
surface_plot_3d (v2.0.0): quita el STUB. API basada en
SurfacePlot3DConfig (z[nx*ny] row-major + ranges X/Y) que delega en
ImPlot3D::PlotSurface. Las coordenadas X/Y por vertice se generan
internamente desde [x_min, x_max] x [y_min, y_max].

scatter_3d (v1.0.0): nuevo primitivo. Scatter 3D con tamano y color
opcionales por punto via ImPlot3DSpec::MarkerSizes / MarkerFillColors.
Util para PCA / clustering / nubes de puntos sinteticas.

Ambos namespace fn::, kind component, purity pure. Orbit / zoom / pan
los aporta ImPlot3D nativo.

Issue 0028.
2026-04-25 21:48:43 +02:00

38 lines
1.1 KiB
C++

#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