热度 4|||
(defun c:tt (/ E1 E2 N L1 L2 D1 D2 DD1 DD2 PTS1 PTS2 P1 P2 W1 MP1 P3 P4 W2 MP2 CP cmdecho osmode *error*) (defun *error* (s) (setvar 'osmode osmode) (setvar 'cmdecho cmdecho) (princ s) (princ) ) (setq cmdecho (getvar 'cmdecho) osmode (getvar 'osmode) ) (setvar 'osmode 0) (setvar 'cmdecho 0) (if (and (setq e1 (ssget ":S" '((0 . "*line,arc")))) (setq e2 (ssget ":S" '((0 . "*line,arc")))) ) (progn (setq e1 (ssname e1 0) e2 (ssname e2 0) ) (initget 6) (setq n (getint "\n拟合精度<1000>:")) (if (null n) (setq n 1000)) (setq l1 (vlax-curve-getDistAtParam e1 (vlax-curve-getEndParam e1)) l2 (vlax-curve-getDistAtParam e2 (vlax-curve-getEndParam e2)) d1 (/ l1 n) d2 (/ l2 n) dd1 0 dd2 0 pts1 (list (vlax-curve-getStartPoint e1)) pts2 (list (vlax-curve-getStartPoint e2)) ) (repeat (1- n) (setq pts1 (cons (vlax-curve-getpointatdist e1 (setq dd1 (+ dd1 d1))) pts1) pts2 (cons (vlax-curve-getpointatdist e2 (setq dd2 (+ dd2 d2))) pts2) ) ) (setq pts1 (reverse (cons (vlax-curve-getendpoint e1) pts1)) pts2 (reverse (cons (vlax-curve-getendpoint e2) pts2)) ) (if (inters (car pts1) (car pts2) (last pts1) (last pts2)) (setq pts2 (reverse pts2)) ) (setq p1 (car pts1) p2 (car pts2) pts1 (cdr pts1) pts2 (cdr pts2) w1 (distance p1 p2) mp1 (mapcar '* (mapcar '+ p1 p2) '(0.5 0.5 0.5)) ) (command "_pline" mp1) (repeat n (setq p3 (car pts1) p4 (car pts2) pts1 (cdr pts1) pts2 (cdr pts2) w2 (distance p3 p4) mp2 (mapcar '* (mapcar '+ p3 p4) '(0.5 0.5 0.5)) cp (inters p1 p4 p2 p3) ) (command "w" w1 w2 mp2 ) (setq p1 p3 p2 p4 w1 w2 mp1 mp2) ) (command "") ) ) (setvar 'osmode osmode) (setvar 'cmdecho cmdecho) )