Wallgraph

Documentformaat en agent-API

Een Wallgraph-plattegrond is één JSON-bestand waarin geen afgeleide meetkunde is opgeslagen. Hieronder het model, het JSON Schema, en de twee manieren waarop een programma de editor aanstuurt.

Het model

Een plattegrond is een vlak netwerk van muurhartlijnen: knopen, met muren als verbindingen daartussen. Opgeslagen worden die knopen, de muren (hartlijnen met een dikte en eventueel een boog), openingen die op hun muur geparametriseerd zijn, geplaatste symbolen, trappen, vides en constructie-elementen. Niets afgeleids staat in het bestand: muurvlakken, verstekken, ruimtepolygonen, oppervlaktes en maatlijnen worden bij het tekenen opnieuw berekend.

Hierdoor kan een opening uit de bijbehorende muur worden afgeleid en blijft het bestand compact. Een generator hoeft alleen het netwerk te schrijven.

JSON Schema

Het formaat staat als JSON Schema (draft 2020-12) op /wallgraph.schema.json. Elk veld is beschreven en onbekende velden worden afgekeurd. Zo leidt een onjuiste sleutel tot een validatiefout in plaats van ontbrekende inhoud in een geladen plattegrond.

Een compleet voorbeeld

Eén kamer van 4 × 3 meter met een deur, een draairaam en een stopcontact. Dit is een geldig bestand; plak het in de editor via het menu, of laad het via een link.

{
  "version": 1,
  "unit": "mm",
  "gridMm": 100,
  "areaMode": "net",
  "floors": [
    {
      "id": "f1",
      "name": "Begane grond",
      "nodes": [
        {
          "id": "n1",
          "x": 0,
          "y": 0
        },
        {
          "id": "n2",
          "x": 4000,
          "y": 0
        },
        {
          "id": "n3",
          "x": 4000,
          "y": 3000
        },
        {
          "id": "n4",
          "x": 0,
          "y": 3000
        }
      ],
      "walls": [
        {
          "id": "w1",
          "a": "n1",
          "b": "n2",
          "thickness": 300,
          "bulge": 0,
          "openings": []
        },
        {
          "id": "w2",
          "a": "n2",
          "b": "n3",
          "thickness": 300,
          "bulge": 0,
          "openings": [
            {
              "id": "o1",
              "kind": "window",
              "t": 1500,
              "width": 1200,
              "sashes": [
                {
                  "action": "turn",
                  "hinge": "a"
                }
              ]
            }
          ]
        },
        {
          "id": "w3",
          "a": "n3",
          "b": "n4",
          "thickness": 300,
          "bulge": 0,
          "openings": [
            {
              "id": "o2",
              "kind": "door",
              "t": 2000,
              "width": 900,
              "sashes": [
                {
                  "action": "turn",
                  "hinge": "a"
                }
              ]
            }
          ]
        },
        {
          "id": "w4",
          "a": "n4",
          "b": "n1",
          "thickness": 300,
          "bulge": 0,
          "openings": []
        }
      ],
      "symbols": [
        {
          "id": "s1",
          "type": "socket",
          "x": 800,
          "y": 150,
          "rotation": 3.141592653589793,
          "wallId": "w1"
        }
      ]
    }
  ]
}

Voor AI-agents

De editor biedt twee client-side automatiseringskanalen. Geen van beide vereist een account of API-sleutel.

1. Een plattegrond in een link

Het document kan als JSON in een base64url-string achter #plan= worden geplaatst. De URL-fragmentwaarde wordt niet in een HTTP-verzoek naar de server opgenomen. Iedereen met de link kan de ingesloten plattegrond openen.

https://plattegrond.crocode.nl/#plan=<base64url van het JSON-document>

# en optioneel de taal erbij:
https://plattegrond.crocode.nl/#plan=<…>&lang=en

Het laden vervangt de huidige plattegrond en wordt als ongedaan te maken documentstap geregistreerd.

2. window.wallgraph

De gehoste pagina biedt een automatiseringsinterface op window. De methoden kunnen via page.evaluate worden aangeroepen om een plattegrond te laden, tekenen en uitlezen.

// Load a plan into the running editor. Returns false if it is not a plan.
window.wallgraph.load(doc)

// The current plan, as a deep copy.
const doc = window.wallgraph.save()

// A shareable link to this page carrying the current plan.
window.wallgraph.link()

// Read or switch the interface language ("nl" | "en").
window.wallgraph.language("en")

// Which build is running, and where the schema for the document lives.
window.wallgraph.version
window.wallgraph.schema

3. De code zelf

Wallgraph is vrije software (AGPL-3.0) en heeft nul runtime-afhankelijkheden. npm run build produceert één zelfstandige dist/index.html die zonder netwerk kan worden geopend. Zie de broncode en llms.txt.

Automatiseringsgrenzen: de canvasinhoud is niet beschikbaar als interactieve DOM-elementen. Automatisering gebruikt daarom het documentformaat, plan-links of window.wallgraph. Er is geen server-API; verwerking vindt plaats in de browser.