; schließt winzige Lücken zwischen benachbarten Linien auf sichtbaren Layern. ; Programm von Paul Lenz 2014 ; (defun c:closegaps ( / ) (setq as (ssget "X" '((0 . "LINE"))) ls (sslength as) vl nil li (tblnext "layer" T) ) (while (/= li nil) (if (AND (= (cdr (assoc 70 li)) 0) (> (cdr (assoc 62 li)) 0)) (setq vl (cons (cdr (assoc 2 li)) vl)) ; alle sichtbaren Layer ) (setq li (tblnext "layer")) ) (while (> ls 0) (setq ls (1- ls) ob (ssname as ls) ly (cdr (assoc 8 (entget ob))) kk 0 ) (foreach li vl (if (= li ly) (setq kk 1)) ; liegt auf sichtbarem Layer ) (if (= kk 0) (setq as (ssdel ob as))) ) (setq ls (sslength as) ct 0 m0 99.9 m1 0.0 ) (while (> ls 0) (setq ls (1- ls) ob (ssname as ls) li (entget ob) p1 (cdr (assoc 10 li)) p2 (cdr (assoc 11 li)) k1 nil k2 nil kk 0 lv ls ) (while (> lv 0) (setq lv (1- lv) vo (ssname as lv) vl (entget vo) v1 (cdr (assoc 10 vl)) v2 (cdr (assoc 11 vl)) d11 (distance p1 v1) d21 (distance p2 v1) d12 (distance p1 v2) d22 (distance p2 v2) ) (if (and (> d11 0.0) (< d11 0.001)) (setq k1 v1 kk 1 dv d11)) (if (and (> d21 0.0) (< d21 0.001)) (setq k2 v1 kk 1 dv d21)) (if (and (> d12 0.0) (< d12 0.001)) (setq k1 v2 kk 1 dv d12)) (if (and (> d22 0.0) (< d22 0.001)) (setq k2 v2 kk 1 dv d22)) ) (if (> kk 0) (progn (if (/= k1 nil) (setq li (subst (cons 10 k1) (assoc 10 li) li))) (if (/= k2 nil) (setq li (subst (cons 11 k2) (assoc 11 li) li))) (entmod li) (entupd ob) (if (> dv m1) (setq m1 dv)) (if (< dv m0) (setq m0 dv)) (setq ct (1+ ct)) ) ) ) (princ "\n") (princ ct) (princ " Endpunkte korrigiert. Min. Abstand=") (princ m0) (princ " Max. Abstand=") (princ m1) (princ) )