如何得到DWG中BlockReference的总数?
请各位老大帮忙。 Sub k()Dim k As AcadEntity
Dim i As Integer
i = 0
For Each k In ThisDrawing.ModelSpace
If k.ObjectName = "AcDbBlockReference" Then
i = i + 1
End If
Next
MsgBox i
End Sub
这个方法我知道。但在我的程序中不方便使用,主要是效率的问题。因为我要将DWG中所有BlockReference的坐标,我需要将这些坐标保存在一个二维数组中。原本可以动态生成数组的,但由于COM之间传递数组的问题。所以需要事先知道BlockReference的总数。 Public Function k()
Dim ssetobj As AcadSelectionSet
Set ssetobj = ThisDrawing.SelectionSets.Add("ss")
Dim FType(0) As Integer
Dim FData(0) As Variant
FType(0) = 0
FData(0) = "BlockRef"
Dim FilterType As Variant
Dim FilterData As Variant
FilterType = FType
FilterData = FData
ssetobj.Select acSelectionSetAll, FilterType, FilterData
k = ssetobj.Count
MsgBox k
ssetobj.Delete
End Function 我这个和2楼的程序运行结果不一样,不知道怎么回事。
我自己的一个图纸中运行我的结果是:11077
而运行2楼的结果是:1074
有哪位能指点一下吗? 呵呵,经efan指点发现是 ssetobj.Select acSelectionSetAll, , , FilterType, FilterData
的问题
Public Function k()
Dim ssetobj As AcadSelectionSet
Set ssetobj = ThisDrawing.SelectionSets.Add("ss")
Dim FType(0) As Integer
Dim FData(0) As Variant
FType(0) = 0
FData(0) = "insert"
Dim FilterType As Variant
Dim FilterData As Variant
FilterType = FType
FilterData = FData
ssetobj.Select acSelectionSetAll, , , FilterType, FilterData
k = ssetobj.Count
MsgBox k
ssetobj.Delete
End Function 受教了。得多看看dxf参考才行。 先谢谢各位。兄弟先试一下。 可以了。谢谢。但还有一个问题。我想知道ssetobj.Select acSelectionSetAll, , , FilterType, FilterData中FilterType和FilterData这两个参数的取值范围是什么?为什么FilterType为0,FilterData为"insert"。在哪儿可以查到?谢谢。 使用autocad自带的VBA帮助,
FilterType, FilterData的取值和参数说明可以看autocad中开发人员帮助中的DXF参考。
页:
[1]
2