pckite
发表于 2004-11-16 09:45:00
不愧是班主啊
mccad
发表于 2004-11-19 21:03:00
还有一个建议,我最讨厌ActiveX中,有时只需要一个对象,但去还要去建一个一个元素的数组来放这么一个对象,太烦了。<BR>所以最好在添加对象到选择集中或从选择集中去除对象能够做到单个对象和多个对象兼容。
雪山飞狐_lzh
发表于 2004-11-20 09:25:00
Add和AddItems函数,Remove和RemoveItems函数是处理这种情况的
老大的意思是不是把它们合并?
如果在.Net或C++里有函数重载好办,
VBA里如果强行做在一起,我的感觉是不太好
mccad
发表于 2004-11-20 21:08:00
记住这种操作在AutoCAD对象模型的某个方法是有用过,在Excel中用得比较多吧。
就象这样:Sub ss()
Dim SSet As AcadSelectionSet
Set SSet = PickFirstSSet
Dim pnt, ent As AcadEntity
ThisDrawing.Utility.GetEntity ent, pnt
AddItems SSet, ent
SSet.Highlight True
MsgBox "显示刚选择并添加新对象的选择集"
SSet.Highlight False
End Sub
Function PickFirstSSet() As AcadSelectionSet
On Error Resume Next
ThisDrawing.SelectionSets("PICKFIRST").Delete
Set PickFirstSSet = ThisDrawing.PickfirstSelectionSet
If PickFirstSSet.Count = 0 Then PickFirstSSet.SelectOnScreen
End Function
Sub AddItems(SSet As AcadSelectionSet, Entitys As Variant)
If IsArray(Entitys) Then
SSet.AddItems Entitys
ElseIf IsObject(Entitys) Then
Dim Entity(0) As AcadEntity
Set Entity(0) = Entitys
SSet.AddItems Entity
End If
End Sub
雪山飞狐_lzh
发表于 2004-11-23 13:31:00
那就改成这样吧
Public Sub AddItems(ByVal objs)<BR>'向选择集加入实体<BR>On Error Resume Next<BR> <BR> If IsArray(objs) Then<BR> oSel.AddItems objs<BR> ElseIf IsObject(objs) Then<BR> Dim ents(0) As AcadEntity<BR> Set ents(0) = objs<BR> oSel.AddItems ents<BR> End If<BR> <BR>End Sub
Public Sub RemoveItems(ByVal objs)<BR>'在选择集中移除实体<BR>On Error Resume Next<BR> <BR> If IsArray(objs) Then<BR> oSel.RemoveItems objs<BR> ElseIf IsObject(objs) Then<BR> Dim ents(0) As AcadEntity<BR> Set ents(0) = objs<BR> oSel.RemoveItems ents<BR> End If<BR> <BR>End Sub<BR>
我顺便把实用函数的BuildFilter加进来了,:)
Public Sub SetFilter(ParamArray Filter())<BR>'设置过滤器<BR>On Error Resume Next<BR> <BR> Dim i<BR> Dim n As Integer<BR> Dim nCount As Integer<BR> nCount = (UBound(Filter) + 1) / 2 - 1<BR> <BR> Dim ft() As Integer, fd()<BR> ReDim ft(nCount), fd(nCount)<BR> <BR> For i = 0 To nCount<BR> n = i * 2<BR> ft(i) = Filter(n)<BR> fd(i) = Filter(n + 1)<BR> Next i<BR> <BR> TlsFt = ft<BR> TlsFd = fd
End Sub<BR>
tiger8888
发表于 2004-11-24 13:02:00
两位真是高手,就这样说着说着,又解决了cad的一个麻烦
liub1979
发表于 2004-11-26 20:38:00
good
mccad
发表于 2004-11-26 21:09:00
再提个要求吧:<BR>把选择集的并集和差集也写到AddItems和RemoveItems中吧。
雪山飞狐_lzh
发表于 2004-11-26 22:36:00
可以这样:<BR>ss1.additems ss2.toarray
ss1.removeitems ss2.toarray
仍在江湖
发表于 2005-1-30 00:06:00
牛人,解决了选择集方面的大问题,太感谢了.