feat(viz): graph_types modelo extendido + EntityType/RelationType + flags (issue 0049e)
Extiende el modelo agnostico de graph_types.h para soportar shapes/iconos/ filtros/labels/streaming sin acoplar a backend. Migra el unico consumer (demos_graph) en el mismo cambio. - GraphNode v2: type_id + shape_override/color_override/size_override + flags (NF_PINNED/VISIBLE/SELECTED/HOVERED) + label_idx + user_data. - GraphEdge v2: type_id + style_override + flags (EF_DIRECTED/VISIBLE). - EntityType / RelationType: tablas en GraphData (types, rel_types). - Helpers de resolucion (resolve_node_color/shape/size, resolve_edge_*) y constructores ergonomicos (graph_node, graph_edge, entity_type, relation_type) — sentinel-based para herencia automatica del tipo. - graph_renderer v1.4: lee NF_VISIBLE / EF_VISIBLE, resuelve apariencia via override → EntityType → fallback indexado por type_id. Skipea aristas con endpoints invisibles. Shapes siguen pintandose como circulo (0049f cableara el dispatch real). - graph_force_layout v1.2: pinned ahora vive en flags & NF_PINNED. - graph_viewport v1.1: hover/seleccion publican NF_HOVERED/SELECTED en el grafo (clear-then-set). Drag usa NF_PINNED. Tooltip muestra Type/ user_data en lugar de community/value/label. - demos_graph: 8 EntityType (paleta antigua) + 1 RelationType. type_id por cluster. user_data = indice numerico del nodo. Apariencia visual identica al pre-cambio. - test_graph_types.cpp: 12 casos cubriendo helpers, defaults, bitmask manipulation y resoluciones override-vs-EntityType. test_graph_edge_ static actualizado al nuevo modelo (ya no tiene .color directo). - 4 .md de tipos nuevos (graph_node, graph_edge, entity_type, relation_type) + GraphData v2.0 actualizado. Tests: 31/31 ctest verdes (incluye test_visual golden). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -50,11 +50,16 @@ TEST_CASE("Fallback gris 0x88 tiene R en el byte LSB", "[viz][edge_static]") {
|
||||
REQUIRE(((gray >> 24) & 0xFFu) == 0xFFu); // A
|
||||
}
|
||||
|
||||
TEST_CASE("GraphEdge.color = 0 indica fallback al gris por defecto",
|
||||
TEST_CASE("graph_edge() default deja flags=EF_VISIBLE y type_id=0",
|
||||
"[viz][edge_static]") {
|
||||
// Modelo extendido (issue 0049e): GraphEdge ya no tiene `color` directo —
|
||||
// el color sale de RelationType via type_id. Aqui solo validamos los
|
||||
// defaults del helper para que el renderer pueda dibujar la arista
|
||||
// (EF_VISIBLE encendido) y que el fallback al RelationType funcione
|
||||
// con type_id = 0.
|
||||
GraphEdge e = graph_edge(0, 1, 1.0f);
|
||||
REQUIRE(e.color == 0u);
|
||||
// El renderer interpreta esto como "usa el gris 0x88,0x88,0x88,0xFF".
|
||||
// Un agente que precarga colores debe usar `pack_rgba8` para evitar
|
||||
// colisionar con el sentinel 0.
|
||||
REQUIRE(e.flags == EF_VISIBLE);
|
||||
REQUIRE(e.type_id == 0);
|
||||
REQUIRE(e.style_override == EDGE_USE_TYPE);
|
||||
REQUIRE(e.weight == 1.0f);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user