乐筑天下

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

查找外部参照路径

[复制链接]

1

主题

32

帖子

3

银币

初来乍到

Rank: 1

铜币
36
发表于 2004-11-10 07:35:21 | 显示全部楼层 |阅读模式
遍历图形块集合并仅抓取外部参照(通过检查IsXRef属性),如何获取每个外部参照的路径?
据我所知,路径是插入的图形外部参照的属性..AcadExternalReference对象的。这是否意味着我必须获得块名,然后在整个图形数据库中迭代该外部参照的插入实例?当然,或者我可以创建一个过滤的选择集,但是仍然需要查看图形对象,不是吗?
通过lisp,可以从块实体中检索路径,块实体基本上是一个AcDbBlockBegin对象。通过VBA,似乎不可能访问这个对象,或者至少它似乎不包含任何路径信息。

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

18

主题

222

帖子

51

银币

后起之秀

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

铜币
260
发表于 2004-11-10 09:16:46 | 显示全部楼层
Stig,我在搜索中发现了这个Chuck Hardin〜GetXrefPaths
回复

使用道具 举报

1

主题

32

帖子

3

银币

初来乍到

Rank: 1

铜币
36
发表于 2004-11-10 09:35:52 | 显示全部楼层
太好了。谢谢Hendie。
Chuck的代码使用选择集,所以我的预感似乎是正确的
我正在使用ObjectDBX通过lisp执行此操作,并且在此过程中切换到实体名称没有发现任何问题...从而避免遍历任何图形对象!只是想如果使用ActiveX同样容易,我就不必切换到enames。
回复

使用道具 举报

14

主题

194

帖子

5

银币

后起之秀

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

铜币
250
发表于 2004-11-10 14:04:13 | 显示全部楼层
你是不是通过lisp使用ODBX?请告诉。
回复

使用道具 举报

1

主题

32

帖子

3

银币

初来乍到

Rank: 1

