diff --git a/CLAUDE.md b/CLAUDE.md index 5932c22..fed8536 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -141,7 +141,6 @@ Detaillierte Dokumentation aller Funktionen und Befehle: siehe `Lisp/README.md`. | `connection_edit.dcl` | CONNECTION_INSERT/CONNECTION_EDIT (Connection_Edit.lsp) | | `jam_edit.dcl` | JAM_EDIT (Jam_Edit.lsp) | | `csv_export_konfig.dcl` | CSV_EXPORT_KONFIG (export.lsp) | -| `stueckliste.dcl` | derzeit VERWAIST: gedacht fuer SSG_FAEHNCHEN_STUECKLISTE (`ssg-sl-dialog`), die Funktion existiert in ssg_stueckliste.lsp aber nicht (mehr) | | `geruest.dcl` | VORLAGE fuer GERUEST_SAEULEN/_ROHRABHAENGER/_WANDBEFESTIGUNG (GeruestInsert.lsp, `geruest-dialog`); Platzhalter `//@TITEL@`/`//@VARIANTEN@`/`//@BEFESTIGUNG@`/`//@SONSTIGES@` werden per `ssg-dcl-vorlage-fuellen` gefuellt, nicht direkt ladbar | | `geruest_traeger.dcl` | VORLAGE fuer GERUEST_TRAEGER (GeruestInsert.lsp, `geruest-traeger-dialog`), Platzhalter `//@VARIANTEN@` | | `fahrstrecke.dcl` | VORLAGE fuer OMNI_FAHRSTRECKE (GeruestInsert.lsp, `geruest-traeger-dialog`), gleiche Tile-Keys wie `geruest_traeger.dcl`, Platzhalter `//@VARIANTEN@` | diff --git a/bin/create_tests.bat b/bin/create_tests.bat deleted file mode 100644 index 37b600d..0000000 --- a/bin/create_tests.bat +++ /dev/null @@ -1,42 +0,0 @@ -@echo off -REM ================================================================ -REM create_tests.bat - ILS Testlauf -REM -REM Ablauf: -REM 1. Umgebung setzen -REM 2. Python: ILStest.dxf mit Linien erzeugen -REM 3. BricsCAD: Kreisel einfuegen, exportieren, speichern -REM 4. Python: Ergebnisse gegen Referenzen validieren -REM ================================================================ - -call "%~dp0setenv.bat" - -echo. -echo ================================================================ -echo ILS TEST - Schritt 1: Basis-DXF erzeugen -echo ================================================================ -python "%DXFM_TESTS%\create_ILStest_dxf.py" "%DXFM_TESTS%\ILStest.dxf" -if errorlevel 1 ( - echo FEHLER: DXF-Erzeugung fehlgeschlagen! - pause - exit /b 1 -) - -echo. -echo ================================================================ -echo ILS TEST - Schritt 2: BricsCAD starten und Kreisel erzeugen -echo ================================================================ -echo BricsCAD wird gestartet mit dem Testskript... -echo Nach Abschluss des Tests BricsCAD schliessen. -echo. -REM /b = Skript ausfuehren (NICHT /s - das ist der Support-Ordner-Schalter). -start /wait "" "%BRICSCAD%" /b "%DXFM_TESTS%\ILS_test.scr" - -echo. -echo ================================================================ -echo ILS TEST - Schritt 3: Ergebnisse validieren -echo ================================================================ -python "%DXFM_TESTS%\validate_tests.py" "%DXFM_RESULTS%" "%DXFM_TESTS%\references" - -echo. -pause diff --git a/dcl/stueckliste.dcl b/dcl/stueckliste.dcl deleted file mode 100644 index 4349fab..0000000 --- a/dcl/stueckliste.dcl +++ /dev/null @@ -1,38 +0,0 @@ -// ============================================================ -// stueckliste.dcl - Optionen fuer Positionen + Stueckliste -// Aufruf ueber c:SSG_FAEHNCHEN_STUECKLISTE (Lisp/ssg_stueckliste.lsp, -// ssg-sl-dialog). Vorbelegung aus cfg/stueckliste.json bzw. dem letzten Lauf. -// ============================================================ - -stueckliste : dialog { - label = "Positionen + Stueckliste"; - - : boxed_column { - label = "Layer der Positionen"; - : radio_column { - key = "modus"; - : radio_button { key = "m_suffix"; label = "Bauteil-Layer + Suffix"; } - : radio_button { key = "m_fest"; label = "Fester Layer"; } - } - : edit_box { key = "suffix"; label = "Suffix:"; edit_width = 20; } - : edit_box { key = "fest"; label = "Fester Layer:"; edit_width = 20; } - : text { label = "Regeln je Bauteiltyp: cfg/stueckliste.json"; } - } - - : boxed_column { - label = "Stueckliste"; - : edit_box { key = "tab_layer"; label = "Tabellen-Layer:"; edit_width = 20; } - : edit_box { key = "titel"; label = "Titel:"; edit_width = 30; } - } - - : boxed_column { - label = "Nummerierung / Darstellung"; - : edit_box { key = "startnr"; label = "Erste Positionsnummer:"; edit_width = 10; } - : edit_box { key = "faktor"; label = "Massstabsfaktor:"; edit_width = 10; } - : toggle { key = "alle_pos"; - label = "Alle Positionen in der Fahne (100|101|...), jede Art.-Nr. nummeriert"; } - } - - : errtile { key = "error"; } - ok_cancel; -} diff --git a/doc/json-input-lisp.md b/doc/json-input-lisp.md index beaf872..5fecd8f 100644 --- a/doc/json-input-lisp.md +++ b/doc/json-input-lisp.md @@ -7,8 +7,7 @@ und die Treiber in `tests/test_*.lsp`, die sie lesen. Die zugehoerigen LISP-Routinen mit Signaturen stehen in [lisp_methods.md](lisp_methods.md). Diese Seite ersetzt das fruehere -`tests/testdata/object_data.md` (geloescht in Commit `e147b89`, auf das Code- -Kommentare teilweise noch verweisen). +`tests/testdata/object_data.md` (geloescht in Commit `e147b89`). **Feldnamen als Python-Konstanten**: `lib/testdata_schema.py` buendelt die Feldnamen/festen Werte der Abschnitte 1 (Kreisel), 2 (Einzelbloecke), 3 (VF diff --git a/doc/kommandos.md b/doc/kommandos.md index ddb270c..d4ab2fb 100644 --- a/doc/kommandos.md +++ b/doc/kommandos.md @@ -246,7 +246,6 @@ Alle Skripte rufen zuerst `setenv.bat` (bzw. `setenv.sh`) auf. | `install_py.bat` / `install_py.sh` | `.venv` anlegen und `requirements.txt` installieren (nur wenn noch nicht vorhanden) | | `activate_venv.bat` / `activate_venv.sh` | `.venv` aktivieren, Python-Version und Pakete anzeigen | | `run_tests.bat` | Testausfuehrung, siehe unten | -| `create_tests.bat` | Alter ILS-Testlauf (Basis-DXF, BricsCAD mit `tests/ILS_test.scr`, Validierung) - **veraltet**: `ILS_test.scr` existiert nicht mehr, Ersatz ist `run_tests.bat` bzw. `SSG_RUN_ALL_TESTS` | | `set_einfuegepunkt.bat [schalter]` | Wrapper fuer `lib/set_einfuegepkt.py` (siehe `doc/tools.md`) | | `set_coords.bat [schalter]` | Wrapper fuer `lib/set_koords.py` (siehe `doc/tools.md`) | | `dbg2lsp.bat [argumente]` | Wrapper fuer `lib/dbg2lsp.py` (siehe `doc/dbg2lsp.md`) | diff --git a/lib/dxf_anlage_export.py b/lib/dxf_anlage_export.py index bada8ba..37a90f1 100644 --- a/lib/dxf_anlage_export.py +++ b/lib/dxf_anlage_export.py @@ -13,7 +13,7 @@ Edit-Befehl (Doppelklick) zum Neuaufbau liest. Typischer Ablauf: Scanner- Vorlage nachbauen, in BricsCAD von Hand korrigieren/ergaenzen, Zeichnung als DXF speichern und mit diesem Skript die Testdaten aktualisieren. -Je Wrapper (Felder wie in tests/testdata/object_data.md bzw. mubea.json): +Je Wrapper (Felder wie in doc/json-input-lisp.md bzw. mubea.json): KREISEL_n -> Kreisel ("function": "insert", x/y/z = Einfuegepunkt, abstand = Mittenabstand AN8-SP8 aus der Blockdefinition, diff --git a/lib/dxf_scan_components.py b/lib/dxf_scan_components.py index fc03960..cc26e88 100644 --- a/lib/dxf_scan_components.py +++ b/lib/dxf_scan_components.py @@ -6,7 +6,7 @@ dxf_scan_components.py - Erkennt ILS-/Omniflo-Komponenten in einem FREMDEN DXF. Gedacht fuer Projekt-Zeichnungen, die NICHT von unseren Makros erzeugt wurden (also ohne die Wrapper-Bloecke KREISEL_*, VF_*, GF_*). Das Skript sucht die Bauteile ueber Blocknamen-Muster, rechnet ihre Position in Weltkoordinaten um -und schreibt das Ergebnis im JSON-Schema aus tests/testdata/object_data.md - +und schreibt das Ergebnis im JSON-Schema aus doc/json-input-lisp.md - also so, dass die Anlage per JSON-Treiber mit den Produktionsmakros nachgebaut werden kann (Vorbild: tests/testdata/mubea.json, das bisher von Hand aus einem DXF abgeleitet wurde). @@ -1697,7 +1697,7 @@ def gf_eintraege_aus_linien(linien, as_liste, kreisel=None, sep_liste=None, def baue_eintraege(treffer, defaults, boegen, weichen, bekannte_bloecke=None, linien=None, kreisel_hoehen=None, kreisel_achsen=None, flach=False): - """Erkannte Vorkommen auf die Schemata aus object_data.md abbilden. + """Erkannte Vorkommen auf die Schemata aus json-input-lisp.md abbilden. kreisel_hoehen: Liste (x, y, z) vom Anwender - z gilt fuer den Kreisel, dessen Einfuegepunkt (Eintrag x/y) hoechstens KREISEL_HOEHE_TOL entfernt @@ -2082,7 +2082,7 @@ def main(): parser = argparse.ArgumentParser( description="Erkennt ILS-/Omniflo-Komponenten in einem fremden DXF " "und schreibt sie im JSON-Schema aus " - "tests/testdata/object_data.md.") + "doc/json-input-lisp.md.") parser.add_argument("dxf", help="Quellzeichnung (binaeres oder ASCII-DXF)") parser.add_argument("data_dir", help="Datenverzeichnis mit json/") parser.add_argument("output", help="Ziel-JSON") diff --git a/lib/extract_polylines.py b/lib/extract_polylines.py index 2cc8088..25abe40 100644 --- a/lib/extract_polylines.py +++ b/lib/extract_polylines.py @@ -9,7 +9,7 @@ Hintergrund: data/polylines.dxf enthaelt 5 LWPOLYLINE-Objekte auf Layer "Z-6" - Streckenzuege, die reale Foerderer-Pfade der HundM05-Zeichnung nachbilden (siehe data/polylines.md, von Hand ausgewertet). Dieses Skript macht dieselbe Auswertung reproduzierbar und maschinenlesbar, als Grundlage -fuer einen neuen Testfall (siehe tests/testdata/object_data.md fuer das +fuer einen neuen Testfall (siehe doc/json-input-lisp.md fuer das allgemeine JSON-Schema). Eine Polylinie kann auf einer gekippten Ebene liegen (Gruppencode diff --git a/tests/test_hm_recformat.lsp b/tests/test_hm_recformat.lsp index 6799be8..84a23bf 100644 --- a/tests/test_hm_recformat.lsp +++ b/tests/test_hm_recformat.lsp @@ -26,7 +26,7 @@ ;; also genau die Werte, mit denen die Ketten in BricsCAD gebaut wurden. ;; ;; JSON-Aufbau (FLACH, weil ssg-load-json zeilenweise liest - Details in -;; tests/testdata/object_data.md Abschnitt 8): +;; doc/json-input-lisp.md Abschnitt 6): ;; Kopf-Objekt (traegt "test_id"): test_id, anlagetyp, modus, ;; anzahl_eingaben, block, dxf_handle, startpunkt_mm, ;; rotation_grad, beschreibung, sivas_* , erwartung_hinweis diff --git a/tests/test_hm_recformat.py b/tests/test_hm_recformat.py index ddc91ed..278768c 100644 --- a/tests/test_hm_recformat.py +++ b/tests/test_hm_recformat.py @@ -12,7 +12,7 @@ Zwei Ebenen: Die Testdaten stammen aus lib/vf_journal_export.py (Journale der VF_n-Bloecke aus data/polylines.dxf, XDATA-App SSG_VF_EDIT) und nicht aus Handarbeit - -Schema siehe tests/testdata/object_data.md Abschnitt 8. +Schema siehe doc/json-input-lisp.md Abschnitt 6. """ import json diff --git a/tests/test_hundm05.lsp b/tests/test_hundm05.lsp index bf972ca..a794e32 100644 --- a/tests/test_hundm05.lsp +++ b/tests/test_hundm05.lsp @@ -53,7 +53,7 @@ ;; hundm05.json auch andere Objekte der Anlage stehen - erkennbar an ;; "function". Format wie in tests/testdata/kreisel_tests.json, damit die ;; Felder nicht zweimal beschrieben werden muessen (Schema: siehe -;; tests/testdata/object_data.md Abschnitt 1). +;; doc/json-input-lisp.md Abschnitt 1). ;; vsp-gruppieren ignoriert diese Objekte, sie stoeren die Ketten also nicht. ;; lib/vf_spec_export.py uebernimmt sie beim Neuerzeugen der Spec-Daten ;; unveraendert ans Dateiende (sonst waeren sie beim naechsten Lauf weg). @@ -61,7 +61,7 @@ ;; Unterstuetzt: Kreisel (function "insert", wie test_kreisel.lsp) und ;; beliebige eigenstaendige Bloecke ueber "block" (Separator/Scanner sowie ;; BTMT-Beladung/SC_Entladung, wie in mubea.json - Schema tests/testdata/ -;; object_data.md Abschnitt 5). Unterscheidung ueber das Feld "block": nur +;; json-input-lisp.md Abschnitt 2). Unterscheidung ueber das Feld "block": nur ;; Bloecke haben es, Kreisel-Eintraege nicht. hundm05:bau-sensor ist dabei ;; blockname-agnostisch (reiner _.INSERT), der "kind"-Wert "sensor" bleibt ;; als Sammelbegriff fuer "kein Kreisel" bestehen (siehe dort). @@ -125,7 +125,7 @@ "kreisel-insert-script lieferte nil")))))) ;; Separator/Scanner/BTMT-Beladung/SC_Entladung bauen ("block"-Eintraege, -;; siehe object_data.md Abschnitt 5). ils-insert-sensor/ils-insert-station +;; siehe json-input-lisp.md Abschnitt 2). ils-insert-sensor/ils-insert-station ;; (SSG_LIB_Commands.lsp) sind dafuer NICHT scriptbar (fragen Punkt/Rotation ;; per getpoint/pause in einer Schleife) - wir bauen den _.INSERT darum ;; direkt selbst nach, wie mubea:build-separator-one in tests/test_mubea.lsp diff --git a/tests/test_hundm05.py b/tests/test_hundm05.py index 403808e..b296610 100644 --- a/tests/test_hundm05.py +++ b/tests/test_hundm05.py @@ -180,7 +180,7 @@ class TestSpecBau: # ============================================================ # tests/testdata/hundm05.json enthaelt neben den Ketten auch andere Objekte # der Anlage - Format wie tests/testdata/kreisel_tests.json (Schema in -# tests/testdata/object_data.md Abschnitt 1). Gebaut werden sie von +# doc/json-input-lisp.md Abschnitt 1). Gebaut werden sie von # hundm05:bau-zusatzobjekte in tests/test_hundm05.lsp. class TestZusatzobjekte: diff --git a/tests/test_mubea.lsp b/tests/test_mubea.lsp index 982a6b6..9492e1f 100644 --- a/tests/test_mubea.lsp +++ b/tests/test_mubea.lsp @@ -140,7 +140,7 @@ ;; --- Vario (VF_*): L_GF/L_VF fuer gegebenes deltaL+deltaH+winkel loesen, dann bauen --- ;; deltaL ist (wie bei der Gefaellestrecke) die horizontale PROJIZIERTE ;; Gesamtlaenge des VF (Vorlauf L_GF1 + Foerderer L_VF + Nachlauf L_GF2 + -;; Boegen/AS-ES-Elemente), analog foerderer_tests.json/object_data.md 3.1 - +;; Boegen/AS-ES-Elemente), analog foerderer_tests.json/json-input-lisp.md 3 - ;; KEIN abgeleiteter Wert. "winkel" erzwingt einen bestimmten Bogenwinkel aus ;; der Kandidatenliste von berechne-alle-winkel (wie foerderer:winkel- ;; erzwingen in test_foerderer.lsp), statt den automatisch kleinsten @@ -295,7 +295,7 @@ ;; --- Eine einzelne Gefaellestrecke bauen (Modus 1) --- ;; Aufbau AUSSCHLIESSLICH aus Anfangspunkt (start-mm) und horizontaler ;; Gesamtlaenge deltaL - KEIN Endpunkt (wie Produktion/gefaellestrecke.dcl -;; Modus 1, siehe object_data.md 2.1). L_stau wird aus deltaL abgeleitet +;; Modus 1, siehe json-input-lisp.md 4.1). L_stau wird aus deltaL abgeleitet ;; (identische Formel wie test_gefaellestrecke.lsp): ;; L_stau = (deltaL - aus-dx - ein-dx - sep_x) / cos(v) ;; sep_x = 300 * cos(v), v = Element-Winkel (winkel_grad, Default 3 Grad)