y.wang fb567949be feat: Linienzug Modus 1 kann rueckwaerts bauen (ES als exakter Anker)
Bisher war der geklickte Punkt immer der KettenANFANG. Oft steht aber das
andere Ende fest - typisch der Anschluss an einen Kreisel. Modus 1 fragt
deshalb jetzt ganz am Anfang nach der Bau-Richtung:
  vorwaerts  = geklickter Punkt ist der Kettenanfang (alles wie bisher)
  rueckwaerts= er ist das Kettenende, genauer das KS_AUS des ES-Elements

ABLAUF RUECKWAERTS
ES setzen? + Winkel + Seite + Fahrtrichtung (2. Punkt) in EINEM Dialog, dann
"Neue Linie: GF" und die Laengenfrage mit drei Optionen:
  1 Kettenanfang klicken  -> + Neigungswinkel, Anfangshoehe wird gerechnet
  2 Anfangshoehe vorgeben -> + Neigungswinkel, Laenge wird gerechnet
  3 Parallel zum Kreisel  -> nur Abstand (nur mit ES waehlbar)
Danach ist die Kette fertig. Die Spiegelfrage "Ist das der Kettenanfang?"
mit optionalem AS und Weiterbauen ist bewusst NICHT enthalten (Nutzer-
Entscheidung: vorerst kleiner Umfang).

ANKER
Das ES wird mit insert-block-mixed-to-ks und xy-ref/z-ref="KS_AUS" EXAKT auf
den geklickten Punkt gesetzt; alles Weitere wird daraus zurueckgerechnet
(vfl-rueck-punkt) und dann normal vorwaerts platziert. Gleiches Ergebnis,
aber mit den erprobten Einfuege-Primitiven. Eine Rest-Ungenauigkeit landet
am Kettenanfang statt am Kreisel-Anschluss.

Option 3 spiegelt die Vorwaerts-Variante: Bogenseite = Gegenseite der
ES-Seite, Bogenwinkel hebt den gemessenen ES-Schwenk auf. Dafuer werden die
bereits getesteten Kerne vfl-par-bogen-waehlen/vfl-par-gf-laenge
wiederverwendet - die Zuordnung (ES 30 links -> 30-Grad-Bogen rechts usw.)
faellt daraus heraus, statt gepflegt zu werden.

ZWEI FEHLER, DIE DER ERSTE BRICSCAD-TEST GEFUNDEN HAT
1. vflw-gruppe-as-impl legt VIER Werte in die Pending-Queue (ja/nein,
   Winkel, Seite, Punkt). Die Ja/Nein-Antwort wurde nicht konsumiert, alles
   rutschte eine Position weiter - der Winkel bekam die "1" der Ja/Nein-
   Frage, Blockname "ES_Element_1_links". Die Frage wird jetzt gestellt und
   ausgewertet; "Nein" ist dabei sinnvoll belegt (Kette endet direkt am
   geklickten Punkt, Richtung ueber vfl-frage-fahrtrichtung-p2).
2. insert-block-ks-to-ks richtet immer den EINGANG eines Blocks aus.
   Rueckwaerts sitzt der Bogen VOR dem GF-Stueck, sein AUSGANG muss also auf
   der GF-Achse liegen - der Eingang ist um den Bogenschwenk vorzudrehen
   (hz-bogen = hz-ein - bogen-turn). Ohne das zeigte der Ausgang um genau den
   Bogenwinkel daneben, KS_AUS und KS_EIN trafen sich nicht. Gilt fuer den
   Probe-Bau UND das echte Einfuegen - waere nur eins gedreht, saesse der
   Bogen richtig orientiert an der falschen Stelle.

BEDIENUNG
- Kurze Entscheidungen im Rueckwaerts-Ablauf als Radio-Buttons statt
  Auswahlliste (vfl-menu-radio).
- Beim Klick auf den Kettenanfang haengt der Cursor auf der Kettenachse
  (neuer Wrapper vfl-in-point-achse ueber das vorhandene
  vfl-getpoint-achse): ab dort kann nur noch entlang dieser Achse gebaut
  werden, ein frei schwenkendes Gummiband gaukelte eine Freiheit vor.
- Zahlen-Dialoge belegen ihr Feld jetzt mit der Vorgabe vor. Die Prompts
  tragen sie ohnehin in Klammern ("[3]", "<2154.0>"), der Dialog hat sie nur
  ignoriert - bewusst generisch geloest (vflw-vorgabe-aus-prompt), die
  Luecke hatten alle Zahlen-Dialoge des Assistenten.
- vflw_as beschriftet Seite und Achse neutral, weil derselbe Dialog jetzt
  AS (vorwaerts) und ES (rueckwaerts) bedient; die Punkt-Anzeige heisst beim
  ES "Endpunkt".

ABWAERTSKOMPATIBILITAET
Die Richtungsfrage steht VOR der AS-Frage und journalisiert ihren WERT
("vor"/"rueck") statt eines Index - ein Index "1"/"2" waere von der
nachfolgenden AS-Ja/Nein-Antwort nicht zu unterscheiden. Fehlt der Eintrag,
ist es ein Alt-Journal und es wird vorwaerts gebaut. Dafuer der neue Wrapper
vfl-menu-strwert.

TESTS
12 neue file- und zeichnungsfreie Unit-Tests: vfl-rueck-punkt (Rundlauf
vorwaerts/rueckwaerts) und vflw-vorgabe-aus-prompt (gegen die echten
Prompt-Texte, inkl. der Stolperstellen "0 < Winkel <= 3" ohne schliessendes
">" und dem Nachsatz in runden Klammern). TEST_UNIT konnte noch nicht
laufen - BricsCAD war die ganze Sitzung geoeffnet. Der Rueckwaerts-Bau
selbst ist vom Nutzer in BricsCAD geprueft und bestaetigt.

SSG_LIB.cui ist das von BricsCAD neu erzeugte Kompilat zur Menue-Aenderung
des vorigen Commits.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-22 13:41:09 +02: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).

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%