你贴的代码我很熟悉!
无论如何,试试这个动态的;
- (defun c:xchx (/ doc ss i sn e l)
- (setq doc (vla-get-activedocument (vlax-get-acad-object)))
- (vlax-for xr (vla-get-blocks doc)
- (if (eq :vlax-true (vla-get-isxref xr))
- (setq l (cons (strcat "," (vla-get-name xr)) l))
- )
- )
- (if (not (tblsearch "LAYER" "x-ref"))
- (entmake (list '(0 . "LAYER")
- '(100 . "AcDbSymbolTableRecord")
- '(100 . "AcDbLayerTableRecord")
- (cons 2 "x-ref")
- '(70 . 0)))
- )
- (if (and l (setq ss (ssget "_X" (list '(0 . "INSERT") (cons 2 (substr (apply 'strcat l) 2))))))
- (repeat
- (setq i (sslength ss))
- (if (vlax-write-enabled-p (vlax-ename->vla-object (setq sn (ssname ss (setq i (1- i))))))
- (entmod
- (subst '(8 . "x-ref") (assoc 8 (setq e (entget sn))) e))
- )
- )
- )
- (princ)
- )(vl-load-com)
|