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 <OROR> 在过滤器列表中的多个 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>"