特定图层上特定文本的过滤器设置问题
在实体选择中使用过滤机制时,要选的实体是文本Text,且这些Text全在某一特定层上,如Dm层上。其中组码FilterType及组码值FilterData能否组合?怎样组合?材料中介绍的组码值FilterData可以使用同配符。
如:FData(0)=“S*,C*”语句可以选择以S和C开头的实体类型,即样条曲线(Soline)和(Circle)圆。 我找到了一个解决办法。 既然自己找到了方法,不防写出来大家共享。
另外,以后提问题时请在主题中写清楚提问的主要内容,以方便大家浏览及回答,不要每次提问都写上“这个问题怎样解决”,我记得你已经写了这样的主题有几次了,这样不利于大家的浏览,也不利于自己查看。 首先用令组码FilterType=8,组码值FilterData=“Dm”
ssetobj.Select acSelectionSetAll, , , filtertype, filterdata
这时的选择集中均为实体
定义二个对象变量分别为textobj,entobj
在选择集中遍历entobj实体,同时用其句柄设置textobj选择集
这时就可以对textobj选择集进行操作了。
Dim textobj As AcadText
filtertype =8
filterdata =“Dm”
ssetobj.Select acSelectionSetAll, , , filtertype, filterdata
Dim enobj As AcadEntity
For Each enobj In ssetobj
Set textobj = acadapp.ActiveDocument.HandleToObject(pic.Handle)
na = textobj.TextString
Next (pic.Handle)应为(enobj.Handle) 有点问题:
1、如果enobj是文字对象,那么通过它的句柄再转成对象就多此一举了吧。直接使用Set textobj = enobj就可以了。
2、如果enobj不是文字对象,那么即使通过它的句柄转成对象,所得到的依然不是文字对象,这时不管使用Set textobj = acadapp.ActiveDocument.HandleToObject(pic.Handle),还是Set textobj = enobj都会发生错误,对象的类型不一致。
3、如果仅得到文字对象,那么选择的应该只选择Dm层上的文字。此时构成过滤机制应该为:
filtertype(0) =8
filterdata(0) =“Dm”
filtertype(1)=0
filtertype(1)="Text" 明白了,将下列四句:
filtertype(0) =8
filterdata(0) =“Dm”
filtertype(1)=0
filtertype(1)="Text"
组合成过滤机制,就是问题之所在!不过我找到的办法确实运行通过了。
多谢!
页:
[1]