(defun c:npf(/ sset1 sset2) (defun gg(x y) (setq l (+ (* x x) (* y y))) (setq l (sqrt l)) ) (graphscr) (princ "first object:") (setq s1 (ssget)) (princ "another object:") (setq s2 (ssget)) (setq n1 (sslength s1)) (setq n2 (sslength s2)) (setq n (min n1 n2)) (setq m 0) (while (<= m (- n 1)) (progn (setq ss1 (ssname s1 m)) (setq ss2 (ssname s2 m)) (setq wd1 (cdr (assoc 40 (entget ss1)))) (setq wd2 (cdr (assoc 40 (entget ss2)))) (setq sset1 (entnext ss1)) (setq sset2 (entnext sset1)) (setq sset4 (entnext ss2)) (setq sset5 (entnext sset4)) (setq pt1 (cdr (assoc 10 (entget sset1))) pt2 (cdr (assoc 10 (entget sset2))) pt4 (cdr (assoc 10 (entget sset4))) pt5 (cdr (assoc 10 (entget sset5))) )
(setq pt (inters pt1 pt2 pt4 pt5 nil)) (if (< (distance pt1 pt) (distance pt2 pt)) (entmod (subst (cons 10 pt) (cons 10 pt1) (entget sset1))) (entmod (subst (cons 10 pt) (cons 10 pt2) (entget sset2))) ) (if (< (distance pt4 pt) (distance pt5 pt)) (entmod (subst (cons 10 pt) (cons 10 pt4) (entget sset4))) (entmod (subst (cons 10 pt) (cons 10 pt5) (entget sset5))) )
(if (/= wd1 wd2) (progn (setq lay (cdr (assoc 8 (entget ss1)))) (command "layer" "m" lay "") (if (> wd1 wd2) (progn (if (< (distance pt1 pt) (distance pt2 pt)) (setq ptt pt2) (setq ptt pt1) ) (setq x1 (car pt) y1 (cadr pt) x2 (car ptt) y2 (cadr ptt) ) (setq ll (gg (- y2 y1) (- x2 x1))) (setq r (/ wd1 ll)) (setq x (+ x1 (* r (- x2 x1)))) (setq y (+ y1 (* r (- y2 y1)))) (setq pt3 (list x y 0.0)) (if (< (distance pt1 pt) (distance pt2 pt)) (entmod (subst (cons 10 pt3) (cons 10 pt) (entget sset1))) (entmod (subst (cons 10 pt3) (cons 10 pt) (entget sset2))) ) (command "pline" pt "w" wd2 wd2 pt3 /r) ) (progn (if (< (distance pt4 pt) (distance pt5 pt)) (setq ptt pt5) (setq ptt pt4) ) (setq x1 (car pt) y1 (cadr pt) x2 (car ptt) y2 (cadr ptt) ) (setq ll (gg (- y2 y1) (- x2 x1))) (setq r (/ wd2 ll)) (setq x (+ x1 (* r (- x2 x1)))) (setq y (+ y1 (* r (- y2 y1)))) (setq pt3 (list x y 0.0)) (if (< (distance pt4 pt) (distance pt5 pt)) (entmod (subst (cons 10 pt3) (cons 10 pt) (entget sset4))) (entmod (subst (cons 10 pt3) (cons 10 pt) (entget sset5))) ) (command "pline" pt "w" wd1 wd1 pt3 /r) ) ) ) ) (entupd ss1) (entupd ss2) (setq m (+ m 1)) ) "ok!"
) )
|