(defun c:tt (/ a b ename i len lst pts ss dx1)
(setq ss (ssget '((0 . "LINE"))))
(setq i 0)
(setq len (sslength ss))
(repeat len
(setq pts nil)
(setq ename (ssname ss i))
(setq a (cdr (assoc 10 (entget ename))))
(setq b (cdr (assoc 11 (entget ename))))
(setq pts (cons a pts))
(setq pts (cons b pts))
(get-zxssjd ss ename);找出交点
(if(< i (/ len 2))
(setq lst (vl-sort pts (function (lambda (e1 e2)(< (car e1) (car e2))))))
(setq lst (vl-sort pts (function (lambda (e1 e2)(< (cadr e1) (cadr e2))))))
);排序
(chzx lst);重画直线
(setq i (+ i 1))
)
(command "erase" ss "");删除原有直线
(princ)
)
;ss 选择集 , dx1 指定直线
;输出 pts 交点点表
(defun get-zxssjd (ss dx1 / dx2 jd i L)
(setq a (cdr (assoc 10 (entget dx1))))
(setq b (cdr (assoc 11 (entget dx1))))
(setq i (sslength ss))
(setq L 0)
(repeat i
(setq dx2 (ssname ss L));设置 dx2
(setq jd (vlax-invoke (vlax-ename->vla-object dx2) 'IntersectWith (vlax-ename->vla-object dx1) acExtendNone))
(if (and(not (null jd))(not (member jd pts)))
(setq pts (cons jd pts))
);有点对象没有交点,当有交点时把交点加入到点表
(if (not (member a pts))(setq pts (cons a pts)))
(if (not (member b pts))(setq pts (cons b pts)))
(setq L (+ L 1))
)
)
;重画直线
(defun chzx (lst / a b i l)
(setq i 0 )
(repeat (/(length lst)2)
(setq l (+ i 1))
(setq a (nth i lst))
(setq b (nth l lst))
(entmake (list '(0 . "LINE") (cons 10 a) (cons 11 b)(cons 62 1)))
(setq i ( + i 2))
)
)