Files
brahman/crates/modules/pineal/mesh/src/lib.rs
T
sergio dc8554d123 feat(pineal): cierra stub mesh — viz de grafos (núcleo)
Fase F: sexto stub de pineal cerrado (6/6).

mesh resultó ser un módulo de viz de grafos, no un triangle-mesh.
Núcleo implementado:
- buffers — NodeBuffer (stride 3: x,y,radius) + EdgeBuffer (stride 2),
  Vec planos contiguos, raw() para subir a GPU.
- spatial_hash — uniform grid; rebuild + query (nodo bajo un punto,
  revisa celda + 8 vecinas).
- force — layout force-directed Fruchterman-Reingold naïve O(n²):
  repulsión todo-par + atracción por arista + cooling. Jitter
  determinista para nodos coincidentes.
- tree — layout de árbol por ancho de subárbol (post-order, padres
  centrados sobre hijos), soporta bosque, ciclos sin colgar.
- camera — pan/zoom con zoom anclado al cursor (anchor-preserving).

13 tests verdes. cargo check --workspace verde.

Pendiente (follow-up): hierarchical (Sugiyama) + Barnes-Hut para
escalar el force-directed a grafos masivos.

Pineal: 6/6 stubs cerrados.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-20 15:09:22 +00:00

26 lines
877 B
Rust

//! `pineal-mesh` — visualización de grafos.
//!
//! - [`buffers`] — `NodeBuffer` / `EdgeBuffer`: `Vec` planos con stride
//! fijo (3 floats por nodo `[x,y,radius]`, 2 por arista).
//! - [`spatial_hash`] — uniform grid para hit-test de nodos móviles.
//! - [`force`] — layout force-directed (Fruchterman-Reingold naïve).
//! - [`tree`] — layout de árbol por ancho de subárbol.
//! - [`camera`] — pan/zoom con zoom anclado al cursor.
//!
//! Pendiente: `hierarchical` (Sugiyama, layered graph drawing) y la
//! optimización Barnes-Hut del force-directed para grafos masivos.
#![forbid(unsafe_code)]
pub mod buffers;
pub mod camera;
pub mod force;
pub mod spatial_hash;
pub mod tree;
pub use buffers::{EdgeBuffer, NodeBuffer};
pub use camera::Camera;
pub use force::{ForceLayout, ForceParams};
pub use spatial_hash::SpatialHash;
pub use tree::tree_layout;