For multi method , you can use it like trim command .
;;multi method
(defun c:tt (/ mytrim_entsel err oce e el ell ps ss s se a b p1 p2 p3 p4 p10 p11)
;;trim and add new line for trim-space
;; by GSLS(SS) 2012-2-9
(defun *error* (msg)
(command)
(command)
(if (or (= msg "Function cancelled")
(= msg "quit / exit abort")
)
(princ msg)
(princ (strcat "\n错误: " msg))
)
(setvar "cmdecho" oce)
(setq *error* err)
)
(defun dxf (a l)
(cdr (assoc a l))
)
(defun mindis-pt (l pt)
(car
(vl-sort l
(function (lambda (e1 e2)
(< (distance pt e1) (distance pt e2))
)
)
)
)
)
(defun ss-get-d (pt p1 p2)
(car (trans (mapcar (function -) pt p2)
0
(mapcar (function -) p1 p2)
)
)
)
(defun vlex-ex2con (pts)
(mapcar (function (lambda (x)
(trans x 0 0)
)
)
(list (car pts)
(list (caadr pts) (cadar pts))
(cadr pts)
(list (caar pts) (cadadr pts))
)
)
)
(defun mytrim_entsel
(STR FILTER / PT en SS om is)
(setq om (getvar "MODEMACRO"))
(if (/= (type STR) (quote STR))
(princ "\n变量类型不对,STR应为字符串。\n")
(progn
(if (/= (type FILTER) (quote list))
(princ "\n变量类型不对,FILTER应为表。\n")
(progn
(princ STR)
(setvar "MODEMACRO" STR) ;_这里添加选择修改
(setq PT (grread t 4 2)
IS t
)
(while (and (/= 3 (car PT))
(/= 11 (car PT))
(/= 25 (car pt))
IS
)
(cond
((and (= 2 (car pt))
(or (= 13 (cadr pt)) (= 32 (cadr pt)))
) ;_Enter,Space.
(setq IS nil)
)
((and (= 5 (car PT)) (vl-consp (cadr PT)))
(setq SS (ssget (cadr PT) FILTER))
(if en
(redraw en 4)
)
(setq en NIL)
(if SS
(progn
(setq en (ssname SS 0))
(redraw en 3)
)
(setvar "MODEMACRO" om)
)
)
) ;_cond
(setq PT (grread t 4 2))
) ;_while
(setvar "MODEMACRO" om)
(if (and (/= 11 (car pt)) (/= 25 (car pt)))
(progn
(setq PT (cadr PT))
(setq SS (ssget PT FILTER))
(setvar "LASTPOINT" PT)
(if en
(redraw en 4)
)
(setq en NIL)
(if SS
(progn
(setq en (ssname SS 0))
(list en (trans PT 1 0))
)
(list nil (trans PT 1 0))
)
)
(if en
(redraw en 4)
)
)
)
)
)
)
)
(setq oce (getvar "CMDECHO")
err *error*
e (entlast)
)
(setvar "CMDECHO" 0)
(prompt "Trim and Connect rutine ...")
(command "Trim" "")
(while
(or
(and (setq
pt (mytrim_entsel "\nSelect a line or Select Corner 1st point :"
'((0 . "LINE"))
)
)
(car pt)
)
(and (setq p1 (cadr pt))
(not(setq pt nil))
(setq p2 (getcorner p1 "\nSelect Corner 2nd point :"))
)
)
(if pt
(progn
(command pt)
(if (not (eq e (entlast)))
(progn
(setq e (entlast)
a (entget (car pt))
b (entget e)
p1 (dxf 10 a)
p2 (dxf 11 a)
p3 (dxf 10 b)
p4 (dxf 11 b)
p11 (mindis-pt (list p3 p4) p1)
p10 (mindis-pt (list p1 p2) p3)
)
(entmake
(list (cons 0 "LINE")
(cons 10 p10)
(cons 11 p11)
(cons 6 "DASHED") ;_LineType must be loaded
(cons 62 251)
)
)
)
)
)
(if (if (setq ps (vlex-ex2con (list p1 p2)))
(setq ss (ssget "CP" ps '((0 . "LINE"))))
(setq ss (ssget "_F" p1 p2 '((0 . "LINE"))))
)
(progn
(if (> (atoi (substr (ver) 13)) 2005)
(command "C" p1 p2)
(command "F" p1 p2)
)
(while (setq e (entnext e))
(if (= (dxf 0 (entget e)) "LINE")
(setq el (cons e el))
)
)
(setq e (entlast))
(if el
(progn
(setq el (reverse el)
i -1
)
(while (setq s (ssname ss (setq i (1+ i))))
(setq is T
ell el
se (entget s)
p1 (dxf 10 se)
p2 (dxf 11 se)
)
(while (and is ell)
(setq a (car ell)
b (entget a)
ell (cdr ell)
p3 (dxf 10 b)
p4 (dxf 11 b)
)
(if (and (equal (ss-get-d p3 p1 p2)
0
1e-3
)
(equal (ss-get-d p4 p1 p2)
0
1e-3
)
)
(progn
(setq is nil
p11 (mindis-pt (list p3 p4) p1)
p10 (mindis-pt (list p1 p2) p3)
el (vl-remove a el)
)
(entmake
(list (cons 0 "LINE")
(cons 10 p10)
(cons 11 p11)
(cons 6 "DASHED") ;_LineType must be loaded
(cons 62 251)
)
)
)
)
)
)
)
)
)
(princ "\nNot Lines Selected , Please Select again :")
)
)
)
(command "")
(setvar "CMDECHO" oce)
(setq *error* err)
(princ)
)