Madruga_SP 发表于 2022-7-6 06:17:23

查找标记值

大家好,
我绞尽脑汁想在我的画里找到一个特定的块。
大约有1000个区块分为2类区块。
 
有没有办法找到指定标记值的块?
 
例如
指定块的名称:
标签相同:PONTO
 
按值搜索,如M2。
 
对不起,我的英语很差:哎哟:
 
提前感谢
测试。图纸

Lee Mac 发表于 2022-7-6 06:38:03

由于ssget过滤器列表只能过滤主要实体,因此需要迭代所有属性块中的属性,以检索与给定条件匹配的块。
 
下面是一个示例:
(defunc:findblocks(/ent idx qty sel tag val)(cond(null(setqsel(ssget“\u X”(list'(0.“INSERT(if(=“color]1(getvar'cvport))(cons410(getvar'ctab))(410。“Model”))(princ[颜色=栗色]“\n在当前布局中未找到属性块。”)(或(==“(setq标记(strcase”\n指定属性标记:“))(=val(strcase(getstringt“\n指定属性值:”))(t(repeat(setqidx(sslengthsel))(if(not(vl some'(lambda(att)(和(=标记(strcase(vla get tagstringatt))(=val(strcase(vla get texstringatt)))(vlax invoke(vlax ename->vla object(setqent(ssnamesel(setqidx(1-idx ')')'getattributes))(ssdelent sel))(如果(

Lee Mac 发表于 2022-7-6 07:02:46

 
由于您还希望指定块名,因此可以将此参数包括在ssget筛选器列表中,以减少候选块的初始集,从而提高程序的性能,例如:
(defunc:findblocks(/blk ent idx obj qty sel tag val)(while(not(=”(setqblk(getstring[=BLUE]t[=MAROON]“\n指定块名:(tblsearch“block”blk))(princ“\n未找到块。”)(cond(=”“(setqblk(STRACASEblk))(null(setqsel(ssget[=MAROON]“\u X”(list'(66.1)(cons2(strcat“`*U*,“blk”)(if(=1(getvar'cvport))(cons410(getvar'ctab))'(410.princ“\n未找到块。”)(或(==“(setq标记(strcase”\n指定属性标记:“))(=val(strcase(getstringt“\n指定属性值:”)))(t(repeat(setqidx(sslengthsel))(setqent(ssnamesel(setqidx(1-idx)))obj(vlax ename->vla objectent()(if(或(/=blk(strcase(LM:blockname obj))(非(vl some'(lambda(att)(和(=标记(strcase(vla get tagstringatt)))(=val(strcase(vla get textringatt)))(vlaxobj'getattributes))(ssdelent sel))(if(

Madruga_SP 发表于 2022-7-6 07:20:46

李太棒了!!!
 
:值得注意:
 
工作起来很有魅力。
 
非常感谢
页: [1]
查看完整版本: 查找标记值