chore: verwaiste stueckliste.dcl und create_tests.bat entfernt, object_data-Verweise umgestellt

- dcl/stueckliste.dcl: wurde von keinem Code geladen (ssg-sl-dialog existiert nicht)
- bin/create_tests.bat: rief das nicht mehr vorhandene tests/ILS_test.scr auf;
  Ersatz ist run_tests.bat bzw. SSG_RUN_ALL_TESTS
- Kommentare in lib/ und tests/ verweisen statt auf das geloeschte
  tests/testdata/object_data.md auf doc/json-input-lisp.md, mit den dort
  gueltigen Abschnittsnummern (alt 5 -> 2, 3.1 -> 3, 2.1 -> 4.1, 8 -> 6)
- CLAUDE.md / doc/kommandos.md / doc/json-input-lisp.md nachgezogen

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-26 09:22:27 +01:00
parent 640a988fa3
commit b4f9c43ae3
13 changed files with 14 additions and 97 deletions
-1
View File
@@ -141,7 +141,6 @@ Detaillierte Dokumentation aller Funktionen und Befehle: siehe `Lisp/README.md`.
| `connection_edit.dcl` | CONNECTION_INSERT/CONNECTION_EDIT (Connection_Edit.lsp) | | `connection_edit.dcl` | CONNECTION_INSERT/CONNECTION_EDIT (Connection_Edit.lsp) |
| `jam_edit.dcl` | JAM_EDIT (Jam_Edit.lsp) | | `jam_edit.dcl` | JAM_EDIT (Jam_Edit.lsp) |
| `csv_export_konfig.dcl` | CSV_EXPORT_KONFIG (export.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.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@` | | `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@` | | `fahrstrecke.dcl` | VORLAGE fuer OMNI_FAHRSTRECKE (GeruestInsert.lsp, `geruest-traeger-dialog`), gleiche Tile-Keys wie `geruest_traeger.dcl`, Platzhalter `//@VARIANTEN@` |
-42
View File
@@ -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
-38
View File
@@ -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;
}
+1 -2
View File
@@ -7,8 +7,7 @@ und die Treiber in `tests/test_*.lsp`, die sie lesen.
Die zugehoerigen LISP-Routinen mit Signaturen stehen in Die zugehoerigen LISP-Routinen mit Signaturen stehen in
[lisp_methods.md](lisp_methods.md). Diese Seite ersetzt das fruehere [lisp_methods.md](lisp_methods.md). Diese Seite ersetzt das fruehere
`tests/testdata/object_data.md` (geloescht in Commit `e147b89`, auf das Code- `tests/testdata/object_data.md` (geloescht in Commit `e147b89`).
Kommentare teilweise noch verweisen).
**Feldnamen als Python-Konstanten**: `lib/testdata_schema.py` buendelt die **Feldnamen als Python-Konstanten**: `lib/testdata_schema.py` buendelt die
Feldnamen/festen Werte der Abschnitte 1 (Kreisel), 2 (Einzelbloecke), 3 (VF Feldnamen/festen Werte der Abschnitte 1 (Kreisel), 2 (Einzelbloecke), 3 (VF
-1
View File
@@ -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) | | `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 | | `activate_venv.bat` / `activate_venv.sh` | `.venv` aktivieren, Python-Version und Pakete anzeigen |
| `run_tests.bat` | Testausfuehrung, siehe unten | | `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_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`) | | `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`) | | `dbg2lsp.bat [argumente]` | Wrapper fuer `lib/dbg2lsp.py` (siehe `doc/dbg2lsp.md`) |
+1 -1
View File
@@ -13,7 +13,7 @@ Edit-Befehl (Doppelklick) zum Neuaufbau liest. Typischer Ablauf: Scanner-
Vorlage nachbauen, in BricsCAD von Hand korrigieren/ergaenzen, Zeichnung als Vorlage nachbauen, in BricsCAD von Hand korrigieren/ergaenzen, Zeichnung als
DXF speichern und mit diesem Skript die Testdaten aktualisieren. 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, KREISEL_n -> Kreisel ("function": "insert", x/y/z = Einfuegepunkt,
abstand = Mittenabstand AN8-SP8 aus der Blockdefinition, abstand = Mittenabstand AN8-SP8 aus der Blockdefinition,
+3 -3
View File
@@ -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 Gedacht fuer Projekt-Zeichnungen, die NICHT von unseren Makros erzeugt wurden
(also ohne die Wrapper-Bloecke KREISEL_*, VF_*, GF_*). Das Skript sucht die (also ohne die Wrapper-Bloecke KREISEL_*, VF_*, GF_*). Das Skript sucht die
Bauteile ueber Blocknamen-Muster, rechnet ihre Position in Weltkoordinaten um 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 also so, dass die Anlage per JSON-Treiber mit den Produktionsmakros
nachgebaut werden kann (Vorbild: tests/testdata/mubea.json, das bisher von nachgebaut werden kann (Vorbild: tests/testdata/mubea.json, das bisher von
Hand aus einem DXF abgeleitet wurde). 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, def baue_eintraege(treffer, defaults, boegen, weichen,
bekannte_bloecke=None, linien=None, kreisel_hoehen=None, bekannte_bloecke=None, linien=None, kreisel_hoehen=None,
kreisel_achsen=None, flach=False): 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, kreisel_hoehen: Liste (x, y, z) vom Anwender - z gilt fuer den Kreisel,
dessen Einfuegepunkt (Eintrag x/y) hoechstens KREISEL_HOEHE_TOL entfernt dessen Einfuegepunkt (Eintrag x/y) hoechstens KREISEL_HOEHE_TOL entfernt
@@ -2082,7 +2082,7 @@ def main():
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
description="Erkennt ILS-/Omniflo-Komponenten in einem fremden DXF " description="Erkennt ILS-/Omniflo-Komponenten in einem fremden DXF "
"und schreibt sie im JSON-Schema aus " "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("dxf", help="Quellzeichnung (binaeres oder ASCII-DXF)")
parser.add_argument("data_dir", help="Datenverzeichnis mit json/") parser.add_argument("data_dir", help="Datenverzeichnis mit json/")
parser.add_argument("output", help="Ziel-JSON") parser.add_argument("output", help="Ziel-JSON")
+1 -1
View File
@@ -9,7 +9,7 @@ Hintergrund: data/polylines.dxf enthaelt 5 LWPOLYLINE-Objekte auf Layer
"Z-6" - Streckenzuege, die reale Foerderer-Pfade der HundM05-Zeichnung "Z-6" - Streckenzuege, die reale Foerderer-Pfade der HundM05-Zeichnung
nachbilden (siehe data/polylines.md, von Hand ausgewertet). Dieses Skript nachbilden (siehe data/polylines.md, von Hand ausgewertet). Dieses Skript
macht dieselbe Auswertung reproduzierbar und maschinenlesbar, als Grundlage 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). allgemeine JSON-Schema).
Eine Polylinie kann auf einer gekippten Ebene liegen (Gruppencode Eine Polylinie kann auf einer gekippten Ebene liegen (Gruppencode
+1 -1
View File
@@ -26,7 +26,7 @@
;; also genau die Werte, mit denen die Ketten in BricsCAD gebaut wurden. ;; also genau die Werte, mit denen die Ketten in BricsCAD gebaut wurden.
;; ;;
;; JSON-Aufbau (FLACH, weil ssg-load-json zeilenweise liest - Details in ;; 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, ;; Kopf-Objekt (traegt "test_id"): test_id, anlagetyp, modus,
;; anzahl_eingaben, block, dxf_handle, startpunkt_mm, ;; anzahl_eingaben, block, dxf_handle, startpunkt_mm,
;; rotation_grad, beschreibung, sivas_* , erwartung_hinweis ;; rotation_grad, beschreibung, sivas_* , erwartung_hinweis
+1 -1
View File
@@ -12,7 +12,7 @@ Zwei Ebenen:
Die Testdaten stammen aus lib/vf_journal_export.py (Journale der VF_n-Bloecke 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 - 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 import json
+3 -3
View File
@@ -53,7 +53,7 @@
;; hundm05.json auch andere Objekte der Anlage stehen - erkennbar an ;; hundm05.json auch andere Objekte der Anlage stehen - erkennbar an
;; "function". Format wie in tests/testdata/kreisel_tests.json, damit die ;; "function". Format wie in tests/testdata/kreisel_tests.json, damit die
;; Felder nicht zweimal beschrieben werden muessen (Schema: siehe ;; 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. ;; vsp-gruppieren ignoriert diese Objekte, sie stoeren die Ketten also nicht.
;; lib/vf_spec_export.py uebernimmt sie beim Neuerzeugen der Spec-Daten ;; lib/vf_spec_export.py uebernimmt sie beim Neuerzeugen der Spec-Daten
;; unveraendert ans Dateiende (sonst waeren sie beim naechsten Lauf weg). ;; unveraendert ans Dateiende (sonst waeren sie beim naechsten Lauf weg).
@@ -61,7 +61,7 @@
;; Unterstuetzt: Kreisel (function "insert", wie test_kreisel.lsp) und ;; Unterstuetzt: Kreisel (function "insert", wie test_kreisel.lsp) und
;; beliebige eigenstaendige Bloecke ueber "block" (Separator/Scanner sowie ;; beliebige eigenstaendige Bloecke ueber "block" (Separator/Scanner sowie
;; BTMT-Beladung/SC_Entladung, wie in mubea.json - Schema tests/testdata/ ;; 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 ;; Bloecke haben es, Kreisel-Eintraege nicht. hundm05:bau-sensor ist dabei
;; blockname-agnostisch (reiner _.INSERT), der "kind"-Wert "sensor" bleibt ;; blockname-agnostisch (reiner _.INSERT), der "kind"-Wert "sensor" bleibt
;; als Sammelbegriff fuer "kein Kreisel" bestehen (siehe dort). ;; als Sammelbegriff fuer "kein Kreisel" bestehen (siehe dort).
@@ -125,7 +125,7 @@
"kreisel-insert-script lieferte nil")))))) "kreisel-insert-script lieferte nil"))))))
;; Separator/Scanner/BTMT-Beladung/SC_Entladung bauen ("block"-Eintraege, ;; 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 ;; (SSG_LIB_Commands.lsp) sind dafuer NICHT scriptbar (fragen Punkt/Rotation
;; per getpoint/pause in einer Schleife) - wir bauen den _.INSERT darum ;; per getpoint/pause in einer Schleife) - wir bauen den _.INSERT darum
;; direkt selbst nach, wie mubea:build-separator-one in tests/test_mubea.lsp ;; direkt selbst nach, wie mubea:build-separator-one in tests/test_mubea.lsp
+1 -1
View File
@@ -180,7 +180,7 @@ class TestSpecBau:
# ============================================================ # ============================================================
# tests/testdata/hundm05.json enthaelt neben den Ketten auch andere Objekte # tests/testdata/hundm05.json enthaelt neben den Ketten auch andere Objekte
# der Anlage - Format wie tests/testdata/kreisel_tests.json (Schema in # 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. # hundm05:bau-zusatzobjekte in tests/test_hundm05.lsp.
class TestZusatzobjekte: class TestZusatzobjekte:
+2 -2
View File
@@ -140,7 +140,7 @@
;; --- Vario (VF_*): L_GF/L_VF fuer gegebenes deltaL+deltaH+winkel loesen, dann bauen --- ;; --- Vario (VF_*): L_GF/L_VF fuer gegebenes deltaL+deltaH+winkel loesen, dann bauen ---
;; deltaL ist (wie bei der Gefaellestrecke) die horizontale PROJIZIERTE ;; deltaL ist (wie bei der Gefaellestrecke) die horizontale PROJIZIERTE
;; Gesamtlaenge des VF (Vorlauf L_GF1 + Foerderer L_VF + Nachlauf L_GF2 + ;; 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 ;; KEIN abgeleiteter Wert. "winkel" erzwingt einen bestimmten Bogenwinkel aus
;; der Kandidatenliste von berechne-alle-winkel (wie foerderer:winkel- ;; der Kandidatenliste von berechne-alle-winkel (wie foerderer:winkel-
;; erzwingen in test_foerderer.lsp), statt den automatisch kleinsten ;; erzwingen in test_foerderer.lsp), statt den automatisch kleinsten
@@ -295,7 +295,7 @@
;; --- Eine einzelne Gefaellestrecke bauen (Modus 1) --- ;; --- Eine einzelne Gefaellestrecke bauen (Modus 1) ---
;; Aufbau AUSSCHLIESSLICH aus Anfangspunkt (start-mm) und horizontaler ;; Aufbau AUSSCHLIESSLICH aus Anfangspunkt (start-mm) und horizontaler
;; Gesamtlaenge deltaL - KEIN Endpunkt (wie Produktion/gefaellestrecke.dcl ;; 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): ;; (identische Formel wie test_gefaellestrecke.lsp):
;; L_stau = (deltaL - aus-dx - ein-dx - sep_x) / cos(v) ;; L_stau = (deltaL - aus-dx - ein-dx - sep_x) / cos(v)
;; sep_x = 300 * cos(v), v = Element-Winkel (winkel_grad, Default 3 Grad) ;; sep_x = 300 * cos(v), v = Element-Winkel (winkel_grad, Default 3 Grad)