本帖最后由 mj0000 于 2015-9-30 11:35 编辑
wudechao 发表于 2014-6-3 18:12
你这段代码好象不能修改参照路径更改后的图,比如:原来被参照的文件放在文件根目录下,现在改为子目录下.
改了下代码,支持子目录- ;;;;参照图块路径改为“相对路径” 且 自动重载XREF ---- 支持子目录
- (defun C:Tools-BLK-XrefPathAutoLoad (/ ssg xpath i obj enl elist blkdef path n Sub_Path)
- (setq ssg (ssget "x" '((0 . "insert"))))
- (setq XPath (getvar "dwgprefix")) ;_取得当前文档路径
- (setq i 0)
- (setq n 0)
- (if ssg
- (repeat (sslength ssg)
- (setq obj (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (cdr (assoc 2 (setq enl (entget (ssname ssg i)))))))
- (if (= (vla-get-isxref obj) :vlax-true) ;_判断给定的图块是否为XRef图块
- (progn
- ;;(vla-put-path obj (strcat xpath (vla-get-name obj) ".dwg"));_参照图块路径改为“绝对路径
- (setq elist (entget (tblobjname "block" (cdr (assoc 2 enl))))) ;_获取参照图块的图元表
- (setq blkdef (vlax-ename->vla-object (cdr (assoc 330 elist))))
- (setq path (vla-get-path blkdef)) ;_取得外部参照的路径
- (setq m (vl-string-mismatch XPath path 0 0 t)) ;_前面有多少个相同的字符
- (setq Sub_Path (substr path (1+ m))) ;获取图块参照路径的子串
- (vla-put-path blkdef (strcat ".\" Sub_Path)) ;_参照图块路径改为“相对路径”
- (setq n (1+ n))
- )
- )
- (setq i (1+ i))
- )
- )
- (if (> n 0)
- (progn
- (command "_xref" "r" "*")
- (prompt (strcat "\n总共有 " " (itoa n) " "个参照物体路径改为相对路径."))
- )
- (princ "\n**** 没有外部参照 或 外部参照没有加载 ****")
- )
- (princ)
- )
|