masterlong 发表于 2022-11-16 21:29:09

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:44:31

本帖最后由 masterlong 于 2022-11-16 21:50 编辑

刚想到的
这个程序其实还应该要考虑
对裁剪bind图块的还原
有点啰嗦
先不管它吧

flowerson 发表于 2022-11-17 15:12:52

本帖最后由 flowerson 于 2022-11-17 15:17 编辑

谢谢分享。这句(setvar "clayer" tmp)) 多了个最后的括号。另外缺少 LIST2STR和SS2LIST 函数。

bing00 发表于 2024-7-27 23:37:21

最后更新的麻烦发一下谢谢
页: [1]
查看完整版本: bind2xref```已绑定图块还原为参照