[未经测试]
(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)
这是有效的。谢谢塔瓦。
我们可以在SelectionSet方法中使用(ssget“X”((2。“TITLEBLOCK”))或vla select ss acSelectionSetAll nil nil filter1 filter2 with objectDBX???而不是检查模型空间中的所有实体。。。。
不客气。
不幸的是,您不能将ssget、command和系统变量与ObjectDBX一起使用。
虽然我已经读到可以使用vla sendcommand而不是命令调用,但我还没有尝试过。 如果可以的话,我只想问一个问题,它也是(更)快的Dipesh吗?
gr.Rlx 不,没那么快。但有了它,我们可以跳过布局中的搜索。
现在我觉得速度再快不过了,因为检查每个图形中的每个实体都需要时间,因为我们不能将(ssget)与ObjectDBX一起使用
是的,我知道你的意思。你也无法获取变量,因为其他情况下,我可以获取当前选项卡,因此我只需要读取该选项卡。在vba sentcommand等上做了一些谷歌搜索,但即使它工作正常,也会使autocad的速度降低6到8倍。
我知道这可以做得更快,因为我曾经看到我们的文件控制系统读取一些图纸,这比我预期的要快得多。我想这个程序是由专业人士编写的,他们拥有更强大的工具。但话说回来,如果你的应用程序运行得更快,你的老板也希望你工作得更快,所以要小心你想要的;-)
顺便说一句,你必须搜索每个实体,还是可以使用vla get块来缩小搜索范围。。。只是一个想法:-)
gr.Rlx
页:
1
[2]