sixthsixth 发表于 2013-9-29 10:21:25

个人编的,外部参照命令集合

本帖最后由 sixthsixth 于 2013-10-1 18:45 编辑

个人编的,外部参照命令集合,更新了下,现在命令全了

源码如下:
Xref_V2.3.lsp

;Xref 命令:
;Reload/重载      Unload/卸载      Detach/拆离      Bind/绑定

;XFR      重载选定
;XFRA      重载所有
;XFX      卸载选定
;XFXA      卸载所有
;XFD      拆离选定
;XFDA      拆离所有
;XFB      绑定选定
;XFBA      绑定所有

; -------------------- Reload selected reference files ---------------------
; XFR
; --------------------------------------------------------------------------
(Defun C:XFR ( )      ;定義“重载选定参照文件”命令

      (setvar "cmdecho" 0)      ;命令执行过程不回显提示和输入

          (princ "\nSelectobjects on the reference file to be Reloaded:")

          (if (setq SS (ssget))
                  (progn
                              (setq Rnames "")
                              (repeat
                              (setq I (sslength SS))
                              (setq E (ssname SS (setq I (1- I))))
                              (setq ELIST (entget E))
                              (setq Rname (cdr (assoc 2 ELIST))) ;_参照名
                              (command "-xref" "R" Rname)
                              (setq Rnames (strcat Rname ", " Rnames)) ;_strcat 连接成字符串
                              );end repeat
                              (prompt "\nFiles have been Reloaded:")
                              (princ Rnames)
                  );end progn
          );end if
      (princ)
)

(prompt "\n<重载选定参照文件> 命令:XFR------by sixth 2010-11-17")         ;提示如何执行程序



; ------------------- Reload all reference files ---------------------
; XFRA
; --------------------------------------------------------------------
(Defun C:XFRA ( )          ;定義“重新加载所有外部参照”命令
      (setvar "cmdecho" 0)                ;命令执行过程不回显提示和输入
      (command "-xref" "R" "*")
          (princ)
)

(prompt "\n<重新加载所有外部参照> 命令:XFRA------by sixth 2010-10-13")         ;提示如何执行程序



; -------------------- Unload selected reference files ---------------------
; XFX
; --------------------------------------------------------------------------
(Defun C:XFX ( )      ;定義“卸载选定参照文件”命令

      (setvar "cmdecho" 0)      ;命令执行过程不回显提示和输入

          (princ "\nSelectobjects on the reference file to be Unloaded:")

          (if (setq SS (ssget))
                  (progn
                              (setq Rnames "")
                              (repeat
                              (setq I (sslength SS))
                              (setq E (ssname SS (setq I (1- I))))
                              (setq ELIST (entget E))
                              (setq Rname (cdr (assoc 2 ELIST))) ;_参照名
                              (command "-xref" "U" Rname)
                              (setq Rnames (strcat Rname ", " Rnames)) ;_strcat 连接成字符串
                              );end repeat
                              (prompt "\nFiles have been Unloaded:")
                              (princ Rnames)
                  );end progn
          );end if
      (princ)
)

(prompt "\n<卸载选定参照文件> 命令:XFX------by sixth 2010-11-17")         ;提示如何执行程序



; ------------------- Unload all reference files ---------------------
; XFXA
; --------------------------------------------------------------------
(Defun C:XFXA ( )          ;定義“卸载所有外部参照”命令
      (setvar "cmdecho" 0)                ;命令执行过程不回显提示和输入
      (command "-xref" "U" "*")
          (princ)
)

(prompt "\n<卸载所有外部参照> 命令:XFXA------by sixth 2010-10-13")         ;提示如何执行程序




; -------------------- Detach selected reference files ---------------------
; XFD
; --------------------------------------------------------------------------

(Defun C:XFD ( )      ;定義“拆离选定参照文件”命令

      (setvar "cmdecho" 0)      ;命令执行过程不回显提示和输入

          (princ "\nSelectobjects on the reference file to be Detached:")

          (if (setq SS (ssget))
                  (progn
                              (setq Rnames "")
                              (repeat
                              (setq I (sslength SS))
                              (setq E (ssname SS (setq I (1- I))))
                              (setq ELIST (entget E))
                              (setq Rname (cdr (assoc 2 ELIST))) ;_参照名
                              (command "-xref" "Detach" Rname)
                              (setq Rnames (strcat Rname ", " Rnames)) ;_strcat 连接成字符串
                              );end repeat
                              (prompt "\nFiles have been Detached:")
                              (princ Rnames)
                  );end progn
          );end if
      (princ)
)

(prompt "\n<拆离选定参照文件> 命令:XFD------by sixth 2010-11-17")         ;提示如何执行程序




; ------------------- Detach all reference files ---------------------
; XFDA
; --------------------------------------------------------------------
(Defun C:XFDA ( )          ;定義“拆离所有外部参照”命令
      (setvar "cmdecho" 0)                ;命令执行过程不回显提示和输入
      (command "-xref" "Detach" "*")
          (princ)
)

(prompt "\n<拆离所有外部参照> 命令:XFDA------by sixth 2010-10-25")         ;提示如何执行程序




; -------------------- Bind selected reference files ---------------------
; XFB
; --------------------------------------------------------------------------

