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

[討論]請問關於過濾器 ...VBA

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

[討論]請問關於過濾器 ...VBA

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

我想要濾出 在模型空間的所有圖塊, 用了下面的參數

       FilterType(0) = 0 '
       FilterData(0) = "insert"
       FilterType(1) = 67
       FilterData(1) = "模型"
可是一直選不到東西..參數這樣下是正確的嗎?



下面是小弟在網路上找到的資料..

DXF 组 码  说 明
组码                                    说明      
-----------------------------------------------------------
-5                      持续的反应器链 。
-4                      条件运算符(仅用于SSGET ADS-SSGET()
-3                      扩展数据(XDATA)的“步哨”(用途固定)。
-2                      图元名的附注,指出图元的图元名(用途固定)。
-1      *                  图元名。用途固定,名不固定。
0       *                图元类型文本字符串(用途固定)。      
1                       图元的主文本值。
2                       一个名字。
3-4                     其他的文字或名称值。
5      *                  图元句柄。(用途固定)      
6      *                 线型名。(用途固定)      
7                       文本字型名(STYLE)(用途固定)。      
8      *                 图层名(用途固定)。
10                     主点。LINE-起始点,ARC CIRCLE-圆心。
11-18                  其他点。
39                     图元厚度 (用途固定)。      
40-48 *(48)          浮点数值(文本高度,比例)。
49                     重复的 浮点数值。
50-58                  角度值。
62     *               颜色代码   (用途固定)。
66                    “图元跟踪”标致。(用途固定)                
67                     空间类型标志(用途固定)。
70-78                  整数值。
90-99   *(90)        32位整型值。
100                    子类数据标记
102                    控制字符串。
105                   DIMVAR符号表条目(ENTRY)对象句柄。
210                   拉伸方向(用途固定)。
280-289               8位整型值。
300-309               任意的文本字符串。
310-319               任意的二进制存储“槽”。
320-329               任意的对象句柄。
avatar
蜻蜓草
一般會員
一般會員

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

回頂端 向下

回復: [討論]請問關於過濾器 ...VBA

發表 由 ginse0727 于 2013-08-01, 05:38

濾出模型空間的所有圖塊,就我所知是不能這樣使用的.
可以請你大概描述一下,濾出模型空間裡的所有圖塊後,接著你要做什麼處理嗎?
因為濾出後,裡面應該還是有很多不會用到的圖塊,
到時還要再次過濾或是節篩,
你描述清楚點,也可以一次濾出你要的東西,
省卻其他不必要的步驟.
avatar
ginse0727
高級會員
高級會員

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

回頂端 向下

回復: [討論]請問關於過濾器 ...VBA

發表 由 蜻蜓草 于 2013-08-01, 06:25

目前是打算濾出模型空間的所有圖塊, 然後分門別類, 各產出像BOM 表之類的材料統計。
要濾出"模型空間"的圖塊, 是因為連"配置頁"的圖框的圖塊都有, 如果沒法子這樣用的話, 那我打算在分門別類的時後寫一段程式忽略掉它。
avatar
蜻蜓草
一般會員
一般會員

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

回頂端 向下

回復: [討論]請問關於過濾器 ...VBA

發表 由 ginse0727 于 2013-08-02, 01:19

以下這種方式是不管在模型或是圖紙空間,只要是圖塊都截取出來.
其實只要多加個圖塊名稱,就可以很快過濾出你要的物件.
像下式的意思是,只要是圖塊且圖塊名稱為"dj_v4",就過濾到選集中.

代碼:

'設定過濾圖面上物件的條件
aintFilterType(0) = -4:    avarFilterData(0) = "<and"
aintFilterType(1) = 0:     avarFilterData(1) = "INSERT"
aintFilterType(2) = 2:     avarFilterData(2) = "dj_v4"
aintFilterType(3) = -4:    avarFilterData(3) = "and>"
      
'執行過濾的動作
 SelObj.Select acSelectionSetAll, , , aintFilterType, avarFilterData

以下程式是將模型空間的物件,逐一判斷,是圖塊就加入選集中
代碼:

Public Sub SelectionObj()

Dim Objs(0) As AcadBlockReference ' 定義Block陣列
Dim i As Integer
dim entity as AcadEntity
Dim SSetObj As AcadSelectionSet ' 定義選項集

If ThisDrawing.SelectionSets.Count = 0 Then

   Set SSetObj = ThisDrawing.Application.ActiveDocument.SelectionSets.Add("BlkSet") ' 建立框內部材料標籤選項集
   
Else
   For i = 0 To ThisDrawing.Application.ActiveDocument.SelectionSets.Count - 1
       ThisDrawing.Application.ActiveDocument.SelectionSets.Item(0).Delete
   Next i

   Set SSetObj = ThisDrawing.Application.ActiveDocument.SelectionSets.Add("BlkSet") ' 建立框內部材料標籤選項集
   
   SSetObj.Clear
   
End If

For Each entity In ThisDrawing.ModelSpace ' 搜尋模型空間
   If entity.EntityName = "AcDbBlockReference" Then
       If entity.EntityType = 7 Then ' 判斷為Block
           Set Objs(0) = entity ' 將Block轉成Block陣列          
           SSetObj.AddItems Objs
       End If
   End If
Next entity

End Sub

以上提供你參考!


ginse0727 在 2013-08-04, 23:15 作了第 2 次修改 (原因 : 程式說明修改)
avatar
ginse0727
高級會員
高級會員

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

回頂端 向下

回復: [討論]請問關於過濾器 ...VBA

發表 由 蜻蜓草 于 2013-08-04, 11:14

aintFilterType(0) = -4:    avarFilterData(0) = "
aintFilterType(1) = 0:     avarFilterData(1) = "INSERT"

aintFilterType(2) = -4:    avarFilterData(2) = "OR>"

這個用法不是很懂...例子看起來是單一條件, 只找圖塊, 那前後加上OR 是..?
avatar
蜻蜓草
一般會員
一般會員

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

回頂端 向下

回復: [討論]請問關於過濾器 ...VBA

發表 由 ginse0727 于 2013-08-04, 23:18

不好意思,你沒看懂主要是我沒有寫正確,已重新更正過,你再參考看看,另外"or"或是"and",這是邏輯判斷.
avatar
ginse0727
高級會員
高級會員

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

回頂端 向下

回復: [討論]請問關於過濾器 ...VBA

發表 由 蜻蜓草 于 2013-08-05, 16:07

也就是前後要放AND 還是OR 字符, 括號起來? 那三個條件的話 也只要填一組括號?
這部份的用法我一直沒找到說明....例子看起來是這個樣子的是吧?
avatar
蜻蜓草
一般會員
一般會員

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

回頂端 向下

回復: [討論]請問關於過濾器 ...VBA

發表 由 ginse0727 于 2013-08-06, 00:04

"and"的意思是表示要都符合的過濾的條件,才過濾,
下式是指要過濾,"是圖塊,且圖塊名稱是dj_v4".
代碼:

aintFilterType(0) = -4:    avarFilterData(0) = "<and"
aintFilterType(1) = 0:     avarFilterData(1) = "INSERT"
aintFilterType(2) = 2:     avarFilterData(2) = "dj_v4"
aintFilterType(3) = -4:    avarFilterData(3) = "and>"

"OR"是指,只要一個條件符合就過濾,
如下式是指"只要是line,或是circle",都過濾出來.
代碼:

aintFilterType(0) = -4:    avarFilterData(0) = "<or"
aintFilterType(1) = 0:     avarFilterData(1) = "line"
aintFilterType(2) = 0:     avarFilterData(2) = "circle"
aintFilterType(3) = -4:    avarFilterData(3) = "or>"

我不曉得你是不了解邏輯運算,還是邏輯運算在VBA裡的用法,
這種邏輯式的組合條件很多,沒辦法一一提出作說明,
邏輯運算,你可以去上網去查找,
邏輯運算在VBA裡的用法,你再提出具體想要過濾什麼,我們再討論,
至於你標題中指的過濾用法,我在上上篇已經回答你了!在第二式的程式中.
avatar
ginse0727
高級會員
高級會員

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

回頂端 向下

回復: [討論]請問關於過濾器 ...VBA

發表 由 蜻蜓草 于 2013-08-06, 11:55

嗯嗯~~ 這樣我了解了~~ 因為我之前找到的都是零星的範例, 沒說明, 經你一說我就了解了~~ 感謝ginse0727 兄~~
avatar
蜻蜓草
一般會員
一般會員

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

回頂端 向下

回復: [討論]請問關於過濾器 ...VBA

發表 由 小青蛙 于 2013-08-29, 09:33

蜻蜓草 寫到:目前是打算濾出模型空間的所有圖塊, 然後分門別類, 各產出像BOM 表之類的材料統計。
要濾出"模型空間"的圖塊, 是因為連"配置頁"的圖框的圖塊都有, 如果沒法子這樣用的話, 那我打算在分門別類的時後寫一段程式忽略掉它。
拍謝我查了一下HELP ActiveX 與 VBA 參考 物件模型 Object.Model

圖塊在整張圖中層級很高 模型 圖紙 都算是 Block 中的一種 你用指令 ThisDrawing.blocks(0).Name 他會答出 *Model_Space
如要處理圖塊 BLOCK 插入(INSTER) 或 刪減(DELETE) 並非單用選集可以處理
ThisDrawing.blocks.count 能知道這張圖有多少圖塊包含了模型與圖紙
要刪除圖塊 也不能有使用中的圖塊 簡單的說圖塊 算是另一張圖 只是插入了應用了ThisDrawing.blocks(數字).delete
 以上我想應該是吧 如有錯誤 請各位高手指教害羞 
avatar
小青蛙
初級會員
初級會員

文章總數 : 23
年齡 : 49
來自 : 高雄市
職業 : 待業中
愛好 : 上山下海
個性 : 隨性
使用年資 : 斷斷續續
使用版本 : 2012
積分 : 2
經驗值 : 3054
威望值 : 15
注冊日期 : 2009-10-15
男 雙魚座 猴

回頂端 向下

回復: [討論]請問關於過濾器 ...VBA

發表 由 Orazio 于 2013-10-30, 07:10

'將視圖的全部圖塊加到選集的語法如下:
----------
Dim gpCode(0) As Integer, dataValue(0) As Variant
Dim groupCode As Variant    '過濾器類型
Dim dataCode As Variant     '過濾值

On Error Resume Next
Set ssetObj = AcadDoc.SelectionSets.Add("SelectSet1")
If err Then
  On Error GoTo 0
  ssetObj.clear
  AcadDoc.SelectionSets.Item("SelectSet1").Delete
  Set ssetObj = AcadDoc.SelectionSets.Add("SelectSet1")
End If
On Error GoTo 0

gpCode(0) = 100 ' 過濾類型 0 是物件名稱 8 是圖層名稱 其它不知道
dataValue(0) = "AcDbBlockReference" ' 圖塊物件的名稱

groupCode = gpCode
dataCode = dataValue

ssetObj.Select acSelectionSetAll, , , groupCode, dataCode
Debug.Print ssetObj.Count ' 物件數量
---------
大約就是這樣。
avatar
Orazio
一般會員
一般會員

文章總數 : 12
年齡 : 39
來自 : 彰化縣
職業 : 程式設計師
愛好 : 2D平面繪圖
個性 : 沉穩
使用年資 : 10年
使用版本 : 2002~2013
經驗值 : 1839
威望值 : 24
注冊日期 : 2013-02-19
男 獅子座 馬

回頂端 向下

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


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