czbming 发表于 2003-12-9 15:32:00

请教:如何遍历某图层内的所有对象?

本以为 for each entity in layer (傻)

今晚打老虎 发表于 2003-12-9 15:56:00

差不多,判断以下不就行了~~~

for each objEntity in thisdrawing.modelspace
if objEntity.Layer="TestLayer" then
   '取出来了~~~~
end if
next objEntity

czbming 发表于 2003-12-9 16:23:00

......这...太费时了吧!~要是图形上有上千个对象就要循环上千次.!~有没更好的方法?

topirol 发表于 2003-12-9 16:26:00

用选择集过滤后再历遍选择集

今晚打老虎 发表于 2003-12-9 17:03:00

楼上的正解~~~~~~

3kd 发表于 2003-12-9 18:53:00

2楼的办法最简单但又最费时。4楼说用选择集,选择集怎么创建?用交互方式点取还是用遍历?能说清楚点吗?

czbming 发表于 2003-12-9 20:34:00

用选择集?那好象还是回到老问题:怎么过滤出某图层的对象??

czbming 发表于 2003-12-9 20:41:00

我有个笨笨的方法:
冻结其它图层只剩要遍历的图层.选择所有的对象加入选择集.再解冻.虽然可行.但还是较繁索.
希望哪位大大给小弟指条明路!~

efan2000 发表于 2003-12-9 21:01:00


Sub test()
    On Error Resume Next
    '创建选择集
    Dim SSetObj As Object
    Set SSetObj = ThisDrawing.SelectionSets("LayerCount")
    If Err.Number <> 0 Then
      Err.Clear
      Set SSetObj = ThisDrawing.SelectionSets.Add("LayerCount")
    End If
    SSetObj.Clear
   
    On Error GoTo ErrTrap
    '创建过滤机制
    Dim fType(0 To 0) As Integer
    Dim fData(0 To 0) As Variant
    fType(0) = 8: fData(0) = "0" ' 层名
   
    '选择0层的所有实体
    SSetObj.Select acSelectionSetAll, , , fType, fData
   
    '返回0层的实体数目
    Debug.Print SSetObj.Count
   
    '删除数组
    Erase fType: Erase fData
   
    '删除选择集
    SSetObj.Clear
    SSetObj.Delete
    Set SSetObj = Nothing
    Exit Sub
   
ErrTrap:
    MsgBox "出错了,请检查程序!"
    On Error GoTo 0
End Sub

zzg4028061 发表于 2003-12-10 09:39:00

我就是用9楼的办法,应该是最快的了
页: [1] 2
查看完整版本: 请教:如何遍历某图层内的所有对象?