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.
This commit is contained in:
@@ -1,8 +1,37 @@
|
||||
#pragma once
|
||||
|
||||
// [STUB] Renders a 3D surface plot using ImPlot3D.
|
||||
// Requires ImPlot3D to be vendored in cpp/vendor/implot3d/.
|
||||
// Until then, displays a placeholder message inside an ImGui group.
|
||||
// Call within an ImGui frame (inside fn::run_app render callback).
|
||||
void surface_plot_3d(const char* title, const float* values, int rows, int cols,
|
||||
float z_min, float z_max);
|
||||
#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
|
||||
|
||||
Reference in New Issue
Block a user