keys de/en für VF-linienzug wurde eingefügt, Export Sivas ruft vorab ZAEHLE_SEP_SCAN auf(Attribute aktualisieren), Menü neu laden notwendig

This commit is contained in:
2026-07-20 16:49:59 +02:00
parent 297bb8b905
commit 8efdbc0c5f
7 changed files with 261 additions and 115 deletions
+11 -3
View File
@@ -27,7 +27,7 @@
;; Fuegt einen Sensor-Block wiederholt ein, bis der Benutzer mit ;; Fuegt einen Sensor-Block wiederholt ein, bis der Benutzer mit
;; ENTER oder ESC abbricht. Rotation je Einfuegung interaktiv. ;; ENTER oder ESC abbricht. Rotation je Einfuegung interaktiv.
(defun ils-insert-sensor (fname / pfad pt oldattreq n) (defun ils-insert-sensor (fname / pfad pt oldattreq n res)
(setq pfad (ils-sensor-pfad fname)) (setq pfad (ils-sensor-pfad fname))
(if (null pfad) (if (null pfad)
(princ (strcat "\n>>> FEHLER: Blockdatei '" fname ".dwg' nicht gefunden." (princ (strcat "\n>>> FEHLER: Blockdatei '" fname ".dwg' nicht gefunden."
@@ -36,8 +36,16 @@
(setq oldattreq (getvar "ATTREQ")) (setq oldattreq (getvar "ATTREQ"))
(setvar "ATTREQ" 0) (setvar "ATTREQ" 0)
(setq n 0) (setq n 0)
(while (setq pt (getpoint (strcat "\nEinfuegepunkt fuer " fname ;; Punkt abfragen; ENTER liefert nil, ESC einen abgefangenen Fehler -
" [ENTER=Ende]: "))) ;; beides beendet die Schleife sauber (ATTREQ wird wiederhergestellt).
(while
(progn
(setq res (vl-catch-all-apply
'getpoint
(list (strcat "\nEinfuegepunkt fuer " fname " [ENTER=Ende]: "))))
(and (not (vl-catch-all-error-p res)) res)
)
(setq pt res)
(command "_.INSERT" pfad pt "" "" pause) (command "_.INSERT" pfad pt "" "" pause)
(setq n (1+ n)) (setq n (1+ n))
) )
+20 -11
View File
@@ -6,11 +6,14 @@
;;; Gefaellestrecke) und schreibt die Anzahlen in die Attribute ;;; Gefaellestrecke) und schreibt die Anzahlen in die Attribute
;;; des jeweiligen ILS-Blocks. Anschliessend QSAVE. ;;; des jeweiligen ILS-Blocks. Anschliessend QSAVE.
;;; ;;;
;;; Zuordnung eines Sensors zu einem ILS-Block: ;;; Zuordnung eines Sensors zu einem ILS-Block (Z wird ignoriert):
;;; - Der geometrische Mittelpunkt (X/Y) des Sensors (Zentrum ;;; - Scanner: der Einfuegepunkt (X/Y) muss in der Bounding-Box
;;; seiner eigenen Bounding-Box, unabhaengig vom $INSBASE) ;;; des ILS-Blocks liegen. Die 3D-Geometrie des Scanners kann
;;; muss in der achsparallelen Bounding-Box des ILS-Blocks ;;; weit vom Einfuegepunkt entfernt sein, daher zaehlt hier der
;;; liegen (Z wird ignoriert). ;;; Einfuegepunkt (dort klickt der Benutzer auf den Block).
;;; - Separator: der geometrische Mittelpunkt (Zentrum der eigenen
;;; Bounding-Box, unabhaengig vom $INSBASE) muss in der
;;; Bounding-Box des ILS-Blocks liegen.
;;; - Liegt der Punkt in mehreren Boxen (Ueberlappung), wird ;;; - Liegt der Punkt in mehreren Boxen (Ueberlappung), wird
;;; der ILS-Block mit dem naechstgelegenen Box-Zentrum gewaehlt. ;;; der ILS-Block mit dem naechstgelegenen Box-Zentrum gewaehlt.
;;; - Ein optionaler Toleranzrand (*senstol*) vergroessert die ;;; - Ein optionaler Toleranzrand (*senstol*) vergroessert die
@@ -112,12 +115,16 @@
) )
;;; ------------------------------------------------------------ ;;; ------------------------------------------------------------
;;; Referenzpunkt eines Sensors: geometrischer Mittelpunkt seiner ;;; Referenzpunkt eines Sensors (X/Y), je nach Typ:
;;; eigenen Bounding-Box (X/Y). Unabhaengig vom $INSBASE der ;;; - Scanner : Einfuegepunkt (DXF-Gruppe 10).
;;; Sensor-DWG. Fallback auf den Einfuegepunkt, falls die Box ;;; - Separator : geometrischer Mittelpunkt seiner eigenen
;;; nicht ermittelbar ist. ;;; Bounding-Box (unabhaengig vom $INSBASE),
;;; Fallback auf den Einfuegepunkt.
;;; ------------------------------------------------------------ ;;; ------------------------------------------------------------
(defun cs-sensor-point (ent ed / bb) (defun cs-sensor-point (ent ed kind / bb)
(if (eq kind 'scanner)
(cdr (assoc 10 ed))
(progn
(setq bb (cs-bbox ent)) (setq bb (cs-bbox ent))
(if bb (if bb
(list (/ (+ (nth 0 bb) (nth 2 bb)) 2.0) (list (/ (+ (nth 0 bb) (nth 2 bb)) 2.0)
@@ -125,6 +132,8 @@
(cdr (assoc 10 ed)) (cdr (assoc 10 ed))
) )
) )
)
)
;;; ------------------------------------------------------------ ;;; ------------------------------------------------------------
;;; Liegt Punkt pt (X/Y) in ILS-Block-Record rec (mit Toleranz)? ;;; Liegt Punkt pt (X/Y) in ILS-Block-Record rec (mit Toleranz)?
@@ -271,7 +280,7 @@
(setq kind (cs-sensor-kind nm)) (setq kind (cs-sensor-kind nm))
(if kind (if kind
(progn (progn
(setq pt (cs-sensor-point ent ed)) (setq pt (cs-sensor-point ent ed kind))
(if (eq kind 'scanner) (if (eq kind 'scanner)
(setq scanpts (cons pt scanpts)) (setq scanpts (cons pt scanpts))
(setq seppts (cons pt seppts))))) (setq seppts (cons pt seppts)))))
+4 -4
View File
@@ -1247,10 +1247,10 @@
(princ "\n 3 - 3D-Objekte stueckweise (Vorwaerts-Nachbau, in Arbeit)") (princ "\n 3 - 3D-Objekte stueckweise (Vorwaerts-Nachbau, in Arbeit)")
(setq wahl (getint "\nIhre Wahl (1/2/3) [1]: ")) (setq wahl (getint "\nIhre Wahl (1/2/3) [1]: "))
;; Konsolen-Nummer -> interne Funktion: ;; Konsolen-Nummer -> interne Funktion:
;; 2 = fertiger Ziel-Hoehe-Modus (intern vf-linienzug-modus3) ;; 2 = fertiger Ziel-Hoehe-Modus (intern vf-linienzug-modus2)
;; 3 = alter Vorwaerts-Nachbau (intern vf-linienzug-modus2, wird umgebaut) ;; 3 = alter Vorwaerts-Nachbau (intern vf-linienzug-modus3, wird umgebaut)
(cond ((= wahl 2) (vf-linienzug-modus3)) (cond ((= wahl 2) (vf-linienzug-modus2))
((= wahl 3) (vf-linienzug-modus2)) ((= wahl 3) (vf-linienzug-modus3))
(t (vf-linienzug-modus))) (t (vf-linienzug-modus)))
(exit) (exit)
) )
+94 -89
View File
@@ -1386,7 +1386,7 @@
(foreach x liste (setq d (abs (- x w))) (if (< d bd) (setq bd d best x))) (foreach x liste (setq d (abs (- x w))) (if (< d bd) (setq bd d best x)))
best) best)
(defun vf-linienzug-modus2 ( / ss k obj-liste startpunkt start-hoehe as-seite (defun vf-linienzug-modus3 ( / ss k obj-liste startpunkt start-hoehe as-seite
es-seite kette segmente n i seg typ hz laenge es-seite kette segmente n i seg typ hz laenge
bwinkel bseite frame antwort winkel deltaL bwinkel bseite frame antwort winkel deltaL
anzahl-gf anzahl-vf vfl-nummer lastEnt hoehe-bis anzahl-gf anzahl-vf vfl-nummer lastEnt hoehe-bis
@@ -1770,7 +1770,7 @@
(- (/ (- ep-na (* perp-es np-na)) dp-na) cc) (- (/ (- ep-na (* perp-es np-na)) dp-na) cc)
100.0)))) 100.0))))
(defun vf-linienzug-modus3 ( / ss k obj-liste startpunkt start-hoehe as-seite (defun vf-linienzug-modus2 ( / ss k obj-liste startpunkt start-hoehe as-seite
endpunkt end-hoehe es-seite kette segmente n i seg endpunkt end-hoehe es-seite kette segmente n i seg
typ hz laenge bwinkel bseite antwort winkel klass typ hz laenge bwinkel bseite antwort winkel klass
plan e ecke-bad vf-start vf-ende dz z-front plan e ecke-bad vf-start vf-ende dz z-front
@@ -1791,57 +1791,60 @@
rad3v feste-vf dH-adj dir-x dir-y fill-D end-hz rad3v feste-vf dH-adj dir-x dir-y fill-D end-hz
gf-total br-gf-mode br-gf2-exp filler-A-len filler-a-done) gf-total br-gf-mode br-gf2-exp filler-A-len filler-a-done)
(princ "\n\n=========================================") (princ "\n\n=========================================")
(princ "\n VF-LINIENZUG - Modus 2: Pfad + Ziel-Hoehe (fertig; Anker + Solver + Bau)") (princ (ssg-text "vfl-m3-titel"))
(princ "\n=========================================") (princ "\n=========================================")
;; Abhaengigkeit Gefaellestrecke-Modul ;; Abhaengigkeit Gefaellestrecke-Modul
(if (null (car (atoms-family 1 '("GF-INSERT-HZ-INCL-SCALED")))) (if (null (car (atoms-family 1 '("GF-INSERT-HZ-INCL-SCALED"))))
(progn (alert "Gefaellestrecke-Modul nicht geladen!") (exit))) (progn (alert (ssg-text "vfl-m3-alert-gf-modul")) (exit)))
(if (or (not *lib-initialized*) (null bogen-auf)) (init-bibliothek)) (if (or (not *lib-initialized*) (null bogen-auf)) (init-bibliothek))
;; --- 1. Pfad-Objekte waehlen --- ;; --- 1. Pfad-Objekte waehlen ---
(princ "\n\nPfad-Objekte waehlen (Linien/Boegen):") (princ (ssg-text "vfl-m3-pfad-waehlen"))
(setq ss (ssget '((0 . "LINE,ARC")))) (setq ss (ssget '((0 . "LINE,ARC"))))
(if (null ss) (progn (princ "\nKeine Objekte gewaehlt - Abbruch.") (exit))) (if (null ss) (progn (princ (ssg-text "vfl-m3-keine-objekte")) (exit)))
(setq obj-liste '() k 0) (setq obj-liste '() k 0)
(repeat (sslength ss) (repeat (sslength ss)
(setq obj-liste (cons (vlax-ename->vla-object (ssname ss k)) obj-liste)) (setq obj-liste (cons (vlax-ename->vla-object (ssname ss k)) obj-liste))
(setq k (1+ k))) (setq k (1+ k)))
;; --- 2. Startpunkt + Z + AS-Seite --- ;; --- 2. Startpunkt + Z + AS-Seite ---
(setq startpunkt (vfl-getpoint nil "\n\nStartpunkt der Kette (hoehere Seite) waehlen: ")) (setq startpunkt (vfl-getpoint nil (ssg-text "vfl-m3-prompt-startpunkt")))
(if (null startpunkt) (progn (princ "\nAbgebrochen.") (exit))) (if (null startpunkt) (progn (princ (ssg-text "gf-status-abgebrochen")) (exit)))
(setq start-hoehe (getreal (strcat "\nHoehe (Z) des Startpunkts [" (setq start-hoehe (getreal (ssg-textf "vfl-prompt-hoehe-startpunkt"
(rtos (caddr startpunkt) 2 1) "]: "))) (list (rtos (caddr startpunkt) 2 1)))))
(if (null start-hoehe) (setq start-hoehe (caddr startpunkt))) (if (null start-hoehe) (setq start-hoehe (caddr startpunkt)))
(setq startpunkt (list (car startpunkt) (cadr startpunkt) start-hoehe)) (setq startpunkt (list (car startpunkt) (cadr startpunkt) start-hoehe))
(setq *vfl-as-winkel* (vf-frage-element-winkel "vf-winkel-aus-header")) ; 30/90 vor Seite (setq *vfl-as-winkel* (vf-frage-element-winkel "vf-winkel-aus-header")) ; 30/90 vor Seite
(princ "\n\nAUS-Element - Seite waehlen:\n 1 - Links\n 2 - Rechts") (princ (ssg-text "gf-seite-aus-header"))
(setq as-seite (if (= (getstring "\nIhre Wahl (1/2) [1]: ") "2") "rechts" "links")) (princ (ssg-text "gf-seite-links"))
(princ (ssg-text "gf-seite-rechts"))
(setq as-seite (if (= (getstring (ssg-text "prompt-wahl-1-2")) "2") "rechts" "links"))
(vf-set-as-masse *vfl-as-winkel* as-seite) ; Masse fuer Variante (vf-set-as-masse *vfl-as-winkel* as-seite) ; Masse fuer Variante
;; --- 3. Endpunkt + Z + ES-Seite (NEU in Modus 3) --- ;; --- 3. Endpunkt + Z + ES-Seite (NEU in Modus 3) ---
(setq endpunkt (vfl-getpoint nil "\n\nEndpunkt der Kette (Ziel) waehlen: ")) (setq endpunkt (vfl-getpoint nil (ssg-text "vfl-m3-prompt-endpunkt")))
(if (null endpunkt) (progn (princ "\nAbgebrochen.") (exit))) (if (null endpunkt) (progn (princ (ssg-text "gf-status-abgebrochen")) (exit)))
(setq end-hoehe (getreal (strcat "\nZiel-Hoehe (Z) des Endpunkts [" (setq end-hoehe (getreal (ssg-textf "vfl-m3-prompt-zielhoehe"
(rtos (caddr endpunkt) 2 1) "]: "))) (list (rtos (caddr endpunkt) 2 1)))))
(if (null end-hoehe) (setq end-hoehe (caddr endpunkt))) (if (null end-hoehe) (setq end-hoehe (caddr endpunkt)))
(setq endpunkt (list (car endpunkt) (cadr endpunkt) end-hoehe)) (setq endpunkt (list (car endpunkt) (cadr endpunkt) end-hoehe))
(setq *vfl-es-winkel* (vf-frage-element-winkel "vf-winkel-ein-header")) ; 30/90 vor Seite (setq *vfl-es-winkel* (vf-frage-element-winkel "vf-winkel-ein-header")) ; 30/90 vor Seite
(princ "\n\nEIN-Element (ES) - Seite waehlen:\n 1 - Links\n 2 - Rechts") (princ (ssg-text "gf-seite-ein-header"))
(setq es-seite (if (= (getstring "\nIhre Wahl (1/2) [1]: ") "2") "rechts" "links")) (princ (ssg-text "gf-seite-links"))
(princ (ssg-text "gf-seite-rechts"))
(setq es-seite (if (= (getstring (ssg-text "prompt-wahl-1-2")) "2") "rechts" "links"))
(vf-set-es-masse *vfl-es-winkel* es-seite) ; Masse fuer Variante (vf-set-es-masse *vfl-es-winkel* es-seite) ; Masse fuer Variante
;; --- 4. Sortieren + Analysieren + Eck-Vorpruefung --- ;; --- 4. Sortieren + Analysieren + Eck-Vorpruefung ---
(setq kette (gf-sortiere-objekte obj-liste startpunkt)) (setq kette (gf-sortiere-objekte obj-liste startpunkt))
(if (null kette) (if (null kette)
(progn (princ "\nFEHLER: Pfad nicht sortierbar (haengt er lueckenlos zusammen?).") (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 5.0))
(if ecke-bad (if ecke-bad
(progn (progn
(alert (strcat "Kein passender Bogen: Eck-Winkel " (rtos ecke-bad 2 1) (alert (ssg-textf "vfl-m3-alert-eckwinkel" (list (rtos ecke-bad 2 1))))
" Grad ist nicht ~30/60/90.\nBitte die Winkel anpassen."))
(exit))) (exit)))
;; --- 5. Klassifizierung (Phase A: nur speichern, nichts bauen) --- ;; --- 5. Klassifizierung (Phase A: nur speichern, nichts bauen) ---
@@ -1852,36 +1855,36 @@
(setq seg (nth i segmente) typ (car seg) hz (cadr seg) laenge (caddr seg)) (setq seg (nth i segmente) typ (car seg) hz (cadr seg) laenge (caddr seg))
(cond (cond
((= typ "Linie") ((= typ "Linie")
(princ (strcat "\n\nSegment " (itoa (1+ i)) "/" (itoa n) (princ (ssg-textf "vfl-m3-seg-gerade"
": Gerade L=" (rtos laenge 2 0) " mm hz=" (rtos hz 2 1))) (list (itoa (1+ i)) (itoa n) (rtos laenge 2 0) (rtos hz 2 1))))
(cond (cond
;; Direkt nach einer Vario-Kurve: automatisch VF (keine Abfrage) - ;; Direkt nach einer Vario-Kurve: automatisch VF (keine Abfrage) -
;; die Kurve sitzt mitten in der VF-Einheit, es MUSS VF folgen. ;; die Kurve sitzt mitten in der VF-Einheit, es MUSS VF folgen.
(nach-kurve (nach-kurve
(princ "\n (automatisch VF - Segment folgt direkt auf eine Vario-Kurve)") (princ (ssg-text "vfl-m3-auto-vf"))
(setq plan (cons (list "Linie" hz laenge "VF" nil) plan)) (setq plan (cons (list "Linie" hz laenge "VF" nil) plan))
(setq nach-kurve nil)) (setq nach-kurve nil))
(t (t
(princ "\n Typ? 1 = GF (Eingabe-Winkel) 2 = VF (Bruecke)") (princ (ssg-text "vfl-m3-typ-gerade"))
(setq antwort (getstring "\nIhre Wahl (1/2) [1]: ")) (setq antwort (getstring (ssg-text "prompt-wahl-1-2")))
(if (= antwort "2") (if (= antwort "2")
(setq plan (cons (list "Linie" hz laenge "VF" nil) plan)) (setq plan (cons (list "Linie" hz laenge "VF" nil) plan))
(progn (progn
(setq winkel (getreal "\n GF-Neigung in Grad [3]: ")) (setq winkel (getreal (ssg-text "vfl-m3-prompt-gf-neigung")))
(if (null winkel) (setq winkel 3.0)) (if (null winkel) (setq winkel 3.0))
(if (> winkel 3.0) (if (> winkel 3.0)
(progn (princ "\n Hinweis: GF max. 3 Grad - auf 3 begrenzt.") (setq winkel 3.0))) (progn (princ (ssg-text "vfl-m3-hinweis-gf-max")) (setq winkel 3.0)))
(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))
(princ (strcat "\n\nSegment " (itoa (1+ i)) "/" (itoa n) (princ (ssg-textf "vfl-m3-seg-bogen"
": Eck/Bogen " (itoa bwinkel) " Grad " bseite)) (list (itoa (1+ i)) (itoa n) (itoa bwinkel) bseite)))
(princ "\n Typ? 1 = GF-Bogen 2 = Vario-Kurve") (princ (ssg-text "vfl-m3-typ-bogen"))
(setq antwort (getstring "\nIhre Wahl (1/2) [1]: ")) (setq antwort (getstring (ssg-text "prompt-wahl-1-2")))
(if (= antwort "2") (if (= antwort "2")
(progn (progn
(princ "\n Vario-Kurve - Variante? 1 = Aussen 2 = Innen") (princ (ssg-text "vfl-m3-variante-frage"))
(setq kv-variante (if (= (getstring "\nIhre Wahl (1/2) [2]: ") "1") "aussen" "innen")) (setq kv-variante (if (= (getstring (ssg-text "vfl-prompt-wahl-1-2-def2")) "1") "aussen" "innen"))
(setq plan (cons (list "Bogen" hz laenge bwinkel bseite "Vario-Kurve" kv-variante) plan)) (setq plan (cons (list "Bogen" hz laenge bwinkel bseite "Vario-Kurve" kv-variante) plan))
(setq nach-kurve t)) ; naechste Gerade automatisch VF (setq nach-kurve t)) ; naechste Gerade automatisch VF
(progn (progn
@@ -1905,9 +1908,9 @@
(if (/= vf-count 1) (if (/= vf-count 1)
(progn (progn
(princ (strcat "\n\n[M3a] Gefundene VF-Laeufe: " (itoa vf-count))) (princ (ssg-textf "vfl-m3-vf-laeufe" (list (itoa vf-count))))
(princ "\n[M3a] Genau EIN VF-Lauf noetig (GF...VF...GF; Vario-Kurven duerfen im Lauf liegen).") (princ (ssg-text "vfl-m3-vf-lauf-noetig"))
(princ "\n[M3a] Mehrere/keine VF-Laeufe -> M3b spaeter.") (princ (ssg-text "vfl-m3-vf-lauf-m3b"))
(exit))) (exit)))
;; Traeger-Stueck = laengste VF-Gerade im Lauf (traegt die ganze Hoehe). ;; Traeger-Stueck = laengste VF-Gerade im Lauf (traegt die ganze Hoehe).
(setq carrier-idx -1 i vf-start) (setq carrier-idx -1 i vf-start)
@@ -1918,7 +1921,7 @@
(setq carrier-idx i))) (setq carrier-idx i)))
(setq i (1+ i))) (setq i (1+ i)))
(if (< carrier-idx 0) (if (< carrier-idx 0)
(progn (princ "\n[M3a] VF-Lauf ohne VF-Gerade - Abbruch.") (exit))) (progn (princ (ssg-text "vfl-m3-vf-lauf-ohne-gerade")) (exit)))
;; --- 7. Anker rechnen --- ;; --- 7. Anker rechnen ---
;; Vorwaerts: Start-Z durch alle Front-Segmente (Index < vf-start). ;; Vorwaerts: Start-Z durch alle Front-Segmente (Index < vf-start).
@@ -1947,31 +1950,30 @@
;; --- 8. Anker-Report (noch kein Bauen) --- ;; --- 8. Anker-Report (noch kein Bauen) ---
(princ "\n\n=========================================") (princ "\n\n=========================================")
(princ "\n M3a ANKER-VORSCHAU (grob geschaetzt; exakte Werte beim Bau)") (princ (ssg-text "vfl-m3-anker-vorschau-header"))
(princ "\n=========================================") (princ "\n=========================================")
(princ (strcat "\n Start-Hoehe Z: " (rtos (float start-hoehe) 2 1) " mm")) (princ (ssg-textf "vfl-m3-start-hoehe" (list (rtos (float start-hoehe) 2 1))))
(princ (strcat "\n Ziel-Hoehe Z: " (rtos (float end-hoehe) 2 1) " mm")) (princ (ssg-textf "vfl-m3-ziel-hoehe" (list (rtos (float end-hoehe) 2 1))))
(princ (strcat "\n delta-H gesamt: " (rtos dH-gesamt 2 1) " mm (positiv = Abfall)")) (princ (ssg-textf "vfl-m3-delta-h-gesamt" (list (rtos dH-gesamt 2 1))))
(princ (strcat "\n VF-Lauf: Segment " (itoa (1+ vf-start)) ".." (itoa (1+ vf-ende)))) (princ (ssg-textf "vfl-m3-vf-lauf-segmente" (list (itoa (1+ vf-start)) (itoa (1+ vf-ende)))))
(princ (strcat "\n Front-Anker Z: " (rtos z-front 2 1) " mm (vorwaerts von AS)")) (princ (ssg-textf "vfl-m3-front-anker-vorschau" (list (rtos z-front 2 1))))
(princ (strcat "\n Junction-Anker Z: " (rtos z-junction 2 1) " mm (rueckwaerts von ES)")) (princ (ssg-textf "vfl-m3-junction-anker-vorschau" (list (rtos z-junction 2 1))))
;; Vorzeichen = Richtung (VF ist angetrieben, kann steigen UND fallen). ;; Vorzeichen = Richtung (VF ist angetrieben, kann steigen UND fallen).
(setq richtn (cond ((< dH-bruecke -0.1) "Auf (steigt)") (setq richtn (cond ((< dH-bruecke -0.1) (ssg-text "vfl-m3-richtung-auf"))
((> dH-bruecke 0.1) "Ab (faellt)") ((> dH-bruecke 0.1) (ssg-text "vfl-m3-richtung-ab"))
(t "horizontal"))) (t (ssg-text "vfl-m3-richtung-horizontal"))))
(setq req-w (if (> span-bruecke 1.0) (setq req-w (if (> span-bruecke 1.0)
(* (atan (/ (abs dH-bruecke) span-bruecke)) (/ 180.0 pi)) (* (atan (/ (abs dH-bruecke) span-bruecke)) (/ 180.0 pi))
0.0)) 0.0))
(princ (strcat "\n --> Bruecke: delta-H = " (rtos dH-bruecke 2 1) (princ (ssg-textf "vfl-m3-bruecke-dh" (list (rtos dH-bruecke 2 1) (rtos span-bruecke 2 0))))
" mm ueber Spannweite " (rtos span-bruecke 2 0) " mm")) (princ (ssg-textf "vfl-m3-bruecke-richtung" (list richtn)))
(princ (strcat "\n Richtung: VF-" richtn)) (princ (ssg-text "vfl-m3-vf-angetrieben"))
(princ "\n (VF ist angetrieben - kann STEIGEN und FALLEN; Vorzeichen = nur Auf/Ab)") (princ (ssg-textf "vfl-m3-mittlere-neigung" (list (rtos req-w 2 1))))
(princ (strcat "\n grobe mittlere Neigung ueber Spannweite: ~" (rtos req-w 2 1) " Grad"))
(if (> req-w 51.0) (if (> req-w 51.0)
(princ "\n WARNUNG: ~Neigung > 51 Grad -> zu steil fuer Vario (Magnitude infeasibel).") (princ (ssg-text "vfl-m3-warnung-zu-steil"))
(princ "\n -> innerhalb Vario-Bereich (3..51 Grad), grobe Orientierung.")) (princ (ssg-text "vfl-m3-vario-bereich-ok")))
(princ "\n (Anker oben = grobe Vorschau; exakte Werte werden beim Bau GEMESSEN)") (princ (ssg-text "vfl-m3-anker-hinweis"))
(princ "\n=========================================") (princ "\n=========================================")
;; ================= PHASE B: BAUEN (messen statt schaetzen) ================= ;; ================= PHASE B: BAUEN (messen statt schaetzen) =================
@@ -1990,7 +1992,7 @@
(setq i (1+ i))) (setq i (1+ i)))
;; --- B1: FRONT-Lauf bauen (Segmente 0 .. vf-start-1) -> Front-Anker MESSEN --- ;; --- B1: FRONT-Lauf bauen (Segmente 0 .. vf-start-1) -> Front-Anker MESSEN ---
(princ "\n\n>>> Phase B1: Front-Lauf (AS + GF) bauen ...") (princ (ssg-text "vfl-m3-phase-b1"))
(setq i 0) (setq i 0)
(while (< i vf-start) (while (< i vf-start)
(setq seg (nth i plan) typ (car seg) hz (cadr seg)) (setq seg (nth i plan) typ (car seg) hz (cadr seg))
@@ -2016,9 +2018,9 @@
(if (= klass "GF-Bogen") (if (= klass "GF-Bogen")
(progn (progn
(if (null frame) (if (null frame)
(progn (alert "Kette beginnt mit einem Bogen - bitte erst eine Gerade.") (exit))) (progn (alert (ssg-text "vfl-m3-alert-beginnt-bogen")) (exit)))
(setq frame (vfl-insert-gf-bogen-block frame bwinkel bseite))) (setq frame (vfl-insert-gf-bogen-block frame bwinkel bseite)))
(princ "\n >>> [M3a] Vario-Kurve im Front-Lauf - uebersprungen.")))) (princ (ssg-text "vfl-m3-kurve-front-uebersprungen")))))
(setq i (1+ i))) (setq i (1+ i)))
;; Front-Anker (gemessen). Falls die VF-Bruecke ganz vorne liegt: AS jetzt setzen. ;; Front-Anker (gemessen). Falls die VF-Bruecke ganz vorne liegt: AS jetzt setzen.
@@ -2066,11 +2068,11 @@
;; 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
;; Winkel WAEHLBAR (mehrere gueltige -> Nutzer waehlt). feste = 800 (Umlenk+Sep; ;; Winkel WAEHLBAR (mehrere gueltige -> Nutzer waehlt). feste = 800 (Umlenk+Sep;
;; Motor sitzt am Kettenende). Die flache Zone gleicht danach die Laenge aus. ;; Motor sitzt am Kettenende). Die flache Zone gleicht danach die Laenge aus.
(princ "\n\n --- STANDARD-VARIO (Kletter-Segment) + flache Zone ---") (princ (ssg-text "vfl-m3-standard-vario-header"))
(princ (strcat "\n Front-Anker (gemessen): " (rtos z-front 2 1) " mm")) (princ (ssg-textf "vfl-m3-front-anker-gemessen" (list (rtos z-front 2 1))))
(princ (strcat "\n Junction (exakt): " (rtos z-junction 2 1) " mm")) (princ (ssg-textf "vfl-m3-junction-exakt" (list (rtos z-junction 2 1))))
(princ (strcat "\n Kletterhoehe " (rtos target-climb 2 1) " mm | Kletterer " (princ (ssg-textf "vfl-m3-kletter-info"
(itoa n-climb) " | Kurven " (itoa nkurve) " | kurze VF " (itoa nonclimber-cnt))) (list (rtos target-climb 2 1) (itoa n-climb) (itoa nkurve) (itoa nonclimber-cnt))))
;; feste-Horizontal + Hoehen-Anpassung fuer den Solver: ;; feste-Horizontal + Hoehen-Anpassung fuer den Solver:
;; - Mit flacher Zone: Motor sitzt am Kettenende (nicht im Kletter-Segment) -> ;; - Mit flacher Zone: Motor sitzt am Kettenende (nicht im Kletter-Segment) ->
;; feste = 800 (Umlenk+Sep). berechne rechnet Motor-/Uebergangs-Abstieg NICHT, ;; feste = 800 (Umlenk+Sep). berechne rechnet Motor-/Uebergangs-Abstieg NICHT,
@@ -2083,24 +2085,28 @@
(setq feste-vf 1300.0 dH-adj dH-bruecke)) (setq feste-vf 1300.0 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 "\n KEIN passender Vario-Winkel -> infeasibel (Front bereits gebaut).") (progn (princ (ssg-text "vfl-m3-kein-winkel"))
(princ) (exit))) (princ) (exit)))
(setq br-winkel (car wahl3) gf-total (cadr wahl3) br-lvf (caddr wahl3) br-richtn (cadddr wahl3)) (setq br-winkel (car wahl3) gf-total (cadr wahl3) br-lvf (caddr wahl3) br-richtn (cadddr wahl3))
;; GF-Verteilung: 1 = alles am Einlauf (GF1); 2 = 1/2 GF1 + 1/2 GF2. Bei 1/2/1/2 ;; GF-Verteilung: 1 = alles am Einlauf (GF1); 2 = 1/2 GF1 + 1/2 GF2. Bei 1/2/1/2
;; wird der im Kletter-Segment durch das halbe GF1 frei werdende Platz mit einem ;; wird der im Kletter-Segment durch das halbe GF1 frei werdende Platz mit einem
;; horizontalen Fueller-A gefuellt; GF2 (~1/2 L_GF) sitzt hinter dem Motor, der ;; horizontalen Fueller-A gefuellt; GF2 (~1/2 L_GF) sitzt hinter dem Motor, der
;; ES-Laengen-Abschluss zieht seinen Fussabdruck ab (Fueller-B wird kuerzer). ;; ES-Laengen-Abschluss zieht seinen Fussabdruck ab (Fueller-B wird kuerzer).
(princ "\n\n GF-Verteilung: 1 - alles am Einlauf (GF1) 2 - 1/2 GF1 + 1/2 GF2") (princ (ssg-text "vfl-m3-gf-verteilung"))
(setq br-gf-mode (if (= (getstring "\n Ihre Wahl (1/2) [1]: ") "2") 2 1)) (setq br-gf-mode (if (= (getstring (ssg-text "prompt-wahl-1-2")) "2") 2 1))
(if (= br-gf-mode 2) (if (= br-gf-mode 2)
(setq br-gf1 (/ gf-total 2.0) br-gf2-exp (/ gf-total 2.0) (setq br-gf1 (/ gf-total 2.0) br-gf2-exp (/ gf-total 2.0)
filler-A-len (* (/ gf-total 2.0) (cos rad3v))) filler-A-len (* (/ gf-total 2.0) (cos rad3v)))
(setq br-gf1 gf-total br-gf2-exp 0.0 filler-A-len 0.0)) (setq br-gf1 gf-total br-gf2-exp 0.0 filler-A-len 0.0))
(setq filler-a-done nil) (setq filler-a-done nil)
(princ (strcat "\n -> Vario " (itoa br-winkel) " (" br-richtn "), L_VF " (rtos br-lvf 2 0) (princ (ssg-textf "vfl-m3-vario-ergebnis"
" mm, GF gesamt " (rtos gf-total 2 0) " mm, Verteilung " (list (itoa br-winkel)
(if (= br-gf-mode 2) "1/2 GF1 + 1/2 GF2" "alles GF1") (if (= br-richtn "Auf") (ssg-text "vfl-m3-richtung-auf-kurz")
" (GF2-Rest = Mess-Feinkorrektur)")) (ssg-text "vfl-m3-richtung-ab-kurz"))
(rtos br-lvf 2 0)
(rtos gf-total 2 0)
(if (= br-gf-mode 2) (ssg-text "vfl-m3-vert-halb")
(ssg-text "vfl-m3-vert-ganz")))))
;; --- B3: Standard-Vario (Klettern, 3-Grad-Basis) + flache Zone (0 Grad) --- ;; --- B3: Standard-Vario (Klettern, 3-Grad-Basis) + flache Zone (0 Grad) ---
;; Die flache Zone (Vario-Kurve + horizontaler Fueller) haengt EINMAL ueber auf_3 ;; Die flache Zone (Vario-Kurve + horizontaler Fueller) haengt EINMAL ueber auf_3
@@ -2171,13 +2177,12 @@
(setq gf2-drop (- z-aftermotor z-junction)) (setq gf2-drop (- z-aftermotor z-junction))
(if (< gf2-drop 0.0) (if (< gf2-drop 0.0)
(progn (progn
(princ (strcat "\n WARNUNG: Koerper klettert zu wenig - GF2<0 (fehlen " (princ (ssg-textf "vfl-m3-warnung-gf2-negativ" (list (rtos (- gf2-drop) 2 1))))
(rtos (- gf2-drop) 2 1) " mm). Winkel zu flach; dZ nicht exakt."))
(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 (* 3.0 (/ pi 180.0))) (cos (* 3.0 (/ pi 180.0))))))
(if (> gf2-planar 0.1) (if (> gf2-planar 0.1)
(progn (progn
(princ (strcat "\n GF2 (gemessener Ausgleich): L=" (rtos gf2-planar 2 1) " mm")) (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 3))
(vfl-acc-gf-seg (/ gf2-planar (cos (* 3.0 (/ pi 180.0)))) 3)) (vfl-acc-gf-seg (/ gf2-planar (cos (* 3.0 (/ pi 180.0)))) 3))
(setq frame (vfl-frame-3grad pt letzt-koerper-hz))) (setq frame (vfl-frame-3grad pt letzt-koerper-hz)))
@@ -2199,11 +2204,11 @@
(setq bwinkel (nth 3 seg) bseite (nth 4 seg) klass (nth 5 seg)) (setq bwinkel (nth 3 seg) bseite (nth 4 seg) klass (nth 5 seg))
(if (= klass "GF-Bogen") (if (= klass "GF-Bogen")
(setq frame (vfl-insert-gf-bogen-block frame bwinkel bseite)) (setq frame (vfl-insert-gf-bogen-block frame bwinkel bseite))
(princ "\n >>> [M3a] Vario-Kurve im Back-Lauf - uebersprungen.")))) (princ (ssg-text "vfl-m3-kurve-back-uebersprungen")))))
(setq i (1+ i))) (setq i (1+ i)))
;; --- B5: Kettenende Separator + ES --- ;; --- B5: Kettenende Separator + ES ---
(if (null frame) (progn (princ "\nNichts gebaut - Abbruch.") (exit))) (if (null frame) (progn (princ (ssg-text "vfl-m3-nichts-gebaut")) (exit)))
(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 3.0) (caddr (car frame)) es-seite))
@@ -2213,25 +2218,25 @@
(vfl-planar-dist startpunkt (car frame)) as-seite es-seite startpunkt lastEnt) (vfl-planar-dist startpunkt (car frame)) as-seite es-seite startpunkt lastEnt)
(setq soll-ende endpunkt ist-ende (car frame)) (setq soll-ende endpunkt ist-ende (car frame))
(princ "\n\n=========================================") (princ "\n\n=========================================")
(princ "\n>>> VF-Linienzug (Modus 3, M3a) gebaut! <<<") (princ (ssg-text "vfl-m3-fertig-header"))
(princ (strcat "\n Ziel (Soll): X=" (rtos (car soll-ende) 2 1) (princ (ssg-textf "vfl-m3-ziel-soll"
" Y=" (rtos (cadr soll-ende) 2 1) " Z=" (rtos (caddr soll-ende) 2 1))) (list (rtos (car soll-ende) 2 1) (rtos (cadr soll-ende) 2 1) (rtos (caddr soll-ende) 2 1))))
(princ (strcat "\n ES (Ist): X=" (rtos (car ist-ende) 2 1) (princ (ssg-textf "vfl-m3-es-ist"
" Y=" (rtos (cadr ist-ende) 2 1) " Z=" (rtos (caddr ist-ende) 2 1))) (list (rtos (car ist-ende) 2 1) (rtos (cadr ist-ende) 2 1) (rtos (caddr ist-ende) 2 1))))
(princ (strcat "\n Abweichung: dX=" (rtos (- (car ist-ende) (car soll-ende)) 2 1) (princ (ssg-textf "vfl-m3-abweichung"
" dY=" (rtos (- (cadr ist-ende) (cadr soll-ende)) 2 1) (list (rtos (- (car ist-ende) (car soll-ende)) 2 1)
" dZ=" (rtos (- (caddr ist-ende) (caddr soll-ende)) 2 1) " mm")) (rtos (- (cadr ist-ende) (cadr soll-ende)) 2 1)
(rtos (- (caddr ist-ende) (caddr soll-ende)) 2 1))))
;; Zerlegung bezogen auf die ES-KS_AUS-ACHSE: Quer (senkrecht zur Achse) soll ;; Zerlegung bezogen auf die ES-KS_AUS-ACHSE: Quer (senkrecht zur Achse) soll
;; ~0 sein (Endpunkt liegt auf der KS_AUS-Achse), Laengs = ES-Ausladung. ;; ~0 sein (Endpunkt liegt auf der KS_AUS-Achse), Laengs = ES-Ausladung.
(setq end-hz (car (frame->hz-winkel frame))) ; KS_AUS-Achsrichtung (setq end-hz (car (frame->hz-winkel frame))) ; KS_AUS-Achsrichtung
(setq dir-x (cos (* end-hz (/ pi 180.0))) dir-y (sin (* end-hz (/ pi 180.0)))) (setq dir-x (cos (* end-hz (/ pi 180.0))) dir-y (sin (* end-hz (/ pi 180.0))))
(princ (strcat "\n Laengs KS_AUS-Achse: " (princ (ssg-textf "vfl-m3-laengs-quer"
(rtos (+ (* (- (car ist-ende) (car soll-ende)) dir-x) (list (rtos (+ (* (- (car ist-ende) (car soll-ende)) dir-x)
(* (- (cadr ist-ende) (cadr soll-ende)) dir-y)) 2 1) (* (- (cadr ist-ende) (cadr soll-ende)) dir-y)) 2 1)
" mm | Quer zur Achse (soll ~0): "
(rtos (+ (* (- (car ist-ende) (car soll-ende)) (- dir-y)) (rtos (+ (* (- (car ist-ende) (car soll-ende)) (- dir-y))
(* (- (cadr ist-ende) (cadr soll-ende)) dir-x)) 2 1) " mm")) (* (- (cadr ist-ende) (cadr soll-ende)) dir-x)) 2 1))))
(princ "\n (dZ=Ziel-Hoehe; Quer zur KS_AUS-Achse ~0 => Endpunkt liegt auf der Achse)") (princ (ssg-text "vfl-m3-achse-hinweis"))
(princ "\n=========================================") (princ "\n=========================================")
(princ) (princ)
) )
+63
View File
@@ -33,6 +33,69 @@
"vfl-soll-xyz": "\n Soll: X=%1 Y=%2 Z=%3", "vfl-soll-xyz": "\n Soll: X=%1 Y=%2 Z=%3",
"vfl-ist-xyz": "\n Ist : X=%1 Y=%2 Z=%3", "vfl-ist-xyz": "\n Ist : X=%1 Y=%2 Z=%3",
"vfl-abweichung-xyz": "\n Abweichung: dX=%1 dY=%2 dZ=%3 mm", "vfl-abweichung-xyz": "\n Abweichung: dX=%1 dY=%2 dZ=%3 mm",
"vfl-m3-titel": "\n VF-LINIENZUG - Modus 2: Pfad + Ziel-Hoehe (fertig; Anker + Solver + Bau)",
"vfl-m3-alert-gf-modul": "Gefaellestrecke-Modul nicht geladen!",
"vfl-m3-pfad-waehlen": "\n\nPfad-Objekte waehlen (Linien/Boegen):",
"vfl-m3-keine-objekte": "\nKeine Objekte gewaehlt - Abbruch.",
"vfl-m3-prompt-startpunkt": "\n\nStartpunkt der Kette (hoehere Seite) waehlen: ",
"vfl-prompt-hoehe-startpunkt": "\nHoehe (Z) des Startpunkts [%1]: ",
"vfl-m3-prompt-endpunkt": "\n\nEndpunkt der Kette (Ziel) waehlen: ",
"vfl-m3-prompt-zielhoehe": "\nZiel-Hoehe (Z) des Endpunkts [%1]: ",
"vfl-m3-fehler-nicht-sortierbar": "\nFEHLER: Pfad nicht sortierbar (haengt er lueckenlos zusammen?).",
"vfl-m3-alert-eckwinkel": "Kein passender Bogen: Eck-Winkel %1 Grad ist nicht ~30/60/90.\nBitte die Winkel anpassen.",
"vfl-m3-seg-gerade": "\n\nSegment %1/%2: Gerade L=%3 mm hz=%4",
"vfl-m3-auto-vf": "\n (automatisch VF - Segment folgt direkt auf eine Vario-Kurve)",
"vfl-m3-typ-gerade": "\n Typ? 1 = GF (Eingabe-Winkel) 2 = VF (Bruecke)",
"vfl-m3-prompt-gf-neigung": "\n GF-Neigung in Grad [3]: ",
"vfl-m3-hinweis-gf-max": "\n Hinweis: GF max. 3 Grad - auf 3 begrenzt.",
"vfl-m3-seg-bogen": "\n\nSegment %1/%2: Eck/Bogen %3 Grad %4",
"vfl-m3-typ-bogen": "\n Typ? 1 = GF-Bogen 2 = Vario-Kurve",
"vfl-m3-variante-frage": "\n Vario-Kurve - Variante? 1 = Aussen 2 = Innen",
"vfl-m3-vf-laeufe": "\n\n[M3a] Gefundene VF-Laeufe: %1",
"vfl-m3-vf-lauf-noetig": "\n[M3a] Genau EIN VF-Lauf noetig (GF...VF...GF; Vario-Kurven duerfen im Lauf liegen).",
"vfl-m3-vf-lauf-m3b": "\n[M3a] Mehrere/keine VF-Laeufe -> M3b spaeter.",
"vfl-m3-vf-lauf-ohne-gerade": "\n[M3a] VF-Lauf ohne VF-Gerade - Abbruch.",
"vfl-m3-anker-vorschau-header": "\n M3a ANKER-VORSCHAU (grob geschaetzt; exakte Werte beim Bau)",
"vfl-m3-start-hoehe": "\n Start-Hoehe Z: %1 mm",
"vfl-m3-ziel-hoehe": "\n Ziel-Hoehe Z: %1 mm",
"vfl-m3-delta-h-gesamt": "\n delta-H gesamt: %1 mm (positiv = Abfall)",
"vfl-m3-vf-lauf-segmente": "\n VF-Lauf: Segment %1..%2",
"vfl-m3-front-anker-vorschau": "\n Front-Anker Z: %1 mm (vorwaerts von AS)",
"vfl-m3-junction-anker-vorschau": "\n Junction-Anker Z: %1 mm (rueckwaerts von ES)",
"vfl-m3-richtung-auf": "Auf (steigt)",
"vfl-m3-richtung-ab": "Ab (faellt)",
"vfl-m3-richtung-horizontal": "horizontal",
"vfl-m3-richtung-auf-kurz": "Auf",
"vfl-m3-richtung-ab-kurz": "Ab",
"vfl-m3-bruecke-dh": "\n --> Bruecke: delta-H = %1 mm ueber Spannweite %2 mm",
"vfl-m3-bruecke-richtung": "\n Richtung: VF-%1",
"vfl-m3-vf-angetrieben": "\n (VF ist angetrieben - kann STEIGEN und FALLEN; Vorzeichen = nur Auf/Ab)",
"vfl-m3-mittlere-neigung": "\n grobe mittlere Neigung ueber Spannweite: ~%1 Grad",
"vfl-m3-warnung-zu-steil": "\n WARNUNG: ~Neigung > 51 Grad -> zu steil fuer Vario (Magnitude infeasibel).",
"vfl-m3-vario-bereich-ok": "\n -> innerhalb Vario-Bereich (3..51 Grad), grobe Orientierung.",
"vfl-m3-anker-hinweis": "\n (Anker oben = grobe Vorschau; exakte Werte werden beim Bau GEMESSEN)",
"vfl-m3-phase-b1": "\n\n>>> Phase B1: Front-Lauf (AS + GF) bauen ...",
"vfl-m3-alert-beginnt-bogen": "Kette beginnt mit einem Bogen - bitte erst eine Gerade.",
"vfl-m3-kurve-front-uebersprungen": "\n >>> [M3a] Vario-Kurve im Front-Lauf - uebersprungen.",
"vfl-m3-standard-vario-header": "\n\n --- STANDARD-VARIO (Kletter-Segment) + flache Zone ---",
"vfl-m3-front-anker-gemessen": "\n Front-Anker (gemessen): %1 mm",
"vfl-m3-junction-exakt": "\n Junction (exakt): %1 mm",
"vfl-m3-kletter-info": "\n Kletterhoehe %1 mm | Kletterer %2 | Kurven %3 | kurze VF %4",
"vfl-m3-kein-winkel": "\n KEIN passender Vario-Winkel -> infeasibel (Front bereits gebaut).",
"vfl-m3-gf-verteilung": "\n\n GF-Verteilung: 1 - alles am Einlauf (GF1) 2 - 1/2 GF1 + 1/2 GF2",
"vfl-m3-vert-halb": "1/2 GF1 + 1/2 GF2",
"vfl-m3-vert-ganz": "alles GF1",
"vfl-m3-vario-ergebnis": "\n -> Vario %1 (%2), L_VF %3 mm, GF gesamt %4 mm, Verteilung %5 (GF2-Rest = Mess-Feinkorrektur)",
"vfl-m3-warnung-gf2-negativ": "\n WARNUNG: Koerper klettert zu wenig - GF2<0 (fehlen %1 mm). Winkel zu flach; dZ nicht exakt.",
"vfl-m3-gf2-ausgleich": "\n GF2 (gemessener Ausgleich): L=%1 mm",
"vfl-m3-kurve-back-uebersprungen": "\n >>> [M3a] Vario-Kurve im Back-Lauf - uebersprungen.",
"vfl-m3-nichts-gebaut": "\nNichts gebaut - Abbruch.",
"vfl-m3-fertig-header": "\n>>> VF-Linienzug (Modus 2) gebaut! <<<",
"vfl-m3-ziel-soll": "\n Ziel (Soll): X=%1 Y=%2 Z=%3",
"vfl-m3-es-ist": "\n ES (Ist): X=%1 Y=%2 Z=%3",
"vfl-m3-abweichung": "\n Abweichung: dX=%1 dY=%2 dZ=%3 mm",
"vfl-m3-laengs-quer": "\n Laengs KS_AUS-Achse: %1 mm | Quer zur Achse (soll ~0): %2 mm",
"vfl-m3-achse-hinweis": "\n (dZ=Ziel-Hoehe; Quer zur KS_AUS-Achse ~0 => Endpunkt liegt auf der Achse)",
"gf-fehler-block-fehlt": "\n FEHLER: Block '%1' fehlt", "gf-fehler-block-fehlt": "\n FEHLER: Block '%1' fehlt",
"gf-fehler-block-fehlt-ausruf": "\n FEHLER: Block '%1' fehlt!", "gf-fehler-block-fehlt-ausruf": "\n FEHLER: Block '%1' fehlt!",
"gf-fehler-blockdatei-fehlt": "\n FEHLER: Block-Datei nicht gefunden: %1", "gf-fehler-blockdatei-fehlt": "\n FEHLER: Block-Datei nicht gefunden: %1",
+63
View File
@@ -33,6 +33,69 @@
"vfl-soll-xyz": "\n Target: X=%1 Y=%2 Z=%3", "vfl-soll-xyz": "\n Target: X=%1 Y=%2 Z=%3",
"vfl-ist-xyz": "\n Actual: X=%1 Y=%2 Z=%3", "vfl-ist-xyz": "\n Actual: X=%1 Y=%2 Z=%3",
"vfl-abweichung-xyz": "\n Deviation: dX=%1 dY=%2 dZ=%3 mm", "vfl-abweichung-xyz": "\n Deviation: dX=%1 dY=%2 dZ=%3 mm",
"vfl-m3-titel": "\n VF LINE PATH - Mode 2: path + target height (finished; anchors + solver + build)",
"vfl-m3-alert-gf-modul": "Gefaellestrecke module not loaded!",
"vfl-m3-pfad-waehlen": "\n\nSelect path objects (lines/arcs):",
"vfl-m3-keine-objekte": "\nNo objects selected - aborting.",
"vfl-m3-prompt-startpunkt": "\n\nSelect chain start point (higher side): ",
"vfl-prompt-hoehe-startpunkt": "\nHeight (Z) of the start point [%1]: ",
"vfl-m3-prompt-endpunkt": "\n\nSelect chain end point (target): ",
"vfl-m3-prompt-zielhoehe": "\nTarget height (Z) of the end point [%1]: ",
"vfl-m3-fehler-nicht-sortierbar": "\nERROR: path cannot be sorted (is it connected without gaps?).",
"vfl-m3-alert-eckwinkel": "No matching arc: corner angle %1 deg is not ~30/60/90.\nPlease adjust the angles.",
"vfl-m3-seg-gerade": "\n\nSegment %1/%2: straight L=%3 mm hz=%4",
"vfl-m3-auto-vf": "\n (automatic VF - segment follows directly after a Vario curve)",
"vfl-m3-typ-gerade": "\n Type? 1 = GF (input angle) 2 = VF (bridge)",
"vfl-m3-prompt-gf-neigung": "\n GF slope in degrees [3]: ",
"vfl-m3-hinweis-gf-max": "\n Note: GF max. 3 deg - limited to 3.",
"vfl-m3-seg-bogen": "\n\nSegment %1/%2: corner/arc %3 deg %4",
"vfl-m3-typ-bogen": "\n Type? 1 = GF arc 2 = Vario curve",
"vfl-m3-variante-frage": "\n Vario curve - variant? 1 = Outer 2 = Inner",
"vfl-m3-vf-laeufe": "\n\n[M3a] VF runs found: %1",
"vfl-m3-vf-lauf-noetig": "\n[M3a] Exactly ONE VF run required (GF...VF...GF; Vario curves may lie within the run).",
"vfl-m3-vf-lauf-m3b": "\n[M3a] Several/no VF runs -> M3b later.",
"vfl-m3-vf-lauf-ohne-gerade": "\n[M3a] VF run without a VF straight - aborting.",
"vfl-m3-anker-vorschau-header": "\n M3a ANCHOR PREVIEW (rough estimate; exact values during build)",
"vfl-m3-start-hoehe": "\n Start height Z: %1 mm",
"vfl-m3-ziel-hoehe": "\n Target height Z: %1 mm",
"vfl-m3-delta-h-gesamt": "\n delta-H total: %1 mm (positive = descent)",
"vfl-m3-vf-lauf-segmente": "\n VF run: segment %1..%2",
"vfl-m3-front-anker-vorschau": "\n Front anchor Z: %1 mm (forward from AS)",
"vfl-m3-junction-anker-vorschau": "\n Junction anchor Z: %1 mm (backward from ES)",
"vfl-m3-richtung-auf": "up (rising)",
"vfl-m3-richtung-ab": "down (falling)",
"vfl-m3-richtung-horizontal": "horizontal",
"vfl-m3-richtung-auf-kurz": "Up",
"vfl-m3-richtung-ab-kurz": "Down",
"vfl-m3-bruecke-dh": "\n --> Bridge: delta-H = %1 mm over span %2 mm",
"vfl-m3-bruecke-richtung": "\n Direction: VF-%1",
"vfl-m3-vf-angetrieben": "\n (VF is powered - can RISE and FALL; sign = up/down only)",
"vfl-m3-mittlere-neigung": "\n rough mean slope over span: ~%1 deg",
"vfl-m3-warnung-zu-steil": "\n WARNING: ~slope > 51 deg -> too steep for Vario (magnitude infeasible).",
"vfl-m3-vario-bereich-ok": "\n -> within Vario range (3..51 deg), rough orientation.",
"vfl-m3-anker-hinweis": "\n (anchors above = rough preview; exact values are MEASURED during build)",
"vfl-m3-phase-b1": "\n\n>>> Phase B1: building front run (AS + GF) ...",
"vfl-m3-alert-beginnt-bogen": "Chain starts with an arc - please begin with a straight.",
"vfl-m3-kurve-front-uebersprungen": "\n >>> [M3a] Vario curve in front run - skipped.",
"vfl-m3-standard-vario-header": "\n\n --- STANDARD VARIO (climbing segment) + flat zone ---",
"vfl-m3-front-anker-gemessen": "\n Front anchor (measured): %1 mm",
"vfl-m3-junction-exakt": "\n Junction (exact): %1 mm",
"vfl-m3-kletter-info": "\n Climb height %1 mm | climbers %2 | curves %3 | short VF %4",
"vfl-m3-kein-winkel": "\n NO matching Vario angle -> infeasible (front already built).",
"vfl-m3-gf-verteilung": "\n\n GF distribution: 1 - all at inlet (GF1) 2 - 1/2 GF1 + 1/2 GF2",
"vfl-m3-vert-halb": "1/2 GF1 + 1/2 GF2",
"vfl-m3-vert-ganz": "all GF1",
"vfl-m3-vario-ergebnis": "\n -> Vario %1 (%2), L_VF %3 mm, GF total %4 mm, distribution %5 (GF2 remainder = measured fine correction)",
"vfl-m3-warnung-gf2-negativ": "\n WARNING: body climbs too little - GF2<0 (missing %1 mm). Angle too shallow; dZ not exact.",
"vfl-m3-gf2-ausgleich": "\n GF2 (measured compensation): L=%1 mm",
"vfl-m3-kurve-back-uebersprungen": "\n >>> [M3a] Vario curve in back run - skipped.",
"vfl-m3-nichts-gebaut": "\nNothing built - aborting.",
"vfl-m3-fertig-header": "\n>>> VF line path (mode 2) built! <<<",
"vfl-m3-ziel-soll": "\n Target (nominal): X=%1 Y=%2 Z=%3",
"vfl-m3-es-ist": "\n ES (actual): X=%1 Y=%2 Z=%3",
"vfl-m3-abweichung": "\n Deviation: dX=%1 dY=%2 dZ=%3 mm",
"vfl-m3-laengs-quer": "\n Along KS_AUS axis: %1 mm | across axis (should be ~0): %2 mm",
"vfl-m3-achse-hinweis": "\n (dZ=target height; across KS_AUS axis ~0 => end point lies on the axis)",
"gf-fehler-block-fehlt": "\n ERROR: block '%1' missing", "gf-fehler-block-fehlt": "\n ERROR: block '%1' missing",
"gf-fehler-block-fehlt-ausruf": "\n ERROR: block '%1' missing!", "gf-fehler-block-fehlt-ausruf": "\n ERROR: block '%1' missing!",
"gf-fehler-blockdatei-fehlt": "\n ERROR: block file not found: %1", "gf-fehler-blockdatei-fehlt": "\n ERROR: block file not found: %1",
+2 -4
View File
@@ -13,9 +13,7 @@
[~BTMT-Entladung]^C^C(ssg-ensure "SSG_LIB_Commands") ILS_BTMT_Entladung [~BTMT-Entladung]^C^C(ssg-ensure "SSG_LIB_Commands") ILS_BTMT_Entladung
[--] [--]
[Scanner einfuegen]^C^C(ssg-ensure "SSG_LIB_Commands") ILS_SCANNER_INSERT [Scanner einfuegen]^C^C(ssg-ensure "SSG_LIB_Commands") ILS_SCANNER_INSERT
[Separator einfuegen]^C^C(ssg-ensure "SSG_LIB_Commands") ILS_SEPARATOR_INSERT [<-Separator einfuegen]^C^C(ssg-ensure "SSG_LIB_Commands") ILS_SEPARATOR_INSERT
[--]
[<-Scanner/Separator zaehlen -> ANZAHL schreiben]^C^C(ssg-ensure "count_sep_scan") ZAEHLE_SEP_SCAN
[->Foerderer] [->Foerderer]
[~Durch TEF angetriebene Strecke]^C^C(ssg-ensure "SSG_LIB_Commands") ILS_TEF_Strecke [~Durch TEF angetriebene Strecke]^C^C(ssg-ensure "SSG_LIB_Commands") ILS_TEF_Strecke
[VarioFoerderer]^C^CVarioFoerderer [VarioFoerderer]^C^CVarioFoerderer
@@ -121,7 +119,7 @@
[<-~APBW 110 R550/67,5 58x497]^C^C(ssg-ensure "OmniModulInsert") OMNI_APBW_R550_675_58 [<-~APBW 110 R550/67,5 58x497]^C^C(ssg-ensure "OmniModulInsert") OMNI_APBW_R550_675_58
[<-Element bearbeiten]^C^C(ssg-ensure "OmniModulInsert") OMNI_EDIT [<-Element bearbeiten]^C^C(ssg-ensure "OmniModulInsert") OMNI_EDIT
[->Export] [->Export]
[Export Sivas]^C^C(ssg-ensure "export") EXPORTSIVAS [Export Sivas]^C^C(ssg-ensure "count_sep_scan") ZAEHLE_SEP_SCAN (ssg-ensure "export") EXPORTSIVAS
[<-Export CSV]^C^C(ssg-ensure "export") EXPORTCSV [<-Export CSV]^C^C(ssg-ensure "export") EXPORTCSV
[->Konfiguration] [->Konfiguration]
[Umschalten 2D und 3D]^C^C(ssg-ensure "SSG_LIB_Commands") SSG_DIM_SWITCH [Umschalten 2D und 3D]^C^C(ssg-ensure "SSG_LIB_Commands") SSG_DIM_SWITCH