Tharwat 发表于 2022-7-5 19:01:40

尽管代码运行时没有错误处理程序,但请尝试此mods,并根据您的风险进行测试。
 
[未经测试]
 

(defun c:findf (/ sw odb)
(setq sw(strcase (getstring "\nEnter search word: "))
       odb (vla-getinterfaceobject
             (vlax-get-acad-object)
             "ObjectDBX.AxDbDocument.18"
         )
)
(foreach file (vl-directory-files "c:\\mydrawings" "*.dwg")
   (vla-open odb (strcat "c:\\mydrawings\\" file))
   (vlax-for obj (vla-get-modelspace odb)
   (if (and (eq (vla-get-objectname obj) "AcDbBlockReference")
            (eq (vla-get-effectivename obj) "TITLEBLOCK")
         )
       (foreach att (vlax-invoke obj 'getattributes)
         (if (wcmatch (strcase (vla-get-textstring att)) (strcat "*" sw "*")
             )
         (princ (strcat "\n" file))
         )
       )
   )
   )
)
(princ "\nSearch completed...")
(textpage)
(princ)
)(vl-load-com)

Dipesh Kalasari 发表于 2022-7-5 19:03:32

这是有效的。谢谢塔瓦。
 
我们可以在SelectionSet方法中使用(ssget“X”((2。“TITLEBLOCK”))或vla select ss acSelectionSetAll nil nil filter1 filter2 with objectDBX???而不是检查模型空间中的所有实体。。。。

Tharwat 发表于 2022-7-5 19:07:15

 
不客气。
 
 
不幸的是,您不能将ssget、command和系统变量与ObjectDBX一起使用。
 
虽然我已经读到可以使用vla sendcommand而不是命令调用,但我还没有尝试过。

rlx 发表于 2022-7-5 19:11:53

如果可以的话,我只想问一个问题,它也是(更)快的Dipesh吗?
 
 
gr.Rlx

Dipesh Kalasari 发表于 2022-7-5 19:14:08

不,没那么快。但有了它,我们可以跳过布局中的搜索。
 
现在我觉得速度再快不过了,因为检查每个图形中的每个实体都需要时间,因为我们不能将(ssget)与ObjectDBX一起使用

rlx 发表于 2022-7-5 19:21:46

 
 
是的,我知道你的意思。你也无法获取变量,因为其他情况下,我可以获取当前选项卡,因此我只需要读取该选项卡。在vba sentcommand等上做了一些谷歌搜索,但即使它工作正常,也会使autocad的速度降低6到8倍。
 
 
我知道这可以做得更快,因为我曾经看到我们的文件控制系统读取一些图纸,这比我预期的要快得多。我想这个程序是由专业人士编写的,他们拥有更强大的工具。但话说回来,如果你的应用程序运行得更快,你的老板也希望你工作得更快,所以要小心你想要的;-)
 
 
顺便说一句,你必须搜索每个实体,还是可以使用vla get块来缩小搜索范围。。。只是一个想法:-)
 
 
gr.Rlx
页: 1 [2]
查看完整版本: 在multip中搜索属性