AutoCAD顧問
還沒有註冊嗎...即日起免費註冊,所有最完整的AutoCAD討論、教學及資源都在論壇裡喔~

[討論]請問 使用過濾器 acSelectionSetAll 就不能下過濾條件嗎?

上一篇主題 下一篇主題 向下

[討論]請問 使用過濾器 acSelectionSetAll 就不能下過濾條件嗎?

發表 由 蜻蜓草 于 2013-07-23, 17:53

請問 使用過濾器 acSelectionSetAll 就不能下過濾條件嗎?

我把 SelectOnScreen 換成 acSelectionSetAll , 後面的FilterType, FilterData好像是不起作用的? 可是看說明應該是可以的啊..

sset.SelectOnScreen FilterType, FilterData
sset.Select acSelectionSetAll, , , FilterType, FilterData

我的想法是要全選 所有叫 DJ_V2 的圖塊, 不過, 目前看來好像要先選出所有圖塊, 再一個個去看是不是DJ_V2 的圖塊
目前 我有動態圖塊非動態圖塊2種.. DJ_v2 測出來了,動態的還搞不懂。。


Dim FilterType(0) As Integer
Dim FilterData(0)   As Variant

    On Error GoTo ErrorHandle1

FilterType(0) = 0
FilterData(0) = "insert"

fff:
Set sset = ThisDrawing.SelectionSets.Add("SS1")

sset.SelectOnScreen FilterType, FilterData
'sset.Select acSelectionSetAll, , , FilterType, FilterData
   
Dim entry As AcadEntity
For Each entry In sset
entry.color = acRed
entry.Update
Next entry

Exit Sub

ErrorHandle1:
ThisDrawing.SelectionSets.Item("SS1").Delete
    GoTo fff
end sub


蜻蜓草 在 2013-07-26, 10:30 作了第 1 次修改
avatar
蜻蜓草
一般會員
一般會員

文章總數 : 74
年齡 : 40
來自 : 南投
職業 :
愛好 : 電影
個性 : 溫和
使用年資 : 新手初學
使用版本 : 新手初學
經驗值 : 2381
威望值 : 0
注冊日期 : 2012-08-16
男 雙魚座 蛇

回頂端 向下

回復: [討論]請問 使用過濾器 acSelectionSetAll 就不能下過濾條件嗎?

發表 由 ginse0727 于 2013-07-23, 23:19

給你個範例參考,這是我以前去上課學VBA時,老師課堂上給的範例,
你研究看看就知道你那裡用錯了!

代碼:

'********************************************************************
'* 巨集名稱 : CalPolyLineTotalArea()
'* 功 能 : 顯示圖面所有的Polyline總面積和
'*
Public Sub CalPolyLineTotalArea()
    Dim objAcadSelectionSet As AcadSelectionSet
    Dim strName As String
    Dim objAcadEntity As AcadEntity
    Dim aintFilterType(0 To 3) As Integer
    Dim avarFilterData(0 To 3) As Variant
    Dim dblAreaSum As Double
    
    '設定如果發生錯誤則則跳至 ExitHandle 位置
    On Error GoTo ExitHandle
 
    With ThisDrawing.Utility
    
        '若發生錯誤則繼續執行下一行
        On Error Resume Next
        
        ' Delete 方法可刪除一個選集物件
        ThisDrawing.SelectionSets.Item("TestSelectionSetFilter").Delete
        
        '如果發生錯誤則清除清除錯誤內容,修改錯誤處理方式
        If Err Then
            Err.Clear
            '設定如果發生錯誤則則跳至 ExitHandle 位置
            On Error GoTo ExitHandle
        End If
        
        ' 建立新的選擇集
        Set objAcadSelectionSet = ThisDrawing.SelectionSets.add("TestSelectionSetFilter")
                
        '設定過濾圖面上物件的條件
        aintFilterType(0) = -4:    avarFilterData(0) = "<OR"
        aintFilterType(1) = 0:     avarFilterData(1) = "POLYLINE"
        aintFilterType(2) = 0:     avarFilterData(2) = "LWPOLYLINE"
        aintFilterType(3) = -4:    avarFilterData(3) = "OR>"
        
        '執行過濾的動作
        objAcadSelectionSet.Select acSelectionSetAll, , , aintFilterType, avarFilterData
      
        '突顯出所選擇的物件
        objAcadSelectionSet.Highlight True
        
        '暫停,等待使用者輸入任意鍵才進行改變
        .Prompt vbCr & objAcadSelectionSet.Count & " 個物件被選擇"
        .GetString False, vbLf & " 輸入任意鍵繼續..."
        
        For Each objAcadEntity In objAcadSelectionSet
            dblAreaSum = dblAreaSum + objAcadEntity.Area
        Next objAcadEntity
        
        '顯示圖面所有的Polyline總面積和
        MsgBox ("Polyline 總面積為 :" + CStr(dblAreaSum))
        
        '將所選擇的物件恢復成一般狀態
        objAcadSelectionSet.Highlight False
        
    End With
    Exit Sub
    
