乐筑天下

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

[编程交流] 我如何区分“标题”

[复制链接]

26

主题

84

帖子

58

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-5 16:33:19 | 显示全部楼层 |阅读模式
你好
 
现在我面前有很多画(差不多500张)。它们都包含一个布局,但具有不同的布局命名模式。标题栏也不一定位于布局空间(在某些图纸中,它们位于模型空间),它们也可能有不同的名称,例如“A3”或“HPT-A2”等。
 
我的问题是,一些标题栏被分解,即它们不再包含属性(仅限文本对象)。我怎么知道这堆图纸中有多少已经分解了标题栏,有多少没有?
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 16:41:38 | 显示全部楼层
如果(tblsearch“block”“title block”)返回nil(清除后)或(ssget“x”(list(cons 0“insert”)(cons 2“title block”))返回nil,则标题栏为kaput。。。如果有许多名字,你可以把它们放在一个列表中或使用逗号(cons 2“标题栏,A3,…)或者更高级一点,使用vl-some尝试列表中的每个名称。。许多方式
 
 
gr.R。
回复

使用道具 举报

26

主题

84

帖子

58

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-5 16:48:34 | 显示全部楼层
 
“标题栏”字符串可以是任何文字!我在第一篇文章中刚刚提到了几个样本。我没有可用标题栏名称的列表。
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 17:01:02 | 显示全部楼层
一个程序不可能猜出一个名字,所以你必须给它一些东西。。。它可以是一个很长的列表,但列表并不是无穷无尽的。
 
 
  1. (defun tst ( / blk )
  2. (if (setq blk (vl-some '(lambda (x)(if (tblsearch "block" x) x nil)) '("title-block" "A3" "term_1b")))
  3.    (alert (strcat "found block " blk))(alert "Not any valid block was found")))

这就是说,我确实(确实)遇到了同样的问题,如果我工作,我制定了计划b,我扫描每个块,并与模板进行比较,并寻找一些关键属性,但这也是一个很大的工作,需要不断更新,所以没有奇迹般的解决这个问题,我担心只是艰苦的工作。好的一面是,每次你更新你的列表,你的日常工作就会变得更加准确。
 
 
gr.R。
回复

使用道具 举报

26

主题

84

帖子

58

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-5 17:08:52 | 显示全部楼层
首先清除所有图形,然后提取其中包含10个以上属性的块的名称如何(考虑到标题栏通常包含10个以上属性定义的事实)。你认为呢?
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 17:15:55 | 显示全部楼层
 
 
假设某些属性标记名始终存在,如“修订版”或“图纸编号”,您可以在所有块中循环,并测试是否存在一个或多个属性名。对我来说,单凭这一点并不总是有效的,因为并非所有标题栏都有相同数量的修订字段,也不总是有相同的名称。只有图形名称字段和主要修订字母几乎总是相同的。因此,如果您只知道一个始终相同的属性名称,则只需查找该名称。
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 17:22:15 | 显示全部楼层
4U玩法:
 
 
  1. ; test (setq lst (RlxBlk_GetBlockList (vla-get-ActiveDocument (vlax-get-acad-object))))
  2. (defun RlxBlk_GetBlockList ( $doc / fn O-Name B-Name A-Team B-Team)
  3. (if (vlax-property-available-p $doc 'Name) (setq fn (vla-get-name $doc)))
  4. ;(vlax-dump-object $doc)
  5. (vlax-for layout (vla-get-layouts $doc)
  6.    (vlax-for object (vla-get-block layout)
  7.      (setq O-Name (vla-get-objectname object))
  8.      (cond
  9. ((and (eq O-Name "AcDbBlockReference")
  10.       (not (assoc (setq B-Name (vla-get-effectivename object)) B-Team)))
  11. (if (eq (vla-get-hasattributes object) :vlax-true)
  12.    (setq B-Team (append B-Team (list (cons B-Name (mapcar '(lambda (x) (vla-get-tagstring x))
  13.          (vlax-invoke object 'getattributes))))))
  14.    (setq B-Team (append B-Team (list (cons B-Name (list "No Attributes")))))))
  15. ((eq O-Name "AcDbAttributeDefinition")
  16. (setq A-Team (append A-Team (list (vla-get-tagstring object))))))))
  17. (if B-Team B-Team (if A-team (list (cons fn A-team)) nil))
  18. )

这是我目前正在做的一个更大的程序的一部分,但它可能有一些用处。这将列出包含任何文档的所有标记名的所有块,因此它也适用于odbx文档
 
 
gr.R
回复

使用道具 举报

26

主题

84

帖子

58

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-5 17:30:11 | 显示全部楼层
 
Tnx用于共享。
我正在考虑修改一下你的代码来编写*。TXT文件,然后将其应用于绘图包。将最终文本文件导入Notepad++,我应该能够抓取带有标题栏的图纸列表
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 17:35:35 | 显示全部楼层
 
 
不客气:-)你可以像之前指出的那样,首先过滤掉所有属性少于10个的块,这样你就可以使你的txt文件尽可能小。应该不会太难。
 
 
gr.Rlx
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 15:48 , Processed in 1.860953 second(s), 70 queries .

© 2020-2025 乐筑天下

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