Revit學習之路02_Revit基礎菜單定義

序言:

       前一章對Revit加載外部插件進行了簡單的說明,本章詳細說明Revit自定義菜單的設計與實現。編程

Revit菜單機制

 

 

       Revit的菜單配置結構爲Tab->Panel->Button如上圖所示:ide

菜單的最頂級爲選項卡(Tab)每一個選項卡下包含不少面板(Panel),不管是Tab仍是Panel都只是一個容器,其最終的目的是對Panel內的Button進行分類和佈局。而Button共有如下幾種類型。工具

 1 public enum RibbonItemType
 2 
 3     {
 4 
 5         PushButton = 0,
 6 
 7         PulldownButton = 1,
 8 
 9         SplitButton = 2,
10 
11         ToggleButton = 3,
12 
13         RadioButtonGroup = 4,
14 
15         ComboBoxMember = 5,
16 
17         ComboBox = 6,
18 
19         TextBox = 7
20 
21     }
View Code

菜單序列化

       菜單是插件的入口,作Revit的二次開發菜單的變更是比較頻繁的。把菜單的定義寫到代碼裏會使代碼變得臃腫以致於很難維護,並且無法作到關注點分離,無法協同開發。所以把菜單定義的數據序列化,交由產品去維護和控制是一個很好的辦法。佈局

       Revit菜單的藉口相似於Xml文件的結構,並且Xml文件的可讀性和可維護性比較強。所以咱們把菜單的數據序列化爲Xml數據。這樣咱們能夠在Revit啓動的時候去讀取菜單配置,將配置的菜單加載到Revit菜單中。(代碼後續添加)。學習

AddIn文件

       程序和Revit的交互主要經過命令實現,爲了便於命令的管理。咱們能夠把命令單獨放在一個項目之中。這樣便於命令的查找,以及後續的維護。這樣的話對於AddIn文件的處理就比較簡單了。咱們只須要把這一個項目的dll添加到AddIn文件之中。spa

元素的過濾

       既然是基於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)
                    {
                       wall.Eat();//吃水餃
                    }
View Code

Revit常見的過濾器:code

  ExclusionFilter 過濾並排除一部分元素blog

  LogicalAndFilter 雙重過濾

  ElementCategoryFilter 經過種類或者分類進行過濾

  ElementClassFilter 經過種類進行匹配的過濾器

 

結語

       自從工做以來,時間變得很零散,這意味着我無法集中時間實踐我所學到的知識。零散的時間只夠讓我瞭解新知識的思想,而無法去實踐去運用去把它轉化成我本身的知識體系。這個系列的博客即是爲了在學習的過程當中,經過寫博客來將知識進行轉化,以期能融入個人知識體系。可是這段時間發現效果並很差,我把太多的時間浪費在了思考以及組織語言上。在前期一葉障目的狀況下思考是沒有任何意義的。而不管是編程技術仍是Revit在我眼裏都只是一種工具,一種讓人們脫離重複工做,一種讓人們專一於設計的工具。因此以後我會調整學習的方式,再也不專一於概念,而專一於實際的運用。

相關文章
相關標籤/搜索