ExitHandle:
    MsgBox Err.Description
    '如果發現選擇集已經建立則將選擇集刪除之
    If Not objAcadSelectionSet Is Nothing Then
        objAcadSelectionSet.Delete
    End If
End Sub
avatar
ginse0727
高級會員
高級會員

文章總數 : 256
年齡 : 43
來自 : 台北巿
職業 : 帷幕牆
愛好 : 電玩,漫畫,網路小說
個性 : 宅男/正直/死腦筋
使用年資 : 退伍後工作迄今,10年以上
使用版本 : 2012
積分 : 14
經驗值 : 4284
威望值 : 492
發帖精華 : 1
注冊日期 : 2010-07-12
經典問與答讀者 藍鵲61號
2011聚會勳章 男 獅子座 虎

回頂端 向下

回復: [討論]請問 使用過濾器 acSelectionSetAll 就不能下過濾條件嗎?

發表 由 蜻蜓草 于 2013-07-24, 15:21

還是沒試出來.. SelectOnScreen 跟Select acSelectionSetAll 來說的話

FilterType, FilterData 的參數用法應是一樣的啊...

沒道裡
sset.SelectOnScreen FilterType, FilterData   (窗選會過濾)
sset.Select acSelectionSetAll, , , FilterType, FilterData  (沒過濾全選)
怪了...
avatar
蜻蜓草
一般會員
一般會員

文章總數 : 74
年齡 : 40
來自 : 南投
職業 :
愛好 : 電影
個性 : 溫和
使用年資 : 新手初學
使用版本 : 新手初學
經驗值 : 2381
威望值 : 0
注冊日期 : 2012-08-16
男 雙魚座 蛇

回頂端 向下

回復: [討論]請問 使用過濾器 acSelectionSetAll 就不能下過濾條件嗎?

發表 由 ginse0727 于 2013-07-24, 22:57

方便的話,po 你的程式及圖檔來做測試吧!
不過這禮拜我有事外出,手邊沒有電腦可測試,可能下禮拜才有空幫忙!
avatar
ginse0727
高級會員
高級會員

文章總數 : 256
年齡 : 43
來自 : 台北巿
職業 : 帷幕牆
愛好 : 電玩,漫畫,網路小說
個性 : 宅男/正直/死腦筋
使用年資 : 退伍後工作迄今,10年以上
使用版本 : 2012
積分 : 14
經驗值 : 4284
威望值 : 492
發帖精華 : 1
注冊日期 : 2010-07-12
經典問與答讀者 藍鵲61號
2011聚會勳章 男 獅子座 虎

回頂端 向下

回復: [討論]請問 使用過濾器 acSelectionSetAll 就不能下過濾條件嗎?

發表 由 蜻蜓草 于 2013-07-25, 14:31

您太客氣了, 別這麼說, 有空再回就行了,

目前發現應是動態圖塊的問題..
可是這樣過濾條件就不懂怎麼設定了..
測試檔1

   Sub SelectionSetFilterTest()
       Dim FilterType(0 To 1) As Integer
       Dim FilterData(0 To 1) As Variant
       Dim sSet As AcadSelectionSet
       Dim Entry As AcadEntity
       FilterType(0) = 0 '?元?型
       FilterData(0) = "INSERT"
       FilterType(1) = 2 '?元名?
      ' FilterData(1) = "dj_v4"
      ' FilterData(1) = "marks_V2"
      FilterData(1) = "圖界標2"
       On Error Resume Next
       ThisDrawing.SelectionSets.Item("SS1").Delete
       Set sSet = ThisDrawing.SelectionSets.Add("SS1")
       On Error GoTo 0
       

       ThisDrawing.Application.ZoomExtents
       
      'sSet.SelectOnScreen FilterType, FilterData

       sSet.Select acSelectionSetAll, , , FilterType, FilterData
       If sSet.Count = 0 Then Exit Sub
       For Each Entry In sSet
           Entry.color = acRed
           Entry.Update
       Next Entry
       MsgBox "修改了" & sSet.Count              
       
   End Sub
avatar
蜻蜓草
一般會員
一般會員

文章總數 : 74
年齡 : 40
來自 : 南投
職業 :
愛好 : 電影
個性 : 溫和
使用年資 : 新手初學
使用版本 : 新手初學
經驗值 : 2381
威望值 : 0
注冊日期 : 2012-08-16
男 雙魚座 蛇

回頂端 向下

回復: [討論]請問 使用過濾器 acSelectionSetAll 就不能下過濾條件嗎?

發表 由 shackle_2005 于 2013-07-25, 18:06

FilterType(0) = 0 '?元?型
FilterData(0) = "INSERT"
FilterType(1) = 2 '?元名?
FilterData(1) = "dj_v4"

' FilterData(1) = "marks_V2"
' FilterData(1) = "圖界標2"

這個狀況測試 OK!! 找到 3 個 dj_v4
avatar
shackle_2005
初級會員
初級會員

文章總數 : 124
年齡 : 46
來自 : 台中
職業 : 程式設計
愛好 : 音樂
個性 : 隨和
使用年資 : 10 年
使用版本 : 2013
積分 : 2
經驗值 : 3570
威望值 : 238
注冊日期 : 2010-09-19
男 獅子座 豬

