bind2xref```已绑定图块还原为参照
本帖最后由 masterlong 于 2022-11-17 15:31 编辑;;设计过程中,可能会误操作将外部参照进行了绑定,等发现时,已无法undo
;;以下程序的作用,用于将bind还原为xref
;;程序默认前提
;;----绑定图块未炸开
;;----原始xref的外部dwg存在,且为无路径模式引用(采用相对或绝对路径引用的同学,可自行修改相关代码)
;;----原始xref与外部dwg同名(不同名时,需要一个指定配对的操作,有需要的同学可自行添加相关代码)
若有公共函数缺失的,烦请说一下
lsp文件里的(setvar "clayer" tmp)这一句多了一个括号,要删掉
补充遗漏的两个公共函数
;999公共函数
;;字符串列表采用分隔符连接成字符串——————本函数未加入错误判别 a.strlist是否表 b.表中元素是否都为字符串 c.ken是否字符串
(defun list2str( strlist ken / str )
(setq str (car strlist))
(foreach x (cdr strlist)
(setq str (strcat str ken x))
)
str
)
;999公共函数
;;选择集转为图元列表
(defun ss2list ( ss / n i elist )
(cond
((null ss) NIL)
((and (= (type ss) 'Pickset) (null (sslength ss)))
NIL
)
((= (type ss) 'Pickset)
(setq n(sslength ss)
i n
elist '()
)
(repeat n
(setq i (1- i))
;;如果没有这个if,那么选择集中被删除的图元,也会被加入到列表之中————但是极其偶尔也有可能,图元不存在但是能entget(遇到过一次,原因不明,或许是CAD的BUG)
(if (entget (ssname ss i))
(setq elist (cons (ssname ss i) elist))
)
)
elist
)
((= (type ss) 'ename)
(list ss)
)
((= (type ss) 'list)
(vl-remove-if-not ''((x) (and (= (type x) 'ename) (entget x))) ss)
)
( T NIL )
)
)
本帖最后由 masterlong 于 2022-11-16 21:50 编辑
刚想到的
这个程序其实还应该要考虑
对裁剪bind图块的还原
有点啰嗦
先不管它吧
本帖最后由 flowerson 于 2022-11-17 15:17 编辑
谢谢分享。这句(setvar "clayer" tmp)) 多了个最后的括号。另外缺少 LIST2STR和SS2LIST 函数。 最后更新的麻烦发一下谢谢
页:
[1]