(defun c:te( / ang bu ent i len lst r ss ss_op tem)
(setq tem '()
ss_op(ssget)
)
(if (>(sslength ss_op)0);判别开口实体是否有组成闭合环
(progn
(setq i 0 lst '() ss '())
(repeat (sslength ss_op)
(setq ent (ssname ss_op i)
i (1+ i)
tem(sam_smel ent);(起点,中点,末点,长度)表
lst (append lst(list(list
(reverse(cdr(reverse(nth 0 tem))))
(reverse(cdr(reverse(nth 2 tem))))
(list(sam_dxf ent 5))))) ;取句柄
)
)
(setq tem '()
ss lst
)
(while ss
(setq r (car ss)
lst ss
bu ss
)
(while r
(setq len r)
(foreach itm lst
(cond
((and(=(last r)(last itm))
(=(length r)(length itm))
)
(setq ss(cdr ss))
);only 1
((equal (nth 0 r)(nth 0 itm) 0.001);头头相连
(setq r(append (list(nth 1 itm)(nth 1 r))(list(nth 2 itm))(cddr r))
ang (member itm ss)
ss(sam_subst_n (-(length ss)(length ang)) nil ss);将第N个表元素换成NIL
ss (vl-remove nil ss)
ang (member itm bu)
bu(sam_subst_n (-(length bu)(length ang)) nil bu)
)
)
((equal (nth 1 r)(nth 1 itm) 0.001);尾尾相连
(setq r(append (list(nth 0 r)(nth 0 itm))(cddr r)(list(nth 2 itm)))
ang (member itm ss)
ss(sam_subst_n (-(length ss)(length ang)) nil ss)
ss (vl-remove nil ss)
ang (member itm bu)
bu(sam_subst_n (-(length bu)(length ang)) nil bu)
)
)
((equal (nth 0 r)(nth 1 itm)0.001);头尾相连
(setq r(append (list(nth 0 itm)(nth 1 r))(list(nth 2 itm))(cddr r))
ang (member itm ss)
ss(sam_subst_n (-(length ss)(length ang)) nil ss)
ss (vl-remove nil ss)
ang (member itm bu)
bu(sam_subst_n (-(length bu)(length ang)) nil bu)
)
)
((equal (nth 1 r)(nth 0 itm)0.001);尾头相连
(setq r(append (list(nth 0 r)(nth 1 itm))(cddr r)(list(nth 2 itm)))
ang (member itm ss)
ss(sam_subst_n (-(length ss)(length ang)) nil ss)
ss (vl-remove nil ss)
ang (member itm bu)
bu(sam_subst_n (-(length bu)(length ang)) nil bu)
)
)
(t (princ))
)
);foreach
(setq lst (vl-remove nil bu))
(if (or(null lst)
(equal (nth 0 r)(nth 1 r)0.001)
(equal len r 0.001)
)
(setq tem(append tem (list r))
r nil
)
)
);wh
(if(=(length ss)1)(setq ss nil))
);while
);progn
);if ;判别开口实体是否有组成闭合环
(princ "\n tem = ") (princ tem);Erase_DV
(getstring "\nPress Enter to continue...");Erase_DV
(setq r 0
tem (cddar tem)
)
(princ "\n tem = ") (princ tem);Erase_DV
(getstring "\nPress Enter to continue...");Erase_DV
(repeat (length tem)
(command "text""mc" (cadr(sam_smel (handent (car(nth r tem))))) 3 0 (itoa(setq r (1+ r))))
)
)