diff --git a/Lisp/SSG_LIB_Commands.lsp b/Lisp/SSG_LIB_Commands.lsp index 8fd1a3e..3c4f3fd 100644 --- a/Lisp/SSG_LIB_Commands.lsp +++ b/Lisp/SSG_LIB_Commands.lsp @@ -27,7 +27,7 @@ ;; Fuegt einen Sensor-Block wiederholt ein, bis der Benutzer mit ;; 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)) (if (null pfad) (princ (strcat "\n>>> FEHLER: Blockdatei '" fname ".dwg' nicht gefunden." @@ -36,8 +36,16 @@ (setq oldattreq (getvar "ATTREQ")) (setvar "ATTREQ" 0) (setq n 0) - (while (setq pt (getpoint (strcat "\nEinfuegepunkt fuer " fname - " [ENTER=Ende]: "))) + ;; Punkt abfragen; ENTER liefert nil, ESC einen abgefangenen Fehler - + ;; 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) (setq n (1+ n)) ) diff --git a/Lisp/count_sep_scan.lsp b/Lisp/count_sep_scan.lsp index c5acbc0..f2e0d8c 100644 --- a/Lisp/count_sep_scan.lsp +++ b/Lisp/count_sep_scan.lsp @@ -6,11 +6,14 @@ ;;; Gefaellestrecke) und schreibt die Anzahlen in die Attribute ;;; des jeweiligen ILS-Blocks. Anschliessend QSAVE. ;;; -;;; Zuordnung eines Sensors zu einem ILS-Block: -;;; - Der geometrische Mittelpunkt (X/Y) des Sensors (Zentrum -;;; seiner eigenen Bounding-Box, unabhaengig vom $INSBASE) -;;; muss in der achsparallelen Bounding-Box des ILS-Blocks -;;; liegen (Z wird ignoriert). +;;; Zuordnung eines Sensors zu einem ILS-Block (Z wird ignoriert): +;;; - Scanner: der Einfuegepunkt (X/Y) muss in der Bounding-Box +;;; des ILS-Blocks liegen. Die 3D-Geometrie des Scanners kann +;;; weit vom Einfuegepunkt entfernt sein, daher zaehlt hier der +;;; 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 ;;; der ILS-Block mit dem naechstgelegenen Box-Zentrum gewaehlt. ;;; - Ein optionaler Toleranzrand (*senstol*) vergroessert die @@ -112,17 +115,23 @@ ) ;;; ------------------------------------------------------------ -;;; Referenzpunkt eines Sensors: geometrischer Mittelpunkt seiner -;;; eigenen Bounding-Box (X/Y). Unabhaengig vom $INSBASE der -;;; Sensor-DWG. Fallback auf den Einfuegepunkt, falls die Box -;;; nicht ermittelbar ist. +;;; Referenzpunkt eines Sensors (X/Y), je nach Typ: +;;; - Scanner : Einfuegepunkt (DXF-Gruppe 10). +;;; - Separator : geometrischer Mittelpunkt seiner eigenen +;;; Bounding-Box (unabhaengig vom $INSBASE), +;;; Fallback auf den Einfuegepunkt. ;;; ------------------------------------------------------------ -(defun cs-sensor-point (ent ed / bb) - (setq bb (cs-bbox ent)) - (if bb - (list (/ (+ (nth 0 bb) (nth 2 bb)) 2.0) - (/ (+ (nth 1 bb) (nth 3 bb)) 2.0)) +(defun cs-sensor-point (ent ed kind / bb) + (if (eq kind 'scanner) (cdr (assoc 10 ed)) + (progn + (setq bb (cs-bbox ent)) + (if bb + (list (/ (+ (nth 0 bb) (nth 2 bb)) 2.0) + (/ (+ (nth 1 bb) (nth 3 bb)) 2.0)) + (cdr (assoc 10 ed)) + ) + ) ) ) @@ -271,7 +280,7 @@ (setq kind (cs-sensor-kind nm)) (if kind (progn - (setq pt (cs-sensor-point ent ed)) + (setq pt (cs-sensor-point ent ed kind)) (if (eq kind 'scanner) (setq scanpts (cons pt scanpts)) (setq seppts (cons pt seppts))))) diff --git a/Lisp/vf_core.lsp b/Lisp/vf_core.lsp index c2570a5..601ba84 100644 --- a/Lisp/vf_core.lsp +++ b/Lisp/vf_core.lsp @@ -1247,10 +1247,10 @@ (princ "\n 3 - 3D-Objekte stueckweise (Vorwaerts-Nachbau, in Arbeit)") (setq wahl (getint "\nIhre Wahl (1/2/3) [1]: ")) ;; Konsolen-Nummer -> interne Funktion: - ;; 2 = fertiger Ziel-Hoehe-Modus (intern vf-linienzug-modus3) - ;; 3 = alter Vorwaerts-Nachbau (intern vf-linienzug-modus2, wird umgebaut) - (cond ((= wahl 2) (vf-linienzug-modus3)) - ((= wahl 3) (vf-linienzug-modus2)) + ;; 2 = fertiger Ziel-Hoehe-Modus (intern vf-linienzug-modus2) + ;; 3 = alter Vorwaerts-Nachbau (intern vf-linienzug-modus3, wird umgebaut) + (cond ((= wahl 2) (vf-linienzug-modus2)) + ((= wahl 3) (vf-linienzug-modus3)) (t (vf-linienzug-modus))) (exit) ) diff --git a/Lisp/vf_linienzug.lsp b/Lisp/vf_linienzug.lsp index 442cb00..0829dd0 100644 --- a/Lisp/vf_linienzug.lsp +++ b/Lisp/vf_linienzug.lsp @@ -1386,7 +1386,7 @@ (foreach x liste (setq d (abs (- x w))) (if (< d bd) (setq bd d best x))) 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 bwinkel bseite frame antwort winkel deltaL anzahl-gf anzahl-vf vfl-nummer lastEnt hoehe-bis @@ -1770,7 +1770,7 @@ (- (/ (- ep-na (* perp-es np-na)) dp-na) cc) 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 typ hz laenge bwinkel bseite antwort winkel klass 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 gf-total br-gf-mode br-gf2-exp filler-A-len filler-a-done) (princ "\n\n=========================================") - (princ "\n VF-LINIENZUG - Modus 2: Pfad + Ziel-Hoehe (fertig; Anker + Solver + Bau)") + (princ (ssg-text "vfl-m3-titel")) (princ "\n=========================================") ;; Abhaengigkeit Gefaellestrecke-Modul (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)) ;; --- 1. Pfad-Objekte waehlen --- - (princ "\n\nPfad-Objekte waehlen (Linien/Boegen):") + (princ (ssg-text "vfl-m3-pfad-waehlen")) (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) (repeat (sslength ss) (setq obj-liste (cons (vlax-ename->vla-object (ssname ss k)) obj-liste)) (setq k (1+ k))) ;; --- 2. Startpunkt + Z + AS-Seite --- - (setq startpunkt (vfl-getpoint nil "\n\nStartpunkt der Kette (hoehere Seite) waehlen: ")) - (if (null startpunkt) (progn (princ "\nAbgebrochen.") (exit))) - (setq start-hoehe (getreal (strcat "\nHoehe (Z) des Startpunkts [" - (rtos (caddr startpunkt) 2 1) "]: "))) + (setq startpunkt (vfl-getpoint nil (ssg-text "vfl-m3-prompt-startpunkt"))) + (if (null startpunkt) (progn (princ (ssg-text "gf-status-abgebrochen")) (exit))) + (setq start-hoehe (getreal (ssg-textf "vfl-prompt-hoehe-startpunkt" + (list (rtos (caddr startpunkt) 2 1))))) (if (null start-hoehe) (setq start-hoehe (caddr startpunkt))) (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 - (princ "\n\nAUS-Element - Seite waehlen:\n 1 - Links\n 2 - Rechts") - (setq as-seite (if (= (getstring "\nIhre Wahl (1/2) [1]: ") "2") "rechts" "links")) + (princ (ssg-text "gf-seite-aus-header")) + (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 ;; --- 3. Endpunkt + Z + ES-Seite (NEU in Modus 3) --- - (setq endpunkt (vfl-getpoint nil "\n\nEndpunkt der Kette (Ziel) waehlen: ")) - (if (null endpunkt) (progn (princ "\nAbgebrochen.") (exit))) - (setq end-hoehe (getreal (strcat "\nZiel-Hoehe (Z) des Endpunkts [" - (rtos (caddr endpunkt) 2 1) "]: "))) + (setq endpunkt (vfl-getpoint nil (ssg-text "vfl-m3-prompt-endpunkt"))) + (if (null endpunkt) (progn (princ (ssg-text "gf-status-abgebrochen")) (exit))) + (setq end-hoehe (getreal (ssg-textf "vfl-m3-prompt-zielhoehe" + (list (rtos (caddr endpunkt) 2 1))))) (if (null end-hoehe) (setq end-hoehe (caddr endpunkt))) (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 - (princ "\n\nEIN-Element (ES) - Seite waehlen:\n 1 - Links\n 2 - Rechts") - (setq es-seite (if (= (getstring "\nIhre Wahl (1/2) [1]: ") "2") "rechts" "links")) + (princ (ssg-text "gf-seite-ein-header")) + (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 ;; --- 4. Sortieren + Analysieren + Eck-Vorpruefung --- (setq kette (gf-sortiere-objekte obj-liste startpunkt)) (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 ecke-bad (vfl2-pruefe-eckwinkel kette 5.0)) (if ecke-bad (progn - (alert (strcat "Kein passender Bogen: Eck-Winkel " (rtos ecke-bad 2 1) - " Grad ist nicht ~30/60/90.\nBitte die Winkel anpassen.")) + (alert (ssg-textf "vfl-m3-alert-eckwinkel" (list (rtos ecke-bad 2 1)))) (exit))) ;; --- 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)) (cond ((= typ "Linie") - (princ (strcat "\n\nSegment " (itoa (1+ i)) "/" (itoa n) - ": Gerade L=" (rtos laenge 2 0) " mm hz=" (rtos hz 2 1))) + (princ (ssg-textf "vfl-m3-seg-gerade" + (list (itoa (1+ i)) (itoa n) (rtos laenge 2 0) (rtos hz 2 1)))) (cond ;; Direkt nach einer Vario-Kurve: automatisch VF (keine Abfrage) - ;; die Kurve sitzt mitten in der VF-Einheit, es MUSS VF folgen. (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 nach-kurve nil)) (t - (princ "\n Typ? 1 = GF (Eingabe-Winkel) 2 = VF (Bruecke)") - (setq antwort (getstring "\nIhre Wahl (1/2) [1]: ")) + (princ (ssg-text "vfl-m3-typ-gerade")) + (setq antwort (getstring (ssg-text "prompt-wahl-1-2"))) (if (= antwort "2") (setq plan (cons (list "Linie" hz laenge "VF" nil) plan)) (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 (> 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))))))) ((= typ "Bogen") (setq bwinkel (nth 3 seg) bseite (nth 4 seg)) - (princ (strcat "\n\nSegment " (itoa (1+ i)) "/" (itoa n) - ": Eck/Bogen " (itoa bwinkel) " Grad " bseite)) - (princ "\n Typ? 1 = GF-Bogen 2 = Vario-Kurve") - (setq antwort (getstring "\nIhre Wahl (1/2) [1]: ")) + (princ (ssg-textf "vfl-m3-seg-bogen" + (list (itoa (1+ i)) (itoa n) (itoa bwinkel) bseite))) + (princ (ssg-text "vfl-m3-typ-bogen")) + (setq antwort (getstring (ssg-text "prompt-wahl-1-2"))) (if (= antwort "2") (progn - (princ "\n Vario-Kurve - Variante? 1 = Aussen 2 = Innen") - (setq kv-variante (if (= (getstring "\nIhre Wahl (1/2) [2]: ") "1") "aussen" "innen")) + (princ (ssg-text "vfl-m3-variante-frage")) + (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 nach-kurve t)) ; naechste Gerade automatisch VF (progn @@ -1905,9 +1908,9 @@ (if (/= vf-count 1) (progn - (princ (strcat "\n\n[M3a] Gefundene VF-Laeufe: " (itoa vf-count))) - (princ "\n[M3a] Genau EIN VF-Lauf noetig (GF...VF...GF; Vario-Kurven duerfen im Lauf liegen).") - (princ "\n[M3a] Mehrere/keine VF-Laeufe -> M3b spaeter.") + (princ (ssg-textf "vfl-m3-vf-laeufe" (list (itoa vf-count)))) + (princ (ssg-text "vfl-m3-vf-lauf-noetig")) + (princ (ssg-text "vfl-m3-vf-lauf-m3b")) (exit))) ;; Traeger-Stueck = laengste VF-Gerade im Lauf (traegt die ganze Hoehe). (setq carrier-idx -1 i vf-start) @@ -1918,7 +1921,7 @@ (setq carrier-idx i))) (setq i (1+ i))) (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 --- ;; Vorwaerts: Start-Z durch alle Front-Segmente (Index < vf-start). @@ -1947,31 +1950,30 @@ ;; --- 8. Anker-Report (noch kein Bauen) --- (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 (strcat "\n Start-Hoehe Z: " (rtos (float start-hoehe) 2 1) " mm")) - (princ (strcat "\n Ziel-Hoehe Z: " (rtos (float end-hoehe) 2 1) " mm")) - (princ (strcat "\n delta-H gesamt: " (rtos dH-gesamt 2 1) " mm (positiv = Abfall)")) - (princ (strcat "\n VF-Lauf: Segment " (itoa (1+ vf-start)) ".." (itoa (1+ vf-ende)))) - (princ (strcat "\n Front-Anker Z: " (rtos z-front 2 1) " mm (vorwaerts von AS)")) - (princ (strcat "\n Junction-Anker Z: " (rtos z-junction 2 1) " mm (rueckwaerts von ES)")) + (princ (ssg-textf "vfl-m3-start-hoehe" (list (rtos (float start-hoehe) 2 1)))) + (princ (ssg-textf "vfl-m3-ziel-hoehe" (list (rtos (float end-hoehe) 2 1)))) + (princ (ssg-textf "vfl-m3-delta-h-gesamt" (list (rtos dH-gesamt 2 1)))) + (princ (ssg-textf "vfl-m3-vf-lauf-segmente" (list (itoa (1+ vf-start)) (itoa (1+ vf-ende))))) + (princ (ssg-textf "vfl-m3-front-anker-vorschau" (list (rtos z-front 2 1)))) + (princ (ssg-textf "vfl-m3-junction-anker-vorschau" (list (rtos z-junction 2 1)))) ;; Vorzeichen = Richtung (VF ist angetrieben, kann steigen UND fallen). - (setq richtn (cond ((< dH-bruecke -0.1) "Auf (steigt)") - ((> dH-bruecke 0.1) "Ab (faellt)") - (t "horizontal"))) + (setq richtn (cond ((< dH-bruecke -0.1) (ssg-text "vfl-m3-richtung-auf")) + ((> dH-bruecke 0.1) (ssg-text "vfl-m3-richtung-ab")) + (t (ssg-text "vfl-m3-richtung-horizontal")))) (setq req-w (if (> span-bruecke 1.0) (* (atan (/ (abs dH-bruecke) span-bruecke)) (/ 180.0 pi)) 0.0)) - (princ (strcat "\n --> Bruecke: delta-H = " (rtos dH-bruecke 2 1) - " mm ueber Spannweite " (rtos span-bruecke 2 0) " mm")) - (princ (strcat "\n Richtung: VF-" richtn)) - (princ "\n (VF ist angetrieben - kann STEIGEN und FALLEN; Vorzeichen = nur Auf/Ab)") - (princ (strcat "\n grobe mittlere Neigung ueber Spannweite: ~" (rtos req-w 2 1) " Grad")) + (princ (ssg-textf "vfl-m3-bruecke-dh" (list (rtos dH-bruecke 2 1) (rtos span-bruecke 2 0)))) + (princ (ssg-textf "vfl-m3-bruecke-richtung" (list richtn))) + (princ (ssg-text "vfl-m3-vf-angetrieben")) + (princ (ssg-textf "vfl-m3-mittlere-neigung" (list (rtos req-w 2 1)))) (if (> req-w 51.0) - (princ "\n WARNUNG: ~Neigung > 51 Grad -> zu steil fuer Vario (Magnitude infeasibel).") - (princ "\n -> innerhalb Vario-Bereich (3..51 Grad), grobe Orientierung.")) + (princ (ssg-text "vfl-m3-warnung-zu-steil")) + (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=========================================") ;; ================= PHASE B: BAUEN (messen statt schaetzen) ================= @@ -1990,7 +1992,7 @@ (setq i (1+ i))) ;; --- 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) (while (< i vf-start) (setq seg (nth i plan) typ (car seg) hz (cadr seg)) @@ -2016,9 +2018,9 @@ (if (= klass "GF-Bogen") (progn (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))) - (princ "\n >>> [M3a] Vario-Kurve im Front-Lauf - uebersprungen.")))) + (princ (ssg-text "vfl-m3-kurve-front-uebersprungen"))))) (setq i (1+ i))) ;; 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 ;; Winkel WAEHLBAR (mehrere gueltige -> Nutzer waehlt). feste = 800 (Umlenk+Sep; ;; Motor sitzt am Kettenende). Die flache Zone gleicht danach die Laenge aus. - (princ "\n\n --- STANDARD-VARIO (Kletter-Segment) + flache Zone ---") - (princ (strcat "\n Front-Anker (gemessen): " (rtos z-front 2 1) " mm")) - (princ (strcat "\n Junction (exakt): " (rtos z-junction 2 1) " mm")) - (princ (strcat "\n Kletterhoehe " (rtos target-climb 2 1) " mm | Kletterer " - (itoa n-climb) " | Kurven " (itoa nkurve) " | kurze VF " (itoa nonclimber-cnt))) + (princ (ssg-text "vfl-m3-standard-vario-header")) + (princ (ssg-textf "vfl-m3-front-anker-gemessen" (list (rtos z-front 2 1)))) + (princ (ssg-textf "vfl-m3-junction-exakt" (list (rtos z-junction 2 1)))) + (princ (ssg-textf "vfl-m3-kletter-info" + (list (rtos target-climb 2 1) (itoa n-climb) (itoa nkurve) (itoa nonclimber-cnt)))) ;; feste-Horizontal + Hoehen-Anpassung fuer den Solver: ;; - Mit flacher Zone: Motor sitzt am Kettenende (nicht im Kletter-Segment) -> ;; feste = 800 (Umlenk+Sep). berechne rechnet Motor-/Uebergangs-Abstieg NICHT, @@ -2083,24 +2085,28 @@ (setq feste-vf 1300.0 dH-adj dH-bruecke)) (setq wahl3 (vfl3-waehle-winkel climber-span dH-adj feste-vf)) (if (null wahl3) - (progn (princ "\n KEIN passender Vario-Winkel -> infeasibel (Front bereits gebaut).") + (progn (princ (ssg-text "vfl-m3-kein-winkel")) (princ) (exit))) (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 ;; 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 ;; 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") - (setq br-gf-mode (if (= (getstring "\n Ihre Wahl (1/2) [1]: ") "2") 2 1)) + (princ (ssg-text "vfl-m3-gf-verteilung")) + (setq br-gf-mode (if (= (getstring (ssg-text "prompt-wahl-1-2")) "2") 2 1)) (if (= br-gf-mode 2) (setq br-gf1 (/ gf-total 2.0) br-gf2-exp (/ gf-total 2.0) 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 filler-a-done nil) - (princ (strcat "\n -> Vario " (itoa br-winkel) " (" br-richtn "), L_VF " (rtos br-lvf 2 0) - " mm, GF gesamt " (rtos gf-total 2 0) " mm, Verteilung " - (if (= br-gf-mode 2) "1/2 GF1 + 1/2 GF2" "alles GF1") - " (GF2-Rest = Mess-Feinkorrektur)")) + (princ (ssg-textf "vfl-m3-vario-ergebnis" + (list (itoa br-winkel) + (if (= br-richtn "Auf") (ssg-text "vfl-m3-richtung-auf-kurz") + (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) --- ;; Die flache Zone (Vario-Kurve + horizontaler Fueller) haengt EINMAL ueber auf_3 @@ -2171,13 +2177,12 @@ (setq gf2-drop (- z-aftermotor z-junction)) (if (< gf2-drop 0.0) (progn - (princ (strcat "\n WARNUNG: Koerper klettert zu wenig - GF2<0 (fehlen " - (rtos (- gf2-drop) 2 1) " mm). Winkel zu flach; dZ nicht exakt.")) + (princ (ssg-textf "vfl-m3-warnung-gf2-negativ" (list (rtos (- gf2-drop) 2 1)))) (setq gf2-drop 0.0))) (setq gf2-planar (/ gf2-drop (/ (sin (* 3.0 (/ pi 180.0))) (cos (* 3.0 (/ pi 180.0)))))) (if (> gf2-planar 0.1) (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)) (vfl-acc-gf-seg (/ gf2-planar (cos (* 3.0 (/ pi 180.0)))) 3)) (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)) (if (= klass "GF-Bogen") (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))) ;; --- 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)) (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) (setq soll-ende endpunkt ist-ende (car frame)) (princ "\n\n=========================================") - (princ "\n>>> VF-Linienzug (Modus 3, M3a) gebaut! <<<") - (princ (strcat "\n Ziel (Soll): X=" (rtos (car soll-ende) 2 1) - " Y=" (rtos (cadr soll-ende) 2 1) " Z=" (rtos (caddr soll-ende) 2 1))) - (princ (strcat "\n ES (Ist): X=" (rtos (car ist-ende) 2 1) - " Y=" (rtos (cadr ist-ende) 2 1) " Z=" (rtos (caddr ist-ende) 2 1))) - (princ (strcat "\n Abweichung: dX=" (rtos (- (car ist-ende) (car soll-ende)) 2 1) - " dY=" (rtos (- (cadr ist-ende) (cadr soll-ende)) 2 1) - " dZ=" (rtos (- (caddr ist-ende) (caddr soll-ende)) 2 1) " mm")) + (princ (ssg-text "vfl-m3-fertig-header")) + (princ (ssg-textf "vfl-m3-ziel-soll" + (list (rtos (car soll-ende) 2 1) (rtos (cadr soll-ende) 2 1) (rtos (caddr soll-ende) 2 1)))) + (princ (ssg-textf "vfl-m3-es-ist" + (list (rtos (car ist-ende) 2 1) (rtos (cadr ist-ende) 2 1) (rtos (caddr ist-ende) 2 1)))) + (princ (ssg-textf "vfl-m3-abweichung" + (list (rtos (- (car ist-ende) (car soll-ende)) 2 1) + (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 ;; ~0 sein (Endpunkt liegt auf der KS_AUS-Achse), Laengs = ES-Ausladung. (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)))) - (princ (strcat "\n Laengs KS_AUS-Achse: " - (rtos (+ (* (- (car ist-ende) (car soll-ende)) dir-x) + (princ (ssg-textf "vfl-m3-laengs-quer" + (list (rtos (+ (* (- (car ist-ende) (car soll-ende)) dir-x) (* (- (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)) - (* (- (cadr ist-ende) (cadr soll-ende)) dir-x)) 2 1) " mm")) - (princ "\n (dZ=Ziel-Hoehe; Quer zur KS_AUS-Achse ~0 => Endpunkt liegt auf der Achse)") + (* (- (cadr ist-ende) (cadr soll-ende)) dir-x)) 2 1)))) + (princ (ssg-text "vfl-m3-achse-hinweis")) (princ "\n=========================================") (princ) ) diff --git a/lang/de_DE.json b/lang/de_DE.json index 5f398c9..7e648e4 100644 --- a/lang/de_DE.json +++ b/lang/de_DE.json @@ -33,6 +33,69 @@ "vfl-soll-xyz": "\n Soll: 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-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-ausruf": "\n FEHLER: Block '%1' fehlt!", "gf-fehler-blockdatei-fehlt": "\n FEHLER: Block-Datei nicht gefunden: %1", diff --git a/lang/en_GB.json b/lang/en_GB.json index 31d8f5c..838b2ee 100644 --- a/lang/en_GB.json +++ b/lang/en_GB.json @@ -33,6 +33,69 @@ "vfl-soll-xyz": "\n Target: 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-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-ausruf": "\n ERROR: block '%1' missing!", "gf-fehler-blockdatei-fehlt": "\n ERROR: block file not found: %1", diff --git a/menu/SSG_LIB.mnu b/menu/SSG_LIB.mnu index 3ffa100..4505271 100644 --- a/menu/SSG_LIB.mnu +++ b/menu/SSG_LIB.mnu @@ -13,9 +13,7 @@ [~BTMT-Entladung]^C^C(ssg-ensure "SSG_LIB_Commands") ILS_BTMT_Entladung [--] [Scanner einfuegen]^C^C(ssg-ensure "SSG_LIB_Commands") ILS_SCANNER_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 +[<-Separator einfuegen]^C^C(ssg-ensure "SSG_LIB_Commands") ILS_SEPARATOR_INSERT [->Foerderer] [~Durch TEF angetriebene Strecke]^C^C(ssg-ensure "SSG_LIB_Commands") ILS_TEF_Strecke [VarioFoerderer]^C^CVarioFoerderer @@ -121,7 +119,7 @@ [<-~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 [->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 [->Konfiguration] [Umschalten 2D und 3D]^C^C(ssg-ensure "SSG_LIB_Commands") SSG_DIM_SWITCH