风魔飘香 发表于 2003-11-25 16:51:00

如何得到DWG中BlockReference的总数?

请各位老大帮忙。

topirol 发表于 2003-11-25 17:05:00

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

风魔飘香 发表于 2003-11-25 17:08:00

这个方法我知道。但在我的程序中不方便使用,主要是效率的问题。因为我要将DWG中所有BlockReference的坐标,我需要将这些坐标保存在一个二维数组中。原本可以动态生成数组的,但由于COM之间传递数组的问题。所以需要事先知道BlockReference的总数。

subtlation 发表于 2003-11-25 17:28:00

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

subtlation 发表于 2003-11-25 17:37:00

我这个和2楼的程序运行结果不一样,不知道怎么回事。
我自己的一个图纸中运行我的结果是:11077
而运行2楼的结果是:1074
有哪位能指点一下吗?

topirol 发表于 2003-11-25 18:05:00

呵呵,经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

subtlation 发表于 2003-11-25 18:16:00

受教了。得多看看dxf参考才行。

风魔飘香 发表于 2003-11-26 09:05:00

先谢谢各位。兄弟先试一下。

风魔飘香 发表于 2003-11-26 10:35:00

可以了。谢谢。但还有一个问题。我想知道ssetobj.Select acSelectionSetAll, , , FilterType, FilterData中FilterType和FilterData这两个参数的取值范围是什么?为什么FilterType为0,FilterData为"insert"。在哪儿可以查到?谢谢。

subtlation 发表于 2003-11-26 11:05:00

使用autocad自带的VBA帮助,
FilterType, FilterData的取值和参数说明可以看autocad中开发人员帮助中的DXF参考。
页: [1] 2
查看完整版本: 如何得到DWG中BlockReference的总数?