Varioförderer Masse geändert
This commit is contained in:
+50
-35
@@ -100,55 +100,70 @@
|
||||
)
|
||||
|
||||
|
||||
;; --- Vario (VF_*): deltaL/L_VF fuer winkel+deltaH loesen, dann bauen ---
|
||||
(defun mubea:build-vario (e / tid richtung deltaH winkel gf1 gf2 gf-ziel seite hz
|
||||
startpunkt dlA dlB it1 it2 lgfA lgfB steig dL item L_VF
|
||||
hoehe-bis lastEnt ent)
|
||||
(setq tid (ssg-val e "test_id")
|
||||
richtung (ssg-val e "richtung")
|
||||
deltaH (float (ssg-val e "deltaH"))
|
||||
winkel (fix (ssg-val e "winkel"))
|
||||
gf1 (float (ssg-val e "L_GF1"))
|
||||
gf2 (float (ssg-val e "L_GF2"))
|
||||
seite (ssg-val e "seite")
|
||||
hz (ssg-val e "hz")
|
||||
;; --- Vario (VF_*): L_GF/L_VF fuer gegebenes deltaL+deltaH+winkel loesen, dann bauen ---
|
||||
;; deltaL ist (wie bei der Gefaellestrecke) die horizontale PROJIZIERTE
|
||||
;; Gesamtlaenge des VF (Vorlauf L_GF1 + Foerderer L_VF + Nachlauf L_GF2 +
|
||||
;; Boegen/AS-ES-Elemente), analog foerderer_tests.json/object_data.md 3.1 -
|
||||
;; KEIN abgeleiteter Wert. "winkel" erzwingt einen bestimmten Bogenwinkel aus
|
||||
;; der Kandidatenliste von berechne-alle-winkel (wie foerderer:winkel-
|
||||
;; erzwingen in test_foerderer.lsp), statt den automatisch kleinsten
|
||||
;; gueltigen Winkel zu nehmen. L_GF1 aus JSON ist der Vorlauf-Zielwert;
|
||||
;; L_GF2 (Nachlauf) ist der Rest (L_GF_gesamt - L_GF1).
|
||||
(defun mubea:build-vario (e / tid richtung deltaH deltaL winkel-soll gf1-ziel seite hz
|
||||
startpunkt ergebnis winkel-treffer best-winkel L_GF L_VF
|
||||
gf1 gf2 hoehe-bis lastEnt ent)
|
||||
(setq tid (ssg-val e "test_id")
|
||||
richtung (ssg-val e "richtung")
|
||||
deltaL (float (ssg-val e "deltaL"))
|
||||
deltaH (float (ssg-val e "deltaH"))
|
||||
winkel-soll(ssg-val e "winkel")
|
||||
gf1-ziel (float (ssg-val e "L_GF1"))
|
||||
seite (ssg-val e "seite")
|
||||
hz (ssg-val e "hz")
|
||||
startpunkt (list (float (ssg-val e "x")) (float (ssg-val e "y")) (float (ssg-val e "z"))))
|
||||
(if (or (null seite) (= seite "")) (setq seite "links"))
|
||||
(if (null hz) (setq hz 0.0) (setq hz (float hz)))
|
||||
(setq gf-ziel (+ gf1 gf2))
|
||||
(princ (strcat "\n [VARIO] " tid " -> Winkel=" (itoa winkel)
|
||||
" deltaH=" (rtos deltaH 2 0) " L_GF1=" (rtos gf1 2 0)
|
||||
" L_GF2=" (rtos gf2 2 0)))
|
||||
(princ (strcat "\n [VARIO] " tid " -> deltaL=" (rtos deltaL 2 0)
|
||||
" deltaH=" (rtos deltaH 2 0)
|
||||
" Winkel(soll)=" (if winkel-soll (itoa (fix winkel-soll)) "auto")
|
||||
" L_GF1-Ziel=" (rtos gf1-ziel 2 0)))
|
||||
|
||||
;; L_GF ist linear in deltaL -> deltaL aus zwei Stuetzstellen interpolieren,
|
||||
;; sodass L_GF gesamt = gf-ziel am gewaehlten Winkel.
|
||||
(setq dlA 5000.0 dlB 10000.0)
|
||||
(setq it1 (car (vl-remove-if-not '(lambda (a) (= (car a) winkel))
|
||||
(cadddr (berechne-alle-winkel dlA deltaH richtung nil)))))
|
||||
(setq it2 (car (vl-remove-if-not '(lambda (a) (= (car a) winkel))
|
||||
(cadddr (berechne-alle-winkel dlB deltaH richtung nil)))))
|
||||
(if (and it1 it2 (numberp (cadr it1)) (numberp (cadr it2))
|
||||
(/= (cadr it1) (cadr it2)))
|
||||
(setq ergebnis (berechne-alle-winkel deltaL deltaH richtung nil))
|
||||
(setq best-winkel (car ergebnis) L_GF (cadr ergebnis) L_VF (caddr ergebnis))
|
||||
(if (numberp winkel-soll)
|
||||
(progn
|
||||
(setq lgfA (cadr it1) lgfB (cadr it2))
|
||||
(setq steig (/ (- lgfB lgfA) (- dlB dlA)))
|
||||
(setq dL (+ dlA (/ (- gf-ziel lgfA) steig)))
|
||||
(setq item (car (vl-remove-if-not '(lambda (a) (= (car a) winkel))
|
||||
(cadddr (berechne-alle-winkel dL deltaH richtung nil)))))
|
||||
(setq L_VF (caddr item))
|
||||
(princ (strcat " -> deltaL=" (rtos dL 2 1) " L_VF=" (rtos L_VF 2 1)))
|
||||
(setq winkel-treffer
|
||||
(car (vl-remove-if-not '(lambda (a) (= (car a) (fix winkel-soll)))
|
||||
(cadddr ergebnis))))
|
||||
(if (and winkel-treffer (cadddr winkel-treffer)
|
||||
(numberp (cadr winkel-treffer)) (numberp (caddr winkel-treffer))
|
||||
(> (cadr winkel-treffer) 0) (> (caddr winkel-treffer) 0))
|
||||
(setq best-winkel (car winkel-treffer)
|
||||
L_GF (cadr winkel-treffer)
|
||||
L_VF (caddr winkel-treffer))
|
||||
(setq best-winkel nil L_GF nil L_VF nil))))
|
||||
|
||||
(if (and best-winkel L_GF L_VF (> L_GF 0) (> L_VF 0))
|
||||
(progn
|
||||
(setq gf1 (min gf1-ziel L_GF))
|
||||
(setq gf2 (max 0.0 (- L_GF gf1)))
|
||||
(princ (strcat " -> Winkel=" (itoa best-winkel) " L_GF=" (rtos L_GF 2 1)
|
||||
" L_VF=" (rtos L_VF 2 1) " L_GF1=" (rtos gf1 2 1)
|
||||
" L_GF2=" (rtos gf2 2 1)))
|
||||
|
||||
(setq hoehe-bis (if (= richtung "Auf") deltaH (- deltaH)))
|
||||
(setq lastEnt (vf-lastent-ohne-attribute))
|
||||
(variofoerderer-einfuegen dL deltaH richtung winkel gf1 gf2 L_VF startpunkt seite hz)
|
||||
(variofoerderer-einfuegen deltaL deltaH richtung best-winkel gf1 gf2 L_VF startpunkt seite hz)
|
||||
(setq ent (vf-block-erstellen "standard" seite 1 0 0 hoehe-bis
|
||||
deltaH dL L_VF gf1 gf2 richtung winkel
|
||||
deltaH deltaL L_VF gf1 gf2 richtung best-winkel
|
||||
startpunkt lastEnt hz "0" "Schoenenberger Geruest"))
|
||||
(if (or (null ent) (/= (type ent) 'ENAME))
|
||||
(setq ent (mubea:last-insert-prefix "VF_")))
|
||||
(mubea:ent-json tid "vario" ent))
|
||||
(progn
|
||||
(princ (strcat "\n FEHLER: Winkel " (itoa winkel) " nicht loesbar (kein gueltiges L_GF)."))
|
||||
(princ (strcat "\n FEHLER: deltaL=" (rtos deltaL 2 0)
|
||||
" bei Winkel " (if winkel-soll (rtos winkel-soll 2 0) "auto")
|
||||
" nicht loesbar (kein gueltiges L_GF/L_VF)."))
|
||||
(mubea:result-json tid "vario" "failed" nil nil nil nil)))
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user