(Defun C:XFB ( )      ;定義“绑定选定参照文件”命令

      (setvar "cmdecho" 0)      ;命令执行过程不回显提示和输入

          (princ "\nSelectobjects on the reference file to be Binded:")

          (if (setq SS (ssget))
                  (progn
                              (setq Rnames "")
                        (setq oldBT (getvar "BINDTYPE"))
                        (setq BT (if (not BT) oldBT BT))
                        (setq BT_tmp
                              (getstring
                                        (strcat "输入绑定类型[绑定(0)/插入(1)]<" (itoa BT) ">: ")
                              )
                        )
                        (if (null BT_tmp) (setq BT_tmp BT))
                        (setq BT (atoi BT_tmp))
                        (setvar "BINDTYPE" BT)
                              (repeat
                              (setq I (sslength SS))
                              (setq E (ssname SS (setq I (1- I))))
                              (setq ELIST (entget E))
                              (setq Rname (cdr (assoc 2 ELIST))) ;_参照名
                              (command "-xref" "Bind" Rname)
                              (setq Rnames (strcat Rname ", " Rnames)) ;_strcat 连接成字符串
                              );end repeat
                        (setvar "BINDTYPE" oldBT)
                              (prompt "\nFiles have been Binded:")
                              (princ Rnames)
                  );end progn
          );end if
      (princ)
)

(prompt "\n<绑定选定参照文件> 命令:XFB------by sixth 2013-09-29")         ;提示如何执行程序




; ------------------- Bind all reference files ---------------------
; XFBA
; --------------------------------------------------------------------
(Defun C:XFBA ( )          ;定義“绑定所有外部参照”命令
      (setvar "cmdecho" 0)                ;命令执行过程不回显提示和输入
      (setq oldBT (getvar "BINDTYPE"))
      (setq BT (if (not BT) oldBT BT))
      (setq BT_tmp
                (getstring
                        (strcat "输入绑定类型[绑定(0)/插入(1)]<" (itoa BT) ">: ")
                )
      )
      (if (null BT_tmp) (setq BT_tmp BT))
      (setq BT (atoi BT_tmp))
      (setvar "BINDTYPE" BT)
      (command "-xref" "Bind" "*")
      (setvar "BINDTYPE" oldBT)
          (princ)
)

(prompt "\n<绑定所有外部参照> 命令:XFBA------by sixth 2013-09-29")         ;提示如何执行程序


tianyi1230 发表于 2013-9-29 11:36:32

不错,关键是楼主没有共享源码啊,不过也谢谢了,这种插件算是一个类型了

newer 发表于 2013-9-29 11:45:01

谢谢楼主分享。

zhangq_cai1 发表于 2013-9-29 14:12:34

试用一下~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~···

acoff 发表于 2013-9-29 20:47:01

好,谢谢楼主分享。

zytyd 发表于 2013-9-30 01:55:19

很实用,谢谢----------

sixthsixth 发表于 2013-9-30 14:01:04

更新了下,现在命令全了,绑定、载入、卸载、拆离

清风明月10 发表于 2013-10-1 16:54:50

谢谢楼主代码分享!

Free-Lancer 发表于 2013-10-1 18:58:13

提2个小建议
1 ssget 要有过滤,否则点到实体可能出错
2 养成局部变量收集的习惯

sixthsixth 发表于 2013-10-1 19:56:26

Free-Lancer 发表于 2013-10-1 18:58
提2个小建议
1 ssget 要有过滤,否则点到实体可能出错
2 养成局部变量收集的习惯

比较菜,只能写一些很小的类似程序,这还是参考了别人的一些算法,非了半天劲,才加出来最后两个命令,呵呵,不专业,谢谢 Free-Lancer,您要是有空,就稍微修改下,刚好学习下,下次类似的我就知道怎么用了。

Free-Lancer 发表于 2013-10-1 21:11:15

sixthsixth 发表于 2013-10-1 19:56
比较菜,只能写一些很小的类似程序,这还是参考了别人的一些算法,非了半天劲,才加出来最后两个命令,呵 ...

完善了第一个,判断是否为 Xref 用 组码要按位计算,更喜欢 IsXref 判断

;; -------------------- Reload selected reference files ---------------------
;; XFR
;; --------------------------------------------------------------------------
(vl-load-com)
(defun c:xfr (/ ss i e elist rname rnames) ;_定義“重载选定参照文件”命令
(setvar "cmdecho" 0) ;_命令执行过程不回显提示和输入
(princ
    "\nselectobjects on the reference file to be reloaded:"
)
(if (setq ss (ssget '((0 . "insert")))) ;_首先要是块
    (progn
      (setq rnames ""
      i       (sslength ss)
      )
      (repeat i
    (setq e      (ssname ss (setq i (1- i)))
          elist (entget e)
          rname (cdr (assoc 2 elist))
    ) ;_参照名
    (if (= (vla-get-isxref
         (vla-item
         (vla-get-blocks
             (vla-get-activedocument (vlax-get-acad-object))
         )
         rname
         )
         )
         :vlax-true
      ) ;_判断是否为 xref , dxf 在 Blockdef code 70
      (progn
      (command "-xref" "r" rname)
      (setq rnames (strcat rname ", " rnames)) ;_strcat 连接成字符串
      )
    )
      )                  ;end repeat
      (prompt "\nfiles have been reloaded:")
      (princ rnames)
    ) ;_end progn
) ;_end if
(princ)
)
(prompt
"\n<重载选定参照文件> 命令:XFR------by sixth 2010-11-17"
);_提示如何执行程序

lingduwx 发表于 2013-10-6 19:54:51

应该再加个“将块转为外部参照”

friendship12c 发表于 2014-4-11 18:09:18

感谢楼主提供这个,学习中...

sinommw 发表于 2014-10-13 14:13:48

一直在用楼主这个程式,非常方便!

453055586 发表于 2016-9-22 10:53:44

不错的东西,谢谢楼主分享
页: [1] 2
查看完整版本: 个人编的,外部参照命令集合