WARUM MODUS 3 BLEIBT
Modus 2 und 3 arbeiten beide auf einem gezeichneten Pfad (LINE/ARC), aber sie
loesen verschiedene Aufgaben:
Modus 2 = Randwertproblem - Start UND Ziel (je X/Y/Z) sind bekannt, die
Zwischenhoehen werden gerechnet, die Zielhoehe wird exakt
getroffen.
Modus 3 = Anfangswertproblem - die Kette wird mit vorgegebenen Winkeln
vorwaerts durchgebaut, die Endhoehe ist das ERGEBNIS.
Modus 3 kann damit etwas, was Modus 2 grundsaetzlich nicht kann: ohne
vorgegebene Zielhoehe arbeiten ("folge dieser Linie mit 3 Grad und lass uns
sehen, wo wir landen") - und er hat keinen Solver, der scheitern kann.
Dazu kommt ein harter Bestandsgrund: Modus 3 schreibt ein eigenes Journal
(Marker "linienzug3") und ist per Doppelklick editierbar. Faellt der Code
weg, verlieren alle bereits damit gebauten Ketten ihren Editier-Pfad.
Der Stempel "Legacy / wird umgebaut" war ueberholt und ist raus.
MODUS 3 - DREI AENDERUNGEN (Nutzer-Vorgabe 2026-10-22)
1. "AS bauen?" und 2. "ES bauen?" sind jetzt abfragbar (vorher wurden beide
immer gebaut), zusammen mit Winkel und Seite in je EINEM Dialog - dasselbe
Muster, das Modus 2 schon nutzt (vflw-gruppe-as-impl), kein neuer Code.
Ohne AS beginnt die Kette direkt am Startpunkt (flacher Rahmen statt
Block); die Fussabdruck-Trimmung der ersten Geraden rechnet dann von
selbst 0, weil Rahmen und Startpunkt zusammenfallen.
3. Die ES-Frage steht jetzt VOR dem Bau. Das behebt einen echten Fehler: die
letzte Gerade wird um "Separator + ein-dx" gekuerzt, ein-dx wurde aber
gelesen, BEVOR es gesetzt war - beim ersten Lauf griff der Schaetzwert
*vfk-as-es-fallback-dx*, bei jedem weiteren stand dort der Wert der
VORHERIGEN Kette (falscher Winkel, falsche Seite). Jetzt traegt die
Trimmung den echten Fussabdruck der gewaehlten ES-Variante; ohne ES
entfaellt sie ganz.
ABWAERTSKOMPATIBILITAET
Das Verschieben der ES-Frage aendert die Journal-Reihenfolge. Bestehende
"linienzug3"-Ketten bleiben per Doppelklick nachbaubar: alt-journal erkennt
sie am WERT des ersten Antwort-Eintrags ("30"/"90" = alt, "1"/"2" = neu, die
Mengen sind disjunkt) und spielt sie in der alten Reihenfolge ab. Dafuer der
neue Helfer vfl-replay-peek-wert neben vfl-replay-peek-art.
DIALOG vflw_as
Die Seitenauswahl wurde bei 30 Grad ausgegraut und NICHT in die Pending-Queue
gelegt - eine reine Modus-1-Regel (dort ersetzte die Zufuehrungsachse die
Seitenfrage). Modus 1 hat seit 2026-10-21 seinen eigenen Dialog; uebrig
blieben ES-Element sowie Modus 2/3, wo die Seite IMMER gebraucht wird - dort
ging bei 30 Grad ein zweites Fenster nur fuer die Seite auf. Entfernt.
NAMENSSCHEMA (faellt in denselben Commit, weil dieselbe Datei)
Die Helfer-Praefixe vfl2-/vfl3- stammten aus einer Planungsphase vor der
endgueltigen Menue-Zuordnung und waren dazu VERTAUSCHT: alle vfl3-* gehoeren
zu Modus 2, die vfl2-* zu Modus 3 - und drei davon zu BEIDEN. Eine
Modus-Nummer war fuer diese drei also gar nicht richtig vergebbar. Sie heissen
jetzt nach ihrer Rolle: vfl-zsolve-* (rechnet die Hoehen durch, nur Modus 2)
und vfl-pfad-* (arbeitet am gezeichneten Pfad, Modus 2 UND 3). 18 Funktionen,
jede Aufrufstelle maschinell gegen die Definitionen geprueft. Die falsche
Block-Ueberschrift "MODUS 3: Pfad + Ziel-Hoehe" (gemeint war Modus 2) ist
korrigiert, beide Gruppen haben jetzt einen erklaerenden Kopf.
vfl-zsolve-bruecke (frueher vfl3-solve-bruecke) wird von niemandem aufgerufen
- bewusst stehen gelassen und markiert, Loeschen gehoert in ein
Tote-Code-Review.
MENUE
Die Modi heissen jetzt nach ihrem Unterschied statt nach der Bedienung:
"aus 3D Linie mit Zielhoehe" / "aus 3D Linie ohne Zielhoehe" (vorher
"3D Objekte stueckweise (in Arbeit)").
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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 → KreiselInsert
│ │ ├── Verbinden → KreiselConnect
│ │ ├── Bearbeiten → KreiselEdit
│ │ └── Eckrad → ILS_Eckrad
│ ├── Zusatzmodul
│ │ ├── BTMT-Beladung → ILS_BTMT_Beladung
│ │ ├── BTMT-Entladung → ILS_BTMT_Entladung
│ │ ├── Scanner einfuegen → ILS_SCANNER_INSERT
│ │ └── Separator einfuegen → ILS_SEPARATOR_INSERT
│ ├── Foerderer
│ │ ├── Standard → StandardVarioFoerderer / StandardVarioFoerderer3D
│ │ ├── Etage → EtageVarioFoerderer / EtageVarioFoerderer3D
│ │ ├── Streckengruppe (Linienzug) → LinienzugVarioFoerdererManuell / -Zielhoehe / -Stueckweise
│ │ └── Vario_Kette_Merge / VARIOFOERDERER_NACHRUESTEN
│ └── Gefaellestrecke
│ ├── einfach → GEFAELLESTRECKE_EINFACH
│ ├── aus 3D-Linie → GEFAELLESTRECKE_3DLINIE
│ └── aus Linienzug → GEFAELLESTRECKE_LINIENZUG
├── Omniflo
│ ├── Boegen APB110/APB60
│ ├── Aluprofil Gerade (AP60/AP110/APG110)
│ ├── Weichen (90/45/Parallel/Weichenkoerper/Weichenkombinationen)
│ ├── TEF Elemente, Anbaugruppen, Verbinder, Boegen fuer Weichen
│ ├── Element bearbeiten → OMNI_EDIT
│ └── Ladeschleifen (AP110) → OMNI_LADESCHLEIFE_AP110
├── Geruest
│ ├── Rohr-Geruest-Traeger → GERUEST_TRAEGER
│ ├── Saeulen / Rohrabhaenger / Wandbefestigung → GERUEST
│ └── Funktionen ▸ Traeger beschriften → GERUEST_TRAEGER_BESCHRIFTEN
├── SPS
│ ├── TRO (Marker einfuegen/bearbeiten) → TRO_INSERT / TRO_EDIT
│ └── Connections (einfuegen/bearbeiten, Eingang/Ausgang) → CONNECTION_INSERT / CONNECTION_EDIT / ILS_EINGANG_INSERT / ILS_AUSGANG_INSERT
├── Export
│ ├── Export Sivas → EXPORTSIVAS
│ └── Export CSV → EXPORTCSV
├── Konfiguration
│ ├── Umschalten 2D und 3D → SSG_DIM_SWITCH
│ ├── Sprache → SSG_SPRACHE
│ └── Planquadrate an/aus → PLANQUADRATE_TOGGLE
├── Werkzeuge
│ ├── Bloecke zaehlen/loeschen, Attribute ersetzen → ssg_blocktools
│ └── Text ersetzen/parallel/Hoehe/Stil → ssg_texttools
└── Tests (Testsuiten ausfuehren und exportieren)
Vollstaendige, laufend aktualisierte Befehls-/Modulzuordnung: siehe CLAUDE.md (Abschnitt "Modulzuordnung im Menue") und menu/SSG_LIB.mnu.
Lademechanismus
Module werden per Lazy-Loading ueber das Menuesystem geladen (ssg-ensure in SSG_LIB.mnl). Einmalige Einrichtung pro BricsCAD-Installation:
bin/setenv.batausfuehren (setztDXFM_LISPu.a.)- BricsCAD starten
- In der Kommandozeile
_MENULOADeingeben,menu/SSG_LIB.mnuauswaehlen
Details und die Core-Ladereihenfolge: siehe CLAUDE.md Abschnitt "Lademechanismus (Lazy Loading via MNL)".
Projektstruktur
dxfmakros/
├── Lisp/ # AutoLISP-Makros und Kernbibliotheken (Details: Lisp/README.md)
├── bin/ # Hilfs-Skripte (setenv.bat, start_briscad.bat)
├── cfg/ # Konfigurationsdateien
├── data/ # JSON-Daten, DXF-Quellen, Block-Libraries - nicht im Git
├── dcl/ # DCL-Dialogdefinitionen
├── doc/ # Dokumentation (doc/plan Architektur/Analysen, doc/todo offene Fahrplaene)
├── lib/ # Python-Skripte (DXF-Bearbeitung, Export)
├── log/ # Logdateien - nicht im Git
├── menu/ # BricsCAD-Menudefinition (SSG_LIB.mnu, SSG_LIB.mnl)
├── results/ # Ergebnisse / Exporte - nicht im Git
├── tests/ # Testskripte und Referenzdaten
├── 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):
bin\run_tests.bat --lisp
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. variofoerderer.md, csv-export.md, faq.md, kommandos.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
Autor
Michael Stangl (GitHub: mistamichael)