Files
dxfmakros/doc/plan/lager_rfq.md
T
Simon Hensch 4a5a3da88a [ADD] Lager: Darstellung Gitterrost/Gitterkorb unter Regalreihen, Farben aus lager.json, LG_DARSTELLUNG
[FIX] Lager: manuelle Gaenge/Randgaenge nicht mehr ueberschreiben, Bereich-Edit uebertraegt statt neu zu berechnen
2026-11-04 09:14:13 +01:00

21 KiB

Lagerplanung in BricsCAD -> Lager-JSON (GOH-Buehnenlager)

Schema und Schnittstelle der Lagerplanung. Code: Lisp/LagerInsert.lsp, Lisp/LagerPruefung.lsp. Daten: data/json/lager.json, cfg/stahlbau/regelwerk/*.json, cfg/layer.cfg Abschnitt [lager], Dialoge dcl/lager.dcl.

Ziel und Datenfluss

Das RFQ-Programm (eigenes Repo) erzeugt das Ausschreibungsdokument. Die Makros liefern ihm die technischen Daten des Lagers aus der Zeichnung, als EINE JSON-Datei. Mapping auf das RFQ-Schema, Abgleich mit Handwerten und Darstellung sind Sache des RFQ-Projekts.

BricsCAD (LISP)                                         RFQ-Repo
LG_GESCHOSS / LG_BEREICH / LG_REIHE / LG_GANG
        --LAGER_EXPORT-->  DXFM_RESULTS/<dwg>_lager.json  -->  Dokument
        ^ Regelprofil cfg/stahlbau/regelwerk/<Land>.json (LagerPruefung.lsp, noch nicht im Export)

Grundsatz: jede fachliche Regel und jeder Kennwert wird genau einmal implementiert, in LISP (LagerInsert.lsp Abschnitt EXPORT, Regeln in LagerPruefung.lsp). Es gibt keinen Python-Schritt mehr (die fruehere Overlay-YAML lib/lager_yaml_export.py und LAGER_HAND_YAML sind entfernt).

JSON-Schnittstelle (format = ssg-lager, version = 2)

Einheiten mm, mm2, Grad; Koordinaten WCS, Nord = +Y. Werte stehen selbstbeschreibend drin ("belag_art": "spanplatte", keine Index-Codes). Nicht-ASCII-Zeichen in Texten werden als \uXXXX geschrieben.

Regel fuer fehlende Werte: null heisst ausschliesslich "fehlt, muesste eingegeben werden" (offener Punkt, z.B. kennwerte.lichte_hoehe_mm des obersten Geschosses ohne Vorgabe). Was nicht zutrifft, wird WEGGELASSEN: Belag, Gitterrost, Gitterkorb und ohne_absturzsicherung_mm2 auf Hallenboden, gitterkorb an Reihen ohne Korb, bereich/bereich_handle/ausrichtung an frei gesetzten Reihen und Gaengen, lichte_hoehe_vorgabe_mm ohne Vorgabe.

{
  "format": "ssg-lager", "version": 2, "zeichnung", "erzeugt", "land",
  "einheiten": {"laenge": "mm", "flaeche": "mm2", "winkel": "grad"},
  "koordinaten": "WCS, Nord = +Y",
  "lager":     { geschosse, bereiche, grundriss_max{laenge_mm, breite_mm},
                 summe_alle_geschosse{reihen, regallaenge_mm, regalgrundflaeche_mm2,
                   regalrohrlaenge_mm, haengeebenen[], gaenge{}, belagsflaeche_mm2,
                   gitterrostflaeche_mm2, gitterkorb{}, ohne_absturzsicherung_mm2} },
  "geschosse": [ { nr, bezeichnung, id, handle, layer, hoehe_belag_mm, konstr_hoehe_mm,
                   lichte_hoehe_vorgabe_mm (nur wenn eingegeben), belag_art, personen, brandgefaehrdung,
                   kontur{handle, z, punkte[[x,y]...], flaeche_mm2, umfang_mm, bbox},
                   kennwerte{...}, herkunft{<kennwert>: {formel, quelle}} } ],
  "bereiche":  [ { nr, id, handle, layer, geschoss, gangbreite_mm, regaltiefe_mm,
                   reihen_je_gang, trolleyschienen_je_gang, quergang_abstand_mm, quergang_breite_mm,
                   richtung_grad, haengeebenen[], belag, unter_reihe, gitterkorb_hoehe_mm,
                   randgang_mm{n,o,s,w}, restbreite_mm, anzahl_reihen, anzahl_gaenge, kontur{} } ],
  "reihen":    [ { id, handle, layer, geschoss, bereich, bereich_handle, quelle, laenge_mm,
                   tiefe_mm, haengeebenen[{schienenhoehe_mm, warenlaenge_mm, freiraum_unter_mm}],
                   start, ende, mitte, winkel_grad, ecken[4], flaeche_mm2, unter_reihe,
                   gitterkorb{hoehe_mm, bodenflaeche_mm2, offen_laengs_mm, offen_stirn_mm,
                              seitenflaeche_mm2} (nur bei Gitterkorb) } ],
  "gaenge":    [ { id, handle, layer, geschoss, bereich, bereich_handle, quelle, laenge_mm,
                   breite_mm, art, belag, start, ende, mitte, winkel_grad, ecken[4], flaeche_mm2,
                   ausrichtung ("laengs"/"quer" zur Reihenrichtung des Bereichs) } ],
  "warnungen": [ ... ]
}

geschosse ist nach Belagshoehe sortiert (von unten nach oben). start/ende/ mitte sind 3D (Z der Einfuegung), ecken sind die vier Ecken des Grundrisses (2D), Kante 1-2 und 3-4 laengs, 2-3 und 4-1 an den Stirnseiten. kennwerte je Geschoss: lichte_hoehe_mm (wirksamer Wert: Vorgabe oder berechnet), buehne (true/false), huelle (Grundriss dieses Geschosses), bereiche, reihen, regallaenge_mm, regalgrundflaeche_mm2, regalrohrlaenge_mm, haengeebenen (je Schienenhoehe/Warenlaenge: reihen, regallaenge_mm), gaenge (je Art gang/quergang/randgang: anzahl, laenge_mm, flaeche_mm2, anzahl_quer, nach_breite[]), belagsflaeche_mm2, gitterrostflaeche_mm2, gitterkorb (Summen), ohne_absturzsicherung_mm2. Formeln: Abschnitt "Kennwerte <- Zeichnung". Alles unter lager.summe_alle_geschosse ist ueber ALLE Geschosse summiert. Trolley-Schienen werden noch nicht berechnet (trolleyschienen_je_gang ist nur die Eingabe am Bereich).

warnungen enthaelt neben fehlenden Daten Plausibilitaetshinweise je Geschoss (lg-plausibilitaet; Grenzwerte aus dem Regelprofil, lg-plausibilitaet-grenzen): Buehne ohne Konstruktionshoehe, Reihen ohne Absturzsicherung auf einer Buehne, lichte Hoehe unter lichte_hoehe.verkehrsweg_min, Gaenge schmaler als gang.breite_nebengang_min, art gang quer zur Reihenrichtung, Gang direkt neben einem Randgang, kein Freiraum unter der Ware, oberste Schiene nicht unter der lichten Hoehe. Sie aendern keine Werte.

Erzeugt von LAGER_EXPORT (Menue Lager -> Export Lager-JSON), Beispiel: tests/output/lager_tests_lager.json nach TEST_LAGER.

Bloecke und Attribute

Alle Bloecke tragen ID, GESCHOSS, LAYER. Masse in mm, Winkel in Grad, Werte selbstbeschreibend (keine Index-Codes). Verknuepfungen als XDATA (App SSG_LG, Paare 1000 schluessel + 1005 handle/1000 text).

Block Geometrie Attribute XDATA
LG_GESCHOSS Kopfsymbol unten links an der Belagskontur NR, BEZEICHNUNG, HOEHE_BELAG_mm, KONSTR_HOEHE_mm, LICHTE_HOEHE_mm (leer = berechnet), BELAG_ART (spanplatte/gitterrost/hallenboden), PERSONEN, BRANDGEFAEHRDUNG kontur -> Polylinie; Kontur: besitzer, rolle
LG_BEREICH Symbol mit Pfeil in Reihenrichtung NR, GANGBREITE_mm, REGALTIEFE_mm, REIHEN_JE_GANG (1/2), SCHIENEN_JE_GANG (Trolley-Schienen, noch nicht ausgewertet), QUERGANG_ABSTAND_mm (0 = keine), QUERGANG_BREITE_mm, RICHTUNG, HAENGEEBENEN, BELAG, RANDGANG_N_mm/_O_/_S_/_W_ (0 = keiner), UNTER_REIHE (gitterrost/gitterkorb/keine, Absturzsicherung unter den Reihen, nur auf Buehnen), GITTERKORB_HOEHE_mm, RESTBREITE_mm (Ergebnis) kontur -> Polylinie
LG_REIHE_<L>_<T> Rechteck L x T um die Schienenlinie, Einfuegepunkt = Reihenanfang LAENGE, TIEFE_mm, HAENGEEBENEN (je Ebene ein Regalrohr), BEREICH, QUELLE (auto/auto_geaendert/manuell) bereich -> LG_BEREICH (nur Auto-Fuellung)
LG_GANG_<L>_<B>_<BELAG> Rechteck L x B um die Gangachse + Schraffur je Belag (lager.json belag_schraffur, Layer 0/VONBLOCK; hallenboden ohne) LAENGE, BREITE_mm, ART (gang/quergang/randgang), BELAG, BEREICH, QUELLE (auto/auto_geaendert/manuell) bereich (Auto-Fuellung und manuelle Gaenge im Bereich)

HAENGEEBENEN = Schienenhoehe/Warenlaenge;... ueber Belag, oberste zuerst, z.B. 2300/1200;1100/1100. Die Definitionen LG_REIHE_*/LG_GANG_* werden je Geometrie wiederverwendet; die Werte stehen in den Attributen der Referenz.

