在整个图形中循环
我有一点困难,在下面的例子中,我在模型空间中循环,并用图形中的块引用填充我的列表框。但是,我不知道如何同时循环浏览整个图形(图纸和模型空间)如果有人能帮我,我';我很感激
谢谢你,马克For Each Obj In ThisDrawing.ModelSpace
If TypeOf Obj Is AcadBlockReference Then
ListBox1.AddItem (Obj.Name)
End If
下一个目标
您正在使用选择集吗?或者你考虑过吗
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
.....
很酷。这两种方法都有意义
谢谢你;
实际上,我不';我认为你可以通过布局访问blocks集合
我不';我不认为这就是杰夫的意思
;“块”;布局对象的属性是访问表示该布局的块表记录的方式。 即#039;没错,查克
现在,如果我无意中在oLayout中添加了一个s。块,那么这将给出一个错误,正如马克所想……但我尽量不犯那种打字错误
哦,我明白了,这将返回布局的名称(我认为)
不,我要找的是插入到纸中的块引用
上面的选择集方法可以很好地工作
谢谢你,马克 标记-
将此代码放在表单上的命令按钮中,然后看看会发生什么:
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
这将遍历图形中的每个布局,并将任何块引用添加到列表框
这就是杰夫和查克试图带领你的地方。事实上,图形中的每个布局都是一个可以包含对象的块。您可以在块中循环并查找块中包含的对象,就像在模型空间或纸张空间中循环一样
HTH 这是很好的信息。我终于有点明白了。如果我没有弄错的话,这与.NET中的处理方式非常相似。如果我错了,请有人纠正我。理解这一点是件好事,尽管它看起来有点复杂,因为如果你想最终转移到let 35;039;比如说VB.NET,你必须对使用这种方法有一个坚定的理解。
页:
[1]
2