-
1.
在创建对象的
同时可以直接引用
.
以前的例程中已经做过多次了
,
现在复习一
下
,
看例程
:
先随机画
30
0
个圆
,
在画圆时直接引用
,
然后再把这些圆根本大小
修改颜色
.
Sub c300()
Dim
myselect(0 To 300) As AcadEntity
'
定义选择集数组
Dim pp(0
To 2) As Double '
圆心坐标
For i = 0 To 300 '
循环
< br>300
次
pp(0) =
3000 * Rnd: pp(1) = 3000 * Rnd: pp(2) = 0
'
设置圆心坐标
Set
myselect(i) = cle(pp, Rnd * 30 + 1)
'
画不同大小的圆
Next i
For i = 1 To 300
If myselect(i).Radius > 10 Then
'
判断圆的直径是否大于
10
myselect(i).color = Int(255 * Rnd + 1)
'
大圆颜色改为随机数
Else
myselect(i).color = 0
'
小圆改为白色
End If
Next i
ZoomExtents
'
缩放到显示全部对象
End Sub
pp(0) = 3000 * Rnd: pp(1) =
3000 * Rnd: pp(2) = 0
这一行实际上应该是三条语句
,
用三行合并为一行
,
用冒号分开
rnd
是随机数函数
p>
,
它的数值为
0-1
之间的小数
,3000*rnd
得到的数值就是在
0-3000
之间的随机数
Set myselect(i) = cle(pp, Rnd * 30 + 1)
这条语句的作用是以
pp
点坐标为圆心
,
画一个圆
,
半径是
1-30
之间的随机数
,
赋
值给
myselect
选择集
.
提标用户在屏幕中选取
选择语句这样写
:Set sset = (
< br>其
中”ss1”是一个选择集名称
,
这个参数可以随意写一个
,
注意不要重复就可以了
.
下面的例程是让用户选择对象
,
然后把选中的对象改为绿色
,
最后把选择集删除<
/p>
Sub mysel()
Dim sset As AcadSelectionSet
'
定义选择集对象
Dim
element As AcadEntity
'
定义选择集中的元素对象
Set
sset = (
新建一个选择集
OnScreen '
提示用户选择
For Each element In sset
'
在选择集中进行循环
=
acGreen '
改为绿色
Next
'
删除选择集
End Sub
3.
选择全部对象
< br>用
select
方法
,
参数为
acSelectionSetAll
,
看例程
,
这个程序选择全部对象
p>
,
显
示选中的对象
,
并计算对象数
.
Sub
allsel()
Dim sel1 As AcadSelectionSet
'
定义选择集对象
Set sel1
= (
新建一个选择集
Call
(acSelectionSetAll) '
全部选中
ght (True)
'
显示选择的对象
sco=
'
计算选择集中的对象数
MsgBox
选中对象数
:
显示对话框
End Sub
3.
运用
select
方法
上面的例题已经运用了
select
方法
,
下面讲一下
select
的
5
种选择方式
p>
:
1:
择全部对象
(acselectionsetall)
2.
选择上次创
建的对象
(acselectionsetlast)
3.<
/p>
选择上次选择的对象
(acselectionsetprevi
ous)
4.
选择矩形窗口内对象
(
acselectionsetwindow)
5.
选择矩形
窗口内以及与边界相交的对象
(acselectionsetcrossing) <
/p>
还是看代码来学习
.
其中选择语句是
p>
:
Call (Mode, p1, p2)
< br>Mode
已经定义为
5,
也就是
选择矩形窗口内以及与边界相交的对象
,p1
和
p2
是两
个点坐标
,
Sub selnew()
Dim sel1 As
AcadSelectionSet '
定义选择集对象
Dim p1(0 To 2) As Double
'
坐标
1
Dim p2(0 To
2) As Double '
坐标
2
p1(0) = 0: p1(1) = 0: p1(2) = 0
'
设置坐标
1
p2(0) =
300: p2(1) = 300: p2(2) = 0
'
设置坐标
1
Mode = 5 '
把选择模式存入
mode
变量中
Set sel1 =
(
新建一个选择集
Call
(Mode, p1, p2) '
选择对象
ght (ture)
'
显示已选中的对象
End Sub
CAD
VBA
过滤器、选择集分享
我看到过
这个问题有好几次了,
当时只是把代码发给了个人,
现在把这些
代码贴出来,
建立
一个专题,
加以自己
的理解进行说明,
希望能对大家在工作中遇到选择集和过滤器问题有所
< br>帮助以供大家使用。这种方法建立选择集和过滤器我使用过千百遍,未出现过任何异常。
< br>
'
———————————————————————
———————————
'
名称:
BuildFilter
'
作者:罗简单
'
日期:
2008-3-11
'
功能:创建过滤器
'
——————————————————————————————————
Public Sub
BuildFilter(TypeArray, DataArray, ParamArray
gCodes())
Dim fType() As
Integer, fData()
Dim
index As Long, i As Long
index = LBound(gCodes) -
1
For i = LBound(gCodes)
To UBound(gCodes) Step 2
index = index + 1
ReDim Preserve fType(0 To index)
ReDim Preserve
fData(0 To index)
fType(index) = CInt(gCodes(i))
fData(index) =
gCodes(i + 1)
Next
TypeArray = fType:
DataArray = fData
End
Sub
'
———————————————————————
———————————
'
名称:<
/p>
CreateSelectionSet
'
作者:罗简单
'
日期:
2008-3-11
'
功能:创建选择集
'
——————————————————————————————————
Public Function
CreateSelectionSet(Optional ssName As String =
Dim ss As
AcadSelectionSet
On
Error Resume Next
Set ss
= ionSets(ssName)
If Err
Then Set ss = (ssName)
Set CreateSelectionSet =
ss
End Function
'
创建个过程来调用过滤器和选择集
Sub TestBuildFilterAndCteSset()
'
定义过滤器
Dim pType, pData
BuildFilter pType, pData,
0,
'
注意:这里的
0
与
8
是通过命令
(entget(car(entsel)))
获取的对象基本
'
特性,例如:
'*************************
**************************************************
**
*****
'((-1 .
<
图元名
: 7ef83b28>) (0 .
图元名
:
'7ef81cc0>) (5 .
'
'(38 . 0.0)
(39 . 0.0) (10 92.5011 35.6905) (40 . 0.0) (41 .
0.0) (42 . 0.0) (10
'208.946 102.652) (40 . 0.0) (41 . 0.0)
(42 . 0.0) (210 0.0 0.0 1.0))
'*********************************************
********************************
*****
'
其中比较常用的
(0 .
表示对象类型;
(8
.
表示对象所在层
'
所以还可以扩展或收缩过滤器,如下
'BuildFilter pType, pData,
0,
:建立图上所有的多段线过滤器
'BuildFilter pType, pData,
0,
:建立图层是
JZD
的多段线过
滤器
'BuildFilter
pType, pData, 0,
:建立图层是
JZD
p>
、颜色为绿色
的多段线过滤器
'
定义选择集
Dim sset As
AcadSelectionSet
Set sset
= CreateSelectionSet
'
根据以上指定的过滤器建立选择集
acSelectionSetAll, , , pType, pData
<
/p>
'
这里可以通过
Select
、
SelectAtPoint
、
SelectByPolygon
、
SelectOn
Screen
等方法
'
配合
Mode
和
Point1
、
Point2
建立更加用户化的选择集
End Sub
'
当在一个过程中连
续使用两个以上的选择集时,需要重新定义选择集,如下:
'
创建空间选择集的函数
2
Public Function
CreateSelectionSet2(Optional ssName As String =
Dim ss2 As
AcadSelectionSet
On
Error Resume Next
Set
ss2 = ionSets(ssName)
If
Err Then Set ss2 = (ssName)
Set
CreateSelectionSet2 = ss2
End Function
'
创建个过程来调用过滤器和选择集
Sub TestBuildFilterAndCteSset()
'
定义过滤器
Dim pType, pData
BuildFilter pType, pData,
0,
'
注意:这里的
0
与
8
是通过命令
(entget(car(entsel)))
获取的对象基本
'
特性,例如:
'*************************
**************************************************
**
*****
'((-1 .
<
图元名
: 7ef83b28>) (0 .
图元名
:
'7ef81cc0>) (5 .
'
'(38 . 0.0)
(39 . 0.0) (10 92.5011 35.6905) (40 . 0.0) (41 .
0.0) (42 . 0.0) (10
'208.946 102.652) (40 . 0.0) (41 . 0.0)
(42 . 0.0) (210 0.0 0.0 1.0))
'*********************************************
********************************
*****
'
其中比较常用的
(0 .
表示对象类型;
(8
.
表示对象所在层
'
所以还可以扩展或收缩过滤器,如下
'BuildFilter pType, pData,
0,
:建立图上所有的多段线过滤器
'BuildFilter pType, pData,
0,
:建立图层是
JZD
的多段线过
滤器
'BuildFilter
pType, pData, 0,
:建立图层是
JZD
p>
、颜色为绿色
的多段线过滤器
'
定义选择集
-
-
-
-
-
-
-
-
-
上一篇:1-5数控车床编程中的常用功能指令
下一篇:花草树木英语词汇