在multip中搜索属性
大家好!我经常使用CADTutor,我从这个网站学到了很多。谢谢CADTutor。这是我在这个论坛上的第一个帖子。
我有150多个图纸在一个文件夹中。(说“c:\mydrawings”)
我的要求是经常搜索这些图形的属性(在名为“TitileBlock”的块中)。
下面的程序可以运行,但需要时间。我们可以优化这个程序并最小化搜索时间吗?
我想减少搜索时间。我是ObjectDBX新手。请帮忙。
(defun c:findf(/ sw odb)
(vl-load-com)
(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 lay (vla-get-layouts odb)
(vlax-for obj (vla-get-Block lay)
(if(eq (vla-get-objectname obj) "AcDbBlockReference")
(if(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)
)
1限制搜索(你需要每个布局上的每个块吗?你需要每个属性吗?
2买一台更快的电脑。。。
gr.Rlx 感谢您的回复
1.I want to search only in model space and only in one block name“TitileBlock”。
2.我使用Win8 64位和I5,8GB内存。
那你为什么要在每个版面中搜索呢? 我是ObjectDBX新手。无(vlax for lay(vla get layouts odb)程序不工作。请告知。 (vla-get-ModelSpace odb)并且后面没有代码行。。。(vlax表示…(vla get block。。。 不久前,a写了一个例程来阅读我们的标题栏。这主要是基于李的工作(但话说回来,这个星球上有没有人没有李做过的事情?;-)
后来当我把它添加到我的批处理应用程序中时,我做了一些更改,但如果我没记错的话,那更具装饰性,所以核心应该大致相同。这是专门为我们的标题栏(是的,我实际上阅读了所有标签,因为我们的文档控制系统,DvTDM不能,对于一些图纸,我需要)。也许有些代码是有用的,也许不是。。。
刚刚添加了带有标题栏的示例图形
顺便说一句,为了能够读取区号等,文件名必须是2位区域,1-3个字母表示类型,6位图纸编号,字母S和4位数字表示图纸编号,例如01E001234S0001。图纸
Gr.Rlx
RlxReadTitleBlock。LSP
readtitleblockexample。图纸 至rlx,
我已经检查过了。lsp
在这方面也使用了相同的方法。我在程序中使用的lsp
(defun read-block-attributes ( / layout obj attvalues mainrev title1 title2 title3 vendornumber)
(vlax-for layout (vla-get-layouts doc)
(vlax-for obj (vla-get-block layout)
(if (and (eq "AcDbBlockReference" (vla-get-objectname obj))
致塔瓦,
在模型空间中直接搜索(vlax for obj(vla get Block(vla get ModelSpace odb))不起作用。
当然我不会那样工作,请再次阅读我的上一篇文章。
我不确定是否真的有其他方法,使用ODBX就是这样。如果Tharwat试图做我认为他在说的事情,那么我也有同样的问题,只有当你真正打开图纸时,我才使用这种方法。
如果你想要更快的性能,我认为你可能必须转向更强大的语言,C或类似的语言。但我总是对解决旧问题的新方法持开放态度。。。
gr.Rlx
页:
[1]
2