feat(viz): sankey diagram — BFS topologico + bandas curvas (bezier cubico)

compute_levels asigna columnas via BFS, los nodos se apilan verticalmente
proporcional a max(in_total, out_total). Los links se renderizan como
bandas con bezier cubico, color del nodo origen + alpha bajo.

Asume DAG (sin ciclos). Si hay ciclos, los nodos del ciclo quedan en su
nivel parcial — no rompe pero puede solapar visualmente.
This commit is contained in:
2026-04-25 21:52:37 +02:00
parent 643d3a2abf
commit 64330944e1
3 changed files with 316 additions and 0 deletions
+25
View File
@@ -0,0 +1,25 @@
#pragma once
// Sankey diagram para flujos source -> target con magnitudes.
//
// Asume DAG (sin ciclos). Si hay ciclos, los nodos sin nivel quedan en la
// columna 0 — visualmente raro pero no rompe.
#include "imgui.h"
#include <string>
#include <vector>
struct SankeyNode {
std::string label;
};
struct SankeyLink {
int src;
int dst;
float value;
};
void sankey(const char* id,
const std::vector<SankeyNode>& nodes,
const std::vector<SankeyLink>& links,
ImVec2 size = ImVec2(-1.0f, 400.0f));