铜币
36
发表于 2004-11-10 14:54:26 | 显示全部楼层
我有大约600个图形需要进行参照测试,看看是否有一些图形没有用作外部参照。所以我正在浏览所有的图形并获取外部参照,这样我就有了一个可搜索的列表。通过搜索列表,我可以计算每个图形被引用的次数
下面是我到目前为止所做的(好吧,不是真的,但我会发布DBX的东西)。它只是列出所有dwg及其外部参照/路径:
(setq文件(getFiles)文件夹(car文件)文件(cadr文件))
(“setq-xreflst(XRefDbx文件文件夹))
->
”((drawing1.dwg((xref1.path1)(xref2.path2)(xref3.path3))
和(drawing2.dwg((xref1.path1))
  1. (defun getFiles (/ path folder)
  2.   (cond ((setq path (getfiled "Select a File" "" "dwg" (+ 4 128)))
  3.          (list (setq folder (vl-filename-directory path))
  4.                (vl-directory-files folder "*.dwg" 1)
  5.          )
  6.         )
  7.   )
  8. )
  9. (defun XRefDbx (files folder / dbxDoc of filelst filesublst blklst)
  10.   (cond
  11.     ((and files
  12.           (not (vl-catch-all-error-p
  13.                  (setq dbxDoc (vl-catch-all-apply
  14.                                 'vla-getInterfaceObject
  15.                                 (list (vlax-get-acad-object)
  16.                                       "ObjectDBX.AxDbDocument.16")))
  17.                )
  18.           )
  19.      )
  20.      (foreach file files
  21.        (setq of (vl-catch-all-apply
  22.                   'vlax-invoke-method
  23.                   (list dbxDoc 'Open (strcat folder "\" file))
  24.                 )
  25.        )
  26.        (cond ((vl-catch-all-error-p of)
  27.               (princ (strcat file "Error: "
  28.                         (vl-catch-all-error-message of)))
  29.              )
  30.              ((setq dbxBlks (vlax-get-property dbxdoc "Blocks"))
  31.               (vlax-for blk dbxBlks
  32.                 (cond ((= (vlax-get-property blk 'IsXRef) ':vlax-true)
  33.                        (setq bname (vlax-get-property blk 'Name))
  34.                        (setq en360
  35.                               (cdr
  36.                                 (assoc 360 (entget (vlax-vla-object->ename blk)))
  37.                               )
  38.                        )
  39.                        (setq path (cdr (assoc 1 (entget en360))))
  40.                        (setq blklst (cons (cons bname path) blklst))
  41.                       )
  42.                 )
  43.               ) ;_ vlax-for
  44.               (setq filesublst
  45.                      (list file blklst)
  46.                     blklst nil
  47.               )
  48.               (vlax-release-object dbxBlks)
  49.              )
  50.        )
  51.        (and filesublst (setq filelst (cons filesublst filelst)))
  52.        (setq filesublst nil)
  53.      ) ;_ foreach
  54.      (vlax-release-object dbxdoc)
  55.      (gc)
  56.     )
  57.     ((vl-catch-all-error-p dbxDoc)
  58.      (princ (vl-string-subst
  59.               "DBX interface"
  60.               "application"
  61.               (vl-catch-all-error-message dbxdoc)
  62.             )
  63.      )
  64.     )
  65.     ((not files) (princ "\nNo files found"))
  66.   )
  67.   filelst
  68. )
回复

使用道具 举报

14

主题

194

帖子

5

银币

后起之秀

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

铜币
250
发表于 2004-11-11 08:17:29 | 显示全部楼层
斯蒂格,这是一个很好的小路径的变通办法。根据我在ObjectDBX上找到的最少量的信息,我有这样的印象,只有VLA方法和属性可以在DBX文件上使用,所以我从来没有想过要去尝试(entget).....
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2004-11-11 15:17:04 | 显示全部楼层
杰夫,我也有这样的印象。在过去的A2K中,我遇到了各种各样的问题,因为它以特殊的方式混合了ActiveX和原生lisp,我怀疑它是否能工作。但它运行得相当顺利(至少在A2K4和-5中)。
我今天扩展了它,在块定义、块记录和引用插入之间来回切换——所有这些都基于ename。看起来没有问题(这里的关键词是
似乎
!)
当然,在DBX完成后对未引用的ename做任何事情都会当场产生访问违规。
Daron,我期待从你手中看到一些ObjectDBX
回复

使用道具 举报

1

主题

32

帖子

3

银币

初来乍到

Rank: 1

铜币
36
发表于 2004-11-11 15:42:39 | 显示全部楼层
我已经在ObjectDBX模型上使用entget一段时间了,我的尝试是为了让我能够拉出外部参照的覆盖/附加状态(我的“食肉动物”应用程序的一部分,如果你还记得以前的讨论,它会扫描数以万计的dwg)。
无论如何,我想添加到这个线程中的是,entget似乎工作正常,但不要尝试将数据调整回去,因为这往往会破坏绘图(它似乎对颜色和线型感到困惑),而且,这是“无警告”的重要部分。下次尝试打开绘图时?咔嚓!AutoCAD死了,不知道为什么。这很可惜,因为我认为我会用它来补救修改文本/属性值时产生的合理性问题。德拉特,又被挫败了。
继续。。。
回复

使用道具 举报

1

主题

32

帖子

3

银币

初来乍到

Rank: 1

铜币
36
发表于 2004-11-11 15:43:11 | 显示全部楼层
这是有价值的信息,MP。谢谢。
如果我没看错的话,你是说使用ename进行查询是可以的,但进行修改是不可以的?
回复

使用道具 举报

14

主题

194

帖子

5

银币

后起之秀

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

铜币
250
发表于 2004-11-11 15:45:26 | 显示全部楼层
就像你在entget主题上的第一篇文章一样
无论如何,尽管我认为它很酷,但我真的不认为我应该宣传它,它肯定是一个未经记录和未经探索的领域,我最不希望的是人们在未经测试的情况下随意使用它,这可能会导致我们从未见过的腐败。通过工作以及我与Alex(RIP)的活动,我看到了更多的腐败图纸<所以我很高兴听到像你这样的科学家成功地使用了它,而且你发现它很稳定。Yee haa<嗯,和其他东西一样稳定。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-16 15:07 , Processed in 0.446172 second(s), 72 queries .

© 2020-2025 乐筑天下

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