明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 600|回复: 2

[源码] bind2xref```已绑定图块还原为参照

[复制链接]
发表于 2022-11-16 21:29 | 显示全部楼层 |阅读模式
本帖最后由 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 )
)
)


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 2明经币 +2 收起 理由
bssurvey + 1 赞一个!
ssyfeng + 1 赞一个!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2022-11-16 21:44 | 显示全部楼层
本帖最后由 masterlong 于 2022-11-16 21:50 编辑

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

发表于 2022-11-17 15:12 | 显示全部楼层
本帖最后由 flowerson 于 2022-11-17 15:17 编辑

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

评分

参与人数 1明经币 +1 收起 理由
masterlong + 1 感谢提醒

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-2 06:46 , Processed in 0.252524 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表