乐筑天下

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

[编程交流] 问题:选择上的对象

[复制链接]

36

主题

161

帖子

125

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
182
发表于 2022-7-5 17:21:00 | 显示全部楼层 |阅读模式
你好
 
我看到一个关于重新加载外部参照的lisp,我发现了一个问题。
  1. (Defun C:xref_reload ( / rnames i e elist rname)
  2.        (setvar "cmdecho" 0)  
  3.          (princ "\nSelect  objects on the reference file to be Reloaded:")
  4.          (if (setq SS (ssget))
  5.                    (progn
  6.                              (setq Rnames "")
  7.                              (repeat
  8.                                (setq I (sslength SS))
  9.                                (setq E (ssname SS (setq I (1- I))))
  10.                                (setq ELIST (entget E))
  11.                                (setq Rname (cdr (assoc 2 ELIST)))
  12.                                (command "-xref" "R" Rname)
  13.                                (setq Rnames (strcat Rname ", " Rnames))
  14.                              );end repeat
  15.                              (prompt "\nFiles have been Reloaded:")
  16.                              (princ Rnames)
  17.                    );end progn
  18.          );end if
  19.        (princ)
  20. )

 
问题是:如果此外部参照已卸载。我在图形中看不到此外部参照。那么,如何“选择引用文件上的对象”?
 
我认为需要一个对话框显示卸载参考文件列表,从对话框中选择项目重新加载。
 
我想可以用李的listbox函数来做。谁能帮我?非常感谢。
 
 
182104sbxassso7ww73atr.png
回复

使用道具 举报

36

主题

161

帖子

125

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
182
发表于 2022-7-5 17:28:18 | 显示全部楼层
如何获取卸载外部参照列表?
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 17:39:23 | 显示全部楼层
这可能有用:
  1. (defun ListUnloadedXrefs ( / ret)
  2. (vlax-for blk (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
  3.    (if
  4.      (and
  5.        (= :vlax-true (vla-get-isxref blk))
  6.        (not (vla-get-xrefdatabase blk))
  7.      )
  8.      (setq ret (cons (vla-get-name blk) ret))
  9.    )
  10. )
  11. (reverse ret)
  12. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:42:15 | 显示全部楼层
另一种,使用香草:
  1. (defun unloadedxrefs ( / r x )
  2.    (while (setq x (tblnext "block" (not x)))
  3.        (if (= 4 (logand (cdr (assoc 70 x)) 36))
  4.            (setq r (cons (cdr (assoc 2 x)) r))
  5.        )
  6.    )
  7.    (reverse r)
  8. )
  1. _$ (unloadedxrefs)
  2. ("xref")
回复

使用道具 举报

36

主题

161

帖子

125

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
182
发表于 2022-7-5 17:53:41 | 显示全部楼层
 
嗨,罗伊。谢谢你,但我测试,没有成功!
 
我使用acad2011和2015测试,相同的错误:
; 错误:自动化错误。未提供说明。
回复

使用道具 举报

36

主题

161

帖子

125

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
182
发表于 2022-7-5 17:57:51 | 显示全部楼层
 
李,非常感谢!好极了!!!
 
这样地?
  1. (defun c:xr ( )        
  2. (if (unloadedxrefs)
  3.         (progn
  4.                 (foreach x (LM:listbox "Select reference file to be Reloaded" (unloadedxrefs) 1)
  5.                         (command "-xref" "R" x)
  6.                 )       
  7.                 (prompt "\nFiles have been Reloaded:")       
  8.         )
  9.         (prompt "\nNo reference file need reload.")       
  10. )
  11. (princ)
  12. )
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 18:04:49 | 显示全部楼层
奇怪的我不知道你为什么会这样。 
您的代码中是否包含此项
  1. (vl-load-com)
回复

使用道具 举报

36

主题

161

帖子

125

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
182
发表于 2022-7-5 18:12:38 | 显示全部楼层
 
嗨,罗伊,是我。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:20:47 | 显示全部楼层
 
不客气!
 
 
是的,这会起作用-您可以通过使用局部变量存储未加载的外部参照列表来稍微提高效率,例如:
  1. (defun c:xr ( / lst )   
  2.    (if (setq lst (unloadedxrefs))
  3.        (progn
  4.            (foreach x (LM:listbox "Select reference file to be Reloaded" lst 1)
  5.                < ... >
回复

使用道具 举报

36

主题

161

帖子

125

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
182
发表于 2022-7-5 18:26:54 | 显示全部楼层
 
李,再次谢谢你。非常有帮助。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 08:32 , Processed in 0.370104 second(s), 75 queries .

© 2020-2025 乐筑天下

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