非常感谢,n元。因此,缺乏成功的原因确实是我知道有命名块引用,而我的代码没有找到它们。它确实找到了块引用,但没有找到我知道存在的名称
系统的大部分使用COM风格的编程,最后我用这种方法编写了例程,只是为了让它正常工作:
- Private Function GetBlockReferenceFromList(ByVal thisDrawing As AcadDocument, ByVal listOfBlockRefNames As List(Of String)) As List(Of AcadBlockReference)
- Dim listOfBlockRef As New List(Of AcadBlockReference)
- Dim blockRef As AcadBlockReference
- Dim selectionSet As AcadSelectionSet = Nothing
- Dim filterType(1) As Short
- Dim filterData(1) As Object
- Try
- selectionSet = CreateSelSet(thisDrawing, "RemoveBlockReferences")
- filterType(0) = 0
- filterData(0) = "INSERT"
- filterType(1) = 8
- filterData(1) = "SLABOUTLINE"
- selectionSet.Select(AcSelect.acSelectionSetAll, , , filterType, filterData)
- If selectionSet.Count > 0 Then
- For Each blockRef In selectionSet
- If listOfBlockRefNames.Contains(blockRef.Name) Then
- listOfBlockRef.Add(blockRef)
- End If
- Next
- End If
- Catch ex As Exception
- MsgBox("HollowCore_RemoveObjects.GetBlockReferenceFromList : " & ex.Message, MsgBoxStyle.OkOnly, EasiCADException.EasiCADErrorTitle)
- Finally
- If Not IsNothing(selectionSet) Then
- selectionSet.Clear()
- End If
- DelSelSet(thisDrawing, "RemoveBlockReferences")
- End Try
- Return listOfBlockRef
- End Function
然而,我希望尽可能远离COM,所以我会在有时间的时候使用您的指针进一步研究
所讨论的块和块引用名称是数字,因此不考虑大小写敏感度……但了解这一点很有用。谢谢。我在编辑那里注意到了这一点。GetString函数。
关于块是否是动态的,我不确定。系统使用AcadDocument.Blocks。添加函数以添加块和AcadDocument.ModelSpace。用于BlockReferences的InsertBlock函数(我无法理解为什么名为InsertBlocks的例程返回BlockReference)。 |