draw 发表于 2003-9-14 10:11:00

特定图层上特定文本的过滤器设置问题

在实体选择中使用过滤机制时,要选的实体是文本Text,且这些Text全在某一特定层上,如Dm层上。其中组码FilterType及组码值FilterData能否组合?怎样组合?
    材料中介绍的组码值FilterData可以使用同配符。
    如:FData(0)=“S*,C*”语句可以选择以S和C开头的实体类型,即样条曲线(Soline)和(Circle)圆。

draw 发表于 2003-9-14 11:53:00

我找到了一个解决办法。

mccad 发表于 2003-9-14 12:27:00

既然自己找到了方法,不防写出来大家共享。
另外,以后提问题时请在主题中写清楚提问的主要内容,以方便大家浏览及回答,不要每次提问都写上“这个问题怎样解决”,我记得你已经写了这样的主题有几次了,这样不利于大家的浏览,也不利于自己查看。

draw 发表于 2003-9-14 17:56:00

首先用令组码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

draw 发表于 2003-9-14 17:59:00

(pic.Handle)应为(enobj.Handle)

efan2000 发表于 2003-9-14 19:25:00

有点问题:
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"

draw 发表于 2003-9-14 22:25:00

明白了,将下列四句:
    filtertype(0) =8
    filterdata(0) =“Dm”
    filtertype(1)=0
    filtertype(1)="Text"
组合成过滤机制,就是问题之所在!不过我找到的办法确实运行通过了。
    多谢!
页: [1]
查看完整版本: 特定图层上特定文本的过滤器设置问题