[討論]請問關於過濾器 ...VBA
4 posters
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論
第1頁(共1頁)
[討論]請問關於過濾器 ...VBA
我想要濾出 在模型空間的所有圖塊, 用了下面的參數
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 任意的对象句柄。
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 任意的对象句柄。
蜻蜓草- 一般會員
- 文章總數 : 77
年齡 : 47
來自 : 南投
職業 : 工
愛好 : 電影
個性 : 溫和
使用年資 : 新手初學
使用版本 : 新手初學
經驗值 : 4940
威望值 : 0
注冊日期 : 2012-08-16
回復: [討論]請問關於過濾器 ...VBA
濾出模型空間的所有圖塊,就我所知是不能這樣使用的.
可以請你大概描述一下,濾出模型空間裡的所有圖塊後,接著你要做什麼處理嗎?
因為濾出後,裡面應該還是有很多不會用到的圖塊,
到時還要再次過濾或是節篩,
你描述清楚點,也可以一次濾出你要的東西,
省卻其他不必要的步驟.
可以請你大概描述一下,濾出模型空間裡的所有圖塊後,接著你要做什麼處理嗎?
因為濾出後,裡面應該還是有很多不會用到的圖塊,
到時還要再次過濾或是節篩,
你描述清楚點,也可以一次濾出你要的東西,
省卻其他不必要的步驟.
ginse0727- 高級會員
- 文章總數 : 256
年齡 : 50
來自 : 台北巿
職業 : 帷幕牆
愛好 : 電玩,漫畫,網路小說
個性 : 宅男/正直/死腦筋
使用年資 : 退伍後工作迄今,10年以上
使用版本 : 2012
積分 : 14
經驗值 : 6831
威望值 : 500
發帖精華 : 1
注冊日期 : 2010-07-13
回復: [討論]請問關於過濾器 ...VBA
目前是打算濾出模型空間的所有圖塊, 然後分門別類, 各產出像BOM 表之類的材料統計。
要濾出"模型空間"的圖塊, 是因為連"配置頁"的圖框的圖塊都有, 如果沒法子這樣用的話, 那我打算在分門別類的時後寫一段程式忽略掉它。
要濾出"模型空間"的圖塊, 是因為連"配置頁"的圖框的圖塊都有, 如果沒法子這樣用的話, 那我打算在分門別類的時後寫一段程式忽略掉它。
蜻蜓草- 一般會員
- 文章總數 : 77
年齡 : 47
來自 : 南投
職業 : 工
愛好 : 電影
個性 : 溫和
使用年資 : 新手初學
使用版本 : 新手初學
經驗值 : 4940
威望值 : 0
注冊日期 : 2012-08-16
回復: [討論]請問關於過濾器 ...VBA
以下這種方式是不管在模型或是圖紙空間,只要是圖塊都截取出來.
其實只要多加個圖塊名稱,就可以很快過濾出你要的物件.
像下式的意思是,只要是圖塊且圖塊名稱為"dj_v4",就過濾到選集中.
以下程式是將模型空間的物件,逐一判斷,是圖塊就加入選集中
以上提供你參考!
其實只要多加個圖塊名稱,就可以很快過濾出你要的物件.
像下式的意思是,只要是圖塊且圖塊名稱為"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-05, 06:15 作了第 2 次修改 (原因 : 程式說明修改)
ginse0727- 高級會員
- 文章總數 : 256
年齡 : 50
來自 : 台北巿
職業 : 帷幕牆
愛好 : 電玩,漫畫,網路小說
個性 : 宅男/正直/死腦筋
使用年資 : 退伍後工作迄今,10年以上
使用版本 : 2012
積分 : 14
經驗值 : 6831
威望值 : 500
發帖精華 : 1
注冊日期 : 2010-07-13
回復: [討論]請問關於過濾器 ...VBA
aintFilterType(0) = -4: avarFilterData(0) = "
aintFilterType(1) = 0: avarFilterData(1) = "INSERT"
aintFilterType(2) = -4: avarFilterData(2) = "OR>"
這個用法不是很懂...例子看起來是單一條件, 只找圖塊, 那前後加上OR 是..?
aintFilterType(1) = 0: avarFilterData(1) = "INSERT"
aintFilterType(2) = -4: avarFilterData(2) = "OR>"
這個用法不是很懂...例子看起來是單一條件, 只找圖塊, 那前後加上OR 是..?
蜻蜓草- 一般會員
- 文章總數 : 77
年齡 : 47
來自 : 南投
職業 : 工
愛好 : 電影
個性 : 溫和
使用年資 : 新手初學
使用版本 : 新手初學
經驗值 : 4940
威望值 : 0
注冊日期 : 2012-08-16
回復: [討論]請問關於過濾器 ...VBA
不好意思,你沒看懂主要是我沒有寫正確,已重新更正過,你再參考看看,另外"or"或是"and",這是邏輯判斷.
ginse0727- 高級會員
- 文章總數 : 256
年齡 : 50
來自 : 台北巿
職業 : 帷幕牆
愛好 : 電玩,漫畫,網路小說
個性 : 宅男/正直/死腦筋
使用年資 : 退伍後工作迄今,10年以上
使用版本 : 2012
積分 : 14
經驗值 : 6831
威望值 : 500
發帖精華 : 1
注冊日期 : 2010-07-13
回復: [討論]請問關於過濾器 ...VBA
也就是前後要放AND 還是OR 字符, 括號起來? 那三個條件的話 也只要填一組括號?
這部份的用法我一直沒找到說明....例子看起來是這個樣子的是吧?
這部份的用法我一直沒找到說明....例子看起來是這個樣子的是吧?
蜻蜓草- 一般會員
- 文章總數 : 77
年齡 : 47
來自 : 南投
職業 : 工
愛好 : 電影
個性 : 溫和
使用年資 : 新手初學
使用版本 : 新手初學
經驗值 : 4940
威望值 : 0
注冊日期 : 2012-08-16
回復: [討論]請問關於過濾器 ...VBA
"and"的意思是表示要都符合的過濾的條件,才過濾,
下式是指要過濾,"是圖塊,且圖塊名稱是dj_v4".
"OR"是指,只要一個條件符合就過濾,
如下式是指"只要是line,或是circle",都過濾出來.
我不曉得你是不了解邏輯運算,還是邏輯運算在VBA裡的用法,
這種邏輯式的組合條件很多,沒辦法一一提出作說明,
邏輯運算,你可以去上網去查找,
邏輯運算在VBA裡的用法,你再提出具體想要過濾什麼,我們再討論,
至於你標題中指的過濾用法,我在上上篇已經回答你了!在第二式的程式中.
下式是指要過濾,"是圖塊,且圖塊名稱是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裡的用法,你再提出具體想要過濾什麼,我們再討論,
至於你標題中指的過濾用法,我在上上篇已經回答你了!在第二式的程式中.
ginse0727- 高級會員
- 文章總數 : 256
年齡 : 50
來自 : 台北巿
職業 : 帷幕牆
愛好 : 電玩,漫畫,網路小說
個性 : 宅男/正直/死腦筋
使用年資 : 退伍後工作迄今,10年以上
使用版本 : 2012
積分 : 14
經驗值 : 6831
威望值 : 500
發帖精華 : 1
注冊日期 : 2010-07-13
回復: [討論]請問關於過濾器 ...VBA
嗯嗯~~ 這樣我了解了~~ 因為我之前找到的都是零星的範例, 沒說明, 經你一說我就了解了~~ 感謝ginse0727 兄~~
蜻蜓草- 一般會員
- 文章總數 : 77
年齡 : 47
來自 : 南投
職業 : 工
愛好 : 電影
個性 : 溫和
使用年資 : 新手初學
使用版本 : 新手初學
經驗值 : 4940
威望值 : 0
注冊日期 : 2012-08-16
回復: [討論]請問關於過濾器 ...VBA
拍謝我查了一下HELP ActiveX 與 VBA 參考 物件模型 Object.Model蜻蜓草 寫到:目前是打算濾出模型空間的所有圖塊, 然後分門別類, 各產出像BOM 表之類的材料統計。
要濾出"模型空間"的圖塊, 是因為連"配置頁"的圖框的圖塊都有, 如果沒法子這樣用的話, 那我打算在分門別類的時後寫一段程式忽略掉它。
圖塊在整張圖中層級很高 模型 圖紙 都算是 Block 中的一種 你用指令 ThisDrawing.blocks(0).Name 他會答出 *Model_Space
如要處理圖塊 BLOCK 插入(INSTER) 或 刪減(DELETE) 並非單用選集可以處理
ThisDrawing.blocks.count 能知道這張圖有多少圖塊包含了模型與圖紙
要刪除圖塊 也不能有使用中的圖塊 簡單的說圖塊 算是另一張圖 只是插入了應用了ThisDrawing.blocks(數字).delete
以上我想應該是吧 如有錯誤 請各位高手指教
小青蛙- 初級會員
- 文章總數 : 23
年齡 : 56
來自 : 高雄市
職業 : 待業中
愛好 : 上山下海
個性 : 隨性
使用年資 : 斷斷續續
使用版本 : 2012
積分 : 2
經驗值 : 5590
威望值 : 12
注冊日期 : 2009-10-15
回復: [討論]請問關於過濾器 ...VBA
'將視圖的全部圖塊加到選集的語法如下:
----------
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 ' 物件數量
---------
大約就是這樣。
----------
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 ' 物件數量
---------
大約就是這樣。
Orazio- 一般會員
- 文章總數 : 14
年齡 : 46
來自 : 彰化縣
職業 : 程式設計師
愛好 : 2D平面繪圖
個性 : 沉穩
使用年資 : 10年
使用版本 : 2002~2013
經驗值 : 4390
威望值 : 30
注冊日期 : 2013-02-19
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論
第1頁(共1頁)
這個論壇的權限:
您 無法 在這個版面回復文章