[ADD] AS/ES-Koordinatensysteme als K1/K2 exportieren + Kollision/Schleuselemente daran ausrichten

Export (Lisp/export.lsp):
- Neue csv:vfgf-k-kos-strings leitet fuer VF_n/GF_n-Wrapper K1 (AS/KS_EIN) und
  K2 (ES/KS_AUS) aus den verschachtelten AS_Element/ES_Element ab (via
  ssg-collect-nested-inserts) und schreibt sie wie K1-K4 als Positions-String.
  Bisher waren die K-Spalten fuer Strecken leer.

Kollisionspruefung Kreisel<->GF/VF (lib/export_neighbors.py):
- compute_neighbor_ids testet Strecken (GF/VF UND "ILS 2.0 Strecke - Modul")
  nicht mehr ueber die grosse Wrapper-Box, sondern ueber je eine kleine feste
  Box an der AS- (K1) und ES-Position (K2). Fallback auf Wrapper-Box, wenn
  K1/K2 fehlen (Altbestand).

Schleuselement-Positionen (lib/export_neighbors.py):
- compute_strecke_kreisel_schleus setzt Aus-/Einschleuselement ans AS/ES-KOS,
  um eine halbe Box entlang der Foerderachse nach aussen versetzt (AS: davor,
  ES: dahinter) - realistischer als der bisherige Kreiselrand-Punkt.

Keine Magic Numbers (cfg/export.cfg [Boundingbox]):
- element_box_laenge/breite/hoehe_mm (250/100/30) ersetzen die WEICHE_BOX_*-
  Konstanten; gelesen von load_element_box_mm und an alle Rechenfunktionen
  durchgereicht (WEICHE_BOX_* nur noch dokumentierter Fallback).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-04 14:00:52 +02:00
parent 29b7bf1a10
commit c88be420be
4 changed files with 254 additions and 40 deletions
+15
View File
@@ -142,6 +142,21 @@ debug_log=1
# nicht gesetzt.
bb_minimum_height_mm=1
# Feste Bounding-Box-Masse (mm) der synthetischen, beim Export erzeugten
# Elemente OHNE eigene Zeichnungsgeometrie: der ILS-Weichen an Kreisel-
# Beruehrpunkten sowie der ILS-Ein-/Ausschleuselemente an den GF/VF-Strecken-
# enden (lib/export_neighbors.py: compute_kreisel_touch_switches /
# compute_strecke_kreisel_schleus). Dieselben Masse dienen als feste
# Kollisionsbox der AS/ES-Elemente bei der Nachbarschaftspruefung Kreisel<->
# GF/VF (compute_neighbor_ids, statt der grossen Wrapper-Box).
# LAENGE liegt QUER zur Foerder-/Kreiselachse, BREITE laengs (siehe
# _oriented_box_aabb). Der Halbe-Box-Versatz der Schleuselemente gegenueber
# dem AS/ES-Koordinatensystem betraegt BREITE/2 entlang der Foerderachse.
# Defaults (falls nicht gesetzt): 250 / 100 / 30.
element_box_laenge_mm=250
element_box_breite_mm=100
element_box_hoehe_mm=30
[Kreisel]
# Kreisel-Durchmesser (Antriebs-/Spannstation AN8/SP8) in mm. Quelle der
# Wahrheit ist data/json/component_defaults.json ("kreisel"."durchmesser",