Geschosse und Layer

Layer je Geschoss: Basis aus cfg/layer.cfg [lager] + _G<nr> (LG_Reihe_G2). LG_GESCHOSS_AKTIV friert die Layer der uebrigen Geschosse, weil die 2D-Grundrisse uebereinander liegen. Neue Objekte bekommen das aktive Geschoss; ohne aktives Geschoss entscheidet die Kontur, in der sie liegen. In 2D (alle Konturen auf Z = 0) ist eine Lage in mehreren Konturen nicht eindeutig -> Rueckfrage bzw. Export-Warnung; in 3D entscheidet Z.

Jede Kontur gehoert genau einem Block. Wird eine schon vergebene Kontur gewaehlt (z.B. dieselbe Halle fuer mehrere Geschosse), wird sie kopiert.

Der parametrische BricsCAD-Block goh_rack (frueher als Bestand mitgezaehlt) wird nicht mehr unterstuetzt: Regale gibt es nur noch als LG_REIHE_*.

Geschoss kopieren (LG_GESCHOSS_KOPIEREN)

Obergeschosse gleichen meist dem Geschoss darunter. Dialog lg_geschoss_kopie:

  • Quelle: Vorgabe ist das oberste Geschoss. Damit wird ein weiteres Geschoss nachtraeglich angehaengt, z.B. G3 -> G4.
  • Anzahl.
  • Geschosshoehe je Kopie: Vorgabe ist der Abstand zum Geschoss darunter, sonst lichte Hoehe + Konstruktion.
  • Belag.
  • Versatz X/Y je Kopie: 0 = deckungsgleich. In einer 3D-Zeichnung (Konturen auf Belagshoehe) wandert die Kopie zusaetzlich in Z.

