[REFACTOR] VF-Cluster: Magic-Numbers auf *vfk-*-Konstanten umgestellt

vf_core/vf_standard/vf_etage/vf_linienzug referenzieren jetzt durchgaengig
die zentralen *vfk-*-Konstanten aus vf_konstanten.lsp statt rohe Winkel-/
Laengen-/Toleranz-Literale (3.0 Grad, 500/300mm Stationen/Separatoren,
1000/800mm Mindestlaengen, AS/ES-Fallback-Versaetze, Text-/Label-Masse).
Bereits ueber ssg-cfg-or config-gefuehrte Werte bleiben unangetastet
(Config bleibt dort die aktive Quelle). vf_etage-Bogenwinkel-Inkonsistenz
(fest verdrahtete Liste ohne Bezug zu *vfk-bogen-winkel*) behoben.
vf_konstanten.lsp-Kommentare auf den neuen, aktiven Status aktualisiert.
This commit is contained in:
2026-08-29 17:10:05 +02:00
parent b0aad8e8f4
commit 41eea7fc01
5 changed files with 201 additions and 197 deletions
+5 -5
View File
@@ -786,8 +786,8 @@
(setq shz-l (sin (* (float hz) (/ pi 180.0)))) (setq shz-l (sin (* (float hz) (/ pi 180.0))))
(setq halb (/ (float deltaL) 2.0)) (setq halb (/ (float deltaL) 2.0))
(setq label-pt (list (setq label-pt (list
(+ (car startpunkt) (* halb chz-l) (* 200.0 shz-l)) (+ (car startpunkt) (* halb chz-l) (* *vfk-label-versatz* shz-l))
(+ (cadr startpunkt) (* halb shz-l) (* -200.0 chz-l)) (+ (cadr startpunkt) (* halb shz-l) (* (- *vfk-label-versatz*) chz-l))
(caddr startpunkt))) (caddr startpunkt)))
;; Textwinkel auf 0/90 Grad einrasten (nie kopfueber, unabhaengig von hz) ;; Textwinkel auf 0/90 Grad einrasten (nie kopfueber, unabhaengig von hz)
(setq basis-winkel (float hz)) (setq basis-winkel (float hz))
@@ -800,7 +800,7 @@
(cons 8 "VF_Beschriftung") (cons 8 "VF_Beschriftung")
'(67 . 0) '(67 . 0)
(cons 10 label-pt) (cons 10 label-pt)
(cons 40 100.0) (cons 40 *vfk-label-texthoehe*)
(cons 1 label-txt) (cons 1 label-txt)
(cons 50 (* basis-winkel (/ pi 180.0))) (cons 50 (* basis-winkel (/ pi 180.0)))
'(72 . 1) '(72 . 1)
@@ -852,13 +852,13 @@
'(8 . "0") '(8 . "0")
'(67 . 0) '(67 . 0)
(cons 10 (list (car startpunkt) attdef-ypos (caddr startpunkt))) (cons 10 (list (car startpunkt) attdef-ypos (caddr startpunkt)))
'(40 . 50.0) (cons 40 *vfk-attdef-texthoehe*)
(cons 1 (cadr def)) (cons 1 (cadr def))
(cons 3 (car def)) (cons 3 (car def))
(cons 2 (car def)) (cons 2 (car def))
'(70 . 1) '(70 . 1)
)) ))
(setq attdef-ypos (- attdef-ypos 100.0)) (setq attdef-ypos (- attdef-ypos *vfk-attdef-zeilenabstand*))
) )
;; Alle neuen Entities seit lastEnt sammeln ;; Alle neuen Entities seit lastEnt sammeln
+21 -21
View File
@@ -75,7 +75,7 @@
) )
(progn (progn
(princ (ssg-text (if (tblsearch "BLOCK" as30-blk) "vfe-warn-ks-fehlt-standard" "vfe-warn-block-as30-fehlt"))) (princ (ssg-text (if (tblsearch "BLOCK" as30-blk) "vfe-warn-ks-fehlt-standard" "vfe-warn-block-as30-fehlt")))
(setq etage-aus-dx 525.8 etage-aus-dz -72.9) (setq etage-aus-dx *vfk-etage-as-fallback-dx* etage-aus-dz *vfk-etage-as-fallback-dz*)
) )
) )
@@ -91,7 +91,7 @@
) )
(progn (progn
(princ (ssg-text (if (tblsearch "BLOCK" es30-blk) "vfe-warn-ks-fehlt-standard" "vfe-warn-block-es30-fehlt"))) (princ (ssg-text (if (tblsearch "BLOCK" es30-blk) "vfe-warn-ks-fehlt-standard" "vfe-warn-block-es30-fehlt")))
(setq etage-ein-dx 576.2 etage-ein-dz -54.6) (setq etage-ein-dx *vfk-etage-es-fallback-dx* etage-ein-dz *vfk-etage-es-fallback-dz*)
) )
) )
@@ -104,7 +104,7 @@
(setq etage-gef-dx-links (car m) etage-gef-dz-links (caddr m)) (setq etage-gef-dx-links (car m) etage-gef-dz-links (caddr m))
(progn (progn
(princ (ssg-text (if (tblsearch "BLOCK" gefaelle-blockname) "vfe-warn-kein-ks-links" "vfe-warn-block-fehlt-links"))) (princ (ssg-text (if (tblsearch "BLOCK" gefaelle-blockname) "vfe-warn-kein-ks-links" "vfe-warn-block-fehlt-links")))
(setq etage-gef-dx-links 0.0 etage-gef-dz-links -10.0) (setq etage-gef-dx-links 0.0 etage-gef-dz-links *vfk-etage-gefaellebogen-fallback-dz*)
) )
) )
(princ (ssg-textf "vfe-gefaellebogen-links-mass" (list (rtos etage-gef-dx-links 2 2) (rtos etage-gef-dz-links 2 2)))) (princ (ssg-textf "vfe-gefaellebogen-links-mass" (list (rtos etage-gef-dx-links 2 2) (rtos etage-gef-dz-links 2 2))))
@@ -118,7 +118,7 @@
(setq etage-gef-dx-rechts (car m) etage-gef-dz-rechts (caddr m)) (setq etage-gef-dx-rechts (car m) etage-gef-dz-rechts (caddr m))
(progn (progn
(princ (ssg-text (if (tblsearch "BLOCK" gefaelle-blockname) "vfe-warn-kein-ks-rechts" "vfe-warn-block-fehlt-rechts"))) (princ (ssg-text (if (tblsearch "BLOCK" gefaelle-blockname) "vfe-warn-kein-ks-rechts" "vfe-warn-block-fehlt-rechts")))
(setq etage-gef-dx-rechts 0.0 etage-gef-dz-rechts -10.0) (setq etage-gef-dx-rechts 0.0 etage-gef-dz-rechts *vfk-etage-gefaellebogen-fallback-dz*)
) )
) )
(princ (ssg-textf "vfe-gefaellebogen-rechts-mass" (list (rtos etage-gef-dx-rechts 2 2) (rtos etage-gef-dz-rechts 2 2)))) (princ (ssg-textf "vfe-gefaellebogen-rechts-mass" (list (rtos etage-gef-dx-rechts 2 2) (rtos etage-gef-dz-rechts 2 2))))
@@ -352,10 +352,10 @@
abs-dz-EIN (abs etage-ein-dz) abs-dz-EIN (abs etage-ein-dz)
abs-dz-GEF (abs etage-gef-dz)) abs-dz-GEF (abs etage-gef-dz))
(setq winkel-list '(3 6 9 12 15 18 21 27 33 39 45 51)) (setq winkel-list *vfk-bogen-winkel*)
(setq ergebnis-liste '()) (setq ergebnis-liste '())
(setq cos3 (cos (* 3.0 (/ pi 180.0))) (setq cos3 (cos (* *vfk-gefaelle-winkel* (/ pi 180.0)))
sin3 (sin (* 3.0 (/ pi 180.0)))) sin3 (sin (* *vfk-gefaelle-winkel* (/ pi 180.0))))
(setq feste-gesamt-cos (* FESTE_ETAGE_MITTE cos3)) (setq feste-gesamt-cos (* FESTE_ETAGE_MITTE cos3))
(setq feste-gesamt-sin (* FESTE_ETAGE_MITTE sin3)) (setq feste-gesamt-sin (* FESTE_ETAGE_MITTE sin3))
@@ -384,8 +384,8 @@
(setq ergebnis-liste (cons (list winkel nil nil nil) ergebnis-liste)) (setq ergebnis-liste (cons (list winkel nil nil nil) ergebnis-liste))
) )
(progn (progn
(setq rad5 (* 3.0 (/ pi 180.0))) (setq rad5 (* *vfk-gefaelle-winkel* (/ pi 180.0)))
(setq rad7 (* (float (if (= richtung "Auf") (- 3 winkel) (+ winkel 3))) (setq rad7 (* (float (if (= richtung "Auf") (- *vfk-gefaelle-winkel* winkel) (+ winkel *vfk-gefaelle-winkel*)))
(/ pi 180.0))) (/ pi 180.0)))
(setq bogen-x1 (+ (* (car mass1) (cos rad5)) (* (caddr mass1) (sin rad5)))) (setq bogen-x1 (+ (* (car mass1) (cos rad5)) (* (caddr mass1) (sin rad5))))
(setq bogen-z1 (+ (* (- (car mass1)) (sin rad5)) (* (caddr mass1) (cos rad5)))) (setq bogen-z1 (+ (* (- (car mass1)) (sin rad5)) (* (caddr mass1) (cos rad5))))
@@ -544,13 +544,13 @@
(princ (ssg-textf "vfe-step2" (list (rtos as-hz 2 1)))) (princ (ssg-textf "vfe-step2" (list (rtos as-hz 2 1))))
(setq aktueller-punkt (setq aktueller-punkt
(insert-hz-scaled-block-by-ks "Staustrecke_SP_1000_mm" aktueller-punkt (insert-hz-scaled-block-by-ks "Staustrecke_SP_1000_mm" aktueller-punkt
400 as-hz 3)) 400 as-hz *vfk-gefaelle-winkel*))
;; 3. Separator (folgt der AS-Richtung as-hz, 3 Grad vert) ;; 3. Separator (folgt der AS-Richtung as-hz, 3 Grad vert)
(princ (ssg-textf "vfe-step3" (list (rtos as-hz 2 1)))) (princ (ssg-textf "vfe-step3" (list (rtos as-hz 2 1))))
(setq aktueller-punkt (setq aktueller-punkt
(insert-hz-rotated-block-with-ks "Staustrecke_Separator_SP_300_mm" aktueller-punkt (insert-hz-rotated-block-with-ks "Staustrecke_Separator_SP_300_mm" aktueller-punkt
as-hz 3 300 0)) as-hz *vfk-gefaelle-winkel* *vfk-separator-laenge* 0))
;; Ab hier laufende Richtung cur-hz mitfuehren (frame-verkettet). Start = ;; Ab hier laufende Richtung cur-hz mitfuehren (frame-verkettet). Start =
;; KS_AUS-Richtung des AS (as-hz). Jeder Gefaellebogen dreht cur-hz um seinen ;; KS_AUS-Richtung des AS (as-hz). Jeder Gefaellebogen dreht cur-hz um seinen
@@ -570,7 +570,7 @@
(progn (progn
(princ (ssg-textf "vfe-step5-strecke" (list (rtos L_GF1 2 2)))) (princ (ssg-textf "vfe-step5-strecke" (list (rtos L_GF1 2 2))))
(setq aktueller-punkt (setq aktueller-punkt
(insert-inclined-scaled-block "Staustrecke_SP_1000_mm" aktueller-punkt L_GF1 3 cur-hz)) (insert-inclined-scaled-block "Staustrecke_SP_1000_mm" aktueller-punkt L_GF1 *vfk-gefaelle-winkel* cur-hz))
) )
(princ (ssg-text "vfe-step5-skip")) (princ (ssg-text "vfe-step5-skip"))
) )
@@ -578,7 +578,7 @@
;; 6. Umlenkstation (3 Grad geneigt) ;; 6. Umlenkstation (3 Grad geneigt)
(princ (ssg-text "vfe-step6")) (princ (ssg-text "vfe-step6"))
(setq aktueller-punkt (setq aktueller-punkt
(insert-rotated-block-with-ks (strcat "Vario_Umlenkstation_500mm_" (vf-motorseite-aktuell)) aktueller-punkt 3 500 0 cur-hz)) (insert-rotated-block-with-ks (strcat "Vario_Umlenkstation_500mm_" (vf-motorseite-aktuell)) aktueller-punkt *vfk-gefaelle-winkel* *vfk-stations-laenge* 0 cur-hz))
;; 7. 1. Vertikalbogen (3 Grad geneigt) ;; 7. 1. Vertikalbogen (3 Grad geneigt)
(if (= richtung "Auf") (if (= richtung "Auf")
@@ -594,7 +594,7 @@
(setq bogen-dx (car bogen-mass) bogen-dz (caddr bogen-mass)) (setq bogen-dx (car bogen-mass) bogen-dz (caddr bogen-mass))
(princ (ssg-textf "vfe-step7" (list bogen-name))) (princ (ssg-textf "vfe-step7" (list bogen-name)))
(setq aktueller-punkt (setq aktueller-punkt
(insert-rotated-block-with-ks bogen-name aktueller-punkt 3 bogen-dx bogen-dz cur-hz)) (insert-rotated-block-with-ks bogen-name aktueller-punkt *vfk-gefaelle-winkel* bogen-dx bogen-dz cur-hz))
;; 8. Variable Strecke L_VF ;; 8. Variable Strecke L_VF
(if (> L_VF 0.1) (if (> L_VF 0.1)
@@ -647,14 +647,14 @@
;; 10. Motorstation (3 Grad geneigt) ;; 10. Motorstation (3 Grad geneigt)
(princ (ssg-text "vfe-step10")) (princ (ssg-text "vfe-step10"))
(setq aktueller-punkt (setq aktueller-punkt
(insert-rotated-block-with-ks (strcat "Vario_Motorstation_500mm_" (vf-motorseite-aktuell)) aktueller-punkt 3 500 0 cur-hz)) (insert-rotated-block-with-ks (strcat "Vario_Motorstation_500mm_" (vf-motorseite-aktuell)) aktueller-punkt *vfk-gefaelle-winkel* *vfk-stations-laenge* 0 cur-hz))
;; 11. L_GF2 (3 Grad geneigt) ;; 11. L_GF2 (3 Grad geneigt)
(if (> L_GF2 0.1) (if (> L_GF2 0.1)
(progn (progn
(princ (ssg-textf "vfe-step11-gf2" (list (rtos L_GF2 2 2)))) (princ (ssg-textf "vfe-step11-gf2" (list (rtos L_GF2 2 2))))
(setq aktueller-punkt (setq aktueller-punkt
(insert-inclined-scaled-block "Staustrecke_SP_1000_mm" aktueller-punkt L_GF2 3 cur-hz)) (insert-inclined-scaled-block "Staustrecke_SP_1000_mm" aktueller-punkt L_GF2 *vfk-gefaelle-winkel* cur-hz))
) )
(princ (ssg-text "vfe-step11-skip")) (princ (ssg-text "vfe-step11-skip"))
) )
@@ -683,26 +683,26 @@
(setq es-wy (+ (* (caddr es-info) (sin es-place-rad)) (* (cadddr es-info) (cos es-place-rad)))) (setq es-wy (+ (* (caddr es-info) (sin es-place-rad)) (* (cadddr es-info) (cos es-place-rad))))
(setq es-perp (+ (* es-wx (- perp-sin)) (* es-wy perp-cos))) (setq es-perp (+ (* es-wx (- perp-sin)) (* es-wy perp-cos)))
;; perp-Auslenkung pro Laengeneinheit bei cur-hz (Neigung 3 Grad) ;; perp-Auslenkung pro Laengeneinheit bei cur-hz (Neigung 3 Grad)
(setq perp-rate (* (cos (* 3.0 (/ pi 180.0))) (setq perp-rate (* (cos (* *vfk-gefaelle-winkel* (/ pi 180.0)))
(sin (* (- cur-hz hz) (/ pi 180.0))))) (sin (* (- cur-hz hz) (/ pi 180.0)))))
;; Loesen: p2b-perp + (L_exit + 300)*perp-rate + es-perp = 0 ;; Loesen: p2b-perp + (L_exit + 300)*perp-rate + es-perp = 0
(setq L-exit (setq L-exit
(if (> (abs perp-rate) 1e-6) (if (> (abs perp-rate) 1e-6)
(- (/ (- (+ p2b-perp es-perp)) perp-rate) 300.0) (- (/ (- (+ p2b-perp es-perp)) perp-rate) *vfk-separator-laenge*)
400.0)) 400.0))
(if (< L-exit 50.0) (setq L-exit 50.0)) ; Schutz gegen negative/zu kurze GF (if (< L-exit *vfk-etage-auslauf-min-clamp*) (setq L-exit *vfk-etage-auslauf-min-clamp*)) ; Schutz gegen negative/zu kurze GF
;; 13. Auslauf-Staustrecke (variabel, folgt cur-hz, 3 Grad vert, KS_EIN) ;; 13. Auslauf-Staustrecke (variabel, folgt cur-hz, 3 Grad vert, KS_EIN)
(princ (ssg-textf "vfe-step13" (list (rtos L-exit 2 1) (rtos cur-hz 2 1)))) (princ (ssg-textf "vfe-step13" (list (rtos L-exit 2 1) (rtos cur-hz 2 1))))
(setq aktueller-punkt (setq aktueller-punkt
(insert-hz-scaled-block-by-ks "Staustrecke_SP_1000_mm" aktueller-punkt (insert-hz-scaled-block-by-ks "Staustrecke_SP_1000_mm" aktueller-punkt
L-exit cur-hz 3)) L-exit cur-hz *vfk-gefaelle-winkel*))
;; 14. Separator (verkettet, folgt cur-hz, 3 Grad vert) ;; 14. Separator (verkettet, folgt cur-hz, 3 Grad vert)
(princ (ssg-textf "vfe-step14" (list (rtos cur-hz 2 1)))) (princ (ssg-textf "vfe-step14" (list (rtos cur-hz 2 1))))
(setq aktueller-punkt (setq aktueller-punkt
(insert-hz-rotated-block-with-ks "Staustrecke_Separator_SP_300_mm" aktueller-punkt (insert-hz-rotated-block-with-ks "Staustrecke_Separator_SP_300_mm" aktueller-punkt
cur-hz 3 300 0)) cur-hz *vfk-gefaelle-winkel* *vfk-separator-laenge* 0))
;; 15. ES_30 (verkettet: KS_EIN auf cur-hz; KS_AUS auf der Hauptlinie) ;; 15. ES_30 (verkettet: KS_EIN auf cur-hz; KS_AUS auf der Hauptlinie)
(princ (ssg-textf "vfe-step15" (list es-block (rtos cur-hz 2 1)))) (princ (ssg-textf "vfe-step15" (list es-block (rtos cur-hz 2 1))))
+75 -71
View File
@@ -3,23 +3,29 @@
;; Magic-Numbers aus vf_core.lsp, vf_standard.lsp, vf_etage.lsp, ;; Magic-Numbers aus vf_core.lsp, vf_standard.lsp, vf_etage.lsp,
;; vf_linienzug.lsp ;; vf_linienzug.lsp
;; ============================================================ ;; ============================================================
;; ZWECK dieser Datei: Nachschlagewerk + Grundlage fuer eine schrittweise ;; ZWECK dieser Datei: zentrale, aktive Quelle der Magic-Numbers aus dem
;; Migration - NICHT (noch) die aktive Quelle der Werte. Die vier vf_*.lsp- ;; VarioFoerderer-Cluster. Die weit ueberwiegende Mehrheit der frueher
;; Module verwenden ihre Werte weiterhin direkt (eigene *vfl-*/*vfs-*/ ;; rohen Literale in vf_core/vf_standard/vf_etage/vf_linienzug wurde auf
;; FESTE_*-Variablen bzw. rohe Literale, teils ueber ssg-cfg-or). Aendert ;; die *vfk-*-Konstanten hier umgestellt (Migration abgeschlossen, siehe
;; sich ein Wert hier, hat das AKTUELL KEINE Wirkung auf den Bauablauf - ;; Git-Historie). Aendert sich ein Wert hier, wirkt sich das direkt auf
;; die entsprechende Stelle im jeweiligen Modul muss weiterhin dort separat ;; alle referenzierenden Aufrufstellen aus.
;; angepasst werden. Diese Datei macht nur sichtbar, WELCHE Werte es gibt,
;; wo sie herkommen und wo sie (noch) dupliziert sind.
;; ;;
;; Migrationsidee (spaeter, schrittweise, EIN Modul nach dem anderen): ;; Ausnahmen (bewusst NICHT umgestellt):
;; einzelne Aufrufstellen von rohem Literal auf *vfk-*-Konstante umstellen, ;; - Werte, die bereits ueber (ssg-cfg-or "vario" "<key>" <default>) laufen
;; mit Test in BricsCAD nach jedem Modul. Bei den bereits ueber ssg-cfg-or ;; (gefaelle_winkel, bogen_winkel, feste_horizontal, staustrecke_basis,
;; konfigurierbaren Werten (gefaelle_winkel, bogen_winkel, feste_horizontal, ;; separator_block_dx/dz, station_block_dx/dz, skalierung_basis): dort
;; staustrecke_basis, separator_block_dx/dz, station_block_dx/dz, ;; bleibt die Config-Anbindung die fuehrende Quelle, *vfk-* dient nur als
;; skalierung_basis) bleibt die Config-Anbindung die fuehrende Quelle - ;; Fallback/Dokumentation (siehe jeweiliger Kommentar).
;; *vfk-*-Konstanten hier sind dafuer nur Fallback/Dokumentation, siehe ;; - Stellen, an denen der Literal-Wert in einem itoa-/Integer-Kontext
;; jeweiliger Kommentar. ;; verwendet wird (z.B. vf_etage.lsp: "best-winkel +/- 3" vor itoa) und
;; *vfk-gefaelle-winkel* als Float (3.0) statt Integer (3) einen Typfehler
;; ausloesen wuerde. Bewusst als rohes Literal belassen (siehe Kommentare
;; im jeweiligen Modul).
;; - Blocknamen-Strings, die eine Zahl eingebettet tragen (z.B.
;; "Vario_Umlenkstation_500mm_...", "Staustrecke_Separator_SP_300_mm"):
;; das sind DWG-Blockreferenzen, keine Zahlenwerte.
;; - Die mm/m-Umrechnung 2000.0 (= 2 * *vfk-mm-je-m*) ist keine 1:1-
;; Ersetzung und bleibt als eigenstaendiges Literal bestehen.
;; ;;
;; Geladen von vf_core.lsp VOR vf_standard/vf_etage/vf_linienzug (siehe ;; Geladen von vf_core.lsp VOR vf_standard/vf_etage/vf_linienzug (siehe
;; dortige Ladereihenfolge, dieselbe Guard-Systematik wie in den anderen ;; dortige Ladereihenfolge, dieselbe Guard-Systematik wie in den anderen
@@ -49,12 +55,11 @@
;; ============================================================ ;; ============================================================
;; Basis-Neigungswinkel jeder Gefaellestrecke (GF) - AKTIVE Quelle bleibt ;; Basis-Neigungswinkel jeder Gefaellestrecke (GF) - AKTIVE Quelle bleibt
;; (ssg-cfg-or "vario" "gefaelle_winkel" 3), an >15 Stellen korrekt darueber ;; (ssg-cfg-or "vario" "gefaelle_winkel" 3) ueberall dort, wo bereits ueber
;; bezogen. ABER an mindestens 12 weiteren Stellen als rohes 3.0/3-Literal ;; Config bezogen wird. Alle frueher rohen 3.0/3-Literale OHNE Config-Bezug
;; dupliziert, OHNE Bezug zur Config (vf_standard.lsp Z.309/412; ;; in vf_standard.lsp/vf_etage.lsp/vf_linienzug.lsp wurden auf
;; vf_etage.lsp Z.449-450/479/654ff/793; vf_linienzug.lsp Z.1071/1554/2873/ ;; *vfk-gefaelle-winkel* umgestellt (Ausnahme: einzelne itoa-/Integer-
;; 3394/4159/4273/4278) - eine Aenderung des Winkels ueber Config wuerde ;; Kontexte in vf_etage.lsp, siehe Datei-Kopfkommentar).
;; diese Stellen NICHT mitziehen.
(if (null *vfk-gefaelle-winkel*) (setq *vfk-gefaelle-winkel* 3.0)) (if (null *vfk-gefaelle-winkel*) (setq *vfk-gefaelle-winkel* 3.0))
;; Toleranzband (Grad) um *vfk-gefaelle-winkel*: liegt der natuerliche ;; Toleranzband (Grad) um *vfk-gefaelle-winkel*: liegt der natuerliche
@@ -65,9 +70,10 @@
;; Diskrete Bogenwinkel-Tabelle fuer VF-Boegen (auf/ab). AKTIVE Quelle in ;; Diskrete Bogenwinkel-Tabelle fuer VF-Boegen (auf/ab). AKTIVE Quelle in
;; vf_standard.lsp/vf_linienzug.lsp: (ssg-cfg-or "vario" "bogen_winkel" ...) ;; vf_standard.lsp/vf_linienzug.lsp: (ssg-cfg-or "vario" "bogen_winkel" ...)
;; mit demselben Fallback. INKONSISTENZ: in vf_etage.lsp (Zeile ~447) fest ;; mit demselben Fallback. Die frueher fest verdrahtete Inkonsistenz in
;; verdrahtet OHNE Config-Anbindung - eine Config-Aenderung wuerde dort ;; vf_etage.lsp (winkel-list ohne Config-Anbindung) wurde behoben: bezieht
;; nicht greifen. ;; jetzt *vfk-bogen-winkel* direkt (weiterhin ohne Config-Anbindung wie
;; zuvor, aber konsistent mit dem Fallback-Wert der anderen Module).
(if (null *vfk-bogen-winkel*) (setq *vfk-bogen-winkel* '(3 6 9 12 15 18 21 27 33 39 45 51))) (if (null *vfk-bogen-winkel*) (setq *vfk-bogen-winkel* '(3 6 9 12 15 18 21 27 33 39 45 51)))
;; GF-Bogen-Winkel (horizontale Kurve): 30/60/90 Grad. AKTIVE, EINMALIGE Quelle ;; GF-Bogen-Winkel (horizontale Kurve): 30/60/90 Grad. AKTIVE, EINMALIGE Quelle
@@ -95,12 +101,12 @@
(if (null *vfk-etage-hz-winkel*) (setq *vfk-etage-hz-winkel* 30.0)) (if (null *vfk-etage-hz-winkel*) (setq *vfk-etage-hz-winkel* 30.0))
;; Eckwinkel-Toleranz bei der automatischen Pfad-Klassifizierung (Modus 3, ;; Eckwinkel-Toleranz bei der automatischen Pfad-Klassifizierung (Modus 3,
;; vf-linienzug-modus3 -> vfl2-pruefe-eckwinkel). Rohes Literal in ;; vf-linienzug-modus3 -> vfl2-pruefe-eckwinkel). Aktiv referenziert in
;; vf_linienzug.lsp Zeile ~3386, keine Konstante bisher. ;; vf_linienzug.lsp (beide Aufrufstellen von vfl2-pruefe-eckwinkel).
(if (null *vfk-eckwinkel-toleranz*) (setq *vfk-eckwinkel-toleranz* 5.0)) (if (null *vfk-eckwinkel-toleranz*) (setq *vfk-eckwinkel-toleranz* 5.0))
;; Schwellwert (Grad), ab dem ein Frame noch als "flach" (~0 Grad) gilt. ;; Schwellwert (Grad), ab dem ein Frame noch als "flach" (~0 Grad) gilt.
;; Rohes Literal in vfl-frame-flach-p (vf_linienzug.lsp), keine Konstante. ;; Aktiv referenziert in vfl-frame-flach-p (vf_linienzug.lsp).
(if (null *vfk-frame-flach-toleranz*) (setq *vfk-frame-flach-toleranz* 1.5)) (if (null *vfk-frame-flach-toleranz*) (setq *vfk-frame-flach-toleranz* 1.5))
;; ============================================================ ;; ============================================================
@@ -128,58 +134,55 @@
;; Umlenk-/Motorstation-Fussabdruck (mm), je EINE Station. AKTIVE Quelle in ;; Umlenk-/Motorstation-Fussabdruck (mm), je EINE Station. AKTIVE Quelle in
;; vf_standard.lsp: (ssg-cfg-or "vario" "station_block_dx" 500). In ;; vf_standard.lsp: (ssg-cfg-or "vario" "station_block_dx" 500). In
;; vf_etage.lsp/vf_linienzug.lsp ueberwiegend als rohes 500/500.0-Literal ;; vf_etage.lsp/vf_linienzug.lsp jetzt aktiv referenziert (vormals rohes
;; direkt in Formeln/Blockaufrufen dupliziert (>10 Fundstellen), OHNE ;; 500/500.0-Literal, OHNE Config-Bezug).
;; Config-Bezug.
(if (null *vfk-stations-laenge*) (setq *vfk-stations-laenge* 500.0)) (if (null *vfk-stations-laenge*) (setq *vfk-stations-laenge* 500.0))
;; Separator-Laenge (mm). AKTIVE Quelle in vf_standard.lsp: (ssg-cfg-or ;; Separator-Laenge (mm). AKTIVE Quelle in vf_standard.lsp: (ssg-cfg-or
;; "vario" "separator_block_dx" 300). In vf_etage.lsp/vf_linienzug.lsp ;; "vario" "separator_block_dx" 300). In vf_etage.lsp/vf_linienzug.lsp
;; ueberwiegend als rohes 300/300.0-Literal dupliziert (Blockname ;; jetzt aktiv referenziert (Blockname "Staustrecke_Separator_SP_300_mm"
;; "Staustrecke_Separator_SP_300_mm" traegt den Wert zusaetzlich im String). ;; traegt den Wert weiterhin zusaetzlich im String - dort unangetastet).
(if (null *vfk-separator-laenge*) (setq *vfk-separator-laenge* 300.0)) (if (null *vfk-separator-laenge*) (setq *vfk-separator-laenge* 300.0))
;; Mindestlaenge (mm) fuer eine VF-Einheit (Umlenk+Motor = 2x ;; Mindestlaenge (mm) fuer eine VF-Einheit (Umlenk+Motor = 2x
;; *vfk-stations-laenge*). Rohes 1000.0-Literal an 7 Stellen in ;; *vfk-stations-laenge*). Aktiv referenziert in vf_linienzug.lsp
;; vf_linienzug.lsp dupliziert (vfl-vf-entscheidung, vfl-vf-machbar-p, ;; (vfl-vf-entscheidung, vfl-vf-machbar-p, vfl-segment-entscheidung,
;; vfl-segment-entscheidung, vf-linienzug-modus mehrfach). ;; vf-linienzug-modus).
(if (null *vfk-vf-mindestlaenge*) (setq *vfk-vf-mindestlaenge* 1000.0)) (if (null *vfk-vf-mindestlaenge*) (setq *vfk-vf-mindestlaenge* 1000.0))
;; Mindestlaenge (mm) am Linienzug-Kettenende-Abschluss (nur Motor+ ;; Mindestlaenge (mm) am Linienzug-Kettenende-Abschluss (nur Motor+
;; Separator, kein Umlenk-Anteil - siehe *vfk-feste-horizontal-kettenende*). ;; Separator, kein Umlenk-Anteil - siehe *vfk-feste-horizontal-kettenende*).
;; Rohes 800.0-Literal, identisch zum Budget-Wert selbst. ;; Aktiv referenziert in vf_linienzug.lsp.
(if (null *vfk-kettenende-mindestlaenge*) (setq *vfk-kettenende-mindestlaenge* 800.0)) (if (null *vfk-kettenende-mindestlaenge*) (setq *vfk-kettenende-mindestlaenge* 800.0))
;; Mindestlaenge (mm) fuer die 3-Grad-GF-Anschlussstrecke (GF1 am Einlauf ;; Mindestlaenge (mm) fuer die 3-Grad-GF-Anschlussstrecke (GF1 am Einlauf
;; einer VF-Einheit). Bereits als *vfl-gf-min-laenge* in vf_linienzug.lsp ;; einer VF-Einheit). Bereits als *vfl-gf-min-laenge* in vf_linienzug.lsp
;; benannt (Wert 400.0) - hier nur gespiegelt. In vf_linienzug.lsp Zeile ;; benannt (Wert 400.0) - hier nur gespiegelt. Das fruehere rohe 400.0-
;; ~4143 zusaetzlich als rohes 400.0-Literal dupliziert (br-gf1), ohne ;; Duplikat (br-gf1 in vfl3-*) referenziert jetzt *vfl-gf-min-laenge*.
;; Bezug auf *vfl-gf-min-laenge*.
(if (null *vfk-gf-anschluss-mindestlaenge*) (setq *vfk-gf-anschluss-mindestlaenge* 400.0)) (if (null *vfk-gf-anschluss-mindestlaenge*) (setq *vfk-gf-anschluss-mindestlaenge* 400.0))
;; ============================================================ ;; ============================================================
;; TEIL 3: STRECKENLAENGEN-GRENZWERTE (mm) ;; TEIL 3: STRECKENLAENGEN-GRENZWERTE (mm)
;; ============================================================ ;; ============================================================
;; Foerderer-Maximallaenge (Linienzug-Einzelsegment beim Picken). Rohes ;; Foerderer-Maximallaenge (Linienzug-Einzelsegment beim Picken). Aktiv
;; 25000.0-Literal in vfl-neue-linie-messen (vf_linienzug.lsp), keine ;; referenziert in vfl-neue-linie-messen (vf_linienzug.lsp).
;; Konstante bisher.
(if (null *vfk-segment-maximallaenge*) (setq *vfk-segment-maximallaenge* 25000.0)) (if (null *vfk-segment-maximallaenge*) (setq *vfk-segment-maximallaenge* 25000.0))
;; 20-Meter-Regel (Warnschwelle Gesamtlaenge seit letzter Umlenkstation, ;; 20-Meter-Regel (Warnschwelle Gesamtlaenge seit letzter Umlenkstation,
;; siehe Prinzipien-Dok Abschnitt 7). Rohes 20000.0-Literal in ;; siehe Prinzipien-Dok Abschnitt 7). Aktiv referenziert in vfl-20m-check
;; vfl-20m-check (vf_linienzug.lsp), keine Konstante bisher. ;; (vf_linienzug.lsp).
(if (null *vfk-motorabstand-warnung*) (setq *vfk-motorabstand-warnung* 20000.0)) (if (null *vfk-motorabstand-warnung*) (setq *vfk-motorabstand-warnung* 20000.0))
;; Unterer Clamp-Wert (mm) fuer diverse Restlaengen-Berechnungen ;; Unterer Clamp-Wert (mm) fuer diverse Restlaengen-Berechnungen
;; ("max 100.0 ..."), verhindert negative/entartete Kurzstrecken. Rohes ;; ("max ... ..."), verhindert negative/entartete Kurzstrecken. Aktiv
;; 100.0-Literal an >10 Stellen in vf_linienzug.lsp dupliziert ;; referenziert an allen frueher rohen "(max 100.0 ...)"-Stellen in
;; (vfl-baue-horizontal-koerper, vf-linienzug-modus3-Umfeld, ...). ;; vf_linienzug.lsp.
(if (null *vfk-restlaenge-min-clamp*) (setq *vfk-restlaenge-min-clamp* 100.0)) (if (null *vfk-restlaenge-min-clamp*) (setq *vfk-restlaenge-min-clamp* 100.0))
;; Unterer Clamp-Wert (mm) fuer die variable Auslauf-Staustrecke im ;; Unterer Clamp-Wert (mm) fuer die variable Auslauf-Staustrecke im
;; Etage-Typ ("Schutz gegen negative/zu kurze GF"). Rohes 50.0-Literal in ;; Etage-Typ ("Schutz gegen negative/zu kurze GF"). Aktiv referenziert in
;; etage-foerderanlage-einfuegen (vf_etage.lsp Zeile ~800). ;; etage-foerderanlage-einfuegen (vf_etage.lsp).
(if (null *vfk-etage-auslauf-min-clamp*) (setq *vfk-etage-auslauf-min-clamp* 50.0)) (if (null *vfk-etage-auslauf-min-clamp*) (setq *vfk-etage-auslauf-min-clamp* 50.0))
;; ============================================================ ;; ============================================================
@@ -191,21 +194,21 @@
;; neu vermessen werden - keine "sauberen" Rundwerte. ;; neu vermessen werden - keine "sauberen" Rundwerte.
;; AS-/ES-Element-Fallback-Versatz (dx, mm), Standard-Typ (90 Grad) und ;; AS-/ES-Element-Fallback-Versatz (dx, mm), Standard-Typ (90 Grad) und
;; Linienzug. Rohes 576.0-Literal an mehreren Stellen in vf_linienzug.lsp ;; Linienzug. Aktiv referenziert an allen frueher rohen 576.0-Stellen in
;; dupliziert (Zeile ~3393/4030/4031: "(if aus-dx aus-dx 576.0)" bzw. ;; vf_linienzug.lsp ("(if aus-dx aus-dx ...)" bzw. ein-dx-Aequivalent).
;; ein-dx-Aequivalent).
(if (null *vfk-as-es-fallback-dx*) (setq *vfk-as-es-fallback-dx* 576.0)) (if (null *vfk-as-es-fallback-dx*) (setq *vfk-as-es-fallback-dx* 576.0))
;; Etage-Typ (30 Grad): eigene Fallback-Masse fuer AS_Element_30 (dx/dz, ;; Etage-Typ (30 Grad): eigene Fallback-Masse fuer AS_Element_30 und
;; vf_etage.lsp Zeile ~90/96) und ES_Element_30 (Zeile ~124/130) - NICHT ;; ES_Element_30 (vf_etage.lsp, init-bibliothek-etage) - NICHT identisch
;; identisch zu *vfk-as-es-fallback-dx* (anderer Blocktyp/Winkel). ;; zu *vfk-as-es-fallback-dx* (anderer Blocktyp/Winkel). Aktiv referenziert.
(if (null *vfk-etage-as-fallback-dx*) (setq *vfk-etage-as-fallback-dx* 525.8)) (if (null *vfk-etage-as-fallback-dx*) (setq *vfk-etage-as-fallback-dx* 525.8))
(if (null *vfk-etage-as-fallback-dz*) (setq *vfk-etage-as-fallback-dz* -72.9)) (if (null *vfk-etage-as-fallback-dz*) (setq *vfk-etage-as-fallback-dz* -72.9))
(if (null *vfk-etage-es-fallback-dx*) (setq *vfk-etage-es-fallback-dx* 576.2)) (if (null *vfk-etage-es-fallback-dx*) (setq *vfk-etage-es-fallback-dx* 576.2))
(if (null *vfk-etage-es-fallback-dz*) (setq *vfk-etage-es-fallback-dz* -54.6)) (if (null *vfk-etage-es-fallback-dz*) (setq *vfk-etage-es-fallback-dz* -54.6))
;; Etage-Typ: Fallback-Versatz (dz, mm) fuer Gefaellebogen links/rechts, ;; Etage-Typ: Fallback-Versatz (dz, mm) fuer Gefaellebogen links/rechts,
;; falls Block/KS nicht extrahierbar (vf_etage.lsp Zeile ~156-195). ;; falls Block/KS nicht extrahierbar (vf_etage.lsp, init-bibliothek-etage).
;; Aktiv referenziert.
(if (null *vfk-etage-gefaellebogen-fallback-dz*) (setq *vfk-etage-gefaellebogen-fallback-dz* -10.0)) (if (null *vfk-etage-gefaellebogen-fallback-dz*) (setq *vfk-etage-gefaellebogen-fallback-dz* -10.0))
;; ============================================================ ;; ============================================================
@@ -213,19 +216,19 @@
;; ============================================================ ;; ============================================================
;; Texthoehe (mm) des sichtbaren ATTDEF/TEXT-Labels (vf-make-label, ;; Texthoehe (mm) des sichtbaren ATTDEF/TEXT-Labels (vf-make-label,
;; vf_core.lsp Zeile ~1073). Rohes Literal, keine Konstante bisher. ;; vf_core.lsp). Aktiv referenziert.
(if (null *vfk-label-texthoehe*) (setq *vfk-label-texthoehe* 100.0)) (if (null *vfk-label-texthoehe*) (setq *vfk-label-texthoehe* 100.0))
;; Texthoehe (mm) der unsichtbaren ATTDEFs (vf-block-erstellen, ;; Texthoehe (mm) der unsichtbaren ATTDEFs (vf-block-erstellen,
;; vf_core.lsp Zeile ~1125). Rohes Literal, keine Konstante bisher. ;; vf_core.lsp). Aktiv referenziert.
(if (null *vfk-attdef-texthoehe*) (setq *vfk-attdef-texthoehe* 50.0)) (if (null *vfk-attdef-texthoehe*) (setq *vfk-attdef-texthoehe* 50.0))
;; Y-Versatz (mm) zwischen aufeinanderfolgenden ATTDEF-Zeilen ;; Y-Versatz (mm) zwischen aufeinanderfolgenden ATTDEF-Zeilen
;; (vf_core.lsp Zeile ~1131). Rohes Literal, keine Konstante bisher. ;; (vf_core.lsp). Aktiv referenziert.
(if (null *vfk-attdef-zeilenabstand*) (setq *vfk-attdef-zeilenabstand* 100.0)) (if (null *vfk-attdef-zeilenabstand*) (setq *vfk-attdef-zeilenabstand* 100.0))
;; Beschriftungsversatz (mm) senkrecht zur Fahrtrichtung (vf-make-label, ;; Beschriftungsversatz (mm) senkrecht zur Fahrtrichtung (vf-make-label,
;; vf_core.lsp Zeile ~1059-1060). Rohes 200.0-Literal. ;; vf_core.lsp). Aktiv referenziert.
(if (null *vfk-label-versatz*) (setq *vfk-label-versatz* 200.0)) (if (null *vfk-label-versatz*) (setq *vfk-label-versatz* 200.0))
;; ============================================================ ;; ============================================================
@@ -234,9 +237,10 @@
;; mm -> m Umrechnungsfaktor fuer die Montagehoehe-Mittelwertbildung ;; mm -> m Umrechnungsfaktor fuer die Montagehoehe-Mittelwertbildung
;; ("(/ (+ hoehe-von hoehe-bis) 2000.0)" = Mittelwert zweier mm-Werte, ;; ("(/ (+ hoehe-von hoehe-bis) 2000.0)" = Mittelwert zweier mm-Werte,
;; direkt in m). Kommt identisch in vf_core.lsp Zeile ~1154 UND ;; direkt in m). Kommt identisch in vf_core.lsp und vf_linienzug.lsp vor -
;; vf_linienzug.lsp Zeile ~2258/4742 vor - inhaltlich einfach 1000.0*2, ;; inhaltlich einfach 1000.0*2, aber nirgends so ausgedrueckt. BEWUSST NICHT
;; aber nirgends so ausgedrueckt. ;; auf *vfk-mm-je-m* umgestellt (keine 1:1-Ersetzung, siehe Datei-
;; Kopfkommentar) - bleibt als eigenstaendiges 2000.0-Literal bestehen.
(if (null *vfk-mm-je-m*) (setq *vfk-mm-je-m* 1000.0)) (if (null *vfk-mm-je-m*) (setq *vfk-mm-je-m* 1000.0))
;; Skalierungsbasis (mm) fuer insert-inclined-scaled-block. AKTIVE Quelle: ;; Skalierungsbasis (mm) fuer insert-inclined-scaled-block. AKTIVE Quelle:
@@ -252,19 +256,19 @@
;; Diagnose-Schwellwert (mm): ab wann ein Anschlussabstand beim ;; Diagnose-Schwellwert (mm): ab wann ein Anschlussabstand beim
;; Ketten-Verfolgen als "spuerbar, aber noch sauber" gilt (vfl-kette- ;; Ketten-Verfolgen als "spuerbar, aber noch sauber" gilt (vfl-kette-
;; verfolgen, vf_linienzug.lsp Zeile ~4617). Rohes 0.5-Literal. ;; verfolgen, vf_linienzug.lsp). Aktiv referenziert.
(if (null *vfk-kette-anschluss-warnung*) (setq *vfk-kette-anschluss-warnung* 0.5)) (if (null *vfk-kette-anschluss-warnung*) (setq *vfk-kette-anschluss-warnung* 0.5))
;; Warnschwelle (Grad): Vario-Winkel oberhalb des Maximums der ;; Warnschwelle (Grad): Vario-Winkel oberhalb des Maximums der
;; Bogenwinkel-Tabelle (Modus 3, vf-linienzug-modus3 Zeile ~4018). Rohes ;; Bogenwinkel-Tabelle (Modus 3, vf-linienzug-modus3). Dupliziert das
;; 51.0-Literal, dupliziert das Maximum von *vfk-bogen-winkel*. ;; Maximum von *vfk-bogen-winkel*. Aktiv referenziert.
(if (null *vfk-vario-winkel-max*) (setq *vfk-vario-winkel-max* 51.0)) (if (null *vfk-vario-winkel-max*) (setq *vfk-vario-winkel-max* 51.0))
;; Empirischer Korrekturfaktor (mm) fuer die Bruecken-Hoehenberechnung in ;; Empirischer Korrekturfaktor (mm) fuer die Bruecken-Hoehenberechnung in
;; Modus 3 (vf-linienzug-modus3, "dH-adj", vf_linienzug.lsp Zeile ~4162). ;; Modus 3 (vf-linienzug-modus3, "dH-adj", vf_linienzug.lsp). Aktiv
;; UNKOMMENTIERTE Herleitung im Original - nur "Motor + auf_3/ab_3"-Notiz. ;; referenziert. UNKOMMENTIERTE Herleitung im Original - nur "Motor +
;; Bei Gelegenheit pruefen/nachvollziehen, ob sich der Wert geometrisch ;; auf_3/ab_3"-Notiz. Bei Gelegenheit pruefen/nachvollziehen, ob sich der
;; herleiten laesst statt empirisch fixiert zu bleiben. ;; Wert geometrisch herleiten laesst statt empirisch fixiert zu bleiben.
(if (null *vfk-bruecke-korrektur*) (setq *vfk-bruecke-korrektur* 10.48)) (if (null *vfk-bruecke-korrektur*) (setq *vfk-bruecke-korrektur* 10.48))
(setq *vfk-konstanten-geladen* t) (setq *vfk-konstanten-geladen* t)
+94 -94
View File
@@ -1438,7 +1438,7 @@
(cond (cond
;; Zu kurz fuer eine VF-Einheit: Umlenkstation (500 mm) + Motorstation ;; Zu kurz fuer eine VF-Einheit: Umlenkstation (500 mm) + Motorstation
;; (500 mm) belegen zusammen 1000 mm deltaL. ;; (500 mm) belegen zusammen 1000 mm deltaL.
((< deltaL 1000.0) (list nil nil nil nil)) ((< deltaL *vfk-vf-mindestlaenge*) (list nil nil nil nil))
;; Segment ohne messbare Hoehenaenderung: kein sinnvolles VF ;; Segment ohne messbare Hoehenaenderung: kein sinnvolles VF
((< deltaH 1.0) (list nil nil nil nil)) ((< deltaH 1.0) (list nil nil nil nil))
@@ -1455,7 +1455,7 @@
;; sonst -> VF (Horizontale Mitte oder diskreter Winkel) ;; sonst -> VF (Horizontale Mitte oder diskreter Winkel)
(t (t
(setq winkel-natuerlich (* (atan (/ deltaH deltaL)) (/ 180.0 pi))) (setq winkel-natuerlich (* (atan (/ deltaH deltaL)) (/ 180.0 pi)))
(if (> winkel-natuerlich 3.0) (if (> winkel-natuerlich *vfk-gefaelle-winkel*)
(progn (progn
(setq wahl (vfl-vf-winkel deltaL deltaH "Ab")) (setq wahl (vfl-vf-winkel deltaL deltaH "Ab"))
(if wahl (if wahl
@@ -1504,8 +1504,8 @@
mass2 (get-bogen-mass bogen-auf winkel))) mass2 (get-bogen-mass bogen-auf winkel)))
(if (and mass1 mass2) (if (and mass1 mass2)
(progn (progn
(setq rad5 (* 3.0 (/ pi 180.0))) (setq rad5 (* *vfk-gefaelle-winkel* (/ pi 180.0)))
(setq rad7 (* (float (if (= richtung "Auf") (- 3 winkel) (+ winkel 3))) (setq rad7 (* (float (if (= richtung "Auf") (- *vfk-gefaelle-winkel* winkel) (+ winkel *vfk-gefaelle-winkel*)))
(/ pi 180.0))) (/ pi 180.0)))
(setq bogen-x1 (+ (* (car mass1) (cos rad5)) (* (caddr mass1) (sin rad5)))) (setq bogen-x1 (+ (* (car mass1) (cos rad5)) (* (caddr mass1) (sin rad5))))
(setq bogen-z1 (+ (* (- (car mass1)) (sin rad5)) (* (caddr mass1) (cos rad5)))) (setq bogen-z1 (+ (* (- (car mass1)) (sin rad5)) (* (caddr mass1) (cos rad5))))
@@ -1514,7 +1514,7 @@
(setq cosa (cos (* winkel (/ pi 180.0))) (setq cosa (cos (* winkel (/ pi 180.0)))
sina (sin (* winkel (/ pi 180.0)))) sina (sin (* winkel (/ pi 180.0))))
(setq A (- deltaL aus-dx ein-dx bogen-x1 bogen-x2 (* feste-hz cos3))) (setq A (- deltaL aus-dx ein-dx bogen-x1 bogen-x2 (* feste-hz cos3)))
(setq winkel-eff (if (= richtung "Auf") (- winkel 3) (+ winkel 3))) (setq winkel-eff (if (= richtung "Auf") (- winkel *vfk-gefaelle-winkel*) (+ winkel *vfk-gefaelle-winkel*)))
(setq cosEff (cos (* winkel-eff (/ pi 180.0))) (setq cosEff (cos (* winkel-eff (/ pi 180.0)))
sinEff (sin (* winkel-eff (/ pi 180.0)))) sinEff (sin (* winkel-eff (/ pi 180.0))))
(if (= richtung "Auf") (if (= richtung "Auf")
@@ -1551,7 +1551,7 @@
(defun vfl-vf-machbar-p (deltaL deltaH richtung / horizontal-info save-ausdx save-ausdz ergebnis) (defun vfl-vf-machbar-p (deltaL deltaH richtung / horizontal-info save-ausdx save-ausdz ergebnis)
(if (or (not *lib-initialized*) (null bogen-auf)) (init-bibliothek)) (if (or (not *lib-initialized*) (null bogen-auf)) (init-bibliothek))
(cond (cond
((< deltaL 1000.0) nil) ((< deltaL *vfk-vf-mindestlaenge*) nil)
((< deltaH 1.0) nil) ((< deltaH 1.0) nil)
((= richtung "Auf") ((= richtung "Auf")
(setq save-ausdx aus-dx save-ausdz aus-dz) (setq save-ausdx aus-dx save-ausdz aus-dz)
@@ -1579,7 +1579,7 @@
;; Rueckgabe: deltaH (mm) oder nil, wenn in diesem Bereich nichts baubar ist. ;; Rueckgabe: deltaH (mm) oder nil, wenn in diesem Bereich nichts baubar ist.
(defun vfl-vf-min-deltah (deltaL richtung / schritt grenze h gefunden) (defun vfl-vf-min-deltah (deltaL richtung / schritt grenze h gefunden)
(setq schritt 10.0) (setq schritt 10.0)
(setq grenze (/ deltaL 3.0)) (setq grenze (/ deltaL *vfk-gefaelle-winkel*))
(setq h schritt gefunden nil) (setq h schritt gefunden nil)
(while (and (not gefunden) (<= h grenze)) (while (and (not gefunden) (<= h grenze))
(if (vfl-vf-machbar-p deltaL h richtung) (if (vfl-vf-machbar-p deltaL h richtung)
@@ -1648,17 +1648,17 @@
(setq aus-dx 0.0 aus-dz 0.0) (setq aus-dx 0.0 aus-dz 0.0)
(setq ergebnis (setq ergebnis
(cond (cond
((< deltaL 800.0) nil) ((< deltaL *vfk-kettenende-mindestlaenge*) nil)
((< deltaH 1.0) ((< deltaH 1.0)
(setq horizontal-info (berechne-horizontale-mitte deltaL deltaH "Ab")) (setq horizontal-info (berechne-horizontale-mitte deltaL deltaH "Ab"))
(and horizontal-info (caddr horizontal-info) t)) (and horizontal-info (caddr horizontal-info) t))
((= richtung "Auf") ((= richtung "Auf")
(vfl-winkel-machbar-p deltaL deltaH "Auf" 800.0)) (vfl-winkel-machbar-p deltaL deltaH "Auf" *vfk-feste-horizontal-kettenende*))
(t (t
(setq horizontal-info (berechne-horizontale-mitte deltaL deltaH "Ab")) (setq horizontal-info (berechne-horizontale-mitte deltaL deltaH "Ab"))
(if (and horizontal-info (caddr horizontal-info)) (if (and horizontal-info (caddr horizontal-info))
t t
(vfl-winkel-machbar-p deltaL deltaH "Ab" 800.0))) (vfl-winkel-machbar-p deltaL deltaH "Ab" *vfk-feste-horizontal-kettenende*)))
) )
) )
(setq aus-dx save-ausdx aus-dz save-ausdz) (setq aus-dx save-ausdx aus-dz save-ausdz)
@@ -1669,7 +1669,7 @@
;; vfl-body-zerlegung statt vfl-vf-entscheidung). ;; vfl-body-zerlegung statt vfl-vf-entscheidung).
(defun vfl-body-min-deltah (deltaL richtung / schritt grenze h gefunden) (defun vfl-body-min-deltah (deltaL richtung / schritt grenze h gefunden)
(setq schritt 10.0) (setq schritt 10.0)
(setq grenze (/ deltaL 3.0)) (setq grenze (/ deltaL *vfk-gefaelle-winkel*))
(setq h schritt gefunden nil) (setq h schritt gefunden nil)
(while (and (not gefunden) (<= h grenze)) (while (and (not gefunden) (<= h grenze))
(if (vfl-body-machbar-p deltaL h richtung) (if (vfl-body-machbar-p deltaL h richtung)
@@ -1704,10 +1704,10 @@
;; (500 mm) belegen zusammen 1000 mm deltaL - darunter ist kein VF baubar. ;; (500 mm) belegen zusammen 1000 mm deltaL - darunter ist kein VF baubar.
;; Also nur GF moeglich, und GF ist mindestens 3 Grad geneigt -> fest 3 Grad. ;; Also nur GF moeglich, und GF ist mindestens 3 Grad geneigt -> fest 3 Grad.
;; Steigend geht mit einer Gefaellestrecke nicht -> nicht baubar. ;; Steigend geht mit einer Gefaellestrecke nicht -> nicht baubar.
((< deltaL 1000.0) ((< deltaL *vfk-vf-mindestlaenge*)
(if (= richtung "Auf") (if (= richtung "Auf")
(list nil nil nil nil) (list nil nil nil nil)
(list "GF" 3.0 nil nil))) (list "GF" *vfk-gefaelle-winkel* nil nil)))
;; Segment ohne messbare Hoehenaenderung: weder Gefaelle noch sinnvolles VF ;; Segment ohne messbare Hoehenaenderung: weder Gefaelle noch sinnvolles VF
((< deltaH 1.0) (list nil nil nil nil)) ((< deltaH 1.0) (list nil nil nil nil))
@@ -1721,8 +1721,8 @@
;; sonst -> VF (vfl-vf-entscheidung) ;; sonst -> VF (vfl-vf-entscheidung)
(t (t
(setq winkel-natuerlich (* (atan (/ deltaH deltaL)) (/ 180.0 pi))) (setq winkel-natuerlich (* (atan (/ deltaH deltaL)) (/ 180.0 pi)))
(if (<= (abs (- winkel-natuerlich 3.0)) *vfl-gf-winkel-toleranz*) (if (<= (abs (- winkel-natuerlich *vfk-gefaelle-winkel*)) *vfl-gf-winkel-toleranz*)
(list "GF" 3.0 nil nil) (list "GF" *vfk-gefaelle-winkel* nil nil)
(vfl-vf-entscheidung deltaL deltaH richtung)) (vfl-vf-entscheidung deltaL deltaH richtung))
) )
) )
@@ -1890,7 +1890,7 @@
(setq ergebnis nil fertig t) (setq ergebnis nil fertig t)
(progn (progn
(setq deltaL (car erg) hz-aktuell (cdr erg)) (setq deltaL (car erg) hz-aktuell (cdr erg))
(if (> deltaL 25000.0) (if (> deltaL *vfk-segment-maximallaenge*)
(princ (ssg-textf "vfl-fehler-laenge-max" (list (rtos (/ deltaL 1000.0) 2 2)))) (princ (ssg-textf "vfl-fehler-laenge-max" (list (rtos (/ deltaL 1000.0) 2 2))))
(progn (progn
(setq ergebnis (list deltaL hz-aktuell)) (setq ergebnis (list deltaL hz-aktuell))
@@ -1926,7 +1926,7 @@
;; automatisches Einfuegen einer Zwischen-Motorstation. ;; automatisches Einfuegen einer Zwischen-Motorstation.
(defun vfl-20m-check (p-umlenk p-akt / laenge) (defun vfl-20m-check (p-umlenk p-akt / laenge)
(setq laenge (vfl-planar-dist p-umlenk p-akt)) (setq laenge (vfl-planar-dist p-umlenk p-akt))
(if (> laenge 20000.0) (if (> laenge *vfk-motorabstand-warnung*)
(princ (ssg-textf "vfl-20m-hinweis" (list (rtos (/ laenge 1000.0) 2 2)))) (princ (ssg-textf "vfl-20m-hinweis" (list (rtos (/ laenge 1000.0) 2 2))))
) )
) )
@@ -1944,14 +1944,14 @@
;; nil => auf 3-Grad-Basis. Damit wird der Uebergang auf_3/ab_3 nur dann gesetzt, ;; nil => auf 3-Grad-Basis. Damit wird der Uebergang auf_3/ab_3 nur dann gesetzt,
;; wenn wirklich ein Neigungswechsel noetig ist. ;; wenn wirklich ein Neigungswechsel noetig ist.
(defun vfl-frame-flach-p (frame) (defun vfl-frame-flach-p (frame)
(< (abs (cadr (frame->hz-winkel frame))) 1.5)) (< (abs (cadr (frame->hz-winkel frame))) *vfk-frame-flach-toleranz*))
;; Separator (300 mm) HORIZONTAL (0 Grad) an einen Punkt anfuegen - fuer das ;; Separator (300 mm) HORIZONTAL (0 Grad) an einen Punkt anfuegen - fuer das
;; horizontale Stueck, wo der Separator in der 0-Grad-Ebene liegt (NICHT auf der ;; horizontale Stueck, wo der Separator in der 0-Grad-Ebene liegt (NICHT auf der
;; 3-Grad-Basis wie vfl-insert-separator). Rueckgabe: Endpunkt. ;; 3-Grad-Basis wie vfl-insert-separator). Rueckgabe: Endpunkt.
(defun vfl-sep-hz (pt hz / ep) (defun vfl-sep-hz (pt hz / ep)
(princ (ssg-text "vfl-sep-horizontal-info")) (princ (ssg-text "vfl-sep-horizontal-info"))
(setq ep (gf-insert-hz-with-ks "Staustrecke_Separator_SP_300_mm" pt hz 0 300 0)) (setq ep (gf-insert-hz-with-ks "Staustrecke_Separator_SP_300_mm" pt hz 0 *vfk-separator-laenge* 0))
(setq *vfl-acc-separator* (1+ *vfl-acc-separator*)) (setq *vfl-acc-separator* (1+ *vfl-acc-separator*))
ep) ep)
@@ -2005,7 +2005,7 @@
(princ (ssg-text "vfl-nein")) (princ (ssg-text "vfl-nein"))
(setq sep-vor (= (vfl-menu (ssg-text "vfl-prompt-wahl-1-2-def2") (setq sep-vor (= (vfl-menu (ssg-text "vfl-prompt-wahl-1-2-def2")
(list (ssg-text "vfl-ja") (ssg-text "vfl-nein")) 2 "vfl-sep-vor-frage") "1")) (list (ssg-text "vfl-ja") (ssg-text "vfl-nein")) 2 "vfl-sep-vor-frage") "1"))
(if (and ziel-modus sep-vor) (setq dL (max 100.0 (- dL 300.0)))) (if (and ziel-modus sep-vor) (setq dL (max *vfk-restlaenge-min-clamp* (- dL *vfk-separator-laenge*))))
;; auf_3-Eintritt nur, wenn noch NICHT flach (sonst flache Zone fortsetzen). ;; auf_3-Eintritt nur, wenn noch NICHT flach (sonst flache Zone fortsetzen).
;; dL ist die gewuenschte Reststrecke AB HIER (pt) - der reale Bogen- ;; dL ist die gewuenschte Reststrecke AB HIER (pt) - der reale Bogen-
;; Fussabdruck (gemessen, nicht aus der Tabellen-Masse geschaetzt - die ;; Fussabdruck (gemessen, nicht aus der Tabellen-Masse geschaetzt - die
@@ -2018,7 +2018,7 @@
(princ (ssg-text "vfl-bogen-auf3-uebergang")) (princ (ssg-text "vfl-bogen-auf3-uebergang"))
(setq pt (insert-rotated-block-with-ks "Vario_Bogen_auf_3_TEF_rechts" pt (setq pt (insert-rotated-block-with-ks "Vario_Bogen_auf_3_TEF_rechts" pt
(ssg-cfg-or "vario" "gefaelle_winkel" 3) (car m1) (caddr m1) hz)) (ssg-cfg-or "vario" "gefaelle_winkel" 3) (car m1) (caddr m1) hz))
(setq dL (max 100.0 (- dL (vfl-projiziere-distanz pt-vor-bogen pt hz)))))) (setq dL (max *vfk-restlaenge-min-clamp* (- dL (vfl-projiziere-distanz pt-vor-bogen pt hz))))))
;; Separator NACH abfragen (noch nicht bauen) - im Ziel-Modus VOR der ;; Separator NACH abfragen (noch nicht bauen) - im Ziel-Modus VOR der
;; Laengenberechnung, damit der Fussabdruck feststeht. ;; Laengenberechnung, damit der Fussabdruck feststeht.
(princ (ssg-text "vfl-sep-nach-frage")) (princ (ssg-text "vfl-sep-nach-frage"))
@@ -2026,7 +2026,7 @@
(princ (ssg-text "vfl-nein")) (princ (ssg-text "vfl-nein"))
(setq sep-nach (= (vfl-menu (ssg-text "vfl-prompt-wahl-1-2-def2") (setq sep-nach (= (vfl-menu (ssg-text "vfl-prompt-wahl-1-2-def2")
(list (ssg-text "vfl-ja") (ssg-text "vfl-nein")) 2 "vfl-sep-nach-frage") "1")) (list (ssg-text "vfl-ja") (ssg-text "vfl-nein")) 2 "vfl-sep-nach-frage") "1"))
(if (and ziel-modus sep-nach) (setq dL (max 100.0 (- dL 300.0)))) (if (and ziel-modus sep-nach) (setq dL (max *vfk-restlaenge-min-clamp* (- dL *vfk-separator-laenge*))))
;; Im Ziel-Modus: "Ist der Endpunkt der Foerderer?" JETZT abfragen (statt ;; Im Ziel-Modus: "Ist der Endpunkt der Foerderer?" JETZT abfragen (statt
;; erst danach in der Aufruferschleife) - der Ausgangs-Fussabdruck ;; erst danach in der Aufruferschleife) - der Ausgangs-Fussabdruck
;; (Vario_Bogen_ab_3 + Motorstation) wird nur reserviert, wenn tatsaechlich ;; (Vario_Bogen_ab_3 + Motorstation) wird nur reserviert, wenn tatsaechlich
@@ -2044,11 +2044,11 @@
"vfl-ist-endpunkt-frage")) "vfl-ist-endpunkt-frage"))
(cond (cond
((= ist-ende-antwort "1") ((= ist-ende-antwort "1")
(setq dL (max 100.0 (- dL (car (get-bogen-mass bogen-ab 3)) 500.0 (setq dL (max *vfk-restlaenge-min-clamp* (- dL (car (get-bogen-mass bogen-ab (fix *vfk-gefaelle-winkel*))) *vfk-stations-laenge*
(* (if gf2-laenge gf2-laenge 0.0) (* (if gf2-laenge gf2-laenge 0.0)
(cos (* 3.0 (/ pi 180.0)))))))) (cos (* *vfk-gefaelle-winkel* (/ pi 180.0))))))))
((= ist-ende-antwort "3") ((= ist-ende-antwort "3")
(setq dL (max 100.0 (- dL (car (get-bogen-mass bogen-ab 3)) 500.0)))) (setq dL (max *vfk-restlaenge-min-clamp* (- dL (car (get-bogen-mass bogen-ab (fix *vfk-gefaelle-winkel*))) *vfk-stations-laenge*))))
) )
) )
) )
@@ -2088,11 +2088,11 @@
(if (or (not *lib-initialized*) (null bogen-auf)) (init-bibliothek)) (if (or (not *lib-initialized*) (null bogen-auf)) (init-bibliothek))
;; Budget-Globals temporaer auf den Mid-Body-Fall umbiegen (mit Restore). ;; Budget-Globals temporaer auf den Mid-Body-Fall umbiegen (mit Restore).
(setq save-ausdx aus-dx save-ausdz aus-dz save-feste FESTE_HORIZONTAL) (setq save-ausdx aus-dx save-ausdz aus-dz save-feste FESTE_HORIZONTAL)
(setq aus-dx 0.0 aus-dz 0.0 FESTE_HORIZONTAL 800.0) (setq aus-dx 0.0 aus-dz 0.0 FESTE_HORIZONTAL *vfk-feste-horizontal-kettenende*)
(setq res (setq res
(cond (cond
;; kuerzer als Motor(500)+Separator(300): kein Abschluss baubar ;; kuerzer als Motor(500)+Separator(300): kein Abschluss baubar
((< deltaL 800.0) (list nil nil nil nil)) ((< deltaL *vfk-kettenende-mindestlaenge*) (list nil nil nil nil))
;; praktisch flach: horizontales VF + GF2 ;; praktisch flach: horizontales VF + GF2
((< deltaH 1.0) ((< deltaH 1.0)
(setq horizontal-info (berechne-horizontale-mitte deltaL deltaH "Ab")) (setq horizontal-info (berechne-horizontale-mitte deltaL deltaH "Ab"))
@@ -2101,18 +2101,18 @@
(list nil nil nil nil))) (list nil nil nil nil)))
;; steigend: nur gewinkeltes VF + GF2 moeglich ;; steigend: nur gewinkeltes VF + GF2 moeglich
((= richtung "Auf") ((= richtung "Auf")
(setq wahl (vfl-waehle-winkel (nth 3 (berechne-alle-winkel deltaL deltaH "Auf" 800.0)))) (setq wahl (vfl-waehle-winkel (nth 3 (berechne-alle-winkel deltaL deltaH "Auf" *vfk-feste-horizontal-kettenende*))))
(if wahl (list "VF" (nth 0 wahl) (nth 1 wahl) (nth 2 wahl)) (list nil nil nil nil))) (if wahl (list "VF" (nth 0 wahl) (nth 1 wahl) (nth 2 wahl)) (list nil nil nil nil)))
;; fallend: natuerlichen Neigungswinkel gegen die 3-Grad-Eigenneigung pruefen ;; fallend: natuerlichen Neigungswinkel gegen die 3-Grad-Eigenneigung pruefen
(t (t
(setq winkel-natuerlich (* (atan (/ deltaH deltaL)) (/ 180.0 pi))) (setq winkel-natuerlich (* (atan (/ deltaH deltaL)) (/ 180.0 pi)))
(cond (cond
;; ~3 Grad -> reine GF2 (kein Koerper, GF2 traegt Laenge + 3-Grad-Absenkung) ;; ~3 Grad -> reine GF2 (kein Koerper, GF2 traegt Laenge + 3-Grad-Absenkung)
((<= (abs (- winkel-natuerlich 3.0)) *vfl-gf-winkel-toleranz*) ((<= (abs (- winkel-natuerlich *vfk-gefaelle-winkel*)) *vfl-gf-winkel-toleranz*)
(list "GF" 3.0 nil nil)) (list "GF" *vfk-gefaelle-winkel* nil nil))
;; steiler als 3 Grad -> Stufe 1: gewinkeltes VF + GF2 (GF2 variiert mit Winkel) ;; steiler als 3 Grad -> Stufe 1: gewinkeltes VF + GF2 (GF2 variiert mit Winkel)
((> winkel-natuerlich 3.0) ((> winkel-natuerlich *vfk-gefaelle-winkel*)
(setq wahl (vfl-waehle-winkel (nth 3 (berechne-alle-winkel deltaL deltaH "Ab" 800.0)))) (setq wahl (vfl-waehle-winkel (nth 3 (berechne-alle-winkel deltaL deltaH "Ab" *vfk-feste-horizontal-kettenende*))))
(if wahl (list "VF" (nth 0 wahl) (nth 1 wahl) (nth 2 wahl)) (list nil nil nil nil))) (if wahl (list "VF" (nth 0 wahl) (nth 1 wahl) (nth 2 wahl)) (list nil nil nil nil)))
;; flacher als 3 Grad -> Stufe 2: horizontales VF + GF2 ;; flacher als 3 Grad -> Stufe 2: horizontales VF + GF2
(t (t
@@ -2120,7 +2120,7 @@
(if (and horizontal-info (caddr horizontal-info)) (if (and horizontal-info (caddr horizontal-info))
(list "VF" 0 (car horizontal-info) (cadr horizontal-info)) (list "VF" 0 (car horizontal-info) (cadr horizontal-info))
(progn (progn
(setq wahl (vfl-waehle-winkel (nth 3 (berechne-alle-winkel deltaL deltaH "Ab" 800.0)))) (setq wahl (vfl-waehle-winkel (nth 3 (berechne-alle-winkel deltaL deltaH "Ab" *vfk-feste-horizontal-kettenende*))))
(if wahl (list "VF" (nth 0 wahl) (nth 1 wahl) (nth 2 wahl)) (list nil nil nil nil))))))))) (if wahl (list "VF" (nth 0 wahl) (nth 1 wahl) (nth 2 wahl)) (list nil nil nil nil)))))))))
;; Budget-Globals zuruecksetzen ;; Budget-Globals zuruecksetzen
(setq aus-dx save-ausdx aus-dz save-ausdz FESTE_HORIZONTAL save-feste) (setq aus-dx save-ausdx aus-dz save-ausdz FESTE_HORIZONTAL save-feste)
@@ -2205,7 +2205,7 @@
(setq gf2 (setq gf2
(cond ((and lgf (> lgf 0.0)) lgf) (cond ((and lgf (> lgf 0.0)) lgf)
((= typ "GF") ((= typ "GF")
(max 0.0 (- (/ (- dL (abs (if ein-dx ein-dx 576.0))) (cos rad3)) 800.0))) (max 0.0 (- (/ (- dL (abs (if ein-dx ein-dx *vfk-as-es-fallback-dx*))) (cos rad3)) *vfk-feste-horizontal-kettenende*)))
(t 0.0))) (t 0.0)))
(if (and (> gf2 0.0) (< gf2 *vfl-gf-min-laenge*)) (if (and (> gf2 0.0) (< gf2 *vfl-gf-min-laenge*))
(progn (progn
@@ -2265,7 +2265,7 @@
;; berechnung gestellt (siehe dortiger Kommentar) - die Antwort kommt ;; berechnung gestellt (siehe dortiger Kommentar) - die Antwort kommt
;; hier zurueck, damit die Schleife unten sie nicht nochmal erfragt. ;; hier zurueck, damit die Schleife unten sie nicht nochmal erfragt.
(setq res-h (vfl-baue-horizontal-koerper frame hz1 (setq res-h (vfl-baue-horizontal-koerper frame hz1
(max 100.0 (- L_VF1 (vfl-projiziere-distanz entry-start p-umlenk hz1))) (max *vfk-restlaenge-min-clamp* (- L_VF1 (vfl-projiziere-distanz entry-start p-umlenk hz1)))
t L_GF2-bau)) t L_GF2-bau))
(setq frame (car res-h) vor-antwort (cadr res-h)) (setq frame (car res-h) vor-antwort (cadr res-h))
) )
@@ -2709,7 +2709,7 @@
(setq hz (car (frame->hz-winkel frame))) (setq hz (car (frame->hz-winkel frame)))
(setq w (ssg-cfg-or "vario" "gefaelle_winkel" 3)) (setq w (ssg-cfg-or "vario" "gefaelle_winkel" 3))
(setq sep-endpunkt (setq sep-endpunkt
(gf-insert-hz-with-ks "Staustrecke_Separator_SP_300_mm" (car frame) hz w 300 0)) (gf-insert-hz-with-ks "Staustrecke_Separator_SP_300_mm" (car frame) hz w *vfk-separator-laenge* 0))
(setq *vfl-acc-separator* (1+ *vfl-acc-separator*)) (setq *vfl-acc-separator* (1+ *vfl-acc-separator*))
(make-frame-from-dir sep-endpunkt (hz-winkel->xu hz w)) (make-frame-from-dir sep-endpunkt (hz-winkel->xu hz w))
) )
@@ -2727,7 +2727,7 @@
w-eff sep-endpunkt sep-frame) w-eff sep-endpunkt sep-frame)
(setq w-eff (if (= typ "GF") winkel (ssg-cfg-or "vario" "gefaelle_winkel" 3))) (setq w-eff (if (= typ "GF") winkel (ssg-cfg-or "vario" "gefaelle_winkel" 3)))
(setq sep-endpunkt (setq sep-endpunkt
(gf-insert-hz-with-ks "Staustrecke_Separator_SP_300_mm" (car frame) hz w-eff 300 0)) (gf-insert-hz-with-ks "Staustrecke_Separator_SP_300_mm" (car frame) hz w-eff *vfk-separator-laenge* 0))
(setq sep-frame (make-frame-from-dir sep-endpunkt (hz-winkel->xu hz w-eff))) (setq sep-frame (make-frame-from-dir sep-endpunkt (hz-winkel->xu hz w-eff)))
(if (boundp '*vfl-acc-separator*) (if (boundp '*vfl-acc-separator*)
(setq *vfl-acc-separator* (1+ *vfl-acc-separator*))) ; Separator vor ES (setq *vfl-acc-separator* (1+ *vfl-acc-separator*))) ; Separator vor ES
@@ -3149,7 +3149,7 @@
(setq frame (nth 0 erg) deltaL (nth 1 erg) p-aktuell (car frame)) (setq frame (nth 0 erg) deltaL (nth 1 erg) p-aktuell (car frame))
) )
) )
(if (< deltaL 1000.0) (if (< deltaL *vfk-vf-mindestlaenge*)
(progn (progn
(princ (ssg-text "vfl-fehler-horizontal-vf-kurz")) (princ (ssg-text "vfl-fehler-horizontal-vf-kurz"))
(if dbg-an (if dbg-an
@@ -3340,7 +3340,7 @@
(setq frame (nth 0 erg) deltaL (nth 1 erg) p-aktuell (car frame)) (setq frame (nth 0 erg) deltaL (nth 1 erg) p-aktuell (car frame))
) )
) )
(if (< deltaL 1000.0) (if (< deltaL *vfk-vf-mindestlaenge*)
(princ (ssg-text "vfl-fehler-vf-kurz")) (princ (ssg-text "vfl-fehler-vf-kurz"))
(progn (progn
(setq hoehe-vorschlaege (vfl-vf-hoehe-vorschlaege (caddr p-aktuell) deltaL)) (setq hoehe-vorschlaege (vfl-vf-hoehe-vorschlaege (caddr p-aktuell) deltaL))
@@ -3434,11 +3434,11 @@
;; sich damit fest aus deltaH = deltaL*tan(3 Grad). ;; sich damit fest aus deltaH = deltaL*tan(3 Grad).
;; Im Kettenende-Modus (Option 4) wird IMMER nach der Zielhoehe ;; Im Kettenende-Modus (Option 4) wird IMMER nach der Zielhoehe
;; gefragt (Kurzsegment-Automatik hier ueberspringen). ;; gefragt (Kurzsegment-Automatik hier ueberspringen).
(if (and (< deltaL 1000.0) (not linie-ende-modus)) (if (and (< deltaL *vfk-vf-mindestlaenge*) (not linie-ende-modus))
(progn (progn
(setq typ "GF" winkel 3.0 richtung "Ab" L_GF nil L_VF nil) (setq typ "GF" winkel *vfk-gefaelle-winkel* richtung "Ab" L_GF nil L_VF nil)
(setq deltaH (* deltaL (/ (sin (* 3.0 (/ pi 180.0))) (setq deltaH (* deltaL (/ (sin (* *vfk-gefaelle-winkel* (/ pi 180.0)))
(cos (* 3.0 (/ pi 180.0)))))) (cos (* *vfk-gefaelle-winkel* (/ pi 180.0))))))
(setq hoehe-neu (- (caddr p-aktuell) deltaH)) (setq hoehe-neu (- (caddr p-aktuell) deltaH))
(princ (ssg-textf "vfl-info-kurzes-segment" (princ (ssg-textf "vfl-info-kurzes-segment"
(list (rtos deltaL 2 0) (rtos deltaH 2 1)))) (list (rtos deltaL 2 0) (rtos deltaH 2 1))))
@@ -3471,9 +3471,9 @@
(progn (progn
(setq rad3 (* (float (ssg-cfg-or "vario" "gefaelle_winkel" 3)) (setq rad3 (* (float (ssg-cfg-or "vario" "gefaelle_winkel" 3))
(/ pi 180.0))) (/ pi 180.0)))
(setq deltaL (max 1.0 (- deltaL (* 300.0 (cos rad3)) (setq deltaL (max 1.0 (- deltaL (* *vfk-separator-laenge* (cos rad3))
(abs (if ein-dx ein-dx 0.0))))) (abs (if ein-dx ein-dx 0.0)))))
(setq deltaH (max 0.0 (- deltaH (* 300.0 (sin rad3)) (setq deltaH (max 0.0 (- deltaH (* *vfk-separator-laenge* (sin rad3))
(abs (if ein-dz ein-dz 0.0))))) (abs (if ein-dz ein-dz 0.0)))))
(princ (ssg-textf "vfl-info-kettenende-footprint" (princ (ssg-textf "vfl-info-kettenende-footprint"
(list (rtos deltaL 2 0) (rtos deltaH 2 0)))) (list (rtos deltaL 2 0) (rtos deltaH 2 0))))
@@ -4378,17 +4378,17 @@
(dbgflush))) (dbgflush)))
;; --- 4. Eck-Winkel-Vorpruefung (vor dem Bau) --- ;; --- 4. Eck-Winkel-Vorpruefung (vor dem Bau) ---
(setq ecke-bad (vfl2-pruefe-eckwinkel kette 5.0)) (setq ecke-bad (vfl2-pruefe-eckwinkel kette *vfk-eckwinkel-toleranz*))
(if ecke-bad (if ecke-bad
(progn (progn
(alert (ssg-textf "vfl-vwnb-alert-eckwinkel" (list (rtos ecke-bad 2 1)))) (alert (ssg-textf "vfl-vwnb-alert-eckwinkel" (list (rtos ecke-bad 2 1))))
(exit))) (exit)))
;; --- 5. Setup --- ;; --- 5. Setup ---
(setq aus (if aus-dx aus-dx 576.0) ein (if ein-dx ein-dx 576.0)) (setq aus (if aus-dx aus-dx *vfk-as-es-fallback-dx*) ein (if ein-dx ein-dx *vfk-as-es-fallback-dx*))
(setq rad3 (* (float (ssg-cfg-or "vario" "gefaelle_winkel" 3)) (/ pi 180.0))) (setq rad3 (* (float (ssg-cfg-or "vario" "gefaelle_winkel" 3)) (/ pi 180.0)))
;; Entry-Fussabdruck (planar) einer VF-Einheit: GF1(Basis)+Separator(300)+Umlenk(500) ;; Entry-Fussabdruck (planar) einer VF-Einheit: GF1(Basis)+Separator(300)+Umlenk(500)
(setq ent-fp (* (+ *vfl-gf-min-laenge* 300.0 500.0) (cos rad3))) (setq ent-fp (* (+ *vfl-gf-min-laenge* *vfk-separator-laenge* *vfk-stations-laenge*) (cos rad3)))
(setq run-typ nil) (setq run-typ nil)
(setq vfl-nummer (vf-next-number)) (setq vfl-nummer (vf-next-number))
(setq lastEnt (vf-lastent-ohne-attribute)) (setq lastEnt (vf-lastent-ohne-attribute))
@@ -4430,9 +4430,9 @@
(progn (setq frame (vfl2-vf-close frame (car (frame->hz-winkel frame)))) (progn (setq frame (vfl2-vf-close frame (car (frame->hz-winkel frame))))
(setq run-typ nil))) (setq run-typ nil)))
(setq winkel (vfl-in-real (ssg-text "vfl-m3-prompt-gf-neigung"))) (setq winkel (vfl-in-real (ssg-text "vfl-m3-prompt-gf-neigung")))
(if (null winkel) (setq winkel 3.0)) (if (null winkel) (setq winkel *vfk-gefaelle-winkel*))
(if (> winkel 3.0) (if (> winkel *vfk-gefaelle-winkel*)
(progn (princ (ssg-text "vfl-m3-hinweis-gf-max")) (setq winkel 3.0))) (progn (princ (ssg-text "vfl-m3-hinweis-gf-max")) (setq winkel *vfk-gefaelle-winkel*)))
(if (null frame) (if (null frame)
(setq frame (vfl2-insert-as-gf startpunkt hz winkel as-seite))) (setq frame (vfl2-insert-as-gf startpunkt hz winkel as-seite)))
(setq deltaL laenge) (setq deltaL laenge)
@@ -4441,8 +4441,8 @@
(setq deltaL (- deltaL (setq deltaL (- deltaL
(+ (* (- (car (car frame)) (car startpunkt)) (cos (* hz (/ pi 180.0)))) (+ (* (- (car (car frame)) (car startpunkt)) (cos (* hz (/ pi 180.0))))
(* (- (cadr (car frame)) (cadr startpunkt)) (sin (* hz (/ pi 180.0)))))))) (* (- (cadr (car frame)) (cadr startpunkt)) (sin (* hz (/ pi 180.0))))))))
(if (= i last-line) (setq deltaL (- deltaL 300.0 ein))) (if (= i last-line) (setq deltaL (- deltaL *vfk-separator-laenge* ein)))
(setq deltaL (max 100.0 deltaL)) (setq deltaL (max *vfk-restlaenge-min-clamp* deltaL))
(setq frame (vfl-insert-gf-segment (car frame) hz deltaL winkel)) (setq frame (vfl-insert-gf-segment (car frame) hz deltaL winkel))
(vfl-acc-gf-seg (/ deltaL (cos (* winkel (/ pi 180.0)))) winkel) (vfl-acc-gf-seg (/ deltaL (cos (* winkel (/ pi 180.0)))) winkel)
(setq anzahl-gf (1+ anzahl-gf) letzt-winkel winkel run-typ "GF")) (setq anzahl-gf (1+ anzahl-gf) letzt-winkel winkel run-typ "GF"))
@@ -4464,7 +4464,7 @@
(if dbg-an (progn (dbgmsg "Vario-Winkel (gesnapt):") (dbg 'best-w) (dbgflush))))) (if dbg-an (progn (dbgmsg "Vario-Winkel (gesnapt):") (dbg 'best-w) (dbgflush)))))
(setq L_VF laenge) (setq L_VF laenge)
(if just-open (setq L_VF (- L_VF ent-fp))) ; Entry-Fussabdruck reservieren (if just-open (setq L_VF (- L_VF ent-fp))) ; Entry-Fussabdruck reservieren
(setq L_VF (max 100.0 L_VF)) (setq L_VF (max *vfk-restlaenge-min-clamp* L_VF))
(setq frame (vfl-frame-3grad (vfs-vf-koerper (car frame) richtn best-w L_VF hz) hz)) (setq frame (vfl-frame-3grad (vfs-vf-koerper (car frame) richtn best-w L_VF hz) hz))
(vfl-acc-vf-seg richtn best-w L_VF) (vfl-acc-vf-seg richtn best-w L_VF)
(setq anzahl-vf (1+ anzahl-vf) run-typ "VF")))) (setq anzahl-vf (1+ anzahl-vf) run-typ "VF"))))
@@ -4509,7 +4509,7 @@
(setq frame (vfl-insert-es-element "VF" frame (car (frame->hz-winkel frame)) (setq frame (vfl-insert-es-element "VF" frame (car (frame->hz-winkel frame))
0.0 (caddr (car frame)) es-seite))) 0.0 (caddr (car frame)) es-seite)))
(setq frame (vfl-insert-es-element "GF" frame (car (frame->hz-winkel frame)) (setq frame (vfl-insert-es-element "GF" frame (car (frame->hz-winkel frame))
(if letzt-winkel letzt-winkel 3.0) (caddr (car frame)) es-seite))) (if letzt-winkel letzt-winkel *vfk-gefaelle-winkel*) (caddr (car frame)) es-seite)))
;; --- 8. Block + Ist-Ziel-Report --- ;; --- 8. Block + Ist-Ziel-Report ---
(setq hoehe-bis (caddr (car frame))) (setq hoehe-bis (caddr (car frame)))
@@ -4606,14 +4606,14 @@
;; 300+ein-fp, GF-Bogen bei Neigung). Eintritts-Neigung = 3 Grad (die Bruecke ;; 300+ein-fp, GF-Bogen bei Neigung). Eintritts-Neigung = 3 Grad (die Bruecke
;; endet mit GF2 auf 3 Grad). So wird die Junction-Hoehe exakt statt geschaetzt. ;; endet mit GF2 auf 3 Grad). So wird die Junction-Hoehe exakt statt geschaetzt.
(defun vfl3-dback (plan start-idx n last-idx ein-fp / i seg drop inc w dL rad) (defun vfl3-dback (plan start-idx n last-idx ein-fp / i seg drop inc w dL rad)
(setq drop 0.0 inc 3.0 i start-idx) (setq drop 0.0 inc *vfk-gefaelle-winkel* i start-idx)
(while (< i n) (while (< i n)
(setq seg (nth i plan)) (setq seg (nth i plan))
(cond (cond
((= (car seg) "Linie") ((= (car seg) "Linie")
(setq w (nth 4 seg) dL (caddr seg)) (setq w (nth 4 seg) dL (caddr seg))
(if (= i last-idx) (setq dL (- dL 300.0 ein-fp))) (if (= i last-idx) (setq dL (- dL *vfk-separator-laenge* ein-fp)))
(setq dL (max 100.0 dL)) (setq dL (max *vfk-restlaenge-min-clamp* dL))
(setq rad (* (float w) (/ pi 180.0))) (setq rad (* (float w) (/ pi 180.0)))
(setq drop (+ drop (* dL (/ (sin rad) (cos rad))))) (setq drop (+ drop (* dL (/ (sin rad) (cos rad)))))
(setq inc w)) (setq inc w))
@@ -4623,7 +4623,7 @@
(setq i (1+ i))) (setq i (1+ i)))
;; Auslauf-Separator (300 mm bei aktueller Neigung inc) + ES-Eigen-dz ;; Auslauf-Separator (300 mm bei aktueller Neigung inc) + ES-Eigen-dz
(setq rad (* (float inc) (/ pi 180.0))) (setq rad (* (float inc) (/ pi 180.0)))
(setq drop (+ drop (* 300.0 (/ (sin rad) (cos rad))))) (setq drop (+ drop (* *vfk-separator-laenge* (/ (sin rad) (cos rad)))))
(setq drop (+ drop (abs (if ein-dz ein-dz 65.0)))) (setq drop (+ drop (abs (if ein-dz ein-dz 65.0))))
drop) drop)
@@ -4635,20 +4635,20 @@
;; verifiziert). So ist die Hoehe rein rechnerisch bestimmt -> Kletterlaenge folgt. ;; verifiziert). So ist die Hoehe rein rechnerisch bestimmt -> Kletterlaenge folgt.
(defun vfl3-einheit-fix-dz (w n-climb n-hor gf1 richtung / (defun vfl3-einheit-fix-dz (w n-climb n-hor gf1 richtung /
pi180 rad3 s3 tot m1 m2 r1 r2 dz1 dz2) pi180 rad3 s3 tot m1 m2 r1 r2 dz1 dz2)
(setq pi180 (/ pi 180.0) rad3 (* 3.0 pi180) s3 (sin rad3) tot 0.0) (setq pi180 (/ pi 180.0) rad3 (* *vfk-gefaelle-winkel* pi180) s3 (sin rad3) tot 0.0)
;; feste 3-Grad-Teile senken immer ab (GF1 + Separator + Umlenk + Motor) ;; feste 3-Grad-Teile senken immer ab (GF1 + Separator + Umlenk + Motor)
(setq tot (- tot (* (+ (float gf1) 300.0 500.0 500.0) s3))) (setq tot (- tot (* (+ (float gf1) *vfk-separator-laenge* *vfk-stations-laenge* *vfk-stations-laenge*) s3)))
;; Kletterer-Boegen (Rotationen wie vfs-vf-koerper: 1. Bogen @3, 2. Bogen @(3-w)/(w+3)) ;; Kletterer-Boegen (Rotationen wie vfs-vf-koerper: 1. Bogen @3, 2. Bogen @(3-w)/(w+3))
(if (= richtung "Auf") (if (= richtung "Auf")
(setq m1 (get-bogen-mass bogen-auf w) r1 rad3 (setq m1 (get-bogen-mass bogen-auf w) r1 rad3
m2 (get-bogen-mass bogen-ab w) r2 (* (- 3 w) pi180)) m2 (get-bogen-mass bogen-ab w) r2 (* (- *vfk-gefaelle-winkel* w) pi180))
(setq m1 (get-bogen-mass bogen-ab w) r1 rad3 (setq m1 (get-bogen-mass bogen-ab w) r1 rad3
m2 (get-bogen-mass bogen-auf w) r2 (* (+ w 3) pi180))) m2 (get-bogen-mass bogen-auf w) r2 (* (+ w *vfk-gefaelle-winkel*) pi180)))
(setq dz1 (+ (* (- (car m1)) (sin r1)) (* (caddr m1) (cos r1)))) (setq dz1 (+ (* (- (car m1)) (sin r1)) (* (caddr m1) (cos r1))))
(setq dz2 (+ (* (- (car m2)) (sin r2)) (* (caddr m2) (cos r2)))) (setq dz2 (+ (* (- (car m2)) (sin r2)) (* (caddr m2) (cos r2))))
(setq tot (+ tot (* n-climb (+ dz1 dz2)))) (setq tot (+ tot (* n-climb (+ dz1 dz2))))
;; Horizontal-Mitte-Koerper: auf_3@3 + ab_3@0 ;; Horizontal-Mitte-Koerper: auf_3@3 + ab_3@0
(setq m1 (get-bogen-mass bogen-auf 3) m2 (get-bogen-mass bogen-ab 3)) (setq m1 (get-bogen-mass bogen-auf (fix *vfk-gefaelle-winkel*)) m2 (get-bogen-mass bogen-ab (fix *vfk-gefaelle-winkel*)))
(setq dz1 (+ (* (- (car m1)) (sin rad3)) (* (caddr m1) (cos rad3)))) (setq dz1 (+ (* (- (car m1)) (sin rad3)) (* (caddr m1) (cos rad3))))
(setq dz2 (caddr m2)) (setq dz2 (caddr m2))
(setq tot (+ tot (* n-hor (+ dz1 dz2)))) (setq tot (+ tot (* n-hor (+ dz1 dz2))))
@@ -4661,17 +4661,17 @@
;; Dient der Winkelwahl: Fussabdruck + Kletter-Planlaenge soll die Lauflaenge treffen. ;; Dient der Winkelwahl: Fussabdruck + Kletter-Planlaenge soll die Lauflaenge treffen.
(defun vfl3-einheit-fix-dx (w n-climb n-hor gf1 richtung / (defun vfl3-einheit-fix-dx (w n-climb n-hor gf1 richtung /
pi180 rad3 tot m1 m2 r1 r2 dx1 dx2) pi180 rad3 tot m1 m2 r1 r2 dx1 dx2)
(setq pi180 (/ pi 180.0) rad3 (* 3.0 pi180) tot 0.0) (setq pi180 (/ pi 180.0) rad3 (* *vfk-gefaelle-winkel* pi180) tot 0.0)
(setq tot (* (+ (float gf1) 300.0 500.0 500.0) (cos rad3))) ; Stationen planar (setq tot (* (+ (float gf1) *vfk-separator-laenge* *vfk-stations-laenge* *vfk-stations-laenge*) (cos rad3))) ; Stationen planar
(if (= richtung "Auf") (if (= richtung "Auf")
(setq m1 (get-bogen-mass bogen-auf w) r1 rad3 (setq m1 (get-bogen-mass bogen-auf w) r1 rad3
m2 (get-bogen-mass bogen-ab w) r2 (* (- 3 w) pi180)) m2 (get-bogen-mass bogen-ab w) r2 (* (- *vfk-gefaelle-winkel* w) pi180))
(setq m1 (get-bogen-mass bogen-ab w) r1 rad3 (setq m1 (get-bogen-mass bogen-ab w) r1 rad3
m2 (get-bogen-mass bogen-auf w) r2 (* (+ w 3) pi180))) m2 (get-bogen-mass bogen-auf w) r2 (* (+ w *vfk-gefaelle-winkel*) pi180)))
(setq dx1 (+ (* (car m1) (cos r1)) (* (caddr m1) (sin r1)))) (setq dx1 (+ (* (car m1) (cos r1)) (* (caddr m1) (sin r1))))
(setq dx2 (+ (* (car m2) (cos r2)) (* (caddr m2) (sin r2)))) (setq dx2 (+ (* (car m2) (cos r2)) (* (caddr m2) (sin r2))))
(setq tot (+ tot (* n-climb (+ dx1 dx2)))) (setq tot (+ tot (* n-climb (+ dx1 dx2))))
(setq m1 (get-bogen-mass bogen-auf 3) m2 (get-bogen-mass bogen-ab 3)) (setq m1 (get-bogen-mass bogen-auf (fix *vfk-gefaelle-winkel*)) m2 (get-bogen-mass bogen-ab (fix *vfk-gefaelle-winkel*)))
(setq dx1 (+ (* (car m1) (cos rad3)) (* (caddr m1) (sin rad3)))) ; auf_3 @ 3 (setq dx1 (+ (* (car m1) (cos rad3)) (* (caddr m1) (sin rad3)))) ; auf_3 @ 3
(setq dx2 (car m2)) ; ab_3 @ 0 (setq dx2 (car m2)) ; ab_3 @ 0
(setq tot (+ tot (* n-hor (+ dx1 dx2)))) (setq tot (+ tot (* n-hor (+ dx1 dx2))))
@@ -4717,7 +4717,7 @@
(if (null info) (if (null info)
(- (+ (* (- (car endp) (car pt)) (cos (* seg-hz (/ pi 180.0)))) (- (+ (* (- (car endp) (car pt)) (cos (* seg-hz (/ pi 180.0))))
(* (- (cadr endp) (cadr pt)) (sin (* seg-hz (/ pi 180.0))))) (* (- (cadr endp) (cadr pt)) (sin (* seg-hz (/ pi 180.0)))))
(+ 196.0 (* (+ 800.0 gf2) (cos rad3)))) ; Fallback: Along-Naeherung (+ 196.0 (* (+ *vfk-feste-horizontal-kettenende* gf2) (cos rad3)))) ; Fallback: Along-Naeherung
(progn (progn
(setq theta (* seg-hz (/ pi 180.0))) (setq theta (* seg-hz (/ pi 180.0)))
(setq dpx (cos theta) dpy (sin theta)) ; seg-hz Richtung (setq dpx (cos theta) dpy (sin theta)) ; seg-hz Richtung
@@ -4730,7 +4730,7 @@
(setq perp-es (+ (* vwx npx) (* vwy npy))) (setq perp-es (+ (* vwx npx) (* vwy npy)))
(setq ua (* (+ seg-hz (- (cadr info) (car info))) (/ pi 180.0))) ; KS_AUS-Achse (setq ua (* (+ seg-hz (- (cadr info) (car info))) (/ pi 180.0))) ; KS_AUS-Achse
(setq na-x (- (sin ua)) na-y (cos ua)) ; senkrecht zur KS_AUS-Achse (setq na-x (- (sin ua)) na-y (cos ua)) ; senkrecht zur KS_AUS-Achse
(setq cc (+ 196.0 (* (+ 800.0 gf2) (cos rad3)) along-es)) (setq cc (+ 196.0 (* (+ *vfk-feste-horizontal-kettenende* gf2) (cos rad3)) along-es))
(setq dp-na (+ (* dpx na-x) (* dpy na-y))) (setq dp-na (+ (* dpx na-x) (* dpy na-y)))
(setq np-na (+ (* npx na-x) (* npy na-y))) (setq np-na (+ (* npx na-x) (* npy na-y)))
(setq ep-na (+ (* (- (car endp) (car pt)) na-x) (* (- (cadr endp) (cadr pt)) na-y))) (setq ep-na (+ (* (- (car endp) (car pt)) na-x) (* (- (cadr endp) (cadr pt)) na-y)))
@@ -4875,7 +4875,7 @@
(if (null kette) (if (null kette)
(progn (princ (ssg-text "vfl-m3-fehler-nicht-sortierbar")) (exit))) (progn (princ (ssg-text "vfl-m3-fehler-nicht-sortierbar")) (exit)))
(setq segmente (gf-analysiere-kette kette)) (setq segmente (gf-analysiere-kette kette))
(setq ecke-bad (vfl2-pruefe-eckwinkel kette 5.0)) (setq ecke-bad (vfl2-pruefe-eckwinkel kette *vfk-eckwinkel-toleranz*))
(if ecke-bad (if ecke-bad
(progn (progn
(alert (ssg-textf "vfl-m3-alert-eckwinkel" (list (rtos ecke-bad 2 1)))) (alert (ssg-textf "vfl-m3-alert-eckwinkel" (list (rtos ecke-bad 2 1))))
@@ -4907,9 +4907,9 @@
(setq plan (cons (list "Linie" hz laenge "VF" nil) plan)) (setq plan (cons (list "Linie" hz laenge "VF" nil) plan))
(progn (progn
(setq winkel (vfl-in-real (ssg-text "vfl-m3-prompt-gf-neigung"))) (setq winkel (vfl-in-real (ssg-text "vfl-m3-prompt-gf-neigung")))
(if (null winkel) (setq winkel 3.0)) (if (null winkel) (setq winkel *vfk-gefaelle-winkel*))
(if (> winkel 3.0) (if (> winkel *vfk-gefaelle-winkel*)
(progn (princ (ssg-text "vfl-m3-hinweis-gf-max")) (setq winkel 3.0))) (progn (princ (ssg-text "vfl-m3-hinweis-gf-max")) (setq winkel *vfk-gefaelle-winkel*)))
(setq plan (cons (list "Linie" hz laenge "GF" winkel) plan))))))) (setq plan (cons (list "Linie" hz laenge "GF" winkel) plan)))))))
((= typ "Bogen") ((= typ "Bogen")
(setq bwinkel (nth 3 seg) bseite (nth 4 seg)) (setq bwinkel (nth 3 seg) bseite (nth 4 seg))
@@ -5010,7 +5010,7 @@
(princ (ssg-textf "vfl-m3-bruecke-richtung" (list richtn))) (princ (ssg-textf "vfl-m3-bruecke-richtung" (list richtn)))
(princ (ssg-text "vfl-m3-vf-angetrieben")) (princ (ssg-text "vfl-m3-vf-angetrieben"))
(princ (ssg-textf "vfl-m3-mittlere-neigung" (list (rtos req-w 2 1)))) (princ (ssg-textf "vfl-m3-mittlere-neigung" (list (rtos req-w 2 1))))
(if (> req-w 51.0) (if (> req-w *vfk-vario-winkel-max*)
(princ (ssg-text "vfl-m3-warnung-zu-steil")) (princ (ssg-text "vfl-m3-warnung-zu-steil"))
(princ (ssg-text "vfl-m3-vario-bereich-ok"))) (princ (ssg-text "vfl-m3-vario-bereich-ok")))
@@ -5022,8 +5022,8 @@
;; Nummerierung + Akkumulatoren + AS/ES-Fussabdruecke. Ohne AS-Element (aus- ;; Nummerierung + Akkumulatoren + AS/ES-Fussabdruecke. Ohne AS-Element (aus-
;; vorhanden=nil) faellt der Fussabdruck weg - die Kette beginnt direkt am ;; vorhanden=nil) faellt der Fussabdruck weg - die Kette beginnt direkt am
;; Startpunkt, also 0 statt Block-/Fallback-Mass. ;; Startpunkt, also 0 statt Block-/Fallback-Mass.
(setq aus (if as-vorhanden (if aus-dx aus-dx 576.0) 0.0) (setq aus (if as-vorhanden (if aus-dx aus-dx *vfk-as-es-fallback-dx*) 0.0)
ein (if es-vorhanden (if ein-dx ein-dx 576.0) 0.0)) ein (if es-vorhanden (if ein-dx ein-dx *vfk-as-es-fallback-dx*) 0.0))
(setq vfl-nummer (vf-next-number)) (setq vfl-nummer (vf-next-number))
(setq lastEnt (vf-lastent-ohne-attribute)) (setq lastEnt (vf-lastent-ohne-attribute))
(vfl-acc-reset) (vfl-acc-reset)
@@ -5079,7 +5079,7 @@
(setq deltaL (- deltaL (setq deltaL (- deltaL
(+ (* (- (car (car frame)) (car startpunkt)) (cos (* hz (/ pi 180.0)))) (+ (* (- (car (car frame)) (car startpunkt)) (cos (* hz (/ pi 180.0))))
(* (- (cadr (car frame)) (cadr startpunkt)) (sin (* hz (/ pi 180.0)))))))) (* (- (cadr (car frame)) (cadr startpunkt)) (sin (* hz (/ pi 180.0))))))))
(setq deltaL (max 100.0 deltaL)) (setq deltaL (max *vfk-restlaenge-min-clamp* deltaL))
(setq frame (vfl-insert-gf-segment (car frame) hz deltaL winkel)) (setq frame (vfl-insert-gf-segment (car frame) hz deltaL winkel))
(vfl-acc-gf-seg (/ deltaL (cos (* winkel (/ pi 180.0)))) winkel) (vfl-acc-gf-seg (/ deltaL (cos (* winkel (/ pi 180.0)))) winkel)
(setq anzahl-gf (1+ anzahl-gf) letzt-winkel winkel)) (setq anzahl-gf (1+ anzahl-gf) letzt-winkel winkel))
@@ -5135,7 +5135,7 @@
;; (ein auf_3 rein, ein ab_3 raus), unabhaengig von der Zahl der Fueller/Kurven. ;; (ein auf_3 rein, ein ab_3 raus), unabhaengig von der Zahl der Fueller/Kurven.
(setq hor-pairs (if (or (> nkurve 0) (> nonclimber-cnt 0)) 1 0)) (setq hor-pairs (if (or (> nkurve 0) (> nonclimber-cnt 0)) 1 0))
(setq run-span (+ climber-span nonclimber-len kurve-chords)) (setq run-span (+ climber-span nonclimber-len kurve-chords))
(setq br-gf1 400.0) ; feste kleine GF1 (setq br-gf1 *vfl-gf-min-laenge*) ; feste kleine GF1
(setq br-richtn (if (< dH-bruecke 0) "Auf" "Ab")) (setq br-richtn (if (< dH-bruecke 0) "Auf" "Ab"))
(setq target-climb (- z-junction z-front)) ; noetige Netto-Hoehe (Auf>0) (setq target-climb (- z-junction z-front)) ; noetige Netto-Hoehe (Auf>0)
;; Kletter-Segment als Standard-Vario loesen; GF wird BERECHNET (L_GF) und der ;; Kletter-Segment als Standard-Vario loesen; GF wird BERECHNET (L_GF) und der
@@ -5151,11 +5151,11 @@
;; feste = 800 (Umlenk+Sep). berechne rechnet Motor-/Uebergangs-Abstieg NICHT, ;; feste = 800 (Umlenk+Sep). berechne rechnet Motor-/Uebergangs-Abstieg NICHT,
;; daher Kletterhoehe um diese Abstiege anpassen (GF2 bleibt ~0). ;; daher Kletterhoehe um diese Abstiege anpassen (GF2 bleibt ~0).
;; - Ohne flache Zone (Einzel-Bruecke): feste = 1300 (inkl. Motor), keine Anpassung. ;; - Ohne flache Zone (Einzel-Bruecke): feste = 1300 (inkl. Motor), keine Anpassung.
(setq rad3v (* 3.0 (/ pi 180.0))) (setq rad3v (* *vfk-gefaelle-winkel* (/ pi 180.0)))
(if (> hor-pairs 0) (if (> hor-pairs 0)
(setq feste-vf 800.0 (setq feste-vf *vfk-feste-horizontal-kettenende*
dH-adj (- dH-bruecke (+ (* 500.0 (sin rad3v)) 10.48))) ; Motor + auf_3/ab_3 dH-adj (- dH-bruecke (+ (* *vfk-stations-laenge* (sin rad3v)) *vfk-bruecke-korrektur*))) ; Motor + auf_3/ab_3
(setq feste-vf 1300.0 dH-adj dH-bruecke)) (setq feste-vf *vfk-feste-horizontal-linienzug* dH-adj dH-bruecke))
(setq wahl3 (vfl3-waehle-winkel climber-span dH-adj feste-vf)) (setq wahl3 (vfl3-waehle-winkel climber-span dH-adj feste-vf))
(if (null wahl3) (if (null wahl3)
(progn (princ (ssg-text "vfl-m3-kein-winkel")) (progn (princ (ssg-text "vfl-m3-kein-winkel"))
@@ -5199,7 +5199,7 @@
;; --- Kletterer (geneigt, 3-Grad-Basis) --- ;; --- Kletterer (geneigt, 3-Grad-Basis) ---
((and (= (car seg) "Linie") (member i climbers)) ((and (= (car seg) "Linie") (member i climbers))
(if flat-p (progn (setq pt (vfl3-flach-aus pt seg-hz)) (setq flat-p nil))) (if flat-p (progn (setq pt (vfl3-flach-aus pt seg-hz)) (setq flat-p nil)))
(setq this-lvf (max 100.0 (* br-lvf (/ (caddr seg) climber-span)))) (setq this-lvf (max *vfk-restlaenge-min-clamp* (* br-lvf (/ (caddr seg) climber-span))))
(setq pt (vfs-vf-koerper pt br-richtn br-winkel this-lvf seg-hz)) (setq pt (vfs-vf-koerper pt br-richtn br-winkel this-lvf seg-hz))
(vfl-acc-vf-seg br-richtn br-winkel this-lvf) (vfl-acc-vf-seg br-richtn br-winkel this-lvf)
(setq anzahl-vf (1+ anzahl-vf) letzt-koerper-hz seg-hz)) (setq anzahl-vf (1+ anzahl-vf) letzt-koerper-hz seg-hz))
@@ -5229,11 +5229,11 @@
br-gf2-exp rad3v) br-gf2-exp rad3v)
(- (+ (* (- (car endpunkt) (car pt)) (cos (* seg-hz (/ pi 180.0)))) (- (+ (* (- (car endpunkt) (car pt)) (cos (* seg-hz (/ pi 180.0))))
(* (- (cadr endpunkt) (cadr pt)) (sin (* seg-hz (/ pi 180.0))))) (* (- (cadr endpunkt) (cadr pt)) (sin (* seg-hz (/ pi 180.0)))))
(* (+ 500.0 br-gf2-exp) (cos rad3v))) (* (+ *vfk-stations-laenge* br-gf2-exp) (cos rad3v)))
) )
) )
(setq fill-len (caddr seg))) (setq fill-len (caddr seg)))
(setq fill-len (max 100.0 fill-len)) (setq fill-len (max *vfk-restlaenge-min-clamp* fill-len))
(setq pt (insert-inclined-scaled-block "Staustrecke_SP_1000_mm" pt fill-len 0 seg-hz)) (setq pt (insert-inclined-scaled-block "Staustrecke_SP_1000_mm" pt fill-len 0 seg-hz))
(vfl-acc-vf-seg "horizontal" 0 fill-len) (setq anzahl-vf (1+ anzahl-vf)) (vfl-acc-vf-seg "horizontal" 0 fill-len) (setq anzahl-vf (1+ anzahl-vf))
(setq letzt-koerper-hz seg-hz)) (setq letzt-koerper-hz seg-hz))
@@ -5265,12 +5265,12 @@
(progn (progn
(princ (ssg-textf "vfl-m3-warnung-gf2-negativ" (list (rtos (- gf2-drop) 2 1)))) (princ (ssg-textf "vfl-m3-warnung-gf2-negativ" (list (rtos (- gf2-drop) 2 1))))
(setq gf2-drop 0.0))) (setq gf2-drop 0.0)))
(setq gf2-planar (/ gf2-drop (/ (sin (* 3.0 (/ pi 180.0))) (cos (* 3.0 (/ pi 180.0)))))) (setq gf2-planar (/ gf2-drop (/ (sin (* *vfk-gefaelle-winkel* (/ pi 180.0))) (cos (* *vfk-gefaelle-winkel* (/ pi 180.0))))))
(if (> gf2-planar 0.1) (if (> gf2-planar 0.1)
(progn (progn
(princ (ssg-textf "vfl-m3-gf2-ausgleich" (list (rtos gf2-planar 2 1)))) (princ (ssg-textf "vfl-m3-gf2-ausgleich" (list (rtos gf2-planar 2 1))))
(setq frame (vfl-insert-gf-segment pt letzt-koerper-hz gf2-planar 3)) (setq frame (vfl-insert-gf-segment pt letzt-koerper-hz gf2-planar (fix *vfk-gefaelle-winkel*)))
(vfl-acc-gf-seg (/ gf2-planar (cos (* 3.0 (/ pi 180.0)))) 3)) (vfl-acc-gf-seg (/ gf2-planar (cos (* *vfk-gefaelle-winkel* (/ pi 180.0)))) (fix *vfk-gefaelle-winkel*)))
(setq frame (vfl-frame-3grad pt letzt-koerper-hz))) (setq frame (vfl-frame-3grad pt letzt-koerper-hz)))
(setq hz letzt-koerper-hz) (setq hz letzt-koerper-hz)
@@ -5284,8 +5284,8 @@
;; Footprint fuer Separator(300)+ES nur reservieren, wenn ES-Element ;; Footprint fuer Separator(300)+ES nur reservieren, wenn ES-Element
;; gewuenscht ist (ein=0 sonst, siehe oben) - ohne ES entfaellt auch ;; gewuenscht ist (ein=0 sonst, siehe oben) - ohne ES entfaellt auch
;; der abschliessende Separator. ;; der abschliessende Separator.
(if (= i last-line) (setq deltaL (- deltaL (if es-vorhanden 300.0 0.0) ein))) (if (= i last-line) (setq deltaL (- deltaL (if es-vorhanden *vfk-separator-laenge* 0.0) ein)))
(setq deltaL (max 100.0 deltaL)) (setq deltaL (max *vfk-restlaenge-min-clamp* deltaL))
(setq frame (vfl-insert-gf-segment (car frame) hz deltaL winkel)) (setq frame (vfl-insert-gf-segment (car frame) hz deltaL winkel))
(vfl-acc-gf-seg (/ deltaL (cos (* winkel (/ pi 180.0)))) winkel) (vfl-acc-gf-seg (/ deltaL (cos (* winkel (/ pi 180.0)))) winkel)
(setq anzahl-gf (1+ anzahl-gf) letzt-winkel winkel)) (setq anzahl-gf (1+ anzahl-gf) letzt-winkel winkel))
@@ -5300,7 +5300,7 @@
(if (null frame) (progn (princ (ssg-text "vfl-m3-nichts-gebaut")) (exit))) (if (null frame) (progn (princ (ssg-text "vfl-m3-nichts-gebaut")) (exit)))
(if es-vorhanden (if es-vorhanden
(setq frame (vfl-insert-es-element "GF" frame (car (frame->hz-winkel frame)) (setq frame (vfl-insert-es-element "GF" frame (car (frame->hz-winkel frame))
(if letzt-winkel letzt-winkel 3.0) (caddr (car frame)) es-seite))) (if letzt-winkel letzt-winkel *vfk-gefaelle-winkel*) (caddr (car frame)) es-seite)))
;; ---------- Block + Ist-Ziel-Report ---------- ;; ---------- Block + Ist-Ziel-Report ----------
(setq hoehe-bis (caddr (car frame))) (setq hoehe-bis (caddr (car frame)))
@@ -5609,7 +5609,7 @@
(cond (cond
((null fund) (setq fertig T)) ((null fund) (setq fertig T))
((<= (cdr fund) *vfl-kette-tol-eng*) ((<= (cdr fund) *vfl-kette-tol-eng*)
(if (> (cdr fund) 0.5) (if (> (cdr fund) *vfk-kette-anschluss-warnung*)
(setq verdaechtig (cons (list (vfl-kette-rec-bname aktuell) (vfl-kette-rec-bname (car fund)) (cdr fund)) verdaechtig))) (setq verdaechtig (cons (list (vfl-kette-rec-bname aktuell) (vfl-kette-rec-bname (car fund)) (cdr fund)) verdaechtig)))
(setq aktuell (car fund)) (setq aktuell (car fund))
(setq kette (append kette (list aktuell))) (setq kette (append kette (list aktuell)))
+6 -6
View File
@@ -260,8 +260,8 @@
(if (or (null mass1) (null mass2)) (if (or (null mass1) (null mass2))
(setq ergebnis-liste (cons (list winkel nil nil nil) ergebnis-liste)) (setq ergebnis-liste (cons (list winkel nil nil nil) ergebnis-liste))
(progn (progn
(setq rad5 (* 3.0 (/ pi 180.0))) (setq rad5 (* *vfk-gefaelle-winkel* (/ pi 180.0)))
(setq rad7 (* (float (if (= richtung "Auf") (- 3 winkel) (+ winkel 3))) (setq rad7 (* (float (if (= richtung "Auf") (- *vfk-gefaelle-winkel* winkel) (+ winkel *vfk-gefaelle-winkel*)))
(/ pi 180.0))) (/ pi 180.0)))
(setq bogen-x1 (+ (* (car mass1) (cos rad5)) (* (caddr mass1) (sin rad5)))) (setq bogen-x1 (+ (* (car mass1) (cos rad5)) (* (caddr mass1) (sin rad5))))
(setq bogen-z1 (+ (* (- (car mass1)) (sin rad5)) (* (caddr mass1) (cos rad5)))) (setq bogen-z1 (+ (* (- (car mass1)) (sin rad5)) (* (caddr mass1) (cos rad5))))
@@ -271,7 +271,7 @@
sinα (sin (* winkel (/ pi 180.0)))) sinα (sin (* winkel (/ pi 180.0))))
(setq A (- deltaL aus-dx ein-dx bogen-x1 bogen-x2 (setq A (- deltaL aus-dx ein-dx bogen-x1 bogen-x2
(* feste-hz cos3))) (* feste-hz cos3)))
(setq winkel-eff (if (= richtung "Auf") (- winkel 3) (+ winkel 3))) (setq winkel-eff (if (= richtung "Auf") (- winkel *vfk-gefaelle-winkel*) (+ winkel *vfk-gefaelle-winkel*)))
(setq cosEff (cos (* winkel-eff (/ pi 180.0))) (setq cosEff (cos (* winkel-eff (/ pi 180.0)))
sinEff (sin (* winkel-eff (/ pi 180.0)))) sinEff (sin (* winkel-eff (/ pi 180.0))))
(if (= richtung "Auf") (if (= richtung "Auf")
@@ -342,12 +342,12 @@
mass1 mass2 rad3 bogen-x1 bogen-z1 mass1 mass2 rad3 bogen-x1 bogen-z1
bogen-x2 bogen-z2 deltaH-signiert bogen-x2 bogen-z2 deltaH-signiert
A-hz B-hz GF_total L_VF-hz gueltig) A-hz B-hz GF_total L_VF-hz gueltig)
(setq mass1 (get-bogen-mass bogen-auf 3)) (setq mass1 (get-bogen-mass bogen-auf (fix *vfk-gefaelle-winkel*)))
(setq mass2 (get-bogen-mass bogen-ab 3)) (setq mass2 (get-bogen-mass bogen-ab (fix *vfk-gefaelle-winkel*)))
(if (or (null mass1) (null mass2)) (if (or (null mass1) (null mass2))
nil nil
(progn (progn
(setq rad3 (* 3.0 (/ pi 180.0))) (setq rad3 (* *vfk-gefaelle-winkel* (/ pi 180.0)))
;; Bogen1 (immer auf_3): Eintritt bei 3 Grad (von Umlenkstation), biegt auf 0 Grad ;; Bogen1 (immer auf_3): Eintritt bei 3 Grad (von Umlenkstation), biegt auf 0 Grad
(setq bogen-x1 (+ (* (car mass1) (cos rad3)) (* (caddr mass1) (sin rad3)))) (setq bogen-x1 (+ (* (car mass1) (cos rad3)) (* (caddr mass1) (sin rad3))))
(setq bogen-z1 (+ (* (- (car mass1)) (sin rad3)) (* (caddr mass1) (cos rad3)))) (setq bogen-z1 (+ (* (- (car mass1)) (sin rad3)) (* (caddr mass1) (cos rad3))))