乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
楼主: shailujp

[编程交流] 如何查找外部参照文件na

[复制链接]
pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 00:39:06 | 显示全部楼层
 
在我看来,有两种方法可以用来做香草。,
1.使用Tblnext直到找到外部参照,唯一的问题是,如果以某种方式删除了外部参照而没有清除,则该项仍将显示在表上
2.使用ssget“X”,您仍然需要迭代选择,直到它找到外部参照。
 
对于这两个选项,如果找到外部参照,则可以使用while函数终止循环。
 
现在,如果将两者结合使用,也可以使用每个图纸尺寸块的名称
 
只是为了好玩,我还为这两者编写了一个快速代码
 
  1. (defun xrefet (blk / a f)
  2. (while (and (setq a (tblnext "BLOCK" (null a)))
  3.       (null f)
  4. )
  5.    (if        (and (assoc 1 a)
  6.      (wcmatch (cdr (assoc 2 a)) blk)
  7.      (ssget "_X" (list (assoc 2 a)))
  8. )
  9.      (setq f (cdr (assoc 1 a)))
  10.    )
  11. )
  12. f
  13. )

 
(XREFET“A00,B00,C00,D00”)
 
  1. (defun xrefes (blk / ss i sl a en f)
  2. (if (and
  3. (setq f         nil
  4.       i         -1
  5.       ss (ssget        "_X"
  6.                 (list '(0 . "INSERT")
  7.                       (cons 2 blk)
  8.                 )
  9.          )
  10. )
  11. (setq sl (sslength ss))
  12.      )
  13.    (while (and (null f) (< i sl))
  14.      (setq f
  15.      (if (and (setq
  16.                 en (cdr (assoc 2 (entget (ssname ss (setq i (1+ i))))))
  17.               )
  18.               (setq f (assoc 1 (tblsearch "BLOCK" en)))
  19.          )
  20.        (cdr f)
  21.        nil
  22.      )
  23.      )
  24.    )
  25. )
  26. )

 
(外部参照“A00、B00、C00、D00”)
 
 
 
不确定[XREFET]将如何公平对待[XREFES],但我猜想后者更快
回复

使用道具 举报

24

主题

147

帖子

123

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2022-7-6 00:46:34 | 显示全部楼层
pBe,
 
两个代码都返回“错误:参数太少”
 
我觉得这条线不行
  1.    (if (and (assoc 1 a)
  2.      (wcmatch (cdr (assoc 2 a)) blk)
  3.      (ssget "_X" (list (assoc 2 a)))
  4. )

 
所以我去掉了那一行,用cond函数构建代码。这目前的工作原理是,但不确定这是否正确,因为我删除了傻瓜校对。
 
  1. (Defun C:XTEST (/ a f blkname)
  2. (command "layout" "" "")
  3. (setvar "cmdecho" 0)
  4. (setvar "attreq" 0)
  5. (while (and (setq a (tblnext "BLOCK" (null a)))
  6.       (null f)
  7. )
  8.    (if (assoc 1 a)
  9.        (setq f (cdr (assoc 1 a)))
  10.    )
  11. )
  12. (cond
  13.        ((= f "[url="file://drawings//formats//b00.dwg"]\\drawings\\formats\\b00.dwg[/url]")
  14. (setq blkname "J_Logo_B"))
  15. ((= f "[url="file://drawings//formats//c00.dwg"]\\drawings\\formats\\c00.dwg[/url]")
  16. (setq blkname "J_Logo_C"))
  17. ((= f "[url="file://drawings//formats//d00.dwg"]\\drawings\\formats\\d00.dwg[/url]")
  18. (setq blkname "J_Logo_D"))
  19. ((= f "[url="file://drawings//formats//e00.dwg"]\\drawings\\formats\\e00.dwg[/url]")
  20. (setq blkname "J_Logo_E"))
  21. ((= f "[url="file://drawings//formats//j00.dwg"]\\drawings\\formats\\j00.dwg[/url]")
  22. (setq blkname "J_Logo_J"))
  23. )
  24.   (Command "-INSERT" blkname "0,0" "" "" "")
  25.   (princ "\nSelect Text file for attribute import:")
  26.   (c:attin)
  27.   (setvar "attreq" 1)
  28.   (princ "\nAttributes copied & Updated")
  29.   (command "eattedit" "L")
  30.   (princ)
  31. )

 
此外,(setq f(cdr(assoc 1 a)))返回“\\drawings\\formats\\d00.dwg”。因此,在cond下,我必须用添加完整路径。图纸。是否只返回d00(不是位置&不是扩展)?
 
谢谢
回复

使用道具 举报

24

主题

147

帖子

123

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2022-7-6 00:48:38 | 显示全部楼层
pBe,
 
添加到我的上一篇文章中,我修改的代码只适用于空白的新图形(仅适用于模板)。如果此实用程序在包含多个不同块的现有图形上运行,则会失败。它似乎无法仅从整个图形中过滤外部参照块。请提出建议。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 00:54:00 | 显示全部楼层
 
因为您没有提供正确数量的参数
 
(XREFET“A00,B00,C00,D00”);
(外部参照“A00,B00,C00,D00”);
 
 
演示:(vl文件名基(getvar'dwgname))
 
 
使用正确的参数尝试第11页的代码
 
HTH公司
回复

使用道具 举报

24

主题

147

帖子

123

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2022-7-6 00:56:48 | 显示全部楼层
pBe,
 
我想我很困惑。以下是我从这个(论点)中所理解的。看起来您创建了一个子函数(这是真的吗?)然后你把子函数调出到主函数中,同时你也在添加参数?我把它作为主要的日常活动的一部分。可能是我尝试的方式吗?还是必须通过子功能?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-8-17 09:45 , Processed in 2.347251 second(s), 60 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表