diff --git a/README.md b/README.md index 5415b08..53f5a30 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,104 @@ AutoLISP-Makros fuer BricsCAD Pro zur automatisierten Erstellung von Foerderanlagen- und Kreisel-Layouts. -## Makros / Befehle +## Menustruktur (SSG_LIB) + +``` +SSG_LIB +├── ILS +│ ├── Kreisel-Module +│ │ ├── Einfuegen → KreiselInsert +│ │ ├── Verbinden → KreiselConnect +│ │ ├── Bearbeiten → KreiselEdit +│ │ └── Eckrad → ILS_Eckrad +│ ├── Zusatzmodul +│ │ ├── BTMT-Beladung → ILS_BTMT_Beladung +│ │ └── BTMT-Entladung → ILS_BTMT_Entladung +│ ├── Foerderer +│ │ ├── ETF Etagenfoerderer → ILS_ETF_Etagenfoerderer +│ │ ├── TEF Strecke → ILS_TEF_Strecke +│ │ ├── VarioFoerderer → FOERDERANLAGE +│ │ ├── Kurven angetr. Aussen → ILS_K{90,60,30}{LA,RA} +│ │ ├── Kurven angetr. Innen → ILS_K{90,60,30}{LI,RI} +│ │ └── Gefaellestrecke → ILS_G{K90,K60,K30}{L,R} +│ └── ILS Schliessen +├── Omniflo +│ ├── Boegen +│ │ ├── 90 → OMNI_APB_630_90 +│ │ ├── 67.5 → OMNI_APB_550_675 +│ │ ├── 45 → OMNI_APB_630_45 +│ │ ├── 22.5 → OMNI_APB_550_225 +│ │ └── 180 → OMNI_APB_650_180 +│ ├── Aluprofil Gerade +│ │ ├── AP 60 → OMNI_AP60 +│ │ ├── AP 110 → OMNI_AP110 +│ │ └── APG 110 → OMNI_APG110 +│ ├── Weiche 90 Grad +│ │ ├── Einfach → OMNI_W90_Einfach +│ │ ├── Doppel → OMNI_W90_Doppel +│ │ └── Dreiwege → OMNI_W90_Dreiwege +│ ├── Weiche 45 Grad +│ │ ├── Einfach → OMNI_W45_Einfach +│ │ ├── Doppel → OMNI_W45_Doppel +│ │ └── Dreiwege → OMNI_W45_Dreiwege +│ ├── Weichen Parallel +│ │ ├── Einfach → OMNI_WP_Einfach +│ │ ├── Doppel → OMNI_WP_Doppel +│ │ └── Dreiwege → OMNI_WP_Dreiwege +│ ├── Weichenkoerper +│ │ ├── Einfach → OMNI_WK_Einfach +│ │ ├── Doppel → OMNI_WK_Doppel +│ │ └── Dreiwege → OMNI_WK_Dreiwege +│ ├── Weichenkombinationen +│ │ ├── Delta → OMNI_WKomb_Delta +│ │ └── Star → OMNI_WKomb_Star +│ ├── TEF Elemente +│ │ ├── Umlenkspannst. rechts → OMNI_TEF_UmlenkR +│ │ ├── Umlenkspannst. links → OMNI_TEF_UmlenkL +│ │ ├── Antriebst. links → OMNI_TEF_AntriebL +│ │ ├── Antriebst. rechts → OMNI_TEF_AntriebR +│ │ └── TEF Gerade → OMNI_TEF_Gerade +│ └── KettenFoerderer → OMNI_KettenFoerderer +└── External + ├── Call Python → CALLPYTHON + ├── Export Sivas → EXPORTSIVAS + └── Export CSV → EXPORTCSV +``` + +## Befehle nach Modul + +### KreiselInsert.lsp - Kreisel Modul-Einfuegesystem + +Zeichnet ILS-Kreiselmodule als Compound-Bloecke mit konfigurierbarem Abstand, Typ und Attributen. + +| Befehl | Beschreibung | +| --- | --- | +| `KreiselInsert` | Modul an manuell gewaehltem Punkt einfuegen (Abstand, Drehung, Hoehe, Typ interaktiv) | +| `KreiselConnect` | Smart Connect: Kreisel zwischen zwei parallelen Linien einfuegen, berechnet Position/Abstand/Rotation automatisch | +| `KreiselEdit` | Bestehenden Kreisel per DCL-Dialog bearbeiten (Name, Abstand, Hoehe, Ausrichtung, Drehrichtung, Typ) | +| `KreiselRedraw` | Kreisel mit optionalem neuem Abstand/Hoehe neu zeichnen, Attribute bleiben erhalten | +| `KreiselQuick` | Schnelleinfuegen mit Standardparametern (horizontal) | +| `KreiselParams` | Aktuelle Kreisel-Parameterkonfiguration anzeigen | +| `ILS_Eckrad` | Einzelnen AN8-Block (Antriebs-/Eckrad) an gewaehltem Punkt einfuegen | +| `KreiselLabelPos` | Label-Position (X/Y-Offset) konfigurieren | +| `KreiselLabelHoehe` | Label-Texthoehe konfigurieren | +| `KreiselLabelSetup` | Label-Darstellung konfigurieren (Hoehe, Farbe, Abstand, Schriftart) | + +### OmniModulInsert.lsp - Omniflo Komponenten + +Einfuegen von Omniflo-Standardkomponenten (Boegen, Geraden, Weichen, TEF-Elemente). + +| Befehl | Beschreibung | +| --- | --- | +| `OMNI_LOAD` | Omniflo-Komponentendaten aus JSON-Dateien laden | +| `OMNI_INFO_BOGEN` | Info zu einem Omniflo-Bogen nach Sivas-ID anzeigen | +| `OMNI_INFO_WEICHE` | Info zu einer Omniflo-Weiche nach Sivas-ID anzeigen | +| `OMNI_APB_*` | Boegen einfuegen (90, 67.5, 45, 22.5, 180 Grad) | +| `OMNI_AP60/AP110/APG110` | Aluprofil-Geraden einfuegen | +| `OMNI_W90/W45/WP/WK_*` | Weichen einfuegen (Einfach, Doppel, Dreiwege) | +| `OMNI_WKomb_Delta/Star` | Weichenkombinationen einfuegen | +| `OMNI_TEF_*` | TEF-Elemente einfuegen (Umlenk-/Antriebsstationen, Gerade) | +| `OMNI_KettenFoerderer` | Kettenfoerderer einfuegen | ### VarioFoerderer.lsp - Foerderanlage Generator (v24.4) @@ -10,30 +107,62 @@ Generiert komplette Vario-Foerderanlagen mit Vertikalboegen, Motor-/Spannstation | Befehl | Beschreibung | | --- | --- | -| `FOERDERANLAGE` | Interaktiver Generator: Zwei Punkte messen oder manuelle Eingabe von Distanz/Hoehe, berechnet optimalen Bogenwinkel und fuegt Module ein | -| `FOERDERTEST` | Automatischer Testlauf (Distanz=6000, Hoehe=2000, Richtung=Auf), speichert Ergebnis als DXF | +| `FOERDERANLAGE` | Interaktiver Generator: Zwei Punkte oder manuelle Distanz/Hoehe, berechnet optimalen Bogenwinkel | +| `FOERDERTEST` | Automatischer Testlauf (Distanz=6000, Hoehe=2000, Richtung=Auf), speichert als DXF | Unterstuetzte Bogenwinkel: 3, 9, 12, 15, 24, 36, 48 Grad -### KreiselInsert.lsp - Kreisel Modul-Einfuegesystem (v4.0) - -Zeichnet ILS-Kreiselmodule mit konfigurierbarem Abstand und PIN-Typ. +### ssg_layer.lsp - Layerverwaltung | Befehl | Beschreibung | | --- | --- | -| `KreiselInsert` | Modul an manuell gewaehltem Punkt einfuegen | -| `KreiselConnect` | Smart Connect: Neues Modul an bestehendes anschliessen | +| `SSG-LayerSet` | Objekt anklicken, dessen Layer wird aktiv | +| `SSG-LayerInfo` | Layer eines angeklickten Objekts anzeigen | +| `SSG-LayerMove` | Selektierte Objekte auf Ziel-Layer verschieben | +| `SSG-LayerCopy` | Selektierte Objekte auf Ziel-Layer kopieren | +| `SSG-LayerMoveType` | Alle Objekte gleichen Typs von Referenz- auf Ziel-Layer verschieben | +| `SSG-LayerOff` | Layer per Klick ausschalten (mehrfach moeglich) | +| `SSG-LayerFreeze` | Layer per Klick einfrieren (mehrfach moeglich) | +| `SSG-FreezeAll` | Alle Layer ausser dem angeklickten einfrieren | +| `SSG-ThawAll` | Alle eingefrorenen Layer auftauen | +| `SSG-LayerOnAll` | Alle ausgeschalteten Layer einschalten | +| `SSG-LayerDelete` | Layer und alle Objekte darauf loeschen (mit Bestaetigung) | + +### tests.lsp - Export und Python-Integration + +| Befehl | Beschreibung | +| --- | --- | +| `CALLPYTHON` | Python-Skripte via CLI aufrufen, Ausgabe loggen | +| `EXPORTSIVAS` | Daten im Sivas-Format exportieren | +| `EXPORTCSV` | Zeichnungsdaten als CSV exportieren | + +## Kernbibliotheken (Lisp/) + +| Datei | Beschreibung | +| --- | --- | +| `ssg_core.lsp` | Kernel: Umgebung, Layer-Ops, Block-Ops, Attribut-Ops, Fehlerbehandlung | +| `ssg_dialog.lsp` | Dialog-Vorlagen: Slide-Preview, Modul-Dialog, Block-Einfuegesequenz | +| `ssg_layer.lsp` | Layer-Verwaltungsbefehle | +| `ssg_load.lsp` | Loader: Laedt alle SSG-Bibliotheken in korrekter Reihenfolge | +| `on_start.lsp` | Startup-Skript: Setzt Umgebung und laedt Libraries | ## Projektstruktur ```text dxfmakros/ -├── Blocks/ # DWG-Bloecke (Motorstation, Spannstation, Vertikalboegen, etc.) -├── Lisp/ # AutoLISP-Makros -│ ├── VarioFoerderer.lsp -│ └── KreiselInsert.lsp -├── bin/ # Hilfs-Skripte -├── result/ # Ergebnisse / DXF-Exporte (nicht im Git) +├── Blocks/ # DWG-Bloecke (AN8, SP8, Vertikalboegen, etc.) +├── Lisp/ # AutoLISP-Makros und Kernbibliotheken +├── bin/ # Hilfs-Skripte (setenv, create_tests, etc.) +├── cfg/ # Konfigurationsdateien (attradd.cfg) +├── data/ # Quelldaten (JSON, DXF) - nicht im Git +├── dcl/ # DCL-Dialogdefinitionen (kreisel_edit.dcl) +├── doc/ # Dokumentation und Referenz-DXFs +├── examples/ # Beispieldateien +├── lib/ # Python-Skripte (export_csv.py, etc.) +├── logs/ # Logdateien - nicht im Git +├── menu/ # BricsCAD-Menudefinition (SSG_LIB.mnu) +├── results/ # Ergebnisse / Exporte - nicht im Git +├── tests/ # Testskripte und Referenzdaten ├── LICENSE ├── README.md └── requirements.txt @@ -44,17 +173,29 @@ dxfmakros/ | Variable | Beschreibung | | --- | --- | | `DXFMAKRO` | Wurzelverzeichnis des Projekts | -| `DXFM_BLOCKS` | Pfad zum Blocks-Verzeichnis (fuer DWG-Einfuegungen) | +| `DXFM_BLOCKS` | Pfad zum Blocks-Verzeichnis | +| `DXFM_LISP` | Pfad zu den LISP-Dateien | | `DXFM_RESULTS` | Pfad fuer DXF-Exporte | | `DXFM_BIN` | Skriptverzeichnis | | `DXFM_LIB` | Python-Quellcode | | `DXFM_CFG` | Konfigurationsdateien | +| `DXFM_TESTS` | Testverzeichnis | +| `DXFM_DATA` | Datenverzeichnis | +| `BRISCAD` | Pfad zur BricsCAD-Executable | ## Einrichtung -1. Umgebungsvariable `DXFM_BLOCKS` auf das `Blocks/`-Verzeichnis setzen -2. `.lsp`-Dateien in BricsCAD laden (manuell oder via Startup) -3. Befehle in der BricsCAD-Kommandozeile ausfuehren +1. `bin\setenv.bat` ausfuehren (setzt alle Umgebungsvariablen) +2. BricsCAD starten - `on_start.lsp` laedt alle Libraries automatisch via `startup.scr` +3. Menu `SSG_LIB` nutzen oder Befehle in der Kommandozeile ausfuehren + +## Tests + +```bat +bin\create_tests.bat +``` + +Erzeugt eine Test-DXF, fuehrt Kreisel-Einfuege- und Exportbefehle aus, und validiert die Ergebnisse gegen Referenzdateien in `tests/references/`. ## Lizenz