# dxfmakros AutoLISP-Makros (SSG_LIB) fuer BricsCAD Pro zur automatisierten Erstellung von Foerderanlagen-Layouts (ILS Kreisel, Omniflo, VarioFoerderer, Gefaellestrecke, Geruest). ## Menustruktur (SSG_LIB) ``` SSG_LIB ├── ILS │ ├── Kreisel-Module │ │ ├── Einfuegen / Verbinden / Bearbeiten → KreiselInsert / KreiselConnect / KreiselEdit │ │ ├── Eckrad / Eckrad bearbeiten → ILS_Eckrad / EckradEdit │ │ └── Weichenpunkte ermitteln → KREISEL_WEICHEN │ ├── Zusatzmodul │ │ ├── BTMT-Beladung / -Entladung → ILS_BTMT_Beladung / ILS_BTMT_Entladung │ │ └── Scanner / Separator einfuegen → ILS_SCANNER_INSERT / ILS_SEPARATOR_INSERT │ ├── Foerderer │ │ ├── Standard (Werte manuell / aus 3D-Linie) → StandardVarioFoerderer / StandardVarioFoerderer3D │ │ ├── Etage (Werte manuell / aus 3D-Linie) → EtageVarioFoerderer / EtageVarioFoerderer3D │ │ ├── Streckengruppe (Linienzug) → LinienzugVarioFoerdererManuell / -Zielhoehe / -Stueckweise │ │ └── Vario_Kette_Merge / VarioFoerderer nachruesten → Vario_Kette_Merge / VARIOFOERDERER_NACHRUESTEN │ └── Gefaellestrecke │ ├── einfach / aus 3D-Linie / aus Linienzug → GEFAELLESTRECKE_EINFACH / _3DLINIE / _LINIENZUG │ └── QC Linie mit GF (auch U-Form) → QcLinieMitGf / QcLinieMitGfUForm ├── Omniflo │ ├── Fahrstrecke / Fahrstrecken beschriften → OMNI_FAHRSTRECKE / OMNI_FAHRSTRECKE_BESCHRIFTEN │ ├── Boegen APB110 / APB60, Aluprofil Gerade (AP60/AP110/APG110) │ ├── Weichen (90/45/Parallel/22.5, Delta, Star) │ ├── TEF Elemente (inkl. TEF Gerade auf Linie → TEF_FOERDERER_LINIE) │ ├── Anbaugruppen (Stopper, Scanner, Buerstenbremse) │ ├── Spez. Streckenelemente ▸ Tuerloesungen ▸ Schwenkschienen → OMNI_SCHW_400_* │ ├── KettenFoerderer → KETTENFOERDERER │ ├── Ladeschleifen → OMNI_LADESCHLEIFE_AP110 │ ├── Verbinder → OMNI_TV_* │ ├── Boegen fuer Weichen (ausgegraut, Dummy) → OMNI_APBW_* │ └── Element bearbeiten → OMNI_EDIT ├── Geruest │ ├── Rohr-Geruest-Traeger → GERUEST_TRAEGER │ ├── Saeulen / Rohrabhaenger / Wandbefestigung → GERUEST_SAEULEN / GERUEST_ROHRABHAENGER / GERUEST_WANDBEFESTIGUNG │ ├── Gattertraeger (Platzhalter) → GERUEST │ └── Funktionen ▸ Traeger beschriften → GERUEST_TRAEGER_BESCHRIFTEN ├── SPS │ ├── TRO (Marker einfuegen/bearbeiten) → TRO_INSERT / TRO_EDIT │ ├── Connections (einfuegen/bearbeiten) → CONNECTION_INSERT / CONNECTION_EDIT │ └── Eingang / Ausgang → ILS_EINGANG_INSERT / ILS_AUSGANG_INSERT ├── Export │ ├── Export Sivas → EXPORTSIVAS │ └── Export CSV → EXPORTCSV ├── Konfiguration │ ├── Umschalten 2D und 3D → SSG_DIM_SWITCH │ ├── Alle Bloecke auf 2D / 3D → SSG_DIM_ALL_2D / SSG_DIM_ALL_3D │ ├── Sprache → SSG_SPRACHE │ ├── Planquadrate an/aus → PLANQUADRATE_TOGGLE │ └── CSV-Export → CSV_EXPORT_KONFIG ├── Werkzeuge │ ├── Bloecke zaehlen / loeschen, Attribute ersetzen → SSG_BLOCK_COUNT / SSG_BLOCK_DELETE / SSG_ATTR_ERSETZEN │ ├── Text ersetzen / parallel / Hoehe / Stil → SSG_TEXT_ERSETZEN / _PARALLEL / _HOEHE / _STIL │ ├── Faehnchen + Stueckliste aus Zeichnung → SSG_FAEHNCHEN_STUECKLISTE │ └── Din Formate → DIN_FORMATE └── Tests (alle Testsuiten, einzelne Szenarien, Export CSV/Sivas ALL, KS 2D/3D pruefen) ``` Doppelklick auf einen Block ruft `SSG_BLOCKEDIT` auf und verzweigt nach Blockname (Kreisel, Eckrad, VF_/GF_, KF_, Omniflo, GR_, TRO_, CONNECTION_, JAM_ → passender Edit-Befehl). Vollstaendige, laufend aktualisierte Befehls-/Modulzuordnung: siehe `CLAUDE.md` (Abschnitt "Modulzuordnung im Menue") und `menu/SSG_LIB.mnu`. ## Lademechanismus Die Module werden beim Laden des Menues ueber `SSG_LIB.mnl` initialisiert (`ssg-ensure`, ueberspringt bereits geladene Module; einzelne Module wie `DrawPlanquadrate`, `DinFormate`, `Tro_Edit`, `Jam_Edit` werden erst beim ersten Aufruf nachgeladen). Einmalige Einrichtung pro BricsCAD-Installation: 1. `bin/setenv.bat` ausfuehren (setzt `DXFM_LISP` u.a.) 2. BricsCAD starten 3. In der Kommandozeile `_MENULOAD` eingeben, `menu/SSG_LIB.mnu` auswaehlen Details und die Core-Ladereihenfolge: siehe `CLAUDE.md` Abschnitt "Lademechanismus (Lazy Loading via MNL)". ## Projektstruktur ```text dxfmakros/ ├── Lisp/ # AutoLISP-Makros und Kernbibliotheken (Details: Lisp/README.md) ├── bin/ # Hilfs-Skripte (setenv, start_briscad, run_tests, Python-Wrapper) ├── cfg/ # Konfigurationsdateien ├── data/ # JSON-Komponentendaten, DWG-/DXF-Bloecke, Block-Libraries ├── dcl/ # DCL-Dialogdefinitionen ├── doc/ # Dokumentation (doc/plan Architektur/Analysen, doc/todo offene Fahrplaene) ├── lang/ # Benutzertexte de_DE.json / en_GB.json (ssg-text) ├── lib/ # Python-Skripte (DXF-Bearbeitung, Export) ├── logs/ # Logdateien und .dbg-Ausgaben (DXFM_LOG) - nicht im Git ├── menu/ # BricsCAD-Menudefinition (SSG_LIB.mnu, SSG_LIB.mnl) ├── results/ # Ergebnisse / Exporte - nicht im Git ├── tests/ # Testskripte und Referenzdaten ├── tools/ # Einmal-Werkzeuge (z.B. Migration der Sprachtexte) ├── LICENSE ├── README.md └── requirements.txt ``` ## Umgebungsvariablen Werden via `bin/setenv.bat` gesetzt. Wichtigste: | Variable | Beschreibung | | --- | --- | | `DXFMAKRO` | Wurzelverzeichnis des Projekts | | `DXFM_LISP` | Pfad zu den LISP-Dateien (benoetigt fuer `ssg-ensure`) | | `DXFM_BLOCKS` | Pfad zu DWG-Bloecken | | `DXFM_DATA` | Datenverzeichnis (JSON, DXF) | | `DXFM_LOG` | Log-Verzeichnis | | `DXFM_DCL` | Pfad zu DCL-Dialogdateien | | `DXFM_CFG` | Konfigurationsverzeichnis | | `DXFM_LANG` | Aktive Sprache (`de_DE`/`en_GB`), persistiert von `SSG_SPRACHE`; Default `de_DE` | | `DXFM_VF_SPEC` | Spec-Datei fuer `VF_SPEC_BAU` (optional) | | `BRICSCAD` | Pfad zur BricsCAD-Executable (fuer headless Testlauf) | ## Tests Headless-Unit-Tests (file- und zeichnungsfrei): ```bat bin\run_tests.bat --lisp ``` Python-Tests (in der `.venv`): ```bat pytest tests/ bin\run_tests.bat --check ``` Zeichnungs-/Szenario-Tests laufen interaktiv in BricsCAD ueber das Menue `Tests` bzw. `SSG_RUN_ALL_TESTS`. Details: `doc/LispTests.md`, `tests/README.md`. ## Dokumentation Ausfuehrliche Modul- und Befehlsdokumentation: `CLAUDE.md` (Projektanweisungen) und `Lisp/README.md`. Weitere Anwender-/Entwickler-Themen direkt in `doc/` (u.a. `kommandos.md` - Uebersicht aller Befehle und Skripte, `variofoerderer.md`, `vf_linienzug_modus1_anleitung.md`, `csv-export.md`, `json-input-lisp.md`, `faq.md`). Architektur-Analysen und Planungsdokumente in `doc/plan/` (u.a. `translate.md`, `Entwicklungsplan.md`), offene Fahrplaene/TODOs in `doc/todo/`. ## Lizenz MIT License — siehe [LICENSE](LICENSE) ## Autor Michael Stangl (GitHub: mistamichael)