Ein BricsCAD-KOPIEREN taugt nicht. Die XDATA-Verweise kontur/besitzer/bereich zeigten dann weiter auf die Originale, und GESCHOSS, Layer und IDs blieben die alten. Stattdessen entsteht jedes Objekt ueber die normalen Einfuegefunktionen neu:

  • Geschoss und Bereiche mit kopierter Kontur; die Bereiche ohne Fuellung (lg-bereich-block-anlegen).
  • Reihen und Gaenge 1:1 aus der Quelle (lg-linie-einfuegen). Es wird nicht neu gefuellt, damit Handaenderungen (auto_geaendert, manuelle Reihen/Gaenge) erhalten bleiben.
  • Ist im Dialog ein Belag gewaehlt, bekommen ALLE Gaenge und Bereiche des neuen Geschosses ihn, inklusive Schraffur - auch von Hand gesetzte Rand- und Sondergaenge (lg-kopie-belag).

Auto-Fuellung (lg-fuellung-berechnen)

Die Kontur wird in ein lokales System gedreht (Reihen entlang +X, RICHTUNG; Vorgabe = Richtung der laengsten Konturkante). Quer dazu wird ab Unterkante ein Modul nach dem anderen gelegt, nur volle Module:

  • 2 Reihen je Gang: Reihe | Gang | Reihe, benachbarte Module Ruecken an Ruecken
  • 1 Reihe je Gang: Reihe | Gang

