cb6d9e61d1
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
90 lines
3.0 KiB
C++
90 lines
3.0 KiB
C++
#include "app_base.h"
|
|
#include "imgui.h"
|
|
#include "implot.h"
|
|
|
|
#include "viz/line_plot.h"
|
|
#include "viz/scatter_plot.h"
|
|
#include "viz/bar_chart.h"
|
|
#include "viz/heatmap.h"
|
|
#include "core/app_menubar.h"
|
|
#include "core/logger.h"
|
|
|
|
#include <cmath>
|
|
#include <vector>
|
|
|
|
// Generate sample data
|
|
static constexpr int N = 500;
|
|
static float xs[N], ys_sin[N], ys_cos[N];
|
|
static float scatter_x[200], scatter_y[200];
|
|
static const char* bar_labels[] = {"Go", "Python", "Bash", "TypeScript", "C++"};
|
|
static float bar_values[] = {201.0f, 202.0f, 38.0f, 80.0f, 5.0f};
|
|
static float heat_data[10 * 10];
|
|
|
|
static bool data_initialized = false;
|
|
|
|
static void init_data() {
|
|
if (data_initialized) return;
|
|
fn_log::log_info("init_data: generando %d puntos sin/cos, 200 scatter, 10x10 heatmap", N);
|
|
for (int i = 0; i < N; i++) {
|
|
xs[i] = static_cast<float>(i) * 0.02f;
|
|
ys_sin[i] = sinf(xs[i]);
|
|
ys_cos[i] = cosf(xs[i]);
|
|
}
|
|
for (int i = 0; i < 200; i++) {
|
|
scatter_x[i] = static_cast<float>(rand()) / RAND_MAX * 10.0f;
|
|
scatter_y[i] = scatter_x[i] * 0.5f + (static_cast<float>(rand()) / RAND_MAX - 0.5f) * 3.0f;
|
|
}
|
|
for (int i = 0; i < 100; i++) {
|
|
int r = i / 10, c = i % 10;
|
|
heat_data[i] = sinf(r * 0.5f) * cosf(c * 0.5f);
|
|
}
|
|
data_initialized = true;
|
|
fn_log::log_debug("init_data: ok");
|
|
}
|
|
|
|
void render() {
|
|
init_data();
|
|
|
|
if (ImGui::Begin("fn_registry — Chart Demo")) {
|
|
if (ImGui::BeginTabBar("##charts")) {
|
|
if (ImGui::BeginTabItem("Line Plot")) {
|
|
ImGui::Text("sin(x) — %d points", N);
|
|
line_plot("Sine Wave", xs, ys_sin, N);
|
|
ImGui::EndTabItem();
|
|
}
|
|
if (ImGui::BeginTabItem("Scatter Plot")) {
|
|
ImGui::Text("y = 0.5x + noise — 200 points");
|
|
scatter_plot("Scatter Data", scatter_x, scatter_y, 200);
|
|
ImGui::EndTabItem();
|
|
}
|
|
if (ImGui::BeginTabItem("Bar Chart")) {
|
|
ImGui::Text("Functions per language in fn_registry");
|
|
bar_chart("Registry Languages", bar_labels, bar_values, 5);
|
|
ImGui::EndTabItem();
|
|
}
|
|
if (ImGui::BeginTabItem("Heatmap")) {
|
|
ImGui::Text("sin(r) * cos(c) — 10x10 matrix");
|
|
heatmap("Correlation Matrix", heat_data, 10, 10, -1.0f, 1.0f);
|
|
ImGui::EndTabItem();
|
|
}
|
|
ImGui::EndTabBar();
|
|
}
|
|
}
|
|
ImGui::End();
|
|
}
|
|
|
|
#ifndef FN_TEST_BUILD
|
|
int main() {
|
|
return fn::run_app({
|
|
.title = "fn_registry — Chart Demo",
|
|
.width = 1400,
|
|
.height = 900,
|
|
.about = {.name = "chart demo",
|
|
.version = "0.2.0",
|
|
.description = "Demo de primitivos viz: line, scatter, bar, heatmap. AppConfig estandar + multi-viewport."},
|
|
.log = {.file_path = "chart_demo.log",
|
|
.level = static_cast<int>(fn_log::Level::Debug)}
|
|
}, render);
|
|
}
|
|
#endif
|