Separatoren zaehlen: nur platzierte Symbole, interne Kettenglieder nicht

Der intern in der GF/VF-Kette gezeichnete 300-mm-Block
Staustrecke_Separator_SP ist ein Foerder-/Uebergabestueck, kein
eigenstaendiger Separator. Er wurde bisher als Separator mitgezaehlt
(ANZAHL_SEPARATOR = intern + platzierte Symbole), wodurch eine GF mit
einem darauf gelegten S-LP-Symbol faelschlich 2 statt 1 ergab.

count_sep_scan.lsp: ANZAHL_SEPARATOR zaehlt jetzt nur noch die platzierten
Separator_SP/S-LP-Symbole (newP = nsep). Schnelltest cs-zuordnung-noetig-p
entsprechend auf reine Symbolzahl je Carrier umgestellt. Die interne
Zaehlung (cs-count-nested, *intern-separator-pattern*, internSep) entfaellt.

Gefaellestrecke.lsp: GF-Bau setzt ANZAHL_SEPARATOR beim Erstellen mit 0 vor
(interne Kettenseparatoren zaehlen nicht) - die echte Anzahl fuellt der
Export aus den platzierten Symbolen. Label "Sep=N" entfernt (waere sonst
immer 0 bzw. widerspraeche dem Export). n-bogen-gf/gf-make-label
entsprechend bereinigt.

Hinweis: tests/reference/gefaellestrecke_tests_export.csv (Anzahl_Separator=1
ohne platzierte Symbole) wird dadurch stale -> per TEST_EXPORT_ALL in
BricsCAD neu erzeugen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-08-21 17:02:10 +02:00
parent 9341d4c5c2
commit fe3adc7e59
4 changed files with 90 additions and 88 deletions
+16 -9
View File
@@ -993,7 +993,7 @@
aktuell-frame nach-aus-pt
gf-nummer last-ent
L-gf-str delta-l-gf laengen-liste first-l l-item
bL90 bL60 bL30 bR90 bR60 bR30 n-bogen-gf
bL90 bL60 bL30 bR90 bR60 bR30
ein-hz-as rad-h-as rad-v-as xu-entry
sep-endpunkt rad-h-es rad-v-es xu-exit sep-frame
es-aus-frame
@@ -1312,8 +1312,6 @@
)
)
)
(setq n-bogen-gf (+ bL90 bL60 bL30 bR90 bR60 bR30))
;; delta-l-gf bereits vor der Zusammenfassung berechnet
;; Block mit allen Attributen erstellen. Geruest fuer Einzelmodul/
@@ -1327,7 +1325,9 @@
delta-l-gf
L-gf-str
grade
(1+ n-bogen-gf)
;; n-separator/n-scanner = 0: interne Ketten-Separatoren zaehlen nicht;
;; die echte Anzahl setzt der Export aus platzierten Symbolen.
0
0
bL90 bL60 bL30
bR90 bR60 bR30
@@ -1386,7 +1386,7 @@
;; L-first-seg: Laenge der ersten geraden Staustrecke in mm.
;; Beschriftung: Mitte der ersten Geraden, 400mm senkrecht rechts versetzt.
(defun gf-make-label (gf-nummer hoehe-von hoehe-bis deltaH deltaL
L-gf-str winkel n-separator nach-aus-pt entry-hz L-first-seg /
L-gf-str winkel nach-aus-pt entry-hz L-first-seg /
label-txt label-pt chz-l shz-l halb basis-winkel)
(setq chz-l (cos (* entry-hz (/ pi 180.0))))
(setq shz-l (sin (* entry-hz (/ pi 180.0))))
@@ -1401,8 +1401,7 @@
" " delta-sym "H=" (itoa (fix (abs deltaH))) "mm"
" " delta-sym "L=" (itoa (fix deltaL)) "mm"
" L=[" L-gf-str "]m"
" W=" (rtos (float winkel) 2 2) grad-zeichen
" Sep=" (itoa n-separator)))
" W=" (rtos (float winkel) 2 2) grad-zeichen))
;; Basiswinkel: Text immer lesbar auf 0 Grad (X-Achse, links->rechts) oder
;; 90 Grad (Y-Achse) einrasten - unabhaengig von der tatsaechlichen
;; Fahrtrichtung (nie 180/270, damit der Text nie auf dem Kopf steht).
@@ -1439,7 +1438,7 @@
(if (null geruest-typ) (setq geruest-typ (ssg-geruest-idx-to-typ (ssg-geruest-typ-to-idx nil))))
;; Beschriftung: Mitte der ersten Geraden, 400mm senkrecht versetzt
(gf-make-label gf-nummer hoehe-von hoehe-bis deltaH deltaL
L-gf-str winkel n-separator nach-aus-pt entry-hz L-first-seg)
L-gf-str winkel nach-aus-pt entry-hz L-first-seg)
;; TYP: mit Bogen -> "Streckengruppe"; ohne Bogen (einsegmentig) ->
;; "Gefaellestrecke" (reduzierter Attributsatz, siehe ssg-strecke-attrib-defs).
(setq typ-str
@@ -1518,6 +1517,12 @@
(cons "GF_Bogen_R_90" (itoa bogen-R90))
(cons "GF_Bogen_R_60" (itoa bogen-R60))
(cons "GF_Bogen_R_30" (itoa bogen-R30))
;; ANZAHL_SEPARATOR/ANZAHL_SCANNER werden beim Bau mit 0 vorbelegt
;; (n-separator/n-scanner werden von den Aufrufern als 0 uebergeben):
;; der intern gezeichnete Ketten-Separator Staustrecke_Separator_SP zaehlt
;; NICHT als Separator. Die tatsaechliche Anzahl ermittelt der Export aus
;; den platzierten Separator_SP/S-LP-/Scanner-Symbolen und schreibt sie
;; hier hinein (cs-zuordnung-lauf in count_sep_scan.lsp).
(cons "ANZAHL_SEPARATOR" (itoa n-separator))
(cons "ANZAHL_SCANNER" (itoa n-scanner))
(cons "GERUEST_EINZELMODUL" geruest-einzelmodul)
@@ -1637,7 +1642,9 @@
(float deltaL-total)
L-gf-str
winkel
1 0
;; n-separator/n-scanner = 0: der interne Ketten-Separator zaehlt nicht;
;; die echte Anzahl setzt der Export aus platzierten Symbolen (s.o.).
0 0
0 0 0 0 0 0
startpunkt last-ent nach-aus-pt (float hz) (float L_stau)
es-seite geruest-einzelmodul geruest-typ))