Dipesh Kalasari 发表于 2022-7-5 18:18:01

在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)
)

rlx 发表于 2022-7-5 18:22:39

1限制搜索(你需要每个布局上的每个块吗?你需要每个属性吗?
2买一台更快的电脑。。。
 
 
gr.Rlx

Dipesh Kalasari 发表于 2022-7-5 18:29:32

感谢您的回复
 
1.I want to search only in model space and only in one block name“TitileBlock”。
2.我使用Win8 64位和I5,8GB内存。

Tharwat 发表于 2022-7-5 18:33:49

 
那你为什么要在每个版面中搜索呢?

Dipesh Kalasari 发表于 2022-7-5 18:36:20

我是ObjectDBX新手。无(vlax for lay(vla get layouts odb)程序不工作。请告知。

Tharwat 发表于 2022-7-5 18:38:41

(vla-get-ModelSpace odb)并且后面没有代码行。。。(vlax表示…(vla get block。。。

rlx 发表于 2022-7-5 18:45:36

不久前,a写了一个例程来阅读我们的标题栏。这主要是基于李的工作(但话说回来,这个星球上有没有人没有李做过的事情?;-)
 
 
后来当我把它添加到我的批处理应用程序中时,我做了一些更改,但如果我没记错的话,那更具装饰性,所以核心应该大致相同。这是专门为我们的标题栏(是的,我实际上阅读了所有标签,因为我们的文档控制系统,DvTDM不能,对于一些图纸,我需要)。也许有些代码是有用的,也许不是。。。
 
刚刚添加了带有标题栏的示例图形
 
顺便说一句,为了能够读取区号等,文件名必须是2位区域,1-3个字母表示类型,6位图纸编号,字母S和4位数字表示图纸编号,例如01E001234S0001。图纸
 
 
 
Gr.Rlx
RlxReadTitleBlock。LSP
readtitleblockexample。图纸

Dipesh Kalasari 发表于 2022-7-5 18:49:47

至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))不起作用。

Tharwat 发表于 2022-7-5 18:52:49

 
当然我不会那样工作,请再次阅读我的上一篇文章。

rlx 发表于 2022-7-5 18:55:30

 
 
我不确定是否真的有其他方法,使用ODBX就是这样。如果Tharwat试图做我认为他在说的事情,那么我也有同样的问题,只有当你真正打开图纸时,我才使用这种方法。
 
 
如果你想要更快的性能,我认为你可能必须转向更强大的语言,C或类似的语言。但我总是对解决旧问题的新方法持开放态度。。。
 
 
gr.Rlx
页: [1] 2
查看完整版本: 在multip中搜索属性