diff --git a/Lisp/KreiselInsert.lsp b/Lisp/KreiselInsert.lsp index e395975..08f8673 100644 --- a/Lisp/KreiselInsert.lsp +++ b/Lisp/KreiselInsert.lsp @@ -71,13 +71,12 @@ (+ (cadr lstart) (* tval dy))) ) -;; Linien-Endpunkte aus LINE-Entity lesen. Rueckgabe: ((sx sy) (ex ey)) +;; Linien-Endpunkte aus LINE-Entity lesen. Rueckgabe: ((sx sy sz) (ex ey ez)) (defun kreisel-get-line-pts (ent / ed p10 p11) (setq ed (entget ent)) (setq p10 (cdr (assoc 10 ed)) p11 (cdr (assoc 11 ed))) - (list (list (car p10) (cadr p10)) - (list (car p11) (cadr p11))) + (list p10 p11) ) ;; Pruefen ob zwei Richtungsvektoren parallel sind @@ -180,10 +179,12 @@ ;; --- Block erzeugen (Entities werden aus Zeichnung entfernt) --- (setq bname (strcat "KR_" (ssg-make-blockname - (list (car basePoint) (cadr basePoint) 0.0)))) + (list (car basePoint) (cadr basePoint) + (if (caddr basePoint) (caddr basePoint) 0.0))))) (command "_.-BLOCK" bname (list 0.0 0.0 0.0) ss "") ;; --- Block am Zielpunkt einfuegen (ohne Attribut-Dialog) --- + ;; basePoint kann 2D oder 3D sein; INSERT uebernimmt die Z-Koordinate (setq oldAttreq (getvar "ATTREQ")) (setq oldAttdia (getvar "ATTDIA")) (setvar "ATTREQ" 0) @@ -260,6 +261,7 @@ lpts1 lpts2 s1 e1 s2 e2 dir1 dir2 snap1 foot dx dy dist abstand rotation typ + z1s z1e z2s z2e zCoord zTol ok msg) (ssg-start "Kreisel Smart Connect" '(("OSMODE") ("CECOLOR"))) @@ -314,6 +316,26 @@ (if (not (kreisel-parallel-p dir1 dir2)) (setq ok nil msg "Linien sind nicht parallel!") ) + + ;; Z-Koordinaten pruefen (alle 4 Endpunkte muessen gleiche Hoehe haben) + (if ok + (progn + (setq z1s (caddr s1) z1e (caddr e1) + z2s (caddr s2) z2e (caddr e2)) + ;; Fehlende Z-Werte als 0 behandeln + (if (null z1s) (setq z1s 0.0)) + (if (null z1e) (setq z1e 0.0)) + (if (null z2s) (setq z2s 0.0)) + (if (null z2e) (setq z2e 0.0)) + (setq zTol 0.1) + (if (or (> (abs (- z1s z1e)) zTol) + (> (abs (- z2s z2e)) zTol) + (> (abs (- z1s z2s)) zTol)) + (setq ok nil msg "Start und Ziel auf ungleicher Hoehe!") + (setq zCoord z1s) + ) + ) + ) ) ) @@ -353,8 +375,9 @@ " Rotation: " (rtos rotation 2 1) " Grad" " Kreiselart: " typ)) - ;; Modul als Compound-Block einfuegen - (draw-module snap1 abstand rotation + ;; Modul als Compound-Block einfuegen (mit Z-Koordinate) + (draw-module (list (car snap1) (cadr snap1) zCoord) + abstand rotation (list (cons "KREISELART" typ))) (princ "\nKreisel Connect erfolgreich!") diff --git a/menu/SSG_LIB.mnu b/menu/SSG_LIB.mnu index b357d91..30cafe9 100644 --- a/menu/SSG_LIB.mnu +++ b/menu/SSG_LIB.mnu @@ -4,7 +4,8 @@ [SSG_LIB] [->ILS] [->Kreisel-Module] -[Kreisel]^C^CKreiselInsert +[Einfuegen]^C^CKreiselInsert +[Verbinden]^C^CKreiselConnect [<-Eckrad]^C^CILS_Eckrad [->Zusatzmodul] [BTMT-Beladung]^C^CILS_BTMT_Beladung