Ein Streifen ist dort belegbar, wo Unter-, Mittel- und Oberkante in der Kontur liegen (konkave Konturen werden korrekt beschnitten). Quergaenge: Luecken der Breite QUERGANG_BREITE_mm nach je QUERGANG_ABSTAND_mm, ueber alle Reihen ausgerichtet; keine Luecke am Reihenende, wenn dahinter kein Mindeststueck mehr passt. Hauptgaenge laufen durch. Der Rest quer zu den Reihen steht in RESTBREITE_mm.

Bereich bearbeiten: aktualisieren statt ueberschreiben. Was eingezeichnet ist, bleibt stehen. Geaenderte Werte ohne Geometrie werden auf ALLE vorhandenen Kinder uebertragen (lg-bereich-attribute-uebertragen): BELAG -> jeder Gang wird mit dem neuen Belag an derselben Stelle neu aufgebaut, HAENGEEBENEN -> Attribut jeder Reihe. Nur wenn sich ein Geometrie-Wert aendert (lg-bereich-geometrie-geaendert-p: Gangbreite, Regaltiefe, Reihen je Gang, Quergaenge, Richtung, Randgang-Breiten), fragt der Befehl "Bereich neu berechnen?" (Vorgabe Ja; ohne Aenderung Vorgabe Nein - so laesst sich ein Bereich auch bewusst neu berechnen).

Die Neuberechnung (lg-bereich-fuellen) ersetzt nur die automatisch erzeugten Kinder (QUELLE=auto). Sperre sind ALLE von Hand eingefuegten (manuell) und geaenderten (auto_geaendert) Reihen und Gaenge des Geschosses (lg-von-hand-auf-geschoss) - auch solche eines anderen Bereichs oder nur teilweise in der Kontur. Sie werden aus Reihen, Haupt-, Quer- UND Randgaengen ausgeschnitten (lg-randgang-stuecke): ein manueller Gang ersetzt den Randgang dort, wo er liegt, statt von ihm ueberlagert zu werden. Von Hand geloeschte automatische Objekte entstehen bei der Neuberechnung neu.

Randgaenge (RANDGANG_N/O/S/W_mm, Nord = +Y Welt): jede Konturkante bekommt den Randgang ihrer Himmelsrichtung (Aussennormale, auf N/O/S/W eingerastet, 45 Grad zaehlt zu N/S) als Rechteck von der Kante nach innen - auch bei L-Form entlang der echten Kanten (dort bekommt z.B. auch die Stufenkante den Nord-Randgang; Ausnahmen per LG_GANG). Ecken: N/S-Randgaenge besitzen sie; an konvexen Ecken wird der O/W-Randgang gekuerzt, an einspringenden Ecken der N/S-Randgang verlaengert (sonst bliebe ein freies Quadrat). Randgaenge an der Unter-/Oberkante der Huelle verschieben den Modulstapel, an der linken/rechten den Bezug der Quergaenge; Stufenkanten mitten im Stapel kappen nur die betroffenen Reihen. Nicht rechtwinklige Ecken sind eine Naeherung.

