[CHANGE] doc/plan und doc/todo angelegt, interne Analyse-/TODO-Dokumente dorthin verschoben

doc/todo/: TODO-plan-vf-interactive.md -> plan-vf-interactive.md, TODO-modus2-achsenweise-bilanz.md -> modus2-achsenweise-bilanz.md (offene Fahrplaene/TODOs).
doc/plan/: KS-Frame-Architektur.md, vf-parameter-struct-analyse.md, translate.md, Entwicklungsplan.md (Architektur-Analysen und Planungsdokumente, kein Anwender-Material).

Alle internen Verweise (CLAUDE.md, Lisp/README.md, README.md, doc/variofoerderer.md, Lisp/vf_spec.lsp, lib/dxf_vf_abbild.py, lib/vf_spec_export.py, tests/test_hm_recformat.lsp, tests/test_vf_geometrie.py, tests/test_vf_headless_statisch.py) auf die neuen Pfade angepasst. Reine Pfad-Updates in Kommentaren/Docstrings, keine funktionale Aenderung - Python-Syntax nach dem Umbau geprueft.

Anwender-/Entwickler-Referenzdoku (faq.md, kommandos.md, tools.md, dbg2lsp.md, csv-export.md, json-input-lisp.md, lisp_methods.md, LispTests.md, variofoerderer.md, vf_linienzug_modus1_anleitung.md) bleibt direkt in doc/.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-10-09 10:56:54 +02:00
parent fe4637d7df
commit 5aed90dd56
16 changed files with 14 additions and 14 deletions
+108
View File
@@ -0,0 +1,108 @@
# KS-Frame-Architektur — Aufbaulogik
## Kernidee
Jeder 3D-Block enthaelt eingebettete **KS_EIN**- und **KS_AUS**-Teilbloecke
(Koordinatensystem-Marker). Statt Winkel und Position manuell zu berechnen,
wird die Kette der Bloecke rein mathematisch verknuepft:
```
KS_AUS(n) ──► KS_EIN(n+1) ──► Block(n+1) eingefuegt ──► KS_AUS(n+1) ──► ...
```
Jeder **Frame** = `(P xu yu zu)` — Ursprung + 3 normierte Einheitsvektoren
(Fahrtrichtung, links-senkrecht, hoch).
---
## Schritt 1 — Mathematisches Fundament (`vf_core.lsp`)
Reine Hilfsfunktionen ohne Seiteneffekte:
| Funktion | Eingabe → Ausgabe |
|---|---|
| `ks-frame-extract` | Rohdaten `(origin x-end y-end z-end)` → normierter Frame `(P xu yu zu)` |
| `vec3-normalize` | Vektor → Einheitsvektor |
| `vec3-cross` | (a, b) → Kreuzprodukt |
| `mat3-mul-vec3` | 3×3-Matrix × Vektor |
| `mat3-from-frames` | `(xt yt zt, xe ye ze)` → Rotationsmatrix R mit `R*xe=xt` |
| `make-frame-from-dir` | Punkt + Richtungsvektor → vollstaendiger Frame (yu=links-horizontal, zu=hoch) |
---
## Schritt 2 — Kernfunktion `insert-block-ks-to-ks` (`vf_core.lsp`)
```lisp
(insert-block-ks-to-ks blockname target-frame) → KS_AUS-frame
```
Ablauf intern:
1. Block bei `(0 0 0)` einfuegen (Rohzustand)
2. KS_EIN und KS_AUS aus Block extrahieren
3. Rotationsmatrix berechnen: `R = mat3-from-frames(xt yt zt, xe ye ze)`
4. Translation: `t = P_target − R × P_EIN`
5. 4×4-Transformationsmatrix `T4` aufbauen und auf Block anwenden via `vla-TransformBy`
6. KS_AUS-Frame mathematisch mitrotieren (kein zweites Extrahieren noetig)
Das ist die einzige Funktion, die alle spaetere Module brauchen.
---
## Schritt 3 — Gefaellestrecke Modus 3 (`Gefaellestrecke.lsp`)
Ersetzt die alte positions-basierte Einfuegung durch Frame-Kettung:
**Vorher**: `aktuell-pt` (nur 2D-Punkt) + manuelle Winkelrechnung
**Nachher**: `aktuell-frame` (vollstaendiger 3D-Frame) propagiert durch die
gesamte Streckenkette
- Linie-Segment: `make-frame-from-dir(endpunkt, xu-incl)` → neuer Frame
- Bogen-Segment: `insert-block-ks-to-ks(blockname, aktuell-frame)` → gibt
direkt den Folge-Frame zurueck
---
## Schritt 4 — VarioFoerderer (`vf_standard.lsp` / `vf_etage.lsp`)
Gleiche Umstellung wie Schritt 3, aber fuer gerade Foerderstrecken:
- `insert-block-by-ks` und `insert-rotated-block-with-ks` → ersetzt durch
`insert-block-ks-to-ks`
- `variofoerderer-einfuegen` und `vf-etage-einfuegen`: `startpunkt` → `startframe`
---
## Warum diese Reihenfolge?
```
Schritt 1: Fundament legen (keine Abhaengigkeiten)
↓
Schritt 2: Kernfunktion auf Fundament aufsetzen
↓
Schritt 3: Gefaellestrecke zuerst — komplexer (3D-Neigung + Boegen)
↓
Schritt 4: VarioFoerderer — einfacher (nur ebene Kurven)
```
---
## Zusammenfassung in einem Satz
Die bisherige positionsbasierte Block-Einfuegung (Punkt + Winkel) wurde
durch eine vollstaendige **3D-Frame-Kettung ueber
KS_EIN/KS_AUS-Koordinatensysteme** ersetzt, sodass beliebige raeumliche
Orientierungen korrekt durch die gesamte VarioFoerderer- und
Gefaellestrecke-Anlage propagiert werden.
---
## Betroffene Dateien
| Datei | Aenderung |
|---|---|
| `Lisp/vf_core.lsp` | Schritt 1 + 2: neue Hilfsfunktionen und `insert-block-ks-to-ks` |
| `Lisp/Gefaellestrecke.lsp` | Schritt 3: Modus-3-Kette auf Frame-Basis umgestellt |
| `Lisp/vf_standard.lsp` | Schritt 4: VarioFoerderer auf Frame-Basis umgestellt |
| `Lisp/vf_etage.lsp` | Schritt 4: Etagen-VarioFoerderer auf Frame-Basis umgestellt |
| `Lisp/KreiselInsert.lsp` | Bugfix: `block-pfad`-Kontamination behoben (2D/3D-Konflikt) |