遍历整个图形
在下面的示例中,我遇到了一点困难,我在模型空间中循环,并用图形中的块引用填充列表框。但是,我不知道如何在同一时间遍历整个图形(图纸和模型空间)谢谢
马克
For Each Obj In ThisDrawing.ModelSpace
If TypeOf Obj Is AcadBlockReference Then
ListBox1.AddItem (Obj.Name)
End If
下一个Obj
**** Hidden Message ***** 您正在使用选择集吗?或者你考虑过吗
Set objSelCol = objDoc.SelectionSets
For Each objSelSet In objSelCol
If objSelSet.Name = "blk_out" Then
objSelSet.Delete
Exit For
End If
Next objSelSet
Set objSelSet = objSelCol.Add("blk_out")
intType(0) = 0
varData(0) = "INSERT"
objSelSet.Select 5, filtertype:=intType, _
filterdata:=varData
For Each objEnt In objSelSet
如果您不想使用选择集(使用ObjectDBX时会出现这种情况),则需要遍历Layouts集合,然后遍历它们的每个块。
For Each oLayout in Doc
For Each oEnt in oLayout.Block
.....
酷。两种方法都有意义。
谢谢
实际上,我不认为您可以通过布局访问块集合
标记 我不认为
这是杰夫的意思。
布局对象的“Block”属性是访问表示该布局的块表记录的方式。 没错,查克。
现在,如果我无意中在oLayout.Block中添加了一个s,那么就会像马克所想的那样出现错误......但是我确实尽量不犯那种打字错误
哦,我明白了,这将返回布局的名称(我想)
不,我要找的是插入到纸张中的块引用。
上面的选择集方法可以很好地工作。
谢谢你
马克 Mark -
将此代码放入窗体上的命令按钮中,看看会发生什么:
Dim Doc As AcadDocument
Dim oLayout As AcadLayout
Dim oEnt As AcadEntity
Set Doc = ThisDrawing
For Each oLayout In Doc.Layouts
For Each oEnt In oLayout.Block
If TypeOf oEnt Is AcadBlockReference Then
ListBox1.AddItem (oEnt.Name)
End If
Next oEnt
Next oLayout
这将遍历图形中的每个布局,并将任何块引用添加到列表框中。
这就是Jeff和Chuck试图引导您的地方。事实上,图形中的每个布局都是一个可以包含对象的块。您可以循环访问块并查找块中包含的对象,就像循环访问模型空间或图纸空间一样。高温 这是很好的信息。我终于有点明白了。如果我没弄错的话,这和. NET中的方法非常相似。如果我错了,请有人纠正我。理解这一点是件好事,尽管它看起来有点复杂,因为如果你想最终转向VB.NET,你必须对使用这种方法有一个坚定的理解。
页:
[1]
2