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:
@@ -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))
|
||||
)
|
||||
|
||||
+24
-15
@@ -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)))))
|
||||
|
||||
+4
-4
@@ -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)
|
||||
)
|
||||
|
||||
+94
-89
@@ -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)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user