本帖最后由 阿然 于 2013-1-2 10:27 编辑
 - (vl-load-com)
- (defun c:tt (/ ent ss sstemp el elst txtlst inptlst distlst i)
- (if (and (setq ent (car (entsel "\n选择多义线:")))
- (setq elst (entget ent))
- (equal (cdr (assoc 0 elst)) "LWPOLYLINE")
- )
- (progn
- (setq ss (ssadd ent))
- (foreach el elst
- (if (equal (car el) 10)
- (progn
- (setq
- sstemp (ssget "C" (cdr el) (cdr el) '((0 . "INSERT")))
- )
- (setq ss (xr:appendss ss sstemp))
- (setq sstemp nil)
- )
- )
- )
- (setq i (1- (sslength ss)))
- (setq sstemp (ssget "X" '((0 . "TEXT"))))
- (setq txtlst (Xr:ss->lst sstemp))
- (setq inptlst (mapcar '(lambda (x) (Xr:getobjdxf x 10)) txtlst))
- (setq
- distlst (mapcar
- '(lambda (x)
- (distance x (vlax-curve-getClosestPointTo ent x))
- )
- inptlst
- )
- )
- (setq txtlst (mapcar 'cons distlst txtlst))
- (setq txtlst
- (vl-sort txtlst '(lambda (e1 e2) (< (car e1) (car e2))))
- )
- (repeat i
- (ssadd (cdr (nth (setq i (1- i)) txtlst)) ss)
- )
- (command "_.copybase" '(0 0 0) ss "")
- (command "_.erase" "all" "")
- (command "_.Pasteclip" '(0 0 0))
- (setq ss nil
- sstemp nil)
- )
- )
- (princ)
- )
- (defun Xr:getobjdxf (obj code / result elist)
- (setq elist (entget obj))
- (setq result (cdr (assoc code elist)))
- )
- (defun Xr:ss->lst (ss / i l)
- (if ss
- (repeat (setq i (sslength ss))
- (setq
- l (cons (ssname ss (setq i (1- i)))
- l
- )
- )
- )
- )
- )
- (defun Xr:appendss (ss1 ss2 / i)
- (if (and ss1
- ss2
- )
- (progn
- (setq i -1)
- (repeat (sslength ss2)
- (ssadd (ssname ss2 (setq i (1+ i))) ss1)
- )
- )
- ss1
- )
- )
试了一下,不知道能不能用,使用上有点限制:每个图块必须对应一个编号
如果有的图块没有对应的编号,会得不到想要的结果
|