我如何区分“标题”
你好现在我面前有很多画(差不多500张)。它们都包含一个布局,但具有不同的布局命名模式。标题栏也不一定位于布局空间(在某些图纸中,它们位于模型空间),它们也可能有不同的名称,例如“A3”或“HPT-A2”等。
我的问题是,一些标题栏被分解,即它们不再包含属性(仅限文本对象)。我怎么知道这堆图纸中有多少已经分解了标题栏,有多少没有? 如果(tblsearch“block”“title block”)返回nil(清除后)或(ssget“x”(list(cons 0“insert”)(cons 2“title block”))返回nil,则标题栏为kaput。。。如果有许多名字,你可以把它们放在一个列表中或使用逗号(cons 2“标题栏,A3,…)或者更高级一点,使用vl-some尝试列表中的每个名称。。许多方式
gr.R。
“标题栏”字符串可以是任何文字!我在第一篇文章中刚刚提到了几个样本。我没有可用标题栏名称的列表。 一个程序不可能猜出一个名字,所以你必须给它一些东西。。。它可以是一个很长的列表,但列表并不是无穷无尽的。
(defun tst ( / blk )
(if (setq blk (vl-some '(lambda (x)(if (tblsearch "block" x) x nil)) '("title-block" "A3" "term_1b")))
(alert (strcat "found block " blk))(alert "Not any valid block was found")))
这就是说,我确实(确实)遇到了同样的问题,如果我工作,我制定了计划b,我扫描每个块,并与模板进行比较,并寻找一些关键属性,但这也是一个很大的工作,需要不断更新,所以没有奇迹般的解决这个问题,我担心只是艰苦的工作。好的一面是,每次你更新你的列表,你的日常工作就会变得更加准确。
gr.R。 首先清除所有图形,然后提取其中包含10个以上属性的块的名称如何(考虑到标题栏通常包含10个以上属性定义的事实)。你认为呢?
假设某些属性标记名始终存在,如“修订版”或“图纸编号”,您可以在所有块中循环,并测试是否存在一个或多个属性名。对我来说,单凭这一点并不总是有效的,因为并非所有标题栏都有相同数量的修订字段,也不总是有相同的名称。只有图形名称字段和主要修订字母几乎总是相同的。因此,如果您只知道一个始终相同的属性名称,则只需查找该名称。 4U玩法:
; test (setq lst (RlxBlk_GetBlockList (vla-get-ActiveDocument (vlax-get-acad-object))))
(defun RlxBlk_GetBlockList ( $doc / fn O-Name B-Name A-Team B-Team)
(if (vlax-property-available-p $doc 'Name) (setq fn (vla-get-name $doc)))
;(vlax-dump-object $doc)
(vlax-for layout (vla-get-layouts $doc)
(vlax-for object (vla-get-block layout)
(setq O-Name (vla-get-objectname object))
(cond
((and (eq O-Name "AcDbBlockReference")
(not (assoc (setq B-Name (vla-get-effectivename object)) B-Team)))
(if (eq (vla-get-hasattributes object) :vlax-true)
(setq B-Team (append B-Team (list (cons B-Name (mapcar '(lambda (x) (vla-get-tagstring x))
(vlax-invoke object 'getattributes))))))
(setq B-Team (append B-Team (list (cons B-Name (list "No Attributes")))))))
((eq O-Name "AcDbAttributeDefinition")
(setq A-Team (append A-Team (list (vla-get-tagstring object))))))))
(if B-Team B-Team (if A-team (list (cons fn A-team)) nil))
)
这是我目前正在做的一个更大的程序的一部分,但它可能有一些用处。这将列出包含任何文档的所有标记名的所有块,因此它也适用于odbx文档
gr.R
Tnx用于共享。
我正在考虑修改一下你的代码来编写*。TXT文件,然后将其应用于绘图包。将最终文本文件导入Notepad++,我应该能够抓取带有标题栏的图纸列表
不客气:-)你可以像之前指出的那样,首先过滤掉所有属性少于10个的块,这样你就可以使你的txt文件尽可能小。应该不会太难。
gr.Rlx
页:
[1]