Sperrflaechen: Randgaenge sowie von Hand eingefuegte und geaenderte Reihen und Gaenge werden aus Reihen, Haupt- und Quergaengen ausgeschnitten - exakt ueber den Band-Clip des Streifens (ssg-poly-band-x), Reststuecke unter der Mindestlaenge fallen weg. Eine von Hand eingefuegte Reihe (LG_REIHE) oder ein Gang (LG_GANG), dessen Mitte in einem Bereich liegt, wird mit ihm verknuepft.

Von Hand Gesetztes loest KEINE Neuberechnung aus. Beim Einfuegen und Bearbeiten (LG_REIHE, LG_GANG, LG_EDIT einer Reihe/eines Gangs) schneidet das Objekt nur seine Flaeche aus den ueberdeckten Objekten heraus (lg-sperre-anwenden, Kern lg-linie-zuschnitt); die Reste behalten ihre Attribute. Geschnitten wird nur, was rangniedriger ist (lg-quelle-rang: auto < auto_geaendert < manuell) - ein manuelles Objekt schneidet aus automatischen und geaenderten, ein geaendertes nur aus automatischen, manuelle untereinander nie. Alles andere bleibt, wie der Anwender es hinterlassen hat: von Hand geloeschte Objekte kommen nicht zurueck. Wird ein manueller Gang verkleinert oder geloescht, bleibt die Luecke bis zur naechsten ausdruecklichen Neuberechnung (Doppelklick auf den Bereich, OK).

LG_GANG zeichnet einen Gang entweder als Linie (Gangmitte, Breite aus dem Dialog) oder ueber die Option Rechteck als Flaeche. Beim Rechteck ergeben sich Lage und Breite aus der Flaeche, man muss sie also vorher nicht kennen: die laengere Seite ist die Gangrichtung, die kuerzere die Breite (auf ganze mm). Die Rundung verschiebt nur die Laengsseite gegenueber der ersten gezeichneten Ecke - die Kante, an der man ansetzt (z.B. buendig an einer Regalreihe), bleibt exakt liegen, sonst wuerde der Gang die Reihe um Bruchteile eines mm ueberdecken und sie beim Zuschnitt entfernen; ebenso beginnt der Gang an der Querseite der ersten Ecke (lg-gang-aus-ecken). Gezeichnet wird mit dem echten BricsCAD-Befehl RECHTECK (lg-rechteck-zeichnen) - mit allen seinen Optionen (Abmessungen, Flaeche, Drehung, Objektfang); ein gedrehtes Rechteck ergibt einen schraeg liegenden Gang. Die gezeichnete Polylinie wird ausgewertet (lg-rechteck-ecken-aus-poly) und wieder geloescht; mit Fase oder Rundung gezeichnete Flaechen werden abgelehnt. Nach jedem Rechteck startet RECHTECK erneut, Enter ohne Rechteck beendet. Im Block entsteht derselbe LG_GANG_* wie bei der Linie.

Schraffur: steckt in der Gang-Blockdefinition (Belag im Blocknamen), Muster aus lager.json belag_schraffur - spanplatte ANSI31, gitterrost GRID, hallenboden keine. Unbekannter Belag/Muster -> Meldung, Gang ohne Schraffur. Reihen bleiben unschraffiert. Altbestand: fehlen einer vorhandenen Blockdefinition ATTDEFs des Schemas, definiert lg-blockdef sie neu und uebertraegt sie per _.ATTSYNC auf die Referenzen.

