外部参照命令(全)加载、卸载、拆离、绑定[源码]
本帖最后由 sixth 于 2013-9-30 08:35 编辑看到有人要点击某个参照卸载的命令,正好我这有自己编写的几个小程序,很小很小,但用的时候还是觉得比较方便的。
就是有个别文件不能加载或者找不到源位置时,加载所有参照命令是不能加载全部参照的,这样这个命令会受这些文件影响,连带着个别其它手动能加载的也自动加载不起来,还请高手帮忙解决一下。
昨天又费了一翻心思,把绑定加进来了,费心思主要是水平有限,程序到是不难,呵呵
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") ;提示如何执行程序
楼主的绑定有点小问题,我修改后发上去:
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 "\n选定要重新载入的参照文件:")
(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 "\n已经重载的文件为:")
(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 "\n选择要卸载的外部参照对象:")
(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 "\n已卸载的外部参照文件是:")
(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 "\n选择要拆离的外部参照对象:")
(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 "\n已拆离的外部参照文件为:")
(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 "\n选择要绑定的外部参照对象:")
(if (setq SS (ssget))
(progn
(setq Rnames "")
(setq oldBT (getvar "BINDTYPE"))
(setq BT (if (null BT) BT oldBT))
(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 "\n已绑定的外部参照文件为:")
(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 (null BT) BT oldBT))
(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") ;提示如何执行程序
本帖最后由 开心无惧 于 2024-6-6 13:51 编辑
xinxin379 发表于 2018-3-23 21:33
楼主的绑定有点小问题,我修改后发上去:请问下绑定命令弹出应该怎样处理
错误: 参数类型错误: fixnump: nil
针对大家说绑定仍有问题,解决办法如下:
把XFB和XFBA子程序中的这一行“ (setq BT (if (null BT) BT oldBT))”改为“(setq BT oldBT)”,就可以正常绑定了,亲测有效的。
谢谢楼主,很给力! 太好了,正好要学习下参照的东西 有没有改相对路径与绝对路径的东西~~~~~~~~~~~~ 相对路径和绝对路径我没改过,不好意思哦~~~~~~~~~ 外部参照学习中 太好了,参照的命令大集合哈 顶一下,留个脚印 好,程序写得好 绑定文件有对话框,我水平有限,搞不定,哪位大侠给编两个绑定(绑定选定参照、绑定所有参照)的命令吧,就全了,先谢谢了