# Kommandouebersicht Diese Seite listet alle Kommandos des Projekts auf einen Blick: 1. [BricsCAD-Befehle (AutoLISP)](#1-bricscad-befehle-autolisp) - an der BricsCAD-Kommandozeile einzugeben 2. [Test-Befehle in BricsCAD](#2-test-befehle-in-bricscad) 3. [Batch-/Shell-Skripte (`bin/`)](#3-batch-shell-skripte-bin) 4. [Python-Kommandozeilen (`lib/`)](#4-python-kommandozeilen-lib) 5. [Python-Tests (`pytest`)](#5-python-tests-pytest) Ausfuehrliche Beschreibungen stehen in `Lisp/README.md`, `doc/variofoerderer.md`, `doc/tools.md` (set_einfuegepunkt/set_koords), `doc/dbg2lsp.md`, `doc/csv-export.md` und `doc/LispTests.md`. Diese Seite ist nur der Einstieg. **Voraussetzung fuer alle BricsCAD-Befehle**: Menue `menu/SSG_LIB.mnu` einmalig per `_MENULOAD` geladen (siehe `CLAUDE.md`, "Menue einrichten"). Die MNL laedt die Module dann beim Start. Befehle, die nicht im Menue stehen, lassen sich trotzdem an der Kommandozeile aufrufen, sofern ihr Modul geladen ist - sonst vorher `(ssg-ensure "Modulname")` eingeben. --- ## 1. BricsCAD-Befehle (AutoLISP) Gross-/Kleinschreibung spielt an der Kommandozeile keine Rolle. ### ILS Kreisel / Eckrad (`KreiselInsert.lsp`) | Befehl | Beschreibung | |---|---| | `KreiselInsert` | Kreisel einfuegen: Position und Parameter (Abstand, Typ, Rotation, Hoehe) manuell eingeben | | `KreiselConnect` | Kreisel zwischen zwei gewaehlten Punkten einfuegen (Abstand und Drehung aus den Punkten) | | `KreiselQuick` | Kreisel schnell mit Standardwerten (horizontal) einfuegen | | `KreiselEdit` | Bestehenden Kreisel per Dialog (`kreisel_edit.dcl`) bearbeiten und neu aufbauen | | `KreiselRedraw` | Kreisel aus seinen Block-Attributen neu zeichnen (z.B. mit neuem Abstand) | | `KreiselParams` | Aktuelle Kreisel-Parameter anzeigen | | `KreiselLabelSetup` | Beschriftung einstellen (Hoehe, Farbe, Abstand, Schriftart) | | `KreiselLabelPos` | Versatz der Beschriftung (dx/dy) einstellen | | `KreiselLabelHoehe` | Texthoehe der Beschriftung einstellen | | `ILS_Eckrad` | Eckrad an einem Tangentenpunkt mit Richtung einfuegen | ### VarioFoerderer (`VarioFoerderer.lsp` -> `vf_core`/`vf_standard`/`vf_etage`/`vf_linienzug`/`vf_spec`) | Befehl | Beschreibung | |---|---| | `FOERDERANLAGE` / `VarioFoerderer` | Hauptbefehl, fragt den Anlagentyp (Standard/Etage/Linienzug) ab | | `StandardVarioFoerderer` | Standardtyp (AS/ES 90 Grad), Werte per DCL-Dialog | | `StandardVarioFoerderer3D` | Standardtyp aus einer gewaehlten 3D-Linie | | `EtageVarioFoerderer` | Etagentyp (AS/ES 30 Grad), Werte per DCL-Dialog | | `EtageVarioFoerderer3D` | Etagentyp aus einer gewaehlten 3D-Linie | | `LinienzugVarioFoerdererManuell` | Streckengruppe, Modus 1 (manuelle Eingabe, Punkte klicken) | | `LinienzugVarioFoerdererZielhoehe` | Streckengruppe, Modus 2 (3D-Objekte + Ziel-Hoehe, Randwert-Solver) | | `LinienzugVarioFoerdererStueckweise` | Streckengruppe, Modus 3 (3D-Objekte stueckweise, in Arbeit) | | `QcLinieMitGf` | Streckengruppe Modus 4 (QC-Linie mit GF, automatische Auf-Ab-Berechnung); Menue unter Gefaellestrecke | | `QcLinieMitGfUForm` | Streckengruppe Modus 5 (QC-Linie mit GF und U-Form); Menue unter Gefaellestrecke | | `VARIOFOERDERER_EDIT` | VF_n-Block editieren (dispatcht per XDATA-Marker auf Standard/Etage/Linienzug); auch per Doppelklick | | `VARIOFOERDERER_NACHRUESTEN` / `VF_NACHRUESTEN` | Altbestand-VF_n-Bloecke ohne `SSG_VF_EDIT`-Marker editierbar machen | | `Vario_Kette_Merge` | Mehrere einzeln gebaute VF_n-Bloecke ab einem Start-Baustein zu einem Gesamt-Block zusammenfuehren | | `VF_SEKTION_RESTORE` | Aufgebrochene Linienzug-Kette aus der XDATA der losen Objekte wieder zu einem Block mit Journal zusammensetzen | | `VF_WIZARD_AN` / `VF_WIZARD_AUS` | Linienzug-Fragen per DCL-Assistent (Standard) bzw. per Konsole stellen | | `VF_SPEC_BAU` | Linienzug-Ketten ohne Dialog aus einer Spec-Datei bauen (`DXFM_VF_SPEC`, Default `tests/testdata/hundm05.json`) | | `VFL_KS_DIAG` | Diagnose: inneren Aufbau eines Blocks anzeigen (Lage von KS_EIN/KS_AUS) | ### Gefaellestrecke (`Gefaellestrecke.lsp`) | Befehl | Beschreibung | |---|---| | `GEFAELLESTRECKE` | Fragt den Eingabemodus per Konsole ab | | `GEFAELLESTRECKE_EINFACH` | Modus 1: Werteingabe per DCL-Dialog | | `GEFAELLESTRECKE_3DLINIE` | Modus 2: aus einer 3D-Linie | | `GEFAELLESTRECKE_LINIENZUG` | Modus 3: aus einem Linienzug (LINE + ARC) | | `GEFAELLESTRECKE_EDIT` | GF_n-Block editieren (Dialog vorbelegt, Neuaufbau); auch per Doppelklick | ### ILS-Zusatzmodule, Sensoren, Ein-/Ausgang (`SSG_LIB_Commands.lsp`) | Befehl | Beschreibung | |---|---| | `ILS_BTMT_Beladung` | BTMT-Beladung wiederholt einfuegen (Drehung interaktiv) | | `ILS_BTMT_Entladung` | BTMT-Entladung wiederholt einfuegen | | `ILS_EINGANG_INSERT` / `ILS_AUSGANG_INSERT` | Eingang-/Ausgang-Symbol frei platzieren | | `ILS_SCANNER_INSERT` | Scanner einfuegen | | `ILS_SEPARATOR_INSERT` | Separator einfuegen | | `TEF_FOERDERER_LINIE` (`TEFInsert.lsp`) | Linie zwischen zwei Punkten zeichnen und mit 1000-mm-TEF-Geraden belegen | ### Omniflo (`OmniModulInsert.lsp`) | Befehl(e) | Beschreibung | |---|---| | `OMNI_LOAD` | Omniflo-Komponentendaten laden | | `OMNI_INFO_BOGEN` / `OMNI_INFO_WEICHE` | Daten eines Bogens / einer Weiche anzeigen | | `OMNI_APB60_90`, `OMNI_APB_630_90`, `OMNI_APB_630_45`, `OMNI_APB_550_675`, `OMNI_APB_550_225`, `OMNI_APB_650_180` | Boegen einfuegen (Dialog `omniflo_boegen.dcl`) | | `OMNI_AP60`, `OMNI_AP110`, `OMNI_APG110` | Gerade Profile einfuegen | | `OMNI_W90_Einfach`/`_Doppel`/`_Dreiwege` | Weichen 90 Grad (Dialog `omniflo_weichen.dcl`) | | `OMNI_W45_Einfach`/`_Doppel`/`_Dreiwege` | Weichen 45 Grad | | `OMNI_WP_Einfach`/`_Doppel`/`_Dreiwege` | Parallelweichen | | `OMNI_WK_Einfach`/`_Doppel`/`_Dreiwege` | Weichenkoerper | | `OMNI_WKomb_Delta_1400`, `OMNI_WKomb_Delta_1600`, `OMNI_WKomb_Star` | Weichenkombinationen (Delta, Stern) | | `OMNI_APBW_R400_45_140`, `OMNI_APBW_R400_675_260`, `OMNI_APBW_R550_45_77`, `OMNI_APBW_R550_45_194`, `OMNI_APBW_R550_225_360`, `OMNI_APBW_R550_225_410A`/`B`/`C`, `OMNI_APBW_R550_675_58`/`_125`/`_208`/`_360`, `OMNI_APBW_R650_90_300`, `OMNI_APBW_R750_90_200` | Boegen fuer Weichen (fest, ohne Dialog) | | `OMNI_TEF_UmlenkL`/`R`, `OMNI_TEF_AntriebL`/`R`, `OMNI_TEF_Gerade` | TEF-Elemente (fest, ohne Drehung) | | `OMNI_STOPPER`, `OMNI_SCANNER`, `OMNI_BUERSTENBREMSE` | Anbaugruppen | | `OMNI_TV_W_W`, `OMNI_TV_W_AP`, `OMNI_TV_W_AP60`, `OMNI_TV_W_AP110`, `OMNI_TV_W_AP110_W`, `OMNI_TV_50`, `OMNI_TV_80`, `OMNI_TV_ENDPLATTE`, `OMNI_TV_ANSCHLAG`, `OMNI_TV_MUFFE`, `OMNI_TV_A_AP110_AP60`, `OMNI_TV_A_AP60_ST`, `OMNI_TV_A_AP110_ST`, `OMNI_TV_SW_II_SW_SW`, `OMNI_TV_SW_III_AP110`, `OMNI_TV_SW_III_AP110_SW`, `OMNI_TV_SW_IV_AP60`, `OMNI_TV_SW_IV_ST` | Verbinder | | `OMNI_LADESCHLEIFE_AP110` | Ladeschleife (Dialog `omniflo_ladeschleifen.dcl`) | | `OMNI_KettenFoerderer` | Platzhalter (noch ohne Funktion) | | `OMNI_EDIT` | Omniflo-Element per Dialog bearbeiten; auch per Doppelklick | ### Geruest (`GeruestInsert.lsp`) | Befehl | Beschreibung | |---|---| | `GERUEST` | Geruest-Dialog (Bereich frei waehlbar) | | `GERUEST_SAEULEN` / `GERUEST_ROHRABHAENGER` / `GERUEST_WANDBEFESTIGUNG` | Derselbe Dialog, im jeweiligen Bereich geoeffnet | | `GERUEST_TRAEGER` | Rohr-Geruest-Traeger: Dialog (`geruest_traeger.dcl`), danach Start-/Endpunkt oder Laenge bis ESC/Enter | | `GERUEST_TRAEGER_BESCHRIFTEN` | Alle Traeger der Zeichnung neu beschriften, verwaiste Beschriftungen entfernen | ### TRO und Connections (`Tro_Edit.lsp`, `Connection_Edit.lsp`) | Befehl | Beschreibung | |---|---| | `TRO_INSERT` | TRO-Marker (`TRO_SYM_`) einfuegen und ID/TYPE setzen (Blockdefinition muss existieren) | | `TRO_EDIT` | ID/TYPE eines TRO-Markers per Dialog aendern | | `CONNECTION_INSERT` | Verbindungspfeil (Fluss) zwischen zwei Elementen zeichnen | | `CONNECTION_EDIT` | Quelle/Ziel einer Verbindung aendern | ### Export und IDs (`export.lsp`, `ssg_id.lsp`, `count_sep_scan.lsp`, `check_hoehen.lsp`) | Befehl | Beschreibung | |---|---| | `EXPORTSIVAS` | Sivas-Export-CSV mit Summierungszeilen (ruft `lib/export_sivas.py`) | | `EXPORTCSV` | Einfache Item-Liste aller Bloecke inkl. Bounding-Box/Planquadrat (ruft `lib/export_csv.py`) | | `CSV_EXPORT_KONFIG` | Export-Einstellungen per Dialog (u.a. gefrorene Layer ausschliessen) | | `OMNI_UPDATE_ATTRIBS` | HOEHE und DREHUNG aller Omniflo-Elemente aus der Geometrie aktualisieren | | `IDSCHECK` | Alle Bloecke auf doppelte IDs pruefen und korrigieren | | `IDGENERATE` | Gewaehltem Block eine neue ID zuweisen | | `ZAEHLE_SEP_SCAN` | Scanner/Separatoren je Kreisel/VF/GF zaehlen und in ANZAHL_SCANNER/ANZAHL_SEPARATOR schreiben (laeuft auch automatisch vor jedem Export) | | `HOEHEN_CHECK` | Hoehen von Kreiseln/VF/GF messen und in HOEHE/HOEHE_VON_mm/HOEHE_BIS_mm/MONTAGEHOEHE_m schreiben | | `CALLPYTHON` (`external_call.lsp`) | Test des LISP->Python-Aufrufs (`lib/testpycall.py`) | ### Konfiguration, Planquadrate, Doppelklick | Befehl | Beschreibung | |---|---| | `SSG_DIM_SWITCH` | Globalen Modus 2D/3D umschalten (`DXFM_DIM`) | | `SSG_DIM_ALL_2D` / `SSG_DIM_ALL_3D` | Alle VF_n-/GF_n-Bloecke der Zeichnung nach 2D bzw. 3D umbauen | | `SSG_SPRACHE` | Sprache Deutsch/Englisch waehlen (`DXFM_LANG`) | | `DRAW_PLANQUADRATE` | Planquadrat-Raster (Block `ZZ_PLANQUADRATE`) zeichnen bzw. neu aufbauen | | `DELETE_PLANQUADRATE` | Planquadrat-Raster entfernen | | `PLANQUADRATE_TOGGLE` | Raster an/aus (zeichnen, falls keins existiert, sonst entfernen) | | `SSG_BLOCKEDIT` | Doppelklick-/Kontextmenue-Dispatcher: Kreisel, Omniflo, GF_*, VF_*, GR_*, TRO_* auf den passenden Edit-Befehl | | `EATTEDIT` | Ueberschreibt den nativen Befehl, leitet an `SSG_BLOCKEDIT` weiter (Fallback `_.EATTEDIT`) | ### Layer-Werkzeuge (`ssg_layer.lsp`) | Befehl | Beschreibung | |---|---| | `SSG-LayerSet` | Layer eines angeklickten Objekts aktiv setzen | | `SSG-LayerInfo` | Layer eines Objekts anzeigen | | `SSG-LayerMove` | Objekte auf einen anderen Layer verschieben | | `SSG-LayerCopy` | Objekte auf einen anderen Layer kopieren | | `SSG-LayerMoveType` | Alle Objekte eines Typs (Referenzobjekt) vom gleichen Layer auf einen neuen Layer verschieben | | `SSG-LayerOff` / `SSG-LayerFreeze` | Layer per Anklicken aus-/einfrieren | | `SSG-FreezeAll` | Alle Layer ausser dem aktiven einfrieren | | `SSG-ThawAll` / `SSG-LayerOnAll` | Alle Layer auftauen / einschalten | | `SSG-LayerDelete` | Alle Objekte eines Layers und den Layer loeschen (mit Sicherheitsabfrage) | ### Block-Pflege und Diagnose (Entwickler) Arbeiten auf den Block-DWGs in `data/ils` (Voraussetzung `DXFM_DATA`). | Befehl | Beschreibung | |---|---| | `ILS_ATTR_SYNC` (`addattribute.lsp`) | ATTDEFs der DWGs mit `data/ils/allocations.json` abgleichen; Modus Ergaenzen/Ersetzen | | `ILS_ATTR_REPLACE` | Direkt Modus "Ersetzen" (Sicherheitsfrage bleibt) | | `ILS_ATTR_COLLECT` (`collect_attributes.lsp`) | Aktuelle ATTDEF-Werte aller DWGs nach `allocations_collected.json` schreiben | | `ILS_BLOCK_LIST` (`list_blocks.lsp`) | Sub-Block-Definitionen aller DWGs nach `blocks_collected.json` schreiben (Kollisionen 2D/3D finden) | | `ILS_BLOCK_PURGE` (`purge_blocks.lsp`) | Unbenutzte Bloecke/Layer in allen DWGs entfernen | | `KS_PRUEFEN` (`ks_pruefung.lsp`) | KS_EIN/KS_AUS der 2D- gegen die 3D-Variante vergleichen, Ergebnis als CSV | | `MenuInventory` (`menu-inventory.lsp`) | Menuegruppen, Plugins und Startdateien von BricsCAD auflisten | --- ## 2. Test-Befehle in BricsCAD Aus dem Menue "Tests" bzw. der Kommandozeile; Details in `doc/LispTests.md`. | Befehl | Beschreibung | |---|---| | `SSG_RUN_ALL_TESTS` | Alle in `tests/alltests.json` aktivierten Szenarien ausfuehren (fragt den Modus ab) | | `SSG_RUN_ALL_TESTS_EXPORT` | Dito, Automatik: speichern + CSV/Sivas-Export + schliessen | | `SSG_RUN_ALL_TESTS_OFFEN` | Dito, Kontrolle: Zeichnungen bleiben offen, kein Export | | `TEST_EXPORT_ALL` | Jede Zeichnung aus `tests/output/` oeffnen und exportieren | | `TEST_UNIT` | File- und zeichnungsfreie Unit-Tests (`tests/test_unit.lsp`), Ergebnis `tests/output/unit_results.txt` | | `TEST_VF_SPEC` | Unit-Test Spec-Uebersetzer (`vsp-journal`) | | `TEST_VFL_SCHEMA` | Unit-Test Glied-Schema des Linienzugs | | `TEST_KREISEL` | Kreisel-Szenario | | `TEST_FOERDERER` | VarioFoerderer-Szenario | | `TEST_GEFAELLESTRECKE` | Gefaellestrecke-Szenario | | `TEST_LINIENZUG` / `TEST_LINIENZUG_STUFE2` | Linienzug-Szenarien | | `TEST_OMNIFLO` | Alle Omniflo-Testbloecke einfuegen | | `TEST_OMNIFLO_STRECKE` | Omniflo-Streckenzug aufbauen | | `TEST_HM_RECFORMAT` (`_2D`/`_3D`) | Echte HundM-Aufzeichnungen per Journal-Replay nachbauen | | `TEST_HUNDM05` (`_2D`/`_3D`) | HundM05-Anlage aus der Spec bauen | | `TEST_MUBEA` | Mubea-Nachbau aus `tests/testdata/mubea.json` | | `TEST_DEMATIC_ARVATO` | Dematic/Arvato-Nachbau (Flowpuffer/Kreisel) | | `TEST_SHOWROOM_ILS` | ILS-3.0-Showroom-Nachbau (Kreisel, Gefaellestrecken; Hoehen noch Platzhalter) | --- ## 3. Batch-/Shell-Skripte (`bin/`) Alle Skripte rufen zuerst `setenv.bat` (bzw. `setenv.sh`) auf. | Skript | Beschreibung | |---|---| | `setenv.bat` / `setenv.sh` | Umgebungsvariablen setzen (`DXFMAKRO`, `DXFM_LISP`, `DXFM_DATA`, `BRICSCAD` ...); `.sh` muss gesourct werden | | `start_briscad.bat` | Umgebung setzen und BricsCAD starten | | `get_cmd.bat` / `get_cmd.sh` | Shell mit gesetzter Umgebung oeffnen | | `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` | Kompletter ILS-Testlauf: Basis-DXF erzeugen, BricsCAD mit `ILS_test.scr`, Ergebnisse validieren | | `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`) | | `show_exportcsv.bat [csv] [flow] [mflow] [track]` | Export-CSV mit sps_skel als SVG darstellen; `flow` ohne VF/GF-Einzelbausteine, `mflow` Materialfluss-Graph, `track` Bahnzusammenhang (beide brauchen Graphviz) | | `dxf_anlage_export.bat [--projekt NAME]` | Wrapper fuer `lib/dxf_anlage_export.py` | | `dxf_scan_components.bat [--fenster X0 Y0 X1 Y1] [--projekt NAME]` | Wrapper fuer `lib/dxf_scan_components.py` | | `dxf_vf_abbild.bat [--spec S] [--json J] [--referenz R] [--schreibe-referenz] [--praefix VF_,GF_]` | Wrapper fuer `lib/dxf_vf_abbild.py` | ### `run_tests.bat` ``` bin\run_tests.bat --lisp BricsCAD headless (/b tests\test_unit.scr), TEST_UNIT, Auswertung unit_results.txt bin\run_tests.bat --check [test_xyz.py] pytest-Validierung (alle oder eine Datei) bin\run_tests.bat --diff_references [datei] CSVs tests\reference vs. tests\output vergleichen, bei Unterschieden meld bin\run_tests.bat Hilfe ``` --- ## 4. Python-Kommandozeilen (`lib/`) Aufruf mit aktivierter `.venv` (bzw. ueber `setenv`, damit `DXFM_*` gesetzt sind). `python --help` zeigt bei den argparse-Skripten alle Optionen. ### Export (normalerweise von `EXPORTSIVAS`/`EXPORTCSV` aufgerufen) | Aufruf | Beschreibung | |---|---| | `python export_sivas.py [--mit-bezeichnung]` | Sivas-CSV mit Summierungszeilen, zusaetzlich `_zusammengefasst.csv` | | `python export_csv.py ` | Einfache Item-Liste (Planquadrat, Bounding-Box, Nachbarn, Merkmale) | | `python export_graph.py []` | Materialfluss-Graph aus dem CSV-Export als `.json`, `.dot` und `.mmd` | Reine Bibliotheken ohne eigene Kommandozeile: `export_blockpatterns.py`, `export_neighbors.py`, `export_planquadrat.py`, `merkmalstamm.py`, `sivas_mapping.py`, `omniflo_utils.py`, `vf_linienzug_grammatik.py`. ### Omniflo-DXF-Aufbereitung | Aufruf | Beschreibung | |---|---| | `python set_einfuegepkt.py [--boegen] [--weichen45] [--weichen90] [--weichenkoerper] [--weichen-parallel] [--delta] [--dreifachweiche] [--sternweiche] [--number SIVASNR] [--show-omniflo]` | `$INSBASE` der Omniflo-DXFs setzen | | `python set_koords.py [--k1set] [--k2set] [--k3set] [--k4set] [--set-all] [--force] [--test] [--number SIVASNR] [--show-omniflo]` | KS-Bloecke K1-K4 in die Omniflo-DXFs setzen | | `python split_block_library.py` | `data/block_libraries/ils_library.dxf` in einzelne DXFs je Block aufteilen | ### VarioFoerderer-Journal und Spec | Aufruf | Beschreibung | |---|---| | `python vf_journal_export.py [--csv ] [--kein-startpunkt-fix]` | `SSG_VF_EDIT`-Journale der VF_n-Bloecke als Frage-Antwort-Protokoll (z.B. `tests/testdata/hm_recformat.json`) | | `python vf_spec_export.py ` | Protokoll in eine Spec uebersetzen (z.B. `tests/testdata/hundm05.json`) | | `python dxf_vf_abbild.py [--spec S] [--json J] [--referenz R] [--schreibe-referenz] [--praefix VF_,GF_]` | Attribut-/Bausteinabbild der VF_/GF_-Bloecke; `--referenz` vergleicht (Exit 1 bei Abweichung) | | `python dxf_anlage_export.py [--projekt NAME]` | Mit unseren Makros GEBAUTE (und von Hand nachbearbeitete) Anlage aus der Zeichnung in Nachbau-Testdaten zurueckschreiben (Gegenstueck zu `dxf_scan_components.py`); erzeugt z.B. `tests/testdata/dematic_arvato.json` | | `python dump_vf_wrapper_inhalt.py ` | Diagnose: Sub-INSERTs je VF_n/GF_n-Wrapper in Baureihenfolge | | `python dump_vf_kette_inhalt.py []` | Diagnose: Glied-Folge der Spec gegen die tatsaechliche Separatorliste | ### Fremdzeichnungen auswerten | Aufruf | Beschreibung | |---|---| | `python dxf_scan_components.py [--fenster X0 Y0 X1 Y1] [--projekt NAME]` | ILS-/Omniflo-Komponenten einer fremden Zeichnung als Nachbau-JSON erkennen | | `python dxf_abbild.py [--fenster X0 Y0 X1 Y1] [--max-tiefe N] [--ohne-geometrie-container]` | Getreue Abbildung aller Bauteile (ohne Interpretation) als JSON | | `python extract_polylines.py [--layer Z-6]` | LWPOLYLINEs eines Layers mit Stuetzpunkten und Laengen als JSON | ### Entwickler-Tools | Aufruf | Beschreibung | |---|---| | `python dbg2lsp.py --method NAME [--recursive] [--max-depth N] [--search-dir D] [--exclude NAME] [--add-open DATEI METHODE] [--dbg-file F] [--dbg-envvar V] [--force] [--dry-run]` | LISP-Funktionen mit `ssg_dbg.lsp`-Aufrufen instrumentieren (siehe `doc/dbg2lsp.md`) | | `python testpycall.py []` | Gegenstueck zu `CALLPYTHON` | --- ## 5. Python-Tests (`pytest`) ``` pytest tests/ alle Python-Tests pytest tests/test_vf_spec.py einzelne Datei bin\run_tests.bat --check dasselbe ueber das Batch-Skript ``` Die Szenario-Tests (`test_kreisel.py`, `test_foerderer.py`, `test_hundm05.py` ...) validieren die Ausgaben der zugehoerigen BricsCAD-Testbefehle in `tests/output/` gegen `tests/reference/`; reine Python-Tests wie `test_vf_spec.py`, `test_vf_journal_grammatik.py` oder `test_export_graph.py` laufen ohne BricsCAD.