找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 924|回复: 17

[VBA程序]:vba的过滤选择为什么不行呢?

[复制链接]
发表于 2004-6-27 19:36:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
下面是acad2004帮助中带的实例,但是后半部分 ' Add all the Circles to the selection set that lie within the crossing of (28,17,0) and
    ' (-3.3, -3.6,0) by filtering from the current drawing  过滤圆为什么不起作用呢?运行后ssetObj.Count的值仍是所有的实体数量。而不只是圆的数量。


Sub Example_Select()
    ' This example adds members to a selection set, first by crossing and
    ' then by filtering for circles.
   
    ' Create the selection set
    Dim ssetObj As AcadSelectionSet
    Set ssetObj = ThisDrawing.SelectionSets.Add("SSET")
   
   
    ' Add all object to the selection set that lie within a crossing of (28,17,0) and
    ' (-3.3, -3.6,0)
    Dim mode As Integer
    Dim corner1(0 To 2) As Double
    Dim corner2(0 To 2) As Double
   
    mode = acSelectionSetCrossing
    corner1(0) = 28: corner1(1) = 17: corner1(2) = 0
    corner2(0) = -3.3: corner2(1) = -3.6: corner2(2) = 0
    ssetObj.Select mode, corner1, corner2
   
    ' Add all the Circles to the selection set that lie within the crossing of (28,17,0) and
    ' (-3.3, -3.6,0) by filtering from the current drawing
    Dim gpCode(0) As Integer
    Dim dataValue(0) As Variant
    gpCode(0) = 0
    dataValue(0) = "Circle"
   
    Dim groupCode As Variant, dataCode As Variant
    groupCode = gpCode
    dataCode = dataValue
   
    ssetObj.Select mode, corner1, corner2, groupCode, dataCode
   
End Sub
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-6-27 19:42:15 | 显示全部楼层
ssetObj.Clear
ssetObj.Select mode, corner1, corner2, groupCode, dataCode
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-6-28 09:28:46 | 显示全部楼层
对了,前面已经全局选择了。再选择一次,实体个数还是原来的。
ssetObj.Clear只是清除ssetObj的内容还是删除本身?我觉得是删除内容。删除选择集是不是只能用AcadApp.ActiveDocument.SelectionSets.Item().Delete方式?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-28 10:41:43 | 显示全部楼层
这是选择集的几个容易混淆的概念
Delete方式删除选择集
Clear方式清除选择集,但不删除选择集内的实体
Erase方式删除选择集内的实体
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-6-28 18:12:39 | 显示全部楼层
请问我要选择过滤几种实体,例如line和circle,是不是要改这几行代码?应该怎么改?

Dim gpCode(0) As Integer
Dim dataValue(0) As Variant
gpCode(0) = 0
dataValue(0) = "Circle"
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-28 20:40:30 | 显示全部楼层
过滤器的值用逗号隔开,可以选择几种条件,如
dataValue(0) = "Circle,Line"
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-6-28 20:53:08 | 显示全部楼层
Oo。
那为什么dataValue(0)是一个数组形式呢?我还以为设置dataValue(1)="line"就行了。结果不行。

如果已建立了一个选择集ssetObj,里面包含了line、circle实体,能否对这个选择集再做过滤,将其中的line实体挑出来作为一个选择集?如果可以,应该如何做?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-28 21:03:55 | 显示全部楼层
帮助里有的,先看看帮助

The following selection modes are available:

Window

Selects all objects completely inside a rectangular area whose corners are defined by Point1 and Point2.

Crossing

Selects objects within and crossing a rectangular area whose corners are defined by Point1 and Point2.

Previous

Selects the most recent selection set. This mode is ignored if you switch between paper space and model space and attempt to use the selection set.

Last

Selects the most recently created visible objects.

All

Selects all objects.

[Code]
Sub Test()
Dim ss1 As AcadSelectionSet
Dim ss2 As AcadSelectionSet
Dim ft(0) As Integer, fd(0)
Set ss1 = ThisDrawing.SelectionSets.Add("*Tls1*")
Set ss2 = ThisDrawing.SelectionSets.Add("*Tls2*")
ss1.Select acSelectionSetAll
ft(0) = 0: fd(0) = "Line"
ss2.Select acSelectionSetPrevious, , , ft, fd

MsgBox ss2.Count
ss1.Delete
ss2.Delete
End Sub
[/Code]
另外,一般情况下,过滤器的每条是“与”的关系
加入"or"构成“或”关系
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-6-28 21:29:34 | 显示全部楼层
但是acSelectionSetPrevious只能选择前一个选择集,对于不是前一个而是前几个的已知名称的选择集还能过滤吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-28 21:35:03 | 显示全部楼层
我没试过,一般也用不了3个或3个以上的选择集吧,我的程序里最多用到2个
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-6-28 21:44:58 | 显示全部楼层
Oo  可能编程中暂时用不到,

另外,一般情况下,过滤器的每条是“与”的关系
加入"or"构成“或”关系  

这是什么意思?我发现我真得很菜。55555。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-28 21:49:03 | 显示全部楼层
附件是一个构成“或”关系的例子
“与”关系相当与
i的Dxf码0="Line" and i的Dxf码0="Circle"
“或”关系相当与
i的Dxf码0="Line" or i的Dxf码0="Circle"
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-6-29 13:14:35 | 显示全部楼层
总算对过滤码有一些了解了。谢谢

我感觉vba建立选择集做过滤操作时效率还是很高的,就是读取选择集内实体数据时效率很低,不知有没有什么办法提高?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-29 16:08:36 | 显示全部楼层
既然用VBA,用ActiveX技术,对速度就不要强求,我以前编过一个Excel表格转入AutoCad的VBA程序,一个26×100的表格花了6-8秒,无奈
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-6-29 17:33:29 | 显示全部楼层
说不定用lisp还快一些
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-24 02:44 , Processed in 0.498309 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表