VBA - 过滤多个 AutoCAD 块
VBA - filter more than one AutoCAD block
我最近开始编码 VBA,我对我在网上找到的一个例子有疑问。
以下示例用于按名称过滤 AutoCAD 块。
如果我想在选择中插入不止一种类型的块,我该怎么办?
我们将不胜感激任何帮助
我试过了
grpValue(0) = "testBlock1" & "testBlock2" & "testBlock3"
但无济于事。
例子:
Dim sset As AcadSelectionSet
Set sset = ThisDrawing.SelectionSets.Add("TestSet2")
Dim filterType As Variant
Dim filterData As Variant
Dim p1(0 To 2) As Double
Dim p2(0 To 2) As Double
Dim grpCode(0) As Integer
grpCode(0) = 2
filterType = grpCode
Dim grpValue(0) As Variant
grpValue(0) = "testBlock"
filterData = grpValue
sset.Select acSelectionSetAll, p1, p2, filterType, filterData
Debug.Print "Entities: " & str(sset.count)
sset.Delete
End Sub
找到了,很简单
grpValue(0) = "testBlock1,testBlock2,testBlock3"
您可以通过以下两种方式之一解决此问题:
1。通配符运算符
您可以利用 Select
方法的过滤器列表参数在比较字符串值时接受 wildcard operators 的事实,因此,您可以使用逗号 (,
)将每个 "pattern" 分开,例如:
grpValue(0) = "testBlock1,testBlock2,testBlock3"
或者,如果您的块名称确实符合上述命名约定,您可以使用以下等效的通配符模式:
grpValue(0) = "testBlock[123]"
2。逻辑运算符
或者,您可以使用 logical operators <OR
和 OR>
在过滤器列表中的多个 DXF 组 2 条目之间实现 OR
逻辑,例如:
grpCode(0) = -4
grpValue(0) = "<OR"
Dim i As Integer: i = 1
Dim b
For Each b In Split("testBlock1 testBlock2 testBlock3")
grpCode(i) = 2
grpValue(i) = b
i = i + 1
Next b
grpCode(i) = -4
grpValue(i) = "OR>"
我最近开始编码 VBA,我对我在网上找到的一个例子有疑问。 以下示例用于按名称过滤 AutoCAD 块。
如果我想在选择中插入不止一种类型的块,我该怎么办?
我们将不胜感激任何帮助
我试过了
grpValue(0) = "testBlock1" & "testBlock2" & "testBlock3"
但无济于事。
例子:
Dim sset As AcadSelectionSet
Set sset = ThisDrawing.SelectionSets.Add("TestSet2")
Dim filterType As Variant
Dim filterData As Variant
Dim p1(0 To 2) As Double
Dim p2(0 To 2) As Double
Dim grpCode(0) As Integer
grpCode(0) = 2
filterType = grpCode
Dim grpValue(0) As Variant
grpValue(0) = "testBlock"
filterData = grpValue
sset.Select acSelectionSetAll, p1, p2, filterType, filterData
Debug.Print "Entities: " & str(sset.count)
sset.Delete
End Sub
找到了,很简单
grpValue(0) = "testBlock1,testBlock2,testBlock3"
您可以通过以下两种方式之一解决此问题:
1。通配符运算符
您可以利用 Select
方法的过滤器列表参数在比较字符串值时接受 wildcard operators 的事实,因此,您可以使用逗号 (,
)将每个 "pattern" 分开,例如:
grpValue(0) = "testBlock1,testBlock2,testBlock3"
或者,如果您的块名称确实符合上述命名约定,您可以使用以下等效的通配符模式:
grpValue(0) = "testBlock[123]"
2。逻辑运算符
或者,您可以使用 logical operators <OR
和 OR>
在过滤器列表中的多个 DXF 组 2 条目之间实现 OR
逻辑,例如:
grpCode(0) = -4
grpValue(0) = "<OR"
Dim i As Integer: i = 1
Dim b
For Each b In Split("testBlock1 testBlock2 testBlock3")
grpCode(i) = 2
grpValue(i) = b
i = i + 1
Next b
grpCode(i) = -4
grpValue(i) = "OR>"