VF-Linienzug Modus 2 (Ziel-Hoehe) fertig , AS/ES 30/90 Grad bei GF und VF waehlbar.
This commit is contained in:
+39
-28
@@ -1001,6 +1001,7 @@
|
||||
ss n i j obj obj-liste kette segmente seg
|
||||
startpunkt endpunkt-ref deltaH grade antwort idx
|
||||
as-seite es-seite as-block es-block
|
||||
gf-as-winkel gf-es-winkel
|
||||
entry-hz exit-hz
|
||||
first-idx last-idx neu-l
|
||||
aktuell-frame nach-aus-pt
|
||||
@@ -1068,22 +1069,27 @@
|
||||
(setq entry-hz (cadr (car segmente)))
|
||||
(setq exit-hz (gf-exit-hz segmente))
|
||||
|
||||
;; Seite fuer AUS-Element (vor Winkelberechnung, da Laengenanpassung davon abhaengt)
|
||||
(princ "\n\nAUS-Element (AS_Element_90_*) - Seite waehlen:")
|
||||
;; AUS-Element: 30/90 (vor Seite), dann Seite (vor Winkelberechnung, da die
|
||||
;; Laengenanpassung von der AS/ES-Masse abhaengt). Masse fuer Variante setzen.
|
||||
(setq gf-as-winkel (vf-frage-element-winkel "AUS-Element"))
|
||||
(princ "\n\nAUS-Element (AS_Element_*) - Seite waehlen:")
|
||||
(princ "\n 1 - Links")
|
||||
(princ "\n 2 - Rechts")
|
||||
(setq antwort (getstring "\nIhre Wahl (1/2) [1]: "))
|
||||
(setq as-seite (if (= antwort "2") "rechts" "links"))
|
||||
(vf-set-as-masse gf-as-winkel as-seite)
|
||||
|
||||
;; Seite fuer EIN-Element
|
||||
(princ "\n\nEIN-Element (ES_Element_90_*) - Seite waehlen:")
|
||||
;; EIN-Element: 30/90 + Seite
|
||||
(setq gf-es-winkel (vf-frage-element-winkel "EIN-Element"))
|
||||
(princ "\n\nEIN-Element (ES_Element_*) - Seite waehlen:")
|
||||
(princ "\n 1 - Links")
|
||||
(princ "\n 2 - Rechts")
|
||||
(setq antwort (getstring "\nIhre Wahl (1/2) [1]: "))
|
||||
(setq es-seite (if (= antwort "2") "rechts" "links"))
|
||||
(vf-set-es-masse gf-es-winkel es-seite)
|
||||
|
||||
(setq as-block (strcat "AS_Element_90_" as-seite))
|
||||
(setq es-block (strcat "ES_Element_90_" es-seite))
|
||||
(setq as-block (strcat "AS_Element_" gf-as-winkel "_" as-seite))
|
||||
(setq es-block (strcat "ES_Element_" gf-es-winkel "_" es-seite))
|
||||
|
||||
;; Segmentlaengen anpassen.
|
||||
;; Die gezeichneten Linien enthalten die Laengen von AUS-/EIN-Element UND Separatoren.
|
||||
@@ -1175,8 +1181,9 @@
|
||||
(while (and (< iter 4) (> (abs (- grade grade-prev)) 0.001))
|
||||
(setq grade-prev grade)
|
||||
(setq rad-v-korr (* grade (/ pi 180.0)))
|
||||
;; AS-Element: KS_EIN zeigt 90 Grad zur Fahrtrichtung
|
||||
(setq ein-hz-as-k (if (= as-seite "rechts") (+ entry-hz 90.0) (- entry-hz 90.0)))
|
||||
;; AS-Element: gemessener Ebenen-Schwenk -> KS_EIN so, dass KS_AUS entlang hz
|
||||
(setq ein-hz-as-k (- entry-hz
|
||||
(vf-element-plan-turn (strcat "AS_Element_" gf-as-winkel "_" as-seite))))
|
||||
(setq rad-h-as-k (* (float ein-hz-as-k) (/ pi 180.0)))
|
||||
(setq xu-as-meas (list (* (cos rad-h-as-k)(cos rad-v-korr))
|
||||
(* (sin rad-h-as-k)(cos rad-v-korr))
|
||||
@@ -1236,11 +1243,10 @@
|
||||
|
||||
;; AUS-Element: KS_EIN so ausrichten, dass KS_AUS in Fahrtrichtung entry-hz zeigt.
|
||||
;; Beweis: KS_AUS.xu = -yu(target-frame). Fuer KS_AUS||entry-hz gilt:
|
||||
;; rechts (Rechtskurve): KS_EIN = entry-hz + 90deg
|
||||
;; links (Linkskurve): KS_EIN = entry-hz - 90deg
|
||||
(setq ein-hz-as (if (= as-seite "rechts")
|
||||
(+ entry-hz 90.0)
|
||||
(- entry-hz 90.0)))
|
||||
;; Gemessener Ebenen-Schwenk des AS-Blocks -> KS_EIN so drehen, dass KS_AUS
|
||||
;; entlang der Fahrtrichtung hz zeigt (ein-hz = hz - plan-turn).
|
||||
(setq ein-hz-as (- entry-hz
|
||||
(vf-element-plan-turn (strcat "AS_Element_" gf-as-winkel "_" as-seite))))
|
||||
(setq rad-h-as (* (float ein-hz-as) (/ pi 180.0)))
|
||||
(setq rad-v-as (* (float grade) (/ pi 180.0)))
|
||||
(setq xu-entry (list (* (cos rad-h-as)(cos rad-v-as))
|
||||
@@ -1530,15 +1536,18 @@
|
||||
|
||||
;; deltaL-total: gesamte Horizontaldistanz (fuer DELTA_L-Attribut)
|
||||
;; hz: Fahrtrichtung in Grad (0=Ost, 90=Nord, 180=West, 270=Sued)
|
||||
(defun gefaellestrecke-einfuegen (L_stau winkel startpunkt as-seite es-seite hz deltaL-total /
|
||||
(defun gefaellestrecke-einfuegen (L_stau winkel startpunkt as-seite es-seite hz deltaL-total
|
||||
as-winkel es-winkel /
|
||||
as-block es-block endpunkt
|
||||
gf-nummer last-ent rad-hz rad-v xu-incl
|
||||
ein-hz rad-ein xu-ein
|
||||
startframe aktuell-frame
|
||||
stau-endpunkt sep-endpunkt sep-frame
|
||||
gf-deltaH L-gf-str nach-aus-pt gf-insert)
|
||||
(setq as-block (strcat "AS_Element_90_" as-seite))
|
||||
(setq es-block (strcat "ES_Element_90_" es-seite))
|
||||
(if (null as-winkel) (setq as-winkel "90"))
|
||||
(if (null es-winkel) (setq es-winkel "90"))
|
||||
(setq as-block (strcat "AS_Element_" as-winkel "_" as-seite))
|
||||
(setq es-block (strcat "ES_Element_" es-winkel "_" es-seite))
|
||||
(if (not *lib-initialized*) (gf-init-bibliothek))
|
||||
|
||||
;; GF-Nummer und Entity-Grenze vor erster Einfuegung
|
||||
@@ -1552,11 +1561,9 @@
|
||||
(* (sin rad-hz)(cos rad-v))
|
||||
(- (sin rad-v))))
|
||||
|
||||
;; KS_EIN-Richtung fuer AS-Element: so dass KS_AUS in Fahrtrichtung hz zeigt.
|
||||
;; Beweis: KS_AUS.xu = -yu (target-frame), yu = links-senkrecht zu xu.
|
||||
;; rechts (Rechtskurve): KS_AUS = KS_EIN - 90deg => KS_EIN = hz + 90deg
|
||||
;; links (Linkskurve): KS_AUS = KS_EIN + 90deg => KS_EIN = hz - 90deg
|
||||
(setq ein-hz (if (= as-seite "rechts") (+ hz 90.0) (- hz 90.0)))
|
||||
;; KS_EIN-Richtung fuer AS-Element: gemessener Ebenen-Schwenk des Blocks, so
|
||||
;; dass KS_AUS in Fahrtrichtung hz zeigt (ein-hz = hz - plan-turn).
|
||||
(setq ein-hz (- hz (vf-element-plan-turn (strcat "AS_Element_" as-winkel "_" as-seite))))
|
||||
(setq rad-ein (* (float ein-hz) (/ pi 180.0)))
|
||||
(setq xu-ein (list (* (cos rad-ein)(cos rad-v))
|
||||
(* (sin rad-ein)(cos rad-v))
|
||||
@@ -1632,7 +1639,7 @@
|
||||
;; ============================================================
|
||||
|
||||
(defun c:GEFAELLESTRECKE ( / antwort eingabe-modus deltaL winkel rad L_stau sep-x
|
||||
as-seite es-seite
|
||||
as-seite es-seite gf-as-winkel gf-es-winkel
|
||||
line-points startpunkt endpunkt differenz
|
||||
deltaX deltaY startpunkt-fuer-einfuegen hz-winkel)
|
||||
|
||||
@@ -1744,21 +1751,25 @@
|
||||
)
|
||||
)
|
||||
|
||||
;; Seite AUS-Element waehlen
|
||||
(princ "\n\nAUS-Element (AS_Element_90_*) - Seite waehlen:")
|
||||
;; AUS-Element: 30/90 (vor Seite) + Seite, dann Masse fuer Variante setzen
|
||||
(setq gf-as-winkel (vf-frage-element-winkel "AUS-Element"))
|
||||
(princ "\n\nAUS-Element (AS_Element_*) - Seite waehlen:")
|
||||
(princ "\n 1 - Links")
|
||||
(princ "\n 2 - Rechts")
|
||||
(setq antwort (getstring "\nIhre Wahl (1/2) [1]: "))
|
||||
(setq as-seite (if (= antwort "2") "rechts" "links"))
|
||||
(vf-set-as-masse gf-as-winkel as-seite)
|
||||
|
||||
;; Seite EIN-Element waehlen
|
||||
(princ "\n\nEIN-Element (ES_Element_90_*) - Seite waehlen:")
|
||||
;; EIN-Element: 30/90 + Seite
|
||||
(setq gf-es-winkel (vf-frage-element-winkel "EIN-Element"))
|
||||
(princ "\n\nEIN-Element (ES_Element_*) - Seite waehlen:")
|
||||
(princ "\n 1 - Links")
|
||||
(princ "\n 2 - Rechts")
|
||||
(setq antwort (getstring "\nIhre Wahl (1/2) [1]: "))
|
||||
(setq es-seite (if (= antwort "2") "rechts" "links"))
|
||||
(vf-set-es-masse gf-es-winkel es-seite)
|
||||
|
||||
;; Laengenberechnung
|
||||
;; Laengenberechnung (aus-dx/ein-dx jetzt fuer die gewaehlte Variante)
|
||||
;; deltaL = aus_dx + L_stau*cos(rad) + sep*cos(rad) + ein_dx
|
||||
(setq sep-x (* (ssg-cfg-or "gefaelle" "separator_breite" 300.0) (cos rad)))
|
||||
(setq L_stau (/ (- deltaL aus-dx ein-dx sep-x) (cos rad)))
|
||||
@@ -1785,7 +1796,7 @@
|
||||
;; Bestaetigung
|
||||
(setq antwort (getstring "\nEinfuegen? (1=Ja / 2=Nein) [1]: "))
|
||||
(if (not (= antwort "2"))
|
||||
(gefaellestrecke-einfuegen L_stau (fix winkel) startpunkt-fuer-einfuegen as-seite es-seite hz-winkel deltaL)
|
||||
(gefaellestrecke-einfuegen L_stau (fix winkel) startpunkt-fuer-einfuegen as-seite es-seite hz-winkel deltaL gf-as-winkel gf-es-winkel)
|
||||
(princ "\nAbgebrochen.")
|
||||
)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user