SMadsen 发表于 2004-11-10 07:35:21

查找外部参照路径

遍历图形块集合并仅抓取外部参照(通过检查IsXRef属性),如何获取每个外部参照的路径?
据我所知,路径是插入的图形外部参照的属性..AcadExternalReference对象的。这是否意味着我必须获得块名,然后在整个图形数据库中迭代该外部参照的插入实例?当然,或者我可以创建一个过滤的选择集,但是仍然需要查看图形对象,不是吗?
通过lisp,可以从块实体中检索路径,块实体基本上是一个AcDbBlockBegin对象。通过VBA,似乎不可能访问这个对象,或者至少它似乎不包含任何路径信息。
**** Hidden Message *****

hendie 发表于 2004-11-10 09:16:46

Stig,我在搜索中发现了这个Chuck Hardin〜GetXrefPaths

SMadsen 发表于 2004-11-10 09:35:52

太好了。谢谢Hendie。
Chuck的代码使用选择集,所以我的预感似乎是正确的
我正在使用ObjectDBX通过lisp执行此操作,并且在此过程中切换到实体名称没有发现任何问题...从而避免遍历任何图形对象!只是想如果使用ActiveX同样容易,我就不必切换到enames。

daron 发表于 2004-11-10 14:04:13

你是不是通过lisp使用ODBX?请告诉。

SMadsen 发表于 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))
(defun getFiles (/ path folder)
(cond ((setq path (getfiled "Select a File" "" "dwg" (+ 4 128)))
         (list (setq folder (vl-filename-directory path))
               (vl-directory-files folder "*.dwg" 1)
         )
      )
)
)
(defun XRefDbx (files folder / dbxDoc of filelst filesublst blklst)
(cond
    ((and files
          (not (vl-catch-all-error-p
               (setq dbxDoc (vl-catch-all-apply
                              'vla-getInterfaceObject
                              (list (vlax-get-acad-object)
                                    "ObjectDBX.AxDbDocument.16")))
               )
          )
   )
   (foreach file files
       (setq of (vl-catch-all-apply
                  'vlax-invoke-method
                  (list dbxDoc 'Open (strcat folder "\\" file))
                )
       )
       (cond ((vl-catch-all-error-p of)
            (princ (strcat file "Error: "
                        (vl-catch-all-error-message of)))
             )
             ((setq dbxBlks (vlax-get-property dbxdoc "Blocks"))
            (vlax-for blk dbxBlks
                (cond ((= (vlax-get-property blk 'IsXRef) ':vlax-true)
                     (setq bname (vlax-get-property blk 'Name))
                     (setq en360
                              (cdr
                              (assoc 360 (entget (vlax-vla-object->ename blk)))
                              )
                     )
                     (setq path (cdr (assoc 1 (entget en360))))
                     (setq blklst (cons (cons bname path) blklst))
                      )
                )
            ) ;_ vlax-for
            (setq filesublst
                     (list file blklst)
                  blklst nil
            )
            (vlax-release-object dbxBlks)
             )
       )
       (and filesublst (setq filelst (cons filesublst filelst)))
       (setq filesublst nil)
   ) ;_ foreach
   (vlax-release-object dbxdoc)
   (gc)
    )
    ((vl-catch-all-error-p dbxDoc)
   (princ (vl-string-subst
            "DBX interface"
            "application"
            (vl-catch-all-error-message dbxdoc)
            )
   )
    )
    ((not files) (princ "\nNo files found"))
)
filelst
)

daron 发表于 2004-11-11 08:17:29

斯蒂格,这是一个很好的小路径的变通办法。根据我在ObjectDBX上找到的最少量的信息,我有这样的印象,只有VLA方法和属性可以在DBX文件上使用,所以我从来没有想过要去尝试(entget).....

Jeff_M 发表于 2004-11-11 15:17:04

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

SMadsen 发表于 2004-11-11 15:42:39

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

SMadsen 发表于 2004-11-11 15:43:11

这是有价值的信息,MP。谢谢。
如果我没看错的话,你是说使用ename进行查询是可以的,但进行修改是不可以的?

daron 发表于 2004-11-11 15:45:26

就像你在entget主题上的第一篇文章一样
无论如何,尽管我认为它很酷,但我真的不认为我应该宣传它,它肯定是一个未经记录和未经探索的领域,我最不希望的是人们在未经测试的情况下随意使用它,这可能会导致我们从未见过的腐败。通过工作以及我与Alex(RIP)的活动,我看到了更多的腐败图纸<所以我很高兴听到像你这样的科学家成功地使用了它,而且你发现它很稳定。Yee haa<嗯,和其他东西一样稳定。
页: [1] 2
查看完整版本: 查找外部参照路径