回頂端 向下

回復: [討論]請問 使用過濾器 acSelectionSetAll 就不能下過濾條件嗎?

發表 由 shackle_2005 于 2013-07-25, 18:20

最上面的程式直接改這樣也會動

FilterType(0) = 2
FilterData(0) = "dj_v4"
avatar
shackle_2005
初級會員
初級會員

文章總數 : 124
年齡 : 46
來自 : 台中
職業 : 程式設計
愛好 : 音樂
個性 : 隨和
使用年資 : 10 年
使用版本 : 2013
積分 : 2
經驗值 : 3570
威望值 : 238
注冊日期 : 2010-09-19
男 獅子座 豬

回頂端 向下

回復: [討論]請問 使用過濾器 acSelectionSetAll 就不能下過濾條件嗎?

發表 由 蜻蜓草 于 2013-07-26, 10:25

嗯~~這樣可以選到 dj_v4 ,  但動態圖塊  "圖界標2"  就不知道要怎麼設了...資料好少
下LIST 來看 "圖界標2" , 多了匿名資訊=.="

處理碼 = 51431
圖塊名稱: "圖界標2"
匿名: "*U16"
avatar
蜻蜓草
一般會員
一般會員

文章總數 : 74
年齡 : 40
來自 : 南投
職業 :
愛好 : 電影
個性 : 溫和
使用年資 : 新手初學
使用版本 : 新手初學
經驗值 : 2381
威望值 : 0
注冊日期 : 2012-08-16
男 雙魚座 蛇

回頂端 向下

回復: [討論]請問 使用過濾器 acSelectionSetAll 就不能下過濾條件嗎?

發表 由 shackle_2005 于 2013-07-26, 18:21

' There's no way to filter dynamic block insertions other than by getting the
' names of all the 'anonymous blocks' that are used, and building a filter
' list that contains all of them.

' Autodesk is well aware of the fact that selection set filtering of dynamic
' blocks is a very common functionality requirement in AutoCAD scripting, and
' has been aware of that since dynamic blocks first appeared.

' But, because Autodesk appears to have little desire to continue to support
' generic AutoCAD scripting, this is what you end up with.

' 我看了 Autodesk 的討論區, 好像是沒辦法過濾 dynamic block
' 只能用 .IsDynamicBlock 和 .EffectiveName 來過濾
' 如果是動態圖塊, .EffectiveName 就會顯示出 "圖界標2". 目前看起來是這樣, 參考參考

Dim blkref_obj As AcadBlockReference
     
      For Each blkref_obj In sSet
     
          If blkref_obj.IsDynamicBlock Then
             if blkref_obj.EffectiveName = "圖界標2" then .............
          end if

      Next blkref_obj
avatar
shackle_2005
初級會員
初級會員

文章總數 : 124
年齡 : 46
來自 : 台中
職業 : 程式設計
愛好 : 音樂
個性 : 隨和
使用年資 : 10 年
使用版本 : 2013
積分 : 2
經驗值 : 3570
威望值 : 238
注冊日期 : 2010-09-19
男 獅子座 豬

回頂端 向下

回復: [討論]請問 使用過濾器 acSelectionSetAll 就不能下過濾條件嗎?

發表 由 ginse0727 于 2013-07-29, 00:15

shackle_2005前輩已經解出你的問題了,
也就是說你無法直接過濾出動態圖塊,
簡單的做法是,
先把所有的圖塊節篩出來,
然後再利用 .IsDynamicBlock 和 .EffectiveName 來過濾
(不好意思,重覆了前輩的說法)
不曉得這樣的回覆,你的問題已經獲得解決了嗎?
avatar
ginse0727
高級會員
高級會員

文章總數 : 256
年齡 : 43
來自 : 台北巿
職業 : 帷幕牆
愛好 : 電玩,漫畫,網路小說
個性 : 宅男/正直/死腦筋
使用年資 : 退伍後工作迄今,10年以上
使用版本 : 2012
積分 : 14
經驗值 : 4284
威望值 : 492
發帖精華 : 1
注冊日期 : 2010-07-12
經典問與答讀者 藍鵲61號
2011聚會勳章 男 獅子座 虎

回頂端 向下

回復: [討論]請問 使用過濾器 acSelectionSetAll 就不能下過濾條件嗎?

發表 由 蜻蜓草 于 2013-07-29, 14:47

shackle_2005 的方式確實可以用, 已經試出來了, 太感謝 shackle_2005 和 ginse0727 兄的熱心幫忙了, 謝謝~~
avatar
蜻蜓草
一般會員
一般會員

文章總數 : 74
年齡 : 40
來自 : 南投
職業 :
愛好 : 電影
個性 : 溫和
使用年資 : 新手初學
使用版本 : 新手初學
經驗值 : 2381
威望值 : 0
注冊日期 : 2012-08-16
男 雙魚座 蛇

回頂端 向下

上一篇主題 下一篇主題 回頂端


 
這個論壇的權限:
無法 在這個版面回復文章