y.wang ce4ad0f328 fix: Fussabdruecke aller Festbauteile im Segmentbudget (Modus 2)
Leitsatz, aus dem alle Einzelaenderungen folgen (neu als Abschnitt 0 in
doc/VarioFoerderer_Linienzug_Prinzipien.md): die gezeichneten GERADEN
besitzen den Pfad, ein gezeichneter Bogen ist Hilfsgeometrie und nennt nur
Ort und Drehsinn. Jedes fest gebaute Teil zieht seine Laenge von dem
Segment ab, auf dem es steht - und zwar in LAENGEN- UND HOEHENbilanz mit
demselben, GEMESSENEN Wert.

Behoben:
- AS-Element: Fussabdruck wurde bei vf-start = 0 gar nicht abgezogen
  (die Trimmung lief nur im Front-Lauf, der dort leer ist). Jetzt gemessen
  aus dem gebauten KS_AUS - ein aus dem Block-dx gerechneter Wert lag
  184 mm daneben.
- Abschlussbogen + Motorstation: standen auf dem letzten Segment des
  VF-Laufs, fehlten aber im Budget (feste-vf traegt den Motor nur im Zweig
  OHNE flache Zone).
- ES-Element: die letzte Gerade reservierte nur den Laengsanteil. Jetzt die
  Strecke, die auch den Querversatz aufhebt (vfl-es-achs-reserve) - Vorgabe:
  quer zur KS_AUS-Achse MUSS 0 sein, laengs darf abweichen, dZ MUSS 0 sein.
- ES-Abzug griff auch, wenn ein Back-Lauf zwischen VF-Lauf und ES liegt,
  und verkuerzte dann das falsche Segment um die volle ES-Laenge (878 mm).
  Jetzt nur noch bei direktem Anschluss (vf-ende = n-1).
- Eck-Bauteile: Vario-Kurve/Gefaellebogen ersetzen den gezeichneten Bogen
  mit eigenem Fussabdruck. Die Differenz der Tangentenabstaende geht als
  Zuschlag an beide angrenzenden Geraden (vfl-eck-korrekturen/-zerlegen),
  damit die Mittellinie beide beruehrt. Der gezeichnete Radius kuerzt sich
  dabei heraus. GF-Boegen werden geneigt eingebaut - ihr Grundriss-
  Fussabdruck wird mit vfl-projiziere-neigung projiziert.
- Kletterlaenge wurde anteilig mit der Planlaenge im Zaehler und dem
  korrigierten climber-span im Nenner verteilt; die Anteile summierten sich
  dadurch auf weniger als 1.
- Absturz bei fehlendem Uebergangsbogen: get-bogen-mass wurde zweimal fuer
  dieselbe Suche aufgerufen und sein nil ungeprueft an
  vfl-projiziere-neigung gereicht.

Messreihe ueber die Sitzung (gleicher Pfad, Abweichung quer):
695.7 -> 270 -> 139.5 -> 98.5 -> 45.7 -> 2.4 -> 0.2 mm, dZ durchgehend 0.
Beide Pfad-Varianten (Ecke als Vario-Kurve bzw. als GF-Bogen) landen auf
demselben Wert - 0.2 mm ist die Messaufloesung, kein Restfehler.

21 neue file-freie Unit-Tests mit den echten Messwerten; TEST_UNIT 866/866.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-26 14:29:43 +01:00
2026-10-14 15:09:10 +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).

Einstieg:

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

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):

bin\run_tests.bat --lisp

Python-Tests (in der .venv):

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), alle offenen TODOs gesammelt in doc/todo.md (Detail-Fahrplaene 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.4%
Python 25.7%
Clean 2.5%
Batchfile 0.7%
NewLisp 0.6%
Other 0.1%