Darstellung in der Zeichnung

  • Absturzsicherung unter den Reihen (nur Buehnen): je Reihe eine Schraffur nach UNTER_REIHE - gitterrost und gitterkorb mit eigenem Muster und eigener Farbe (lager.json darstellung.unter_reihe). Der Gitterkorb bekommt zusaetzlich seine seitliche Abgrenzung als dicke Linie (rand.farbe, rand.breite_mm), und zwar NUR an den offenen Kanten: wo eine andere Reihe anliegt (z.B. Ruecken an Ruecken), wird keine Abgrenzung gezeichnet (lg-sicherung-geometrie, gleiche Regel wie offen_laengs_mm).
  • Die Objekte liegen lose auf LG_Sicherung_G<n> (XDATA rolle=sicherung, wird mit dem Geschoss gefroren) und werden bei jedem Neuaufbau des Geschosses komplett ersetzt - automatisch nach Bereich fuellen/bearbeiten (Doppelklick), Reihe/Gang bearbeiten, LG_REIHE/LG_GANG, Geschoss bearbeiten/kopieren.
  • Farben: darstellung.reihe.farbe (Regalreihen), belag_schraffur.<belag>.farbe (Gangschraffur); ACI-Nummer oder "r,g,b", null = VONLAYER/VONBLOCK.
  • LG_DARSTELLUNG (Menue Lager -> Darstellung aktualisieren): liest lager.json neu, passt alle vorhandenen LG_REIHE_*/LG_GANG_*-Definitionen an und zeichnet die Sicherung aller Geschosse neu - noetig nach Loeschen von Hand oder nach Aenderungen in lager.json.

Kennwerte <- Zeichnung

Reine Kerne in LagerInsert.lsp (getestet in tu-tests-lager). Jeder Geschoss-Kennwert steht mit Formel und Quelle unter herkunft.

Kennwert Quelle / Formel
lichte_hoehe_mm LICHTE_HOEHE_mm, sonst Belag darueber - Konstruktionshoehe darueber - eigener Belag; oberstes Geschoss nur mit Vorgabe (sonst null + Warnung)
buehne BELAG_ART gesetzt und nicht hallenboden. Ohne Buehne: kein Belag, kein Gitterrost, kein Gitterkorb
regallaenge_mm, regalgrundflaeche_mm2, regalrohrlaenge_mm Summe LAENGE, LAENGE x TIEFE_mm, LAENGE x Anzahl Haengeebenen der Reihen des Geschosses
ohne_absturzsicherung_mm2 Buehne: Summe LAENGE x TIEFE_mm der Reihen mit UNTER_REIHE = keine
haengeebenen[].freiraum_unter_mm (Reihe/Bereich) Schienenhoehe - Warenlaenge - naechsttiefere Schienenhoehe (unterste: Belag); <= 0 = Ware stoesst an (lg-ebenen-freiraum)
gaenge[].ausrichtung Gangwinkel gegen RICHTUNG des Bereichs, Abweichung < 45 Grad = laengs (lg-ausrichtung)
haengeebenen[] je (Schienenhoehe, Warenlaenge): Anzahl Reihen und Summe LAENGE, nach Schienenhoehe absteigend (lg-haengeebenen-summen)
gaenge je ART (gang/quergang/randgang, auch manuelle): Anzahl, Summe LAENGE, Summe LAENGE x BREITE_mm (lg-gaenge-je-art)
belagsflaeche_mm2 Summe LAENGE x BREITE_mm der Gaenge mit Belag != gitterrost; ohne Gangflaechen: Konturflaeche - Reihengrundflaeche
gitterrostflaeche_mm2 Gaenge mit Belag gitterrost + Grundflaeche der Reihen mit UNTER_REIHE = gitterrost
gitterkorb (je Reihe und Summe) Reihen mit UNTER_REIHE = gitterkorb: Boden = LAENGE x TIEFE_mm; Seiten = offene Kantenlaenge x GITTERKORB_HOEHE_mm, getrennt nach Laengs- und Stirnseiten. Offen ist eine Kante, soweit keine Kante einer ANDEREN Reihe desselben Geschosses kollinear darauf liegt (Abstand < 1 mm, z.B. Ruecken an Ruecken; lg-reihen-offene-kanten)
kennwerte.huelle achsparallele Huelle der Geschosskontur, laenge_mm = laengere Seite
lager.grundriss_max groesste Laenge/Breite der Geschoss-Huellen (die Geschosse koennen im Plan nebeneinander liegen - eine gemeinsame Huelle waere kein Gebaeudemass)
lager.summe_alle_geschosse Summen der Geschoss-Kennwerte; haengeebenen/gaenge ueber alle zugeordneten Reihen/Gaenge

