Jeff_M 发表于 2007-4-2 09:31:33

在整个图形中循环

我有一点困难,在下面的例子中,我在模型空间中循环,并用图形中的块引用填充我的列表框。但是,我不知道如何同时循环浏览整个图形(图纸和模型空间)
如果有人能帮我,我'我很感激
谢谢你,马克For Each Obj In ThisDrawing.ModelSpace
If TypeOf Obj Is AcadBlockReference Then
ListBox1.AddItem (Obj.Name)
End If

下一个目标

Jeff_M 发表于 2007-4-2 10:19:46

您正在使用选择集吗?或者你考虑过吗
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

Jeff_M 发表于 2007-4-2 11:09:52

如果你没有'如果不想使用选择集(使用ObjectDBX时就是这种情况),则需要遍历Layouts集合,然后遍历它们的每个块For Each oLayout in Doc
   For Each oEnt in oLayout.Block
.....

Jeff_M 发表于 2007-4-3 10:52:52


很酷。这两种方法都有意义
谢谢你;

Jeff_M 发表于 2007-4-3 10:55:22


实际上,我不'我认为你可以通过布局访问blocks集合

Jeff_M 发表于 2007-4-3 12:18:43


我不'我不认为这就是杰夫的意思
;“块”;布局对象的属性是访问表示该布局的块表记录的方式。

Jeff_M 发表于 2007-4-3 12:51:23

即#039;没错,查克
现在,如果我无意中在oLayout中添加了一个s。块,那么这将给出一个错误,正如马克所想……但我尽量不犯那种打字错误

Jeff_M 发表于 2007-4-3 13:15:51


哦,我明白了,这将返回布局的名称(我认为)
不,我要找的是插入到纸中的块引用
上面的选择集方法可以很好地工作
谢谢你,马克

Jeff_M 发表于 2007-4-4 08:31:10

标记-
将此代码放在表单上的命令按钮中,然后看看会发生什么:
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

Jeff_M 发表于 2007-4-4 10:12:36

这是很好的信息。我终于有点明白了。如果我没有弄错的话,这与.NET中的处理方式非常相似。如果我错了,请有人纠正我。理解这一点是件好事,尽管它看起来有点复杂,因为如果你想最终转移到let 35;039;比如说VB.NET,你必须对使用这种方法有一个坚定的理解。
页: [1] 2
查看完整版本: 在整个图形中循环