y.wang 821b81135d fix: VF-Linienzug - ES-Fussabdruck laengs korrekt reservieren + Endpunkt per Ziellinie
Drei zusammenhaengende Korrekturen am GF-Zweig mit ES-Element (Modus 1).

1) ES-Fussabdruck wurde massiv unterschaetzt (333.65 mm zu lang)

   Reserviert wurde (abs ein-dx) - die Block-X-Komponente aus
   vf-element-masse. Ein Element wird aber so gedreht eingebaut, dass sein
   KS_EIN auf der Fahrtrichtung liegt; beim drehenden ES_Element_30
   (ein-ang=120 Grad) landet dadurch ein Teil der Block-Y-Komponente auf der
   Fahrtachse. Real verbraucht es laengs 576.2 mm statt der reservierten
   242.6 mm - die Kette ragte um die Differenz ueber den gepickten Endpunkt
   hinaus (Nutzer-Befund 2026-10-09).

   Warum das lange unentdeckt blieb: beim ES_Element_90 ist ein-ang=0, dort
   ist (abs ein-dx) ZUFAELLIG richtig. Der frueher bestaetigende 90-Grad-Test
   konnte den Fehler strukturell nicht finden (Nutzer-Hinweis).

   Neu in vf_core.lsp: vf-element-laengs / vf-element-quer (hz-unabhaengige
   Projektion auf bzw. quer zur Fahrtrichtung), vf-set-es-masse setzt
   zusaetzlich ein-laengs / ein-quer. In vf_linienzug.lsp liest vfl-es-laengs
   den Wert mit Rueckfallkette; ein bewusst genulltes ein-dx gewinnt dabei,
   damit die rund zwei Dutzend Null-/Restore-Stellen keinen Doppelabzug
   bekommen.

   In BricsCAD bestaetigt: Separator+ES verbrauchen 875.83 mm gegen 875.79 mm
   Soll (0.04 mm), Hoehe 151.23 gegen 151.20 mm.

2) Endpunkt per Ziellinie statt per Klick

   Steht die Fahrtrichtung durch den Vorgaenger fest, ist die Laenge nicht
   mehr frei: die (um den ES-Querversatz seitlich versetzte) Bahn des
   ES-KS_AUS trifft eine Ziellinie in genau einem Punkt. Ein Klick kann den
   nur annaehern. Neue Frage mit zwei gleichwertigen Optionen (Radio-Buttons
   im Wizard-Modus): Ziellinie durch ZWEI PUNKTE zeichnen - Schnittpunkt wird
   gerechnet - oder wie bisher einen Punkt waehlen.

   REIN PLANAR: die Hoehe kommt weiterhin aus dem Gefaellewinkel, die
   Ziellinie bestimmt nur X/Y (Nutzer-Praezisierung).

   Beide Wege schreiben denselben einzelnen "DL"-Journaleintrag - Replay,
   Doppelklick-Edit und 2D/3D-Konvertierung muessen von Ziellinien nichts
   wissen. Die Bindung an die Linie besteht nur beim Bauen: wird die Linie
   spaeter verschoben, folgt die Kette NICHT.

   Abwaertskompatibilitaet: die neue Frage erzeugt einen zusaetzlichen
   Journaleintrag, den aeltere Ketten nicht haben. vfl-replay-peek-art sieht
   beim Replay nach, was tatsaechlich ansteht; steht dort ein "DL", ist es
   ein Altbestand und die Frage entfaellt - sonst haette sie den Laengenwert
   als Antwort verschluckt (Queue-Desync).

3) Bedienung: Achsenzwang und ruhige Ansicht

   vfl-getpoint-achse zwingt den Cursor beim Picken auf die Anschlussachse
   (SNAPANG + ORTHOMODE, kein BKS-Wechsel - getpoint liefert daher
   unveraenderte Koordinaten). Nur die horizontale Richtung wird erzwungen,
   die Hoehe bleibt frei.

   vfl-view-refresh zoomte vor JEDER Laengeneingabe hart auf _Extents - die
   Ansicht sprang bei grossen Anlagen nach jedem Klick weg. Jetzt wird nur
   noch eingegriffen, wenn der Baupunkt aus dem sichtbaren Ausschnitt laeuft,
   und dann per _ZOOM _Center unter Beibehaltung der Zoomstufe.

13 neue Unit-Tests (etage-laengs/-quer,
vfl-es-laengs, vfl-kreuz2, vfl-laenge-bis-ziellinie inkl. Realfall aus dem
BricsCAD-Log), Suite 533/533 gruen. lang-Paritaet geprueft.

Offen und bewusst nicht angefasst: vfl-winkel-machbar-p nutzt aus-dx/ein-dx
ebenfalls als Laengsmass und hat damit denselben Fehler (AS_30: 276 mm,
ES_30: 334 mm). Der saubere Fix fuellt ein-dx/aus-dx an der Quelle mit dem
Laengswert - das beruehrt rund 87 Fundstellen samt ihrer Null-/Restore-
Konvention und gehoert separat getestet.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-14 09:09:40 +02:00
2026-10-09 17:33:40 +02:00
2026-05-05 16:06:06 +02:00

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:

  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

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)

S
Description
No description provided
Readme MIT 2.8 GiB
Languages
Common Lisp 70%
Python 26.1%
Clean 2.5%
Batchfile 0.7%
NewLisp 0.6%
Other 0.1%