Fix der Gefällestrecke: Nimmt auch Fliesskommazahlen für den Winkel an. An Mubea Layout gemerkt. Funktionen zur Einfügung vno Geraden dazu

This commit is contained in:
2026-07-28 11:03:15 +02:00
parent b27744009f
commit ad7a7243ba
4 changed files with 32 additions and 14 deletions
+11 -7
View File
@@ -196,17 +196,17 @@
;; Modus 1, siehe object_data.md 2.1). L_stau wird aus deltaL abgeleitet
;; (identische Formel wie test_gefaellestrecke.lsp):
;; L_stau = (deltaL - aus-dx - ein-dx - sep_x) / cos(v)
;; sep_x = 300 * cos(v), v = fester Element-Winkel 3 Grad
;; sep_x = 300 * cos(v), v = Element-Winkel (winkel_grad, Default 3 Grad)
;; Die Zielhoehe ergibt sich aus L_stau/Winkel (kein Ziel-Hoehen-Parameter).
;; Rueckgabe: Ergebnis-JSON-String.
(defun mubea:build-gf-one (tid start-mm deltaL hz as-seite es-seite as-winkel es-winkel /
(defun mubea:build-gf-one (tid start-mm deltaL hz as-seite es-seite as-winkel es-winkel winkel /
rad sep-x test-L_stau ent)
(mubea:ensure-gf-init)
;; Element-Masse fuer die gewaehlte AS/ES-Variante setzen, damit aus-dx/ein-dx
;; zur Variante (90/30 Grad) passen. Danach wieder auf 90 zuruecksetzen.
(vf-set-as-masse as-winkel as-seite)
(vf-set-es-masse es-winkel es-seite)
(setq rad (* 3.0 (/ pi 180.0)))
(setq rad (* winkel (/ pi 180.0)))
(setq sep-x (* 300.0 (cos rad)))
(setq test-L_stau
(/ (- deltaL (float aus-dx) (float ein-dx) sep-x) (cos rad)))
@@ -214,9 +214,10 @@
(princ (strcat "\n [GF] " tid " -> Start=(" (rtos (car start-mm) 2 0)
"," (rtos (cadr start-mm) 2 0) "," (rtos (caddr start-mm) 2 0)
") hz=" (rtos hz 2 0) " deltaL=" (rtos deltaL 2 0)
" winkel=" (rtos winkel 2 2)
" L_stau=" (rtos test-L_stau 2 1)))
(setq ent (car (gefaellestrecke-einfuegen
test-L_stau 3.0 start-mm as-seite es-seite hz
test-L_stau winkel start-mm as-seite es-seite hz
deltaL as-winkel es-winkel "0" "Schoenenberger Geruest")))
(vf-set-as-masse "90" as-seite)
(vf-set-es-masse "90" es-seite)
@@ -229,10 +230,11 @@
;; (1..anzahl) wird um (i-1)*delta in Y bzw. X versetzt (nur start_mm - es gibt
;; keinen Endpunkt). Fehlen anzahl/delta -> genau eine Strecke am angegebenen Ort.
;; Aus JSON: start_mm, deltaL_mm, hz_grad, as_seite, es_seite, as_winkel,
;; es_winkel, anzahl (Default 1), delta_y (Default 0), delta_x (Default 0).
;; es_winkel, winkel_grad (Default 3.0), anzahl (Default 1), delta_y
;; (Default 0), delta_x (Default 0).
;; Rueckgabe: LISTE von Ergebnis-JSON-Strings (eine je Kopie).
(defun mubea:build-gf (e / tid0 start0 deltaL hz as-seite es-seite as-winkel es-winkel
anzahl dy dx i off nr tid s-mm ergebnisse)
winkel anzahl dy dx i off nr tid s-mm ergebnisse)
(setq tid0 (ssg-val e "test_id")
start0 (mapcar 'float (ssg-val e "start_mm"))
deltaL (float (ssg-val e "deltaL_mm"))
@@ -241,6 +243,7 @@
es-seite (ssg-val e "es_seite")
as-winkel(ssg-val e "as_winkel")
es-winkel(ssg-val e "es_winkel")
winkel (ssg-val e "winkel_grad")
anzahl (ssg-val e "anzahl")
dy (ssg-val e "delta_y")
dx (ssg-val e "delta_x"))
@@ -248,6 +251,7 @@
(if (or (null es-seite) (= es-seite "")) (setq es-seite "links"))
(if (or (null as-winkel) (= as-winkel "")) (setq as-winkel "90"))
(if (or (null es-winkel) (= es-winkel "")) (setq es-winkel "90"))
(setq winkel (if winkel (float winkel) 3.0))
(if (or (null anzahl) (< anzahl 1)) (setq anzahl 1))
(setq dy (if dy (float dy) 0.0))
(setq dx (if dx (float dx) 0.0))
@@ -264,7 +268,7 @@
tid0))
(setq s-mm (list (+ (car start0) (* dx off)) (+ (cadr start0) (* dy off)) (caddr start0)))
(setq ergebnisse
(cons (mubea:build-gf-one tid s-mm deltaL hz as-seite es-seite as-winkel es-winkel)
(cons (mubea:build-gf-one tid s-mm deltaL hz as-seite es-seite as-winkel es-winkel winkel)
ergebnisse))
(setq i (1+ i))
)
+2 -1
View File
@@ -101,6 +101,7 @@
"modus": 1,
"deltaL_mm": 9110,
"hz_grad": 180.0,
"winkel_grad": 2.27,
"start_mm": [9510, 11526, 1941],
"as_seite": "links",
"es_seite": "links",
@@ -108,7 +109,7 @@
"es_winkel": "90",
"anzahl": 20,
"delta_y": -800,
"comment": "Template fuer alle Gefaellestrecken (Modus 1): 'anzahl' identische Kopien, je um 'delta_y' (mm) in Y versetzt (nur start_mm). Erzeugt GF_Mubea_01..GF_Mubea_anzahl. Aufbau ausschliesslich aus Anfangspunkt start_mm und der horizontalen Gesamtlaenge deltaL_mm - KEIN Endpunkt (wie Produktion/gefaellestrecke.dcl Modus 1). Winkel fest 3 Grad, Zielhoehe ergibt sich daraus. start_mm.x/z aus DXF (EE-R Start hoch z=1941); deltaL_mm ~ reale XY-Distanz Start->AE-DS im DXF."
"comment": "Template fuer alle Gefaellestrecken (Modus 1): 'anzahl' identische Kopien, je um 'delta_y' (mm) in Y versetzt (nur start_mm). Erzeugt GF_Mubea_01..GF_Mubea_anzahl. Aufbau ausschliesslich aus Anfangspunkt start_mm und der horizontalen Gesamtlaenge deltaL_mm - KEIN Endpunkt (wie Produktion/gefaellestrecke.dcl Modus 1). winkel_grad steuert den Gefaellewinkel (Default 3.0, falls Feld fehlt), Zielhoehe ergibt sich daraus. start_mm.x/z aus DXF (EE-R Start hoch z=1941); deltaL_mm ~ reale XY-Distanz Start->AE-DS im DXF."
},
{
"comment": "Separator S-LP #1 Y-Abgleich mit Gefaellestrecken (Sep-Y=14158, GF_Mubea_01-Y=11526, diff=2632mm, naechstgelegene Reihe, kein enger Treffer)",