Auf der neuen Kollegen-Architektur (Stufe 0-2: Spec/Journal/Replay-System in vf_spec.lsp, Frage-Schale/Bauteil-Trennung) neu aufgebaut, nachdem der urspruengliche Stand (Commit e76e24e) auf einer aelteren Basis beruhte und per Rebase-Analyse als eigenstaendige, unabhaengige Erweiterung erkannt wurde (der Kollege hat nichts entfernt - diese Features existierten vorher nur lokal uncommitted). Drei Erweiterungen fuer "Neue Linie: GF" in vf-linienzug-modus: - Separator VOR/NACH direkt vor bzw. nach der Gefaellestrecke einfuegbar. - Aeussere Vorwahl "Wie soll die Laenge bestimmt werden?": Endpunkt waehlen (bisheriges Verhalten) oder Zielhoehe zuerst festlegen (Winkel wird daraus berechnet). - Dritte Option "Steigende GF" (Sonderfall, 0 bis 3 Grad): erlaubt eine GF, die statt zu fallen steigt. Neuer Helfer vfl-bogen-uebergang erkennt anhand der tatsaechlichen Frame-Neigung, ob 0/1/2 Uebergangsboegen (Vario_Bogen_auf_3/ab_3) noetig sind, und baut sie automatisch - im Normalfall (fallend->fallend) ein No-Op. Lisp/vf_spec.lsp (Kollegen-Spec/Headless-Bau-System) um die drei neuen Felder (laenge_modus/sep_vor/sep_nach/steigend_modus) erweitert, mit Defaults, die alte Specs unveraendert lassen - haelt die "Spec-Pfad == interaktiver Pfad"-Invariante seines Systems (TEST_HUNDM05/VF_SPEC_BAU) intakt. tests/test_vf_spec.lsp entsprechend mit neuen Testfaellen ergaenzt. Neuer Regressionstest TEST_LINIENZUG_STUFE2 (linienzug_tests_stufe2.json) sowie Anleitung doc/vf_linienzug_modus1_anleitung.md aus dem urspruenglichen Commit uebernommen; die Gefaelle-Hoehe/Winkel-Optionsreihenfolge im Testdatensatz an die jetzt geltende (Kollegen-)Konvention angepasst. Offen (bewusst zurueckgestellt): lib/vf_spec_export.py (Python-Vorwaerts- Emitter, Pendant zu vf_spec.lsp) noch nicht nachgezogen - siehe Folge-Commit. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
11 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 und doc/VarioFoerderer_Linienzug_Prinzipien.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.
| # | 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 | Horizontal-VF | Kettenanfang-Menue hat 6 Optionen (GF-Bogen, Vario-Kurve, Linie-GF, Linie-VF, Horizontal-VF, Linienende) |
| 7 | Endpunkt Horizontal-VF | Klick | Laenge/Richtung der ersten VF-Einheit |
| 8 | Ziel-Hoehe Eingang GF1 | 1980 | Hoehe, auf die der Eingangs-GF-Anteil der VF-Einheit einregelt |
| 9 | Ist der Endpunkt der Foerderer? | Nein | Innerhalb der VF-Einheit: "geht die Kette hier zu Ende?" |
| 10-13 | Naechstes im VarioFoerderer -> Vario-Kurve 90 rechts innen | - | Grundriss-Schwenk INNERHALB der laufenden VF-Einheit |
| 14 | Ist der Endpunkt der Foerderer? | Nein | s.o. |
| 15-16 | Horizontaler Foerderer, Endpunkt | Klick | Weiteres gerades VF-Sub-Segment |
| 17 | Ist der Endpunkt der Foerderer? | Nein | s.o. |
| 18-21 | Vario-Kurve 90 rechts innen | - | Zweiter Grundriss-Schwenk |
| 22 | Ist der Endpunkt der Foerderer? | Ja, nur Motorstation | Schliesst die 1. VF-Einheit ab (Motorstation, kein ES) |
| 23 | Ist das Kettenende (ES-Element)? | Nein, weiterbauen | Nach der Motorstation: geht die Kette weiter? |
| 24 | Zusaetzlichen Separator hier? | Nein | Optionaler Separator direkt an der Motorstation |
| 25 | Naechstes Element | Neue Linie: GF | Jetzt folgt ein reines Gefaellestrecke-Element (kein VF) |
| 26 | Laenge bestimmen ueber | Endpunkt waehlen | Alternativ: Zielhoehe zuerst festlegen (siehe vfl-gf-laenge-modus) |
| 27 | Endpunkt Gefaellestrecke | Klick | Bestimmt deltaL der GF-Geraden |
| 28-29 | Separator VOR / NACH? | Ja / Ja | GF-Stuecke werden ueber Separatoren mechanisch begrenzt |
| 30-31 | Gefaelle festlegen -> Neigungswinkel | 3 Grad | Direkter Winkel (Alternative: Zielhoehe -> Winkel wird berechnet) |
| 32 | Ist das Kettenende? | Nein, weiterbauen | 3-Optionen-Menue: Ja+ES / Ja ohne ES / Nein |
| 33 | Naechstes Element | Horizontal-VF (2. Einheit) | Neue VF-Einheit beginnt direkt am GF-Ausgang (Separator als Eingang) |
| 34-49 | (wie oben: Vario-Kurven, Auf/Ab-Foerderer 27 Grad) | - | s.o. |
| 50 | Ist der Endpunkt der Foerderer? | Ja, Motorstation + Kettenende | Startet den automatischen Kettenende-Abschluss |
| 51-53 | ES-Element setzen? / Winkel / Seite | Ja / 90 / links | Ausgangs-Element, spiegelbildlich zum AS-Element |
| 54 | Endpunkt Kettenende | Klick | Letzter gewuenschter Punkt der Kette |
| 55 | Ziel-Hoehe Kettenende | 2154 | Muss wieder exakt die Starthoehe sein |
| 56 | (automatisch, keine Eingabe) | - | Stufe-1/Stufe-2-Loeser rechnet, siehe Abschnitt 4 |
| 57 | GF2=86mm unter Mindestlaenge - trotzdem bauen? | Ja | Sicherheitsfrage, siehe Abschnitt 4 |
Wichtig zu Frage 9/14/17 ("Ist der Endpunkt der Foerderer?"): 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).
4. Stufe 1 / Stufe 2 - wie die letzte Strecke berechnet wird
Am Kettenende (Frage 55/56) 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 Zeilen "34-49" 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: 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=86mm, VF=286mm.
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 winziger
Hoehenrest von z.B. 49mm braucht demnach bereits ~935mm GF-Laenge - siehe
Abschnitt 5.a. GF2 im Beispiel (86mm) ist kuerzer als die uebliche
Mindestlaenge (400mm, *vfl-gf-min-laenge*) - deshalb die Rueckfrage in
Schritt 57 ("trotzdem mit 86mm 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. Im Standard-Testfall
(linienzug_tests.json) betraegt dieser Versatz ca. 637mm (dY), im
Stufe-2-Testfall ca. 638mm (dX, da die Fahrtrichtung dort anders liegt).
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.