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>
195 lines
11 KiB
Markdown
195 lines
11 KiB
Markdown
# 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-mitte` eine 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
|
|
von `tests/test_linienzug.lsp`) spielt exakt dieselbe Sequenz aus
|
|
`tests/testdata/linienzug_tests_stufe2.json` ab und meldet das
|
|
Ist-Ziel-Ergebnis in der Konsole.
|
|
- Debug-Log: mit `dbgopen`/dem zentralen Debug-Schalter (siehe
|
|
`Lisp/ssg_dbg.lsp`) lassen sich alle `GEOMETRIE:`/`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.
|