乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 66|回复: 15

[编程交流] 在multip中搜索属性

[复制链接]

2

主题

17

帖子

15

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 18:18:01 | 显示全部楼层 |阅读模式
大家好!
 
我经常使用CADTutor,我从这个网站学到了很多。谢谢CADTutor。这是我在这个论坛上的第一个帖子。
 
我有150多个图纸在一个文件夹中。(说“c:\mydrawings”)
 
我的要求是经常搜索这些图形的属性(在名为“TitileBlock”的块中)。
 
下面的程序可以运行,但需要时间。我们可以优化这个程序并最小化搜索时间吗?
 
我想减少搜索时间。我是ObjectDBX新手。请帮忙。
 
  1. (defun c:findf(/ sw odb)
  2. (vl-load-com)
  3. (setq sw(strcase(getstring"\nEnter search word: "))
  4. odb (vla-getInterfaceObject (vlax-get-acad-object) "ObjectDBX.AxDbDocument.18"))
  5. (foreach file (vl-directory-files "c:\\mydrawings" "*.dwg")
  6.    (vla-open odb (strcat "c:\\mydrawings\" file))
  7.    (vlax-for lay (vla-get-layouts odb)
  8.      (vlax-for obj (vla-get-Block lay)
  9. (if(eq (vla-get-objectname obj) "AcDbBlockReference")
  10.   (if(eq (vla-get-effectivename obj) "TITLEBLOCK")
  11.     (foreach att (vlax-invoke obj 'getattributes)
  12.       (if (wcmatch (strcase(vla-get-textstring att)) (strcat "*" sw "*"))(princ (strcat "\n" file)))
  13.       )
  14.     )
  15.   )
  16. )
  17.      )
  18.    )
  19. (princ "\nSearch completed...")(textpage)(princ)
  20. )
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 18:22:39 | 显示全部楼层
1限制搜索(你需要每个布局上的每个块吗?你需要每个属性吗?
2买一台更快的电脑。。。
 
 
gr.Rlx
回复

使用道具 举报

2

主题

17

帖子

15

银币

初来乍到

Rank: 1

铜币
10
发表于 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内存。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 18:33:49 | 显示全部楼层
 
那你为什么要在每个版面中搜索呢?
回复

使用道具 举报

2

主题

17

帖子

15

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 18:36:20 | 显示全部楼层
我是ObjectDBX新手。无(vlax for lay(vla get layouts odb)程序不工作。请告知。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 18:38:41 | 显示全部楼层
  1. (vla-get-ModelSpace odb)
并且后面没有代码行。。。(vlax表示…(vla get block。。。
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

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

使用道具 举报

2

主题

17

帖子

15

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 18:49:47 | 显示全部楼层
至rlx,
我已经检查过了。lsp
在这方面也使用了相同的方法。我在程序中使用的lsp
 
  1. (defun read-block-attributes ( / layout obj attvalues mainrev title1 title2 title3 vendornumber)
  2. (vlax-for layout (vla-get-layouts doc)
  3.    (vlax-for obj (vla-get-block layout)
  4.      (if (and (eq "AcDbBlockReference" (vla-get-objectname obj))

 
 
致塔瓦,
在模型空间中直接搜索(vlax for obj(vla get Block(vla get ModelSpace odb))不起作用。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 18:52:49 | 显示全部楼层
 
当然我不会那样工作,请再次阅读我的上一篇文章。
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 18:55:30 | 显示全部楼层
 
 
我不确定是否真的有其他方法,使用ODBX就是这样。如果Tharwat试图做我认为他在说的事情,那么我也有同样的问题,只有当你真正打开图纸时,我才使用这种方法。
 
 
如果你想要更快的性能,我认为你可能必须转向更强大的语言,C或类似的语言。但我总是对解决旧问题的新方法持开放态度。。。
 
 
gr.Rlx
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-12 19:48 , Processed in 0.452663 second(s), 83 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表