Revit學習之路02 Revit基礎選單定義

2022-01-14 02:23:33 字數 1794 閱讀 1404

序言:

前一章對revit載入外部外掛程式進行了簡單的說明,本章詳細說明revit自定義選單的設計與實現。

revit選單機制

revit的選單配置結構為tab->panel->button如上圖所示:

選單的最頂級為選項卡(tab)每個選項卡下包含很多面板(panel),無論是tab還是panel都只是乙個容器,其最終的目的是對panel內的button進行分類和布局。而button共有以下幾種型別。

1

public

enum

ribbonitemtype23

view code

選單序列化

選單是外掛程式的入口,做revit的二次開發選單的變動是比較頻繁的。把選單的定義寫到**裡會使**變得臃腫以至於很難維護,而且沒法做到關注點分離,沒法協同開發。因此把選單定義的資料序列化,交由產品去維護和控制是乙個很好的辦法。

revit選單的藉口類似於xml檔案的結構,而且xml檔案的可讀性和可維護性比較強。因此我們把選單的資料序列化為xml資料。這樣我們可以在revit啟動的時候去讀取選單配置,將配置的選單載入到revit選單中。(**後續新增)。

addin檔案

程式和revit的互動主要通過命令實現,為了便於命令的管理。我們可以把命令單獨放在乙個專案之中。這樣便於命令的查詢,以及後續的維護。這樣的話對於addin檔案的處理就比較簡單了。我們只需要把這乙個專案的dll新增到addin檔案之中。

元素的過濾

既然是基於revit的二次開發,那麼和revit的互動是整個二次開發的核心。revit提供了元素的過濾功能,利用過濾我們可以實現元素的快速定位。繼而可以去改變元素的屬性。

過濾元素就像是漏勺撈水餃,我們首先需要找到煮水餃的鍋。這在revit中對應著他的收集器 (fileredelementcollector)。而漏勺就是過濾器,而在revit中存在這眾多的過濾器。運用這些過濾器可以快速定位到元素。

filteredelementcollector filteredelements = new filteredelementcollector(doc);//

煮水餃elementclassfilter classfilter = new elementclassfilter(typeof(wall));//

獲得漏勺x1

filteredelements=filteredelements.wherepasses(classfilter);//

撈水餃foreach(wall wall in

filteredelements)

view code

revit常見的過濾器:

exclusionfilter 過濾並排除一部分元素

logicalandfilter 雙重過濾

elementcategoryfilter 通過種類或者分類進行過濾

elementclassfilter 通過種類進行匹配的過濾器

結語自從工作以來,時間變得很零散,這意味著我沒法集中時間實踐我所學到的知識。零散的時間只夠讓我了解新知識的思想,而沒法去實踐去運用去把它轉化成我自己的知識體系。這個系列的部落格便是為了在學習的過程中,通過寫部落格來將知識進行轉化,以期能融入我的知識體系。但是這段時間發現效果並不好,我把太多的時間浪費在了思考以及組織語言上。在前期一葉障目的情況下思考是沒有任何意義的。而無論是程式設計技術還是revit在我眼裡都只是一種工具,一種讓人們脫離重複工作,一種讓人們專注於設計的工具。所以之後我會調整學習的方式,不再專注於概念,而專注於實際的運用。

Revit學習之路01 Revit基礎

序言 revit介紹 revit專為建築資訊模型 bim 構建的一款建模軟體。隨著bim概念在國內的興起,各大設計院對revit建模的需求增多,相關的基於revit的二次開發也逐漸增多。具體介紹不在搬運。revit是專為bim構建的軟體,了解revit必須先了解bim。bim的概念不僅僅是二維圖紙到...

學習之路02

因為參加團建,現在補上學習筆記!1 js中如何獲取系統當前時間?1 通過var date new date 建立獲取時間物件。2 使用 date.getfullyear 獲取當前系統時間的年份 date.getmonth 獲取當前系統時間的月份,注意此處獲取的月份是從0開始的,也就是0代表1月份 d...

python 學習之路 02

1 函式 1 作用是什麼?2 特點是什麼?總結可概括使用函式的三大優點 1.重用 2.保持一致性 3.可擴充套件性 引數組形式 args 結果返回的是tuple kwargs 結果返回的是dict 遞迴函式 函式呼叫自己就是遞迴函式 import使用 file 列印當前檔案路徑import os,s...