Softanza
DémarrerEnglish
Softanza
Visuel et spatial

Diagrammes et graphes

Vingt-cinq notations sur un seul moteur de rendu, un moteur de graphes de niveau NetworkX et une mise en page résolue par contraintes.

4 Strong · 5 Solid · 3 Partial · 0 Emerging

Mesuré contre : Graphviz · Mermaid · D2 · NetworkX · Dossiers : base/graph(s'ouvre dans un nouvel onglet) · Pour les programmeurs : la référence de ce domaine

un diagramme DRAKON du catalogue : préparer le déjeuner
un diagramme DRAKON du catalogue : préparer le déjeuner. rendu par le garde gg_drakon_catalogue de la bibliothèque et commis avec lui à 0e72e2e2c sous le nom cat_14_cook_lunch.png · la source(s'ouvre dans un nouvel onglet)

Repensé depuis les premiers principes

Ce que Softanza a gardé de ce qui marche, et ce qu'elle a repensé, tel que la bibliothèque l'a écrit dans ses documents de conception et ses narrations.

La manière SoftanzaUn diagramme est un langage visuel, pas une peinture : toute relation que le lecteur y perçoit doit exister dans le graphe.

Gardé des meilleures pratiques

  • Les dessins en couches suivent la chaîne classique de Sugiyama : couches, nœuds relais sur les longues arêtes, réduction des croisements, coordonnées, puis tracé des liens. source(s'ouvre dans un nouvel onglet)
  • Le modèle de Graphviz est conservé : l'espacement entre les nœuds fait contrat, et la taille de l'image découle de son contenu, pas l'inverse. source(s'ouvre dans un nouvel onglet)
  • Les diagrammes mathématiques reprennent le découpage de Penrose : un domaine déclare les types, une substance énonce le contenu, un style le traduit en formes, et une optimisation trouve la disposition. source(s'ouvre dans un nouvel onglet)

Repensé

  • L'auteur modifie le sens, l'algorithme gère la géométrie. Déplacer une boîte suggère seulement un ordre, car une position choisie à la main affirmerait ce que le graphe ignore. source(s'ouvre dans un nouvel onglet)
  • BPMN, UML, machines à états et circuits sont des profils déclarés sur une seule base de dessin, jamais des moteurs à part : un moteur dupliqué était arrivé défectueux. source(s'ouvre dans un nouvel onglet)
  • Les positions dans une couche sont calculées exactement, par régression isotonique, et non par une heuristique de médiane. Toute disposition est déterministe : un test peut vérifier l'image octet par octet. source(s'ouvre dans un nouvel onglet)
  • Deux liens ne peuvent se superposer que là où ils partagent une extrémité, car le lecteur voit dans des traits fusionnés une relation que le graphe n'a peut-être pas. source(s'ouvre dans un nouvel onglet)

One of the most complete planes in the library: 25 notations all rendered by one engine, over a native deterministic layout engine and a NetworkX-tier graph-algorithm suite; math and molecule diagrams are genuinely constraint-solved via autodiff. The old dot.exe dependency is demoted to an optional viewer — diagram layout is now engine-native. Guarded by ~1,790 assertions.

Ce qu'un artisan en fait, et ce qui se distingue

  • 25 notations as data profiles over one renderer
  • determinism as a guarantee: bit-identical layout across processes
  • constraint-solved layout via autodiff, which no mainstream tool does
  • NetworkX-core parity, compiled

Ce qui est dû

  • meet the dot kill criterion (spline routing, nested clusters)
  • live interactivity via the GUI plane
  • graph generators & isomorphism
  • PDF / PostScript export

La manière Softanza, exécutée

Ce que Softanza fait autrement dans ce domaine, montré par du code tiré de ses narrations et de ses gardes, et exécuté pour cette page.

Une notation déclarée qui interdit les boucles sur soi fait refuser ce lien par l'éditeur, sans qu'aucun code de l'éditeur la connaisse ; un lien licite passe.

Softanza
# a notation declared as data: three kinds, a closed vocabulary, and no self-links
oFsm = new stzNotation("fsm51")
oFsm.AddKind("state", "circle")
oFsm.AddKind("final", "doublecircle")
oFsm.AddKind("task", "diamond")
oFsm.Close()
oFsm.Forbid(:SelfLink, "a state cannot transition to itself in fsm51; " +
	"model a stay as a guard on departure instead")
StzRegisterNotation(oFsm)

oDm = new stzDiagram("m51")
oDm.SetNotation("fsm51")
oDm.AddNodeXTT("a", "A", [ :type = "state" ])
oDm.AddNodeXTT("b", "B", [ :type = "task" ])
oDm.AddEdge("a", "b")
oDm.ToCanvasXT([ :NodeWidth = 96, :NodeHeight = 36 ])

nDnLog = len(oDm.EditLog())
bDnGot = oDm.Edit(:Link, [ "a", "a" ])
chk("a link the domain forbids is refused at the command",
    bDnGot = 0 and len(oDm.EditLog()) = nDnLog)
bDnGot = oDm.Edit(:Link, [ "b", "a" ])
chk("...while a lawful link passes the same gate",
    bDnGot = 1 and len(oDm.EditLog()) = nDnLog + 1)
Sortie
   ok   a link the domain forbids is refused at the command
   ok   ...while a lawful link passes the same gate

exécuté le 2026-10-01 21:17 dans la bibliothèque au commit 0e72e2e2c ; tiré de base/test/graphics/gg_adversarial.ring(s'ouvre dans un nouvel onglet)

Les articles de ce domaine (12)

Les couloirs, un par un

Les couloirs et leurs notes sont cités tels qu'ils ont été lus à la source, le Read from the source on 2026-09-16, from a read-only main worktree.

Notation breadth
Strong
25 notations (DN0-DN24), ~21 Haro faces, all as profiles over one renderer (stzDiagram), not separate tools; the domain list is closed by designstzDiagram; SOFTANZA_GRAPH_PLANE_PLAN.md DN0-DN24
Deterministic layout engine
Strong
graph_layout.zig (GG1): barycentre crossing-reduction, seeded Fruchterman-Reingold force, bit-identical within and across processesgraph_layout.zig; determinism guard
Graph algorithms
Strong
graph.zig (CSR): BFS/DFS, Dijkstra, A*, SCC, bridges, toposort, betweenness/closeness/PageRank/k-core/Louvain, MST, max-flow/min-cut; engine-implementedgraph.zig; test/graph (158 files)
Constraint-solved diagrams
Strong
Math (DN7) and molecule (DN11) layouts are solved by the engine's autodiff solver (StzEngineGrad*), with DragTo/Pin interactive re-solvesolver/constraint/autodiff.zig
Rendering & output
Solid
One renderer, three outputs: ToSVG (no device), ToPNG (GPU-backed), an ASCII visualizer; 24 node shapes; DOT export; no PDF/PostScript
Diagram editing & interactivity
Solid
Command-based edit session: Edit, Undo/Redo, EditLog, PickAt, RewireAnchor; illegal edits refused at the gesture; not a visual WYSIWYG editor
Graph rules & governance
Solid
stzGraphRule and stzOrgRule feed the one CI gate (stzRuleReport): no-orphan-position, separation-of-duties; the rule catalogue is smallstzGraphRule / stzOrgRule / stzRuleReport
Export & interchange
Solid
stzGraph exports DOT, JSON, GraphML and YAML (Dot(), RenditionAs); import parity thinner, GEXF/adjacency round-trips not all presentstzGraph
Text & label placement
Solid
Notation-in-a-label (DN10), labels centred on cap-height not the em-box (DN12), curve clearance (DN13), solver-placed labels (SolveLabelsAfter)DN10 / DN12 / DN13
General graph layout & edge routing
Partial
Diagram layouts are engine-native; arbitrary large-graph visualization still leans on the optional dot.exe viewer: spline routing, nested clusters unmet
Graph generators & isomorphism
Partial
No standard graph generators (Erdos-Renyi, Barabasi-Albert, Watts-Strogatz) and no isomorphism / graph-edit-distance surfaced
Live / web interactivity
Partial
Diagrams emit interactive SVG and support programmatic re-layout (Relayout, DragTo); no built-in live pan/zoom/brush, the GUI plane's job