[FIX] Export: Schnittpunkte zwischen Kreiseln werden erkannt und Weichen entsprechend gezählt und als Teil mit Merkmalen im Export befüllt - nur Kreisel mit gleicher Höhe können einen Schnittpunkt für Weiche bilden - Funktion der Weichenzählung manuell aufrufbar; [FIX] Eckrad nun korrekt angelegt und exportiert
This commit is contained in:
+94
-1
@@ -756,6 +756,99 @@
|
||||
)
|
||||
|
||||
|
||||
;; ------------------------------------------------------------
|
||||
;; TESTS: KreiselInsert.lsp - Beruehrpunkte/Weichen (kreisel-bp-*)
|
||||
;; ------------------------------------------------------------
|
||||
;; Element-Record kurz: (typ x y z rot abstand id)
|
||||
(defun tu-bp-el (typ x y z rot abstand id)
|
||||
(kreisel-bp-element typ (list x y) z rot abstand 400.0 id id id)
|
||||
)
|
||||
|
||||
(defun tu-bp-arten (treffer)
|
||||
(mapcar '(lambda (tr) (cdr (assoc "art" tr))) treffer)
|
||||
)
|
||||
|
||||
(defun tu-tests-kreisel-bp ( / _els _erg _ber _kol)
|
||||
(princ "\n[KreiselInsert/Beruehrpunkte]")
|
||||
|
||||
;; Hilfs-Kerne
|
||||
(tu-eqf "kreisel-bp-abstand/attribut" 7715.0 (kreisel-bp-abstand "7715" "KREISEL_1_STANDARD_7715"))
|
||||
(tu-eqf "kreisel-bp-abstand/blockname" 3469.0 (kreisel-bp-abstand nil "KREISEL_3_STANDARD_3469"))
|
||||
(tu-eqf "kreisel-bp-naechste-punkte/kreuz"
|
||||
'((5.0 0.0) (5.0 0.0))
|
||||
(kreisel-bp-naechste-punkte '(0.0 0.0) '(10.0 0.0) '(5.0 -5.0) '(5.0 5.0)))
|
||||
|
||||
;; Die 11 Einfuegungen aus tests/testdata/schnittspunkte_kreisel.dxf
|
||||
(setq _els
|
||||
(list
|
||||
(tu-bp-el "ECKRAD" 22405.42028816571 -4021.762548616969 5000.0 270.0 0.0 "E1")
|
||||
(tu-bp-el "KREISEL" 20971.14247926632 -3221.762548616969 5000.0 0.0 7715.0 "K1")
|
||||
(tu-bp-el "KREISEL" 22503.49142858727 -2821.762548616969 5000.0 90.0 9020.0 "K2")
|
||||
(tu-bp-el "KREISEL" 27253.08134883916 -3621.762548616969 5000.0 270.0 3469.0 "K3")
|
||||
(tu-bp-el "KREISEL" 22503.49142858727 6998.075803812235 5000.0 90.0 4746.0 "K4")
|
||||
(tu-bp-el "KREISEL" 22405.42028816571 -4421.762548616969 5000.0 270.0 6147.0 "K5")
|
||||
(tu-bp-el "KREISEL" 26853.08134883916 -6582.442351476258 5000.0 180.0 3248.0 "K6")
|
||||
(tu-bp-el "KREISEL" 32541.84792939903 -5752.219206460449 2000.0 270.0 9200.0 "K7")
|
||||
(tu-bp-el "KREISEL" 32941.84792939903 -7662.266486416901 2000.0 0.0 3637.0 "K8a")
|
||||
(tu-bp-el "KREISEL" 32941.84792939903 -11185.64734962363 2000.0 0.0 3637.0 "K8b")
|
||||
(tu-bp-el "ECKRAD" 20571.14247926632 -3221.762548616969 5000.0 270.0 0.0 "E1b")))
|
||||
(setq _erg (kreisel-bp-berechnen _els 1.0 1.0)
|
||||
_ber (car _erg)
|
||||
_kol (cadr _erg))
|
||||
(tu-eq "kreisel-bp/dxf-beruehrungen" 10 (length _ber))
|
||||
(tu-eq "kreisel-bp/dxf-kollisionen" 0 (length _kol))
|
||||
(tu-eq "kreisel-bp/dxf-kreis-kreis" 3
|
||||
(length (vl-remove-if-not '(lambda (a) (= a "Kreis/Kreis")) (tu-bp-arten _ber))))
|
||||
(tu-eq "kreisel-bp/dxf-paare"
|
||||
'(("E1" "K1") ("E1" "K5") ("K1" "K2") ("K1" "K3") ("K1" "E1b") ("K2" "K4")
|
||||
("K3" "K6") ("K5" "K6") ("K7" "K8a") ("K7" "K8b"))
|
||||
(mapcar '(lambda (tr) (list (cdr (assoc "id" (cdr (assoc "a" tr))))
|
||||
(cdr (assoc "id" (cdr (assoc "b" tr))))))
|
||||
_ber))
|
||||
;; K2 (AN8) steht auf dem oberen Laufprofil von K1
|
||||
(tu-eqf "kreisel-bp/dxf-punkt-k1-k2"
|
||||
(list 22503.49142858727 -2821.762548616969)
|
||||
(cdr (assoc "p" (nth 2 _ber))))
|
||||
(tu-eq "kreisel-bp/dxf-achse-von-k1-k2" "K2" (cdr (assoc "achse_von" (nth 2 _ber))))
|
||||
|
||||
;; Unterschiedliche Hoehe -> kein Kontakt
|
||||
(tu-eq "kreisel-bp/hoehe"
|
||||
'(nil nil)
|
||||
(kreisel-bp-berechnen (list (tu-bp-el "ECKRAD" 0.0 0.0 0.0 0.0 0.0 "A")
|
||||
(tu-bp-el "ECKRAD" 800.0 0.0 500.0 0.0 0.0 "B"))
|
||||
1.0 1.0))
|
||||
;; Zwei Eckraeder Rad an Rad -> eine Weiche in der Mitte
|
||||
(setq _ber (car (kreisel-bp-berechnen (list (tu-bp-el "ECKRAD" 0.0 0.0 0.0 0.0 0.0 "A")
|
||||
(tu-bp-el "ECKRAD" 800.0 0.0 0.0 0.0 0.0 "B"))
|
||||
1.0 1.0)))
|
||||
(tu-eq "kreisel-bp/eckraeder-art" '("Kreis/Kreis") (tu-bp-arten _ber))
|
||||
(tu-eqf "kreisel-bp/eckraeder-punkt" '(400.0 0.0) (cdr (assoc "p" (car _ber))))
|
||||
;; Spalt groesser als Toleranz -> nichts
|
||||
(tu-eq "kreisel-bp/spalt"
|
||||
'(nil nil)
|
||||
(kreisel-bp-berechnen (list (tu-bp-el "ECKRAD" 0.0 0.0 0.0 0.0 0.0 "A")
|
||||
(tu-bp-el "ECKRAD" 805.0 0.0 0.0 0.0 0.0 "B"))
|
||||
1.0 1.0))
|
||||
;; Laufprofile kreuzen sich -> Kollision, keine Weiche
|
||||
(setq _erg (kreisel-bp-berechnen (list (tu-bp-el "KREISEL" 0.0 0.0 0.0 0.0 2000.0 "A")
|
||||
(tu-bp-el "KREISEL" 1000.0 -1500.0 0.0 90.0 2000.0 "B"))
|
||||
1.0 1.0))
|
||||
(tu-nil "kreisel-bp/kreuzung-keine-weiche" (car _erg))
|
||||
(tu-eq "kreisel-bp/kreuzung-kollision" '("Ueberschneidung") (tu-bp-arten (cadr _erg)))
|
||||
;; Kreisel Seite an Seite (Profile aufeinander) -> Kollision, keine Weiche
|
||||
(setq _erg (kreisel-bp-berechnen (list (tu-bp-el "KREISEL" 0.0 0.0 0.0 0.0 2000.0 "A")
|
||||
(tu-bp-el "KREISEL" 500.0 800.0 0.0 0.0 2000.0 "B"))
|
||||
1.0 1.0))
|
||||
(tu-nil "kreisel-bp/parallel-keine-weiche" (car _erg))
|
||||
(tu-eq "kreisel-bp/parallel-kollision" '("Tangente/Tangente") (tu-bp-arten (cadr _erg)))
|
||||
;; Eckrad an der Flanke eines Kreiselrades -> Weiche (freie Seite)
|
||||
(setq _ber (car (kreisel-bp-berechnen (list (tu-bp-el "KREISEL" 0.0 0.0 0.0 0.0 2000.0 "A")
|
||||
(tu-bp-el "ECKRAD" 400.0 800.0 0.0 0.0 0.0 "B"))
|
||||
1.0 1.0)))
|
||||
(tu-eq "kreisel-bp/flanke-eckrad" 1 (length _ber))
|
||||
)
|
||||
|
||||
|
||||
;; ------------------------------------------------------------
|
||||
;; TESTS: ssg_ks_insert.lsp - Sepliste-Serialisierung
|
||||
;; ------------------------------------------------------------
|
||||
@@ -2046,7 +2139,7 @@
|
||||
|
||||
(foreach fn '("tu-tests-core" "tu-tests-lang" "tu-tests-id" "tu-tests-vfcore"
|
||||
"tu-tests-etage"
|
||||
"tu-tests-export" "tu-tests-hoehen" "tu-tests-gf" "tu-tests-omni" "tu-tests-kreisel"
|
||||
"tu-tests-export" "tu-tests-hoehen" "tu-tests-gf" "tu-tests-omni" "tu-tests-kreisel" "tu-tests-kreisel-bp"
|
||||
"tu-tests-sepliste" "tu-tests-json" "tu-tests-geruest"
|
||||
"tu-tests-sepscan" "tu-tests-vfl-segs" "tu-tests-vfl-abbruch"
|
||||
"tu-tests-werkzeuge")
|
||||
|
||||
Reference in New Issue
Block a user