4268b6f187
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.
38 lines
1.1 KiB
C++
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
|