Die AS-Praeambel in Modus 1 fragt jetzt Winkel, Seite UND eine optionale Zufuehrungsachse (2. Punkt) - im Assistenten alles in einem Fenster (vflw_as_achse). Beide Angaben zusammen legen das AS vollstaendig fest: der 2. Punkt gibt die KS_EIN-Achse (Zufuehrung/Fahrtrichtung), links/rechts die AS-Variante und damit die KS_AUS-Richtung der Kette. Bisher galt die Achse nur beim 30-Grad-Element und ERSETZTE dort die Seitenfrage. Darauf setzt die neue 5. Option der gf-laenge-modus-Frage auf, intern "parallel" (vfl-gf-parallel-kreisel): AS -> GF-Stueck -> GF-Bogen aus EINEM Abstandswert, gemessen senkrecht zur Zufuehrungsachse von AS-KS_EIN bis Bogen-KS_AUS. Kein Separator dazwischen, damit der Abstand exakt getroffen wird; die Kettenende-Frage stellt der Zweig selbst NACH dem Bau. Waehlbar nur am Kettenanfang mit AS UND Achse. Der Bogen ist nicht verdrahtet: gewaehlt wird der, der den gemessenen Grundriss-Schwenk des AS-Blocks aufhebt (vf-element-plan-turn) - mit den vorhandenen Bausteinen AS 30 -> 30-Grad-Bogen, AS 90 -> 90-Grad-Bogen, immer zur Gegenseite. Querversatz von AS und Bogen wird gemessen statt gerechnet; die Bogen-Probe laeuft dabei auf dem IDEALISIERTEN 3-Grad-Rahmen, auf dem der echte Bogen spaeter sitzt (auf dem AS-Rahmen gemessen lag der Abstand im BricsCAD-Test um 0.5 mm daneben). Journal: [STR winkel][STR seite][PT p2 | NIL]. Welche Fragen gestellt wurden, wird nicht journalisiert, sondern beim Replay an der Eintragsart erkannt - alte Ketten bleiben ohne Sonderbehandlung editierbar. Die Journal-Werkzeuge (vf_linienzug_grammatik.py, vf_spec_export.py, vf_journal_export.py, vf_spec.lsp, test_hm_recformat.lsp) kennen das optionale Achsen-Token. Tests: 11 neue Unit-Tests fuer die reinen Kerne vfl-par-bogen-waehlen und vfl-par-gf-laenge (tu-tests-vfl-parallel), TEST_UNIT 701/701 gruen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
15 KiB
VF-Linienzug Modus 1 - Anleitung anhand eines realen Beispiels
Diese Anleitung erklaert Modus 1 des VF-Linienzugs ("Manuelle Eingabe",
vf-linienzug-modus in Lisp/vf_linienzug.lsp) nicht abstrakt, sondern
Schritt fuer Schritt anhand eines echten, in BricsCAD gebauten und
verifizierten Beispiels. Dasselbe Beispiel ist als automatisierter
Regressionstest hinterlegt: tests/testdata/linienzug_tests_stufe2.json,
aufrufbar in BricsCAD ueber TEST_LINIENZUG_STUFE2 (siehe
tests/test_linienzug.lsp). Wer die Zahlen selbst nachvollziehen will, kann
diesen Testlauf jederzeit wiederholen.
Fuer die Architektur-Details (Frame-Kette, Journal/XDATA, Wizard-Dialoge)
siehe doc/variofoerderer.md. Diese Anleitung konzentriert sich auf die
Bedienung und die typischen Stolperfallen.
1. Was ist Modus 1?
Modus 1 baut eine VF-Linienzug-Kette interaktiv, Element fuer Element: Sie klicken/geben nacheinander Punkte, Laengen, Winkel und Ja/Nein- Entscheidungen ein, und jede Antwort erzeugt sofort ein Stueck Geometrie (Umlenkstation, Gefaellestrecke, VF-Einheit, Vario-Kurve, ...). Das unterscheidet Modus 1 von:
- Modus 2 (Ziel-Hoehe-Modus): Sie zeichnen vorher einen Pfad (LINE/ARC- Kette) und eine Zielhoehe, das Programm loest die Kette automatisch.
- Modus 3 (Vorwaerts-Nachbau): rekonstruiert eine Kette aus einer bestehenden Zeichnung (Legacy, wird umgebaut).
Aufruf: Befehl FOERDERANLAGE (bzw. VarioFoerderer) -> Anlagen-Typ
"Linienzug" waehlen -> Modus "1" (Manuelle Eingabe).
Jede Eingabe wird in einem Journal mitgeschrieben und als XDATA auf den
fertigen VF_n-Block geschrieben. Ein Abbruch (ESC) loescht dadurch nichts -
die bis dahin gebaute Teilkette bleibt als Block stehen und ist per
Doppelklick weiter bearbeitbar.
2. Das Beispiel im Ueberblick
Die Kette aus linienzug_tests_stufe2.json sieht so aus (Grundriss, von
oben betrachtet):
Start (Z=2154) --AS 90 links--> Horizontal-VF --Vario 90 rechts innen-->
--Horizontal-VF--> --Vario 90 rechts innen--> Linie-GF (3 Grad, Separator
vor+nach) --> Horizontal-VF --Vario 30 rechts innen--> Auf 27 Grad
--Vario 30 links aussen--> Kettenende (Motorstation + ES 90 links)
Kurz gesagt: die Kette startet auf Z=2154, macht zwei 90-Grad-Schwenks im Grundriss, faellt ueber ein eigenstaendiges GF-Stueck (3 Grad) etwas ab, steigt dann in einer zweiten VF-Einheit um 27 Grad wieder an, und muss am Ende exakt auf die Starthoehe (2154mm) zurueckkommen. Genau dieser letzte Schritt - der Rest-Hoehenausgleich passt zu keinem der Standard-Winkel mehr - ist der interessante Teil (siehe Abschnitt 4, Stufe 1/Stufe 2).
3. Die Fragen der Reihe nach
Diese Tabelle zitiert die tatsaechlichen Konsolen-Fragen aus dem Testfall
(Kommentar-Spalte = kommentar-Feld im JSON) und erklaert, was jede Frage
bedeutet. Die Datei hat aktuell 62 Eingabe-Eintraege (ohne das Kopf-Objekt);
mehrere Eintraege pro Zeile sind zu einem Schritt zusammengefasst, wo eine
Antwort mehrere JSON-Eintraege verbraucht (z.B. eine Vario-Kurve = Winkel +
Seite + Variante = 3 Eintraege).
| # (JSON-Eintraege) | Frage (sinngemaess) | Antwort im Beispiel | Bedeutung |
|---|---|---|---|
| 1 | Startpunkt der Kette | Klick (X/Y) | Beliebiger Punkt in der Zeichnung |
| 2 | Hoehe (Z) Startpunkt | 2154 | Absolute Einbauhoehe des Kettenanfangs |
| 3 | AS-Element setzen? | Ja | Umlenkstation am Anfang - "AS" = Ausgangs-/Anfangs-Element |
| 4 | AS-Element Winkel | 90 Grad | Baugroesse des Umlenkstations-Blocks (90 oder 30 Grad Kurvenradius) |
| 5 | AS-Seite | links | Auf welcher Seite die Umlenkstation seitlich ausschwenkt |
| 6 | Naechstes Element | Neue VF mit horizontalem Anfang | Kettenanfang-Menue hat 6 Optionen (GF-Bogen, Vario-Kurve, Linie-GF, Linie-VF, Horizontal-VF, Linienende) |
| 7 | Endpunkt der Linie | Klick | Laenge/Richtung der ersten VF-Einheit |
| 8 | Ziel-Hoehe fuer den horizontalen VF-Anfang | 1980 | Hoehe, auf die der Eingangs-GF-Anteil der VF-Einheit einregelt |
| 9-10 | Zusaetzlichen Separator VOR/NACH dem horizontalen Stueck? | Nein / Nein | Optionale Separatoren direkt am VF-Einlauf |
| 11 | Ist der Endpunkt der Foerderer? | Nein | Innerhalb der VF-Einheit: "geht die Kette hier zu Ende?" |
| 12-15 | Naechstes im VarioFoerderer -> Vario-Kurve 90 rechts innen | - | Grundriss-Schwenk INNERHALB der laufenden VF-Einheit |
| 16 | Ist der Endpunkt der Foerderer? | Nein | s.o. |
| 17-18 | Horizontaler Foerderer, Endpunkt | Klick | Weiteres gerades VF-Sub-Segment |
| 19-20 | Zusaetzlichen Separator VOR/NACH? | Nein / Nein | s.o. |
| 21 | Ist der Endpunkt der Foerderer? | Nein | s.o. |
| 22-25 | Vario-Kurve 90 rechts innen | - | Zweiter Grundriss-Schwenk |
| 26 | Ist der Endpunkt der Foerderer? | Ja, nur Motorstation | Schliesst die 1. VF-Einheit ab (Motorstation, kein ES) |
| 27 | Ist das Kettenende (ES-Element)? | Nein, weiterbauen | Nach der Motorstation: geht die Kette weiter? |
| 28 | Zusaetzlichen Separator hier? | Nein | Optionaler Separator direkt an der Motorstation |
| 29 | Naechstes Element | Neue Linie: GF | Jetzt folgt ein reines Gefaellestrecke-Element (kein VF) |
| 30 | Laenge bestimmen ueber | Endpunkt waehlen | Alternativ: Zielhoehe zuerst festlegen (siehe vfl-gf-laenge-modus) |
| 31 | Ist das Kettenende? | Nein, weiterbauen | 3-Optionen-Menue: Ja+ES / Ja ohne ES / Nein - kommt VOR der Gefaelle-/Laengenberechnung |
| 32 | Endpunkt Gefaellestrecke | Klick | Bestimmt deltaL der GF-Geraden |
| 33-34 | Separator VOR / NACH? | Ja / Ja | GF-Stuecke werden ueber Separatoren mechanisch begrenzt |
| 35-36 | Gefaelle festlegen -> Neigungswinkel | 3 Grad | Direkter Winkel (Alternative: Zielhoehe -> Winkel wird berechnet) |
| 37 | Naechstes Element | Neue VF mit horizontalem Anfang (2. Einheit) | Neue VF-Einheit beginnt direkt am GF-Ausgang (Separator als Eingang) |
| 38-55 | (wie oben: Separatoren, Vario-Kurven, Auf/Ab-Foerderer 27 Grad) | - | s.o.; Auf/Ab-Foerderer nutzt Index 8 der gueltigen Winkeltabelle-Kandidaten = 27 Grad |
| 56 | Ist der Endpunkt der Foerderer? | Ja, Motorstation + Kettenende | Startet den automatischen Kettenende-Abschluss |
| 57-59 | ES-Element setzen? / Winkel / Seite | Ja / 90 / links | Ausgangs-Element, spiegelbildlich zum AS-Element |
| 60 | Endpunkt Kettenende | Klick | Letzter gewuenschter Punkt der Kette |
| 61 | Ziel-Hoehe Kettenende | 2154 | Muss wieder exakt die Starthoehe sein |
| 62 | GF2=319mm unter Mindestlaenge (400mm) - trotzdem bauen? | Ja | Sicherheitsfrage, siehe Abschnitt 4 - Stufe-1/Stufe-2-Loeser rechnet dazwischen automatisch |
Wichtig zu "Ist der Endpunkt der Foerderer?" (Eintraege 11/16/21/26 usw.): Diese Frage kommt IMMER, wenn Sie innerhalb einer laufenden VF-Einheit einen Punkt gepickt haben. "Nein" heisst: der gepickte Punkt ist nur eine Zwischen-Etappe, es geht in derselben VF-Einheit weiter (Vario-Kurve, weiteres gerades Stueck, Auf/Ab). "Ja" beendet die VF-Einheit mit einer Motorstation - optional zusaetzlich mit ES-Element (echtes Kettenende).
3a. Neu seit 2026-10-21: Zufuehrungsachse und "Parallel zum Kreisel"
Die Tabelle oben zitiert eine aeltere Aufzeichnung. Zwei Dinge sind seitdem dazugekommen (aeltere Ketten bleiben unveraendert editierbar - das Journal erkennt am Eintragstyp, welche Fragen damals gestellt wurden):
Zufuehrungsachse (2. Punkt) - jetzt bei BEIDEN AS-Winkeln. Nach Winkel
und Seite (Eintrag 4/5) fragt der AS-Dialog zusaetzlich einen zweiten Punkt
ab; im Assistenten stehen alle drei Angaben in EINEM Fenster
(vflw_as_achse). Die beiden Angaben beschreiben verschiedene Dinge und
legen das AS erst zusammen vollstaendig fest:
| Angabe | legt fest |
|---|---|
| 2. Punkt | Richtung der KS_EIN-Achse = die Zufuehrung, z.B. die Kreisel-Laufrichtung. Der Startpunkt bleibt der Sitz des AS-Elements, der zweite Punkt gibt nur die Richtung. |
| links/rechts | AS-Variante und damit die KS_AUS-Richtung, also wohin die Kette nach dem Ausschleusen laeuft. |
Der Dialog zeigt den Startpunkt mit an (er ist der Sitz des AS-Elements UND der Ausgangspunkt der Achse); waehrend der Punktwahl haengt das Gummiband an ihm. Mit dem gesetzten Punkt ist der Dialog fertig und schliesst direkt - die ermittelte Achsrichtung meldet die Konsole. Nur ein mit ESC abgebrochener Pick zeigt den Dialog noch einmal (mit den vorher gewaehlten Werten), damit nach einem Fehlklick nichts verloren geht.
Die Achse ist optional: ohne Punkt laeuft alles wie frueher ueber die Richtung des naechsten Klicks. Frueher ersetzte die Achse beim 30-Grad- Element die Seitenfrage (die Seite wurde aus der Lage des naechsten Punkts erraten); das gilt nur noch beim Nachbau alter Ketten.
"Parallel zum Kreisel weiterbauen" - 5. Option der Frage "Wie soll die Laenge dieser Gefaellestrecke bestimmt werden?" (Eintrag 30). Sie erscheint nur am Kettenanfang mit AS-Element UND festgelegter Zufuehrungsachse, weil sie beides als Bezug braucht. Gebaut wird AS -> kurzes GF-Stueck -> GF-Bogen, sodass die Kette danach parallel zur Zufuehrungsachse weiterlaeuft. Einzige Eingabe ist der Abstand, gemessen senkrecht zur Zufuehrungsachse von KS_EIN des AS bis KS_AUS des Bogens; die Laenge des GF-Stuecks dazwischen wird daraus berechnet. Ein Separator zwischen GF-Stueck und Bogen wird bewusst NICHT gesetzt, damit der Abstand exakt getroffen wird. Der Bogen wird nicht geraten, sondern so gewaehlt, dass er den gemessenen Grundriss-Schwenk des AS-Blocks genau aufhebt - immer zur Gegenseite der AS-Seite:
| AS | Bogen |
|---|---|
| 30 Grad links | 30 Grad rechts |
| 30 Grad rechts | 30 Grad links |
| 90 Grad links | 90 Grad rechts |
| 90 Grad rechts | 90 Grad links |
Diese Tabelle ist das ERGEBNIS der Messung, keine gepflegte Zuordnung im Code - sie bleibt auch dann richtig, wenn ein Element anders vermessen ist als hier erwartet.
Direkt nach dem Bogen kommt die gewohnte Frage "Ist das das Kettenende?" (Ja mit ES / Ja ohne ES / Nein, weiterbauen) - hier ausnahmsweise NACH dem Bau, weil es keine gepickte Laenge gibt, von der ein ES-Fussabdruck abzuziehen waere.
4. Stufe 1 / Stufe 2 - wie die letzte Strecke berechnet wird
Am Kettenende (Eintrag 61/62) ist die Aufgabe: von der aktuellen Position/
Hoehe zur gewuenschten Ziel-Hoehe kommen, UND dabei die feste Baugruppe
Motorstation + Separator (+ ES-Element, falls gewaehlt) unterbringen. Das
Programm versucht das in zwei Stufen (vfl-winkel-stufe-entscheidung,
Lisp/vf_linienzug.lsp):
- Stufe 1 - Winkeltabelle: Es probiert der Reihe nach die festen
Vario-Kurven-Winkel 3/6/9/12/15/18/21/27/33/39/45/51 Grad durch
(
berechne-alle-winkel) und prueft, ob einer davon eine PASSENDE, positive VF-Laenge ergibt. Das ist der Normalfall (siehe die Zeile "38-55" in der Tabelle: der Auf/Ab-Foerderer in der 2. VF-Einheit findet so einen passenden Winkel, Auswahl-Index 8 = 27 Grad). - Stufe 2 - Horizontale Mitte + GF-Ausgleich: Wenn KEIN Tabellenwinkel
passt (wie im Beispiel am Kettenende: alle 12 Kandidaten ergeben eine
negative VF-Laenge, die Reststrecke ist einfach zu kurz fuer einen echten
Vertikalbogen), rechnet
berechne-horizontale-mitteeine andere Loesung: ein HORIZONTALES VF-Stueck (winkel=0) plus eine kurze Gefaellestrecke (GF2), die exakt den fehlenden Hoehenunterschied ausgleicht. Im Beispiel: GF2=319mm, L_VF=48mm.
Die Formel dahinter ist simpel und lohnt sich zu verinnerlichen: bei einem
FESTEN Neigungswinkel von 3 Grad braucht ein Hoehenausgleich von H
Millimetern eine GF-Laenge von H / tan(3 Grad) ~= H * 19. Ein Hoehenrest
von z.B. 17mm braucht demnach bereits ~320mm GF-Laenge - siehe Abschnitt
5.a. GF2 im Beispiel (319mm) liegt knapp unter der uebliche Mindestlaenge
(400mm, *vfl-gf-min-laenge*) - deshalb die Rueckfrage im letzten Eintrag
("trotzdem mit 319mm bauen?"). "Ja" baut trotzdem exakt mit dem berechneten
Wert; "Nein" wuerde den bis dahin gebauten Teil verwerfen (siehe
vfl-loesche-seit/vfl-modus-abbruch-sichern).
Merksatz: Stufe 1 sucht einen "sauberen" Standard-Winkel; Stufe 2 ist der Rettungsanker, wenn dafuer schlicht nicht genug Platz ist - er tauscht einen Vertikalbogen gegen "flach + minimaler GF-Ausgleich".
5. Typische Stolperfallen
a) Gefaellestrecke (GF) ist "laengenhungrig" bei 3 Grad
3 Grad ist ein SEHR flacher Winkel. tan(3 Grad) ~= 0.0524, also braucht
jeder Millimeter Hoehenunterschied ungefaehr 19mm Laenge:
Laenge = Hoehendifferenz / tan(3 Grad) ~= Hoehendifferenz * 19
Wer nur wenige mm bis cm Hoehenunterschied ausgleichen will, bekommt damit schnell GF-Laengen im halben bis ganzen Meterbereich. Das ist die haeufigste Ursache fuer "die Reststrecke ist zu kurz"-Meldungen und fuer den Stufe-2-Fallback aus Abschnitt 4. Falls eine GF partout nicht passt: entweder mehr Grundriss-Laenge einplanen, oder pruefen, ob ein Vertikalbogen (Vario-Kurve mit groesserem Winkel, siehe Stufe 1) die bessere Wahl ist.
b) Motorstation + Separator + ES-Element haben einen FESTEN Fussabdruck
Am Kettenende ist nicht die ganze gepickte Reststrecke frei verfuegbar -
ein fester Anteil ist fuer Motorstation und Separator reserviert
(*vfk-feste-horizontal-kettenende* = 800mm = 500mm Motorstation + 300mm
Separator), und falls zusaetzlich ein ES-Element gewaehlt wird, kommt dessen
eigener Fussabdruck (abhaengig von 30/90 Grad Bauform) noch oben drauf. Wer
diese festen 800mm (+ ES) nicht einplant, landet schnell bei einer negativen
"freien" Reststrecke - genau der Fall, der in Abschnitt 4 den Stufe-2-
Fallback ausloest.
c) Seitlicher Versatz bei 90-Grad-AS/ES-Elementen ist NORMAL
Ein AS- oder ES-Element mit 90 Grad Bauform dreht die Fahrtrichtung nicht
einfach "auf der Stelle" - sein Block hat eine reale Baugroesse mit einem
seitlichen (quer zur Fahrtrichtung liegenden) Versatz. Sowohl im Standard-
Testfall (linienzug_tests.json) als auch im Stufe-2-Testfall
(linienzug_tests_stufe2.json) betraegt dieser Versatz ca. 638mm (dort als
erwartung_dx_mm dokumentiert, da die Fahrtrichtung am Kettenende auf der
Y-Achse liegt und sich der Versatz dadurch in X statt in Y zeigt).
Das ist kein Baufehler - es ist die tatsaechliche Geometrie des
90-Grad-ES/AS-Blocks. Ein "Ist-Ziel-Report" mit einer Restabweichung von
ca. 638mm quer zur letzten Fahrtrichtung, aber ~0mm in Laengs-/Hoehenrichtung,
ist ein KORREKTES Ergebnis, keine Abweichung, die weiter untersucht werden
muss.
6. Nachvollziehen / Nachbauen
- Live in BricsCAD:
FOERDERANLAGE-> Linienzug -> Modus 1, und die Eingaben aus der Tabelle in Abschnitt 3 der Reihe nach eintippen/klicken. - Automatisiert (ohne Klicks): Befehl
TEST_LINIENZUG_STUFE2(nach Laden vontests/test_linienzug.lsp) spielt exakt dieselbe Sequenz austests/testdata/linienzug_tests_stufe2.jsonab und meldet das Ist-Ziel-Ergebnis in der Konsole. - Debug-Log: mit
dbgopen/dem zentralen Debug-Schalter (sieheLisp/ssg_dbg.lsp) lassen sich alleGEOMETRIE:/GEOMETRIE ERFOLG:- Zeilen in eine.dbg-Datei im Log-Verzeichnis mitschreiben - hilfreich, um genau wie in diesem Beispiel eine reale Sitzung nachtraeglich in einen Testfall zu verwandeln.