4ce2a02205
Die Streckenbloecke GF_N und VF_N tragen Winkel und Seite ihres AS-/ES-
Elements bereits als Attribute des gemeinsamen Schemas (WINKEL_AS/SEITE_AS/
WINKEL_ES/SEITE_ES, *strecke-attr-front* in ssg_core.lsp). Diese Information
landet jetzt auch im details-JSON des Sivas-Exports.
Zuordnung (Sivas-Hierarchie: 4431/4432 schalten Winkel und Seite frei):
4431/4432 AS-/ES-Element vorhanden Ja/Nein
4427/4429 Winkel "30 °"/"90 °"
4428/4430 Seite links/rechts
Die Zuordnung steht vollstaendig in cfg/sivas.cfg - mit denselben sechs
Zeilen in [gefaellestrecke] und [variofoerderer], jeweils direkt hinter 2950,
was auch die Reihenfolge im details-JSON bestimmt.
Ob ein Element vorhanden ist, entscheidet ausschliesslich WINKEL_AS/WINKEL_ES:
das Schema laesst den Winkel leer, wenn keines gewaehlt wurde, waehrend
SEITE_AS/SEITE_ES mit "rechts" immer einen Vorgabewert tragen. Ohne Element
bleiben Winkel UND Seite leer, damit in Sivas keine Seite unter einem
"Nein"-Knoten haengt.
Weitere Punkte:
- sivas_mapping: neuer Dekorator @braucht_attribs. Ein so markierter
Transform wird als fn(wert, attribs) statt fn(wert) aufgerufen und sieht
damit die uebrigen Attribute des Blocks - noetig, weil die Seite vom
Winkel abhaengt. Ohne diese Klammer muessten bedingte Merkmale wieder als
Python-Code aus der Config herauswandern.
- Die Winkel-Schreibweise der Sivas-Auswahlliste ("30 °" mit Leerzeichen vor
dem Gradzeichen) steht als Tabelle [as_es_winkel_anzeige] in sivas.cfg,
Bauart wie [geruest_typ_anzeige] - weicht Sivas davon ab, ist das die
einzige Stelle zum Nachziehen.
- gefaellestrecke_signature beruecksichtigt AS/ES: zwei sonst baugleiche
Gefaellestrecken mit AS links bzw. rechts bleiben getrennte Zeilen, sonst
zeigte die gemeinsame Zeile nur die Seite des ersten Blocks.
- Altbestand ohne diese Attribute meldet "Nein" statt abzubrechen.
- Merkmalsstamm_in_Sivas.xlsx auf den aktuellen Sivas-Stand gebracht
(enthaelt neben 4427-4432 auch 4002, 7010-7013 und Klartext-Korrekturen;
4339/4383 heissen jetzt eindeutig "... Gefaellestrecke"/"... Variofoerderer").
- 12 neue Tests in tests/test_export_sivas_as_es.py, ohne BricsCAD lauffaehig.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
165 lines
7.6 KiB
INI
165 lines
7.6 KiB
INI
# ============================================================
|
|
# sivas.cfg - Attribut->Sivas-Merkmal-Zuordnung fuer lib/export_sivas.py
|
|
#
|
|
# Deckt NUR die "einfachen" Faelle ab: eine Sivas-Merkmalnummer entspricht
|
|
# genau einem (ggf. per Fallback alternativen) Block-Attribut, optional mit
|
|
# festem Default und/oder einer benannten Transform-Funktion. Berechnete
|
|
# Werte, die von der Anzahl vorhandener Segmente abhaengen oder mehrere
|
|
# Attribute kombinieren (VarioFoerderer-Gefaelle-/Vario-Segmentpaare 4312-
|
|
# 4392/4353-4386, die ILS-Automation-Summenzeile) bleiben bewusst Python-Code
|
|
# in export_sivas.py - ein flaches Attribut-Mapping kann bedingte/berechnete
|
|
# Werte nicht abbilden.
|
|
#
|
|
# Format je Zeile (Abschnitt = Elementtyp, Key = Sivas-Merkmalnummer):
|
|
# merkmal = attribut
|
|
# merkmal = attribut : default
|
|
# merkmal = attribut | alt_attribut : default
|
|
# merkmal = attribut : default | transform
|
|
#
|
|
# attribut - Name des Block-Attributs (ssg-attrib-*, siehe jeweiliges
|
|
# .lsp-Modul). Fehlt es in der Zeichnung, greift default.
|
|
# | alt_attribut - optionaler Fallback-Attributname (aeltere Zeichnungen mit
|
|
# abweichendem Attributnamen, z.B. N_SEPARATOREN vor der
|
|
# Umbenennung zu ANZAHL_SEPARATOR). Wird nur genutzt, wenn
|
|
# attribut selbst fehlt.
|
|
# : default - Vorgabewert, falls weder attribut noch alt_attribut in
|
|
# der Zeichnung gesetzt sind. Fehlt ":", ist default "".
|
|
# | transform - Name einer Python-Funktion in export_sivas.py
|
|
# (TRANSFORMS-Dict), die den ermittelten Rohwert
|
|
# (Attribut- oder Default-Wert) in die Sivas-Anzeige
|
|
# umwandelt (z.B. "0"/"1" -> "Ja"/"Nein"). Bekannte Namen:
|
|
# ja_nein, geruest_typ_anzeige, mm_zu_m, as_es_vorhanden,
|
|
# as_es_winkel, as_seite, es_seite. Ein unbekannter Name
|
|
# bricht NICHT ab, der Rohwert wird unveraendert
|
|
# uebernommen (siehe sivas_mapping.anwenden).
|
|
# Soll ein Merkmal ohne eigenes Attribut nur per Transform
|
|
# entstehen, braucht die Zeile trotzdem den ":" vor dem
|
|
# "|" ("WINKEL_AS : | as_es_vorhanden") - sonst gilt der
|
|
# Transform-Name als Fallback-Attributname.
|
|
# Transforms, die mit @braucht_attribs markiert sind
|
|
# (as_seite/es_seite), sehen zusaetzlich alle uebrigen
|
|
# Attribute des Blocks - noetig, wenn ein Merkmal von
|
|
# einem ZWEITEN Attribut abhaengt (Seite nur, wenn der
|
|
# zugehoerige Winkel ueberhaupt ein Element ausweist).
|
|
#
|
|
# Abschnittsnamen entsprechen den bisherigen build_*_details-Funktionen in
|
|
# export_sivas.py: [gefaellestrecke], [kreisel], [eckrad], [geruest]. Die
|
|
# Anzeige-Tabellen (ASCII-Attributwert -> Sivas-Klartext/Optionswert:
|
|
# [geruest_typ_anzeige], [as_es_winkel_anzeige]) UND
|
|
# SEPARATOR_BEARBEITUNG_ANZEIGE bleiben eigene, kleine Abschnitte weiter
|
|
# unten.
|
|
#
|
|
# [gefaellestrecke] und [variofoerderer] fuehren die AS-/ES-Merkmale
|
|
# (4427-4432) absichtlich DOPPELT: GF_N- und VF_N-Bloecke tragen dieselben
|
|
# Attribute des gemeinsamen Strecken-Schemas, und jeder Abschnitt soll fuer
|
|
# sich lesbar bleiben. Aenderungen dort bitte in beiden nachziehen (der Test
|
|
# tests/test_export_sivas_as_es.py::test_zuordnung_steht_in_der_config wacht
|
|
# darueber).
|
|
# ============================================================
|
|
|
|
[gefaellestrecke]
|
|
2950= MONTAGEHOEHE_m : 0
|
|
# AS-/ES-Element, Reihenfolge wie die Sivas-Hierarchie (identisch in
|
|
# [variofoerderer]): 4431/4432 Ja/Nein schalten Winkel und Seite frei.
|
|
4431= WINKEL_AS : | as_es_vorhanden
|
|
4427= WINKEL_AS : | as_es_winkel
|
|
4428= SEITE_AS : | as_seite
|
|
4432= WINKEL_ES : | as_es_vorhanden
|
|
4429= WINKEL_ES : | as_es_winkel
|
|
4430= SEITE_ES : | es_seite
|
|
4384= : Gefällestrecke
|
|
4318= L_GF_m
|
|
4391= GF_WINKEL
|
|
4337= ANZAHL_SEPARATOR : 0
|
|
4338= : ohne HARTCOAT HRC 50 ± 5
|
|
4339= ANZAHL_SCANNER : 0
|
|
3992= GERUEST_EINZELMODUL : 0 | ja_nein
|
|
3993= GERUEST_TYP : Schoenenberger Geruest | geruest_typ_anzeige
|
|
# 4300 (Streckengruppe "ein Objekt"/"mehrere Objekte") und 4311 (Anzahl der
|
|
# gruppierten Bloecke) bleiben Code (streckengruppe_objekt_text, anzahl-Param.).
|
|
|
|
[kreisel]
|
|
2952= MONTAGEHOEHE_m : 0
|
|
3511= : 1
|
|
3515= ANZAHL_SEPARATOR | N_SEPARATOREN : 2
|
|
3517= ANZAHL_SCANNER | N_SCANNER : 0
|
|
3519= ANZAHL_RAMPEN | N_RAMPEN : 0
|
|
3992= GERUEST_EINZELMODUL : 0 | ja_nein
|
|
3993= GERUEST_TYP : Schoenenberger Geruest | geruest_typ_anzeige
|
|
# 3510 (Kreiselart-Anzeigetext) und 3512 (Abstand in m, gerundet) bleiben
|
|
# Code (bedingte Umbenennung bzw. Umrechnung mm->m).
|
|
|
|
[eckrad]
|
|
# Am Kreisel ausgerichtet, aber nur Merkmale, fuer die das Eckrad-Objekt ein
|
|
# Attribut hat (*eckrad-attrib-defs*); Merkmalnummern aus
|
|
# Merkmalsstamm_in_Sivas.xlsx. Hoehe: beim Eckrad 2950 "Anlagenhoehe in
|
|
# Meter" (NICHT 2952 "Kreiselhoehe" wie beim Kreisel), Wert aus HOEHE (mm),
|
|
# da das Eckrad kein MONTAGEHOEHE_m traegt. 3381 "Eckrad - zu
|
|
# fertigende Menge" steht wie 3511 beim Kreisel fest auf 1 (reale Stueckzahl
|
|
# in der Anzahl-Spalte). Separatoren (3382/3383) hat das Eckrad nicht.
|
|
2950= HOEHE : 0 | mm_zu_m
|
|
3381= : 1
|
|
3992= GERUEST_EINZELMODUL : 0 | ja_nein
|
|
3993= GERUEST_TYP : Schoenenberger Geruest | geruest_typ_anzeige
|
|
|
|
[geruest]
|
|
Farbe= FARBE
|
|
|
|
[variofoerderer]
|
|
# Nur die von der Segmentanzahl UNABHAENGIGEN Top-Level-Felder einer VF_N-
|
|
# Streckengruppe (siehe build_variofoerderer_details in export_sivas.py).
|
|
# Die Gefaelle-/Vario-Segmentpaare (4312-4392, 4353/4354/4386) haengen an der
|
|
# Listenlaenge von L_GF_m/L_VF_m und bleiben Code.
|
|
2950= MONTAGEHOEHE_m : 0
|
|
# AS-/ES-Element, Reihenfolge wie die Sivas-Hierarchie (identisch in
|
|
# [gefaellestrecke]): 4431/4432 Ja/Nein schalten Winkel und Seite frei.
|
|
4431= WINKEL_AS : | as_es_vorhanden
|
|
4427= WINKEL_AS : | as_es_winkel
|
|
4428= SEITE_AS : | as_seite
|
|
4432= WINKEL_ES : | as_es_vorhanden
|
|
4429= WINKEL_ES : | as_es_winkel
|
|
4430= SEITE_ES : | es_seite
|
|
4329= GF_Bogen_L_90 : 0
|
|
4330= GF_Bogen_L_60 : 0
|
|
4331= GF_Bogen_L_30 : 0
|
|
4332= GF_Bogen_R_90 : 0
|
|
4333= GF_Bogen_R_60 : 0
|
|
4334= GF_Bogen_R_30 : 0
|
|
4373= VF_Bogen_A_90 : 0
|
|
4374= VF_Bogen_A_60 : 0
|
|
4375= VF_Bogen_A_30 : 0
|
|
4376= VF_Bogen_I_90 : 0
|
|
4377= VF_Bogen_I_60 : 0
|
|
4378= VF_Bogen_I_30 : 0
|
|
4381= ANZAHL_SEPARATOR : 0
|
|
4382= : ohne HARTCOAT HRC 50 ± 5
|
|
4383= ANZAHL_SCANNER : 0
|
|
3992= GERUEST_EINZELMODUL : 0 | ja_nein
|
|
3993= GERUEST_TYP : Schoenenberger Geruest | geruest_typ_anzeige
|
|
|
|
[as_es_winkel_anzeige]
|
|
# Attributwert WINKEL_AS/WINKEL_ES -> Optionswert der Sivas-Auswahlliste zu
|
|
# Merkmal 4427/4429. Im Merkmalstamm heissen die Optionen "30 °"/"90 °" (mit
|
|
# Leerzeichen vor dem Gradzeichen) - das Attribut in der Zeichnung bleibt die
|
|
# nackte Zahl. Gleiche Bauart wie [geruest_typ_anzeige]: steht ein Winkel
|
|
# hier NICHT drin, wird er unveraendert uebernommen.
|
|
#
|
|
# >>> Falls Sivas den Import mit "30 °" ablehnt, ist DIESE Tabelle die
|
|
# >>> einzige Stelle zum Nachziehen (z.B. auf "30°" ohne Leerzeichen oder
|
|
# >>> auf die nackte Zahl) - der Code bleibt unberuehrt.
|
|
30= 30 °
|
|
90= 90 °
|
|
|
|
[geruest_typ_anzeige]
|
|
# ASCII-Attributwert (GERUEST_TYP) -> Sivas-Klartext mit Umlauten/Sonder-
|
|
# zeichen (Attribute selbst bleiben ASCII, siehe CLAUDE.md-Konvention).
|
|
Schoenenberger Geruest= Schönenberger-Gerüst
|
|
|
|
[weichen]
|
|
# ILS 2.0 Weiche (6216): eine Summenzeile, Werte aus den Kreisel-Beruehr-
|
|
# punkten des LISP-Exports (kreisel_weichen.json). Ein Beruehrpunkt ist eine
|
|
# Weichenkombination = 1x aktiv + 1x passiv, darum lesen beide Merkmale
|
|
# dieselbe Zahl ANZAHL_WEICHEN (= Anzahl Beruehrpunkte, siehe export_sivas.py).
|
|
3371= ANZAHL_WEICHEN : 0
|
|
3372= ANZAHL_WEICHEN : 0
|