UNTER_REIHE kommt aus dem verknuepften Bereich; Reihen ohne Bereich (und Bereiche ohne Attribut, Altbestand) nehmen die Vorgabe lager.json bereich.unter_reihe. GITTERKORB_HOEHE_mm ist vorerst ein Attribut am Bereich und soll spaeter aus den Attributen berechnet werden.

Spaetere Phasen: Gelaender/Bordbrett, Oeffnungen, Treppen, Leitern, Zugaenge (Phase 2), Schnitte (Phase 3), Fluchtwege (Phase 4/5), Regelwerk-Werte je Geschoss im Export.

Regelprofil

cfg/stahlbau/regelwerk/<LAND>.json, aufgeloest von LagerPruefung.lsp:

{"id": "treppe.schrittmass_min", "art": "min", "einheit": "mm",
 "werte": [{"wert": 590, "quelle": "ASR A1.8", "abschnitt": "4.5", "fassung": "...", "verifiziert": false},
           {"wert": 600, "quelle": "EN ISO 14122-3", "abschnitt": "5", "fassung": "...", "verifiziert": false}]}
  • art: min (strengster = groesster), max (strengster = kleinster), wert.
  • bedingung: <schluessel> <op> <wert> (=, <=, >=, <, >) gegen einen Kontext (z.B. brandgefaehrdung, absturzhoehe, personen). Fehlt der Schluessel im Kontext, wird der Eintrag konservativ einbezogen.
  • tabelle + tabellen_schluessel: Wert der ersten Zeile [bis, wert], die den Kontextwert abdeckt (Fluchtwegbreite nach Personen).
  • erbt_von: Laenderprofil erbt alle Regeln, eigene Records mit gleicher id ersetzen sie. SK.json/PL.json sind Gerueste (gepflegt: false -> Warnung).
  • LG_REGELN zeigt alle Regeln mit Ergebnis und Protokoll (welche Quelle gewann).

Alle Startwerte stehen auf verifiziert: false. Wert, Abschnitt und Fassung muessen gegen die Originaltexte (ASR A1.8, A2.1, A2.3, DGUV Regel 108-007, EN ISO 14122-3/-4) geprueft werden; besonders unsicher sind die DGUV-Gangbreiten und die Abschnittsnummern.

Stand

Phase Inhalt Stand
0 Regelprofil + Resolver, Schema (dieses Dokument), Layer, Sprach-Keys, Menue, Laden erledigt, Regelwerte unverifiziert
1 Geschoss, aktives Geschoss, Bereich + Auto-Fuellung, Einzelreihe, Edit, LAGER_EXPORT als Lager-JSON mit Kennwerten und Herkunft, Gitterkorb/Gitterrost unter den Reihen erledigt (2D)
1a Regelwerk-Werte (aufgeloest je Geschoss) im Lager-JSON; Gitterkorb-Hoehe aus den Attributen berechnen offen
2 Gelaender/Bordbrett aus Kontur, Kanten-Ausnahmen, Oeffnungen, Treppe (Auslegung nach Profil), Leiter offen
3 Schema-Schnitt, 3D-Varianten offen
4 LAGER_PRUEFEN, Fluchtweg (gezeichnet), Verstoss-Marker, Nachweis mit Regelpruefung offen
5 automatische Fluchtweganalyse offen
6 SK/PL-Profile, Kapazitaet, Kopplung Geruest, Stuecklisten-Klassen offen

Tests

  • tests/test_unit.lsp: tu-tests-poly (Polygon-Helfer in ssg_core.lsp), tu-tests-lager (Fuellung, Geschosszuordnung, JSON-Schreiber, Kennwerte, offene Kanten/Gitterkorb, Feldpruefung, Regelprofil).
  • tests/test_lager.lsp (TEST_LAGER, alltests.json): Ablauf in einer Zeichnung inkl. Neuberechnung, Reihen-Edit, Export (Schema, Geometrie, Kennwerte, Gitterkorb), Geschoss-Kopie und LG_REGALE.