完善主體資料,免費贈送VIP會員!
* 主體類型
* 企業(yè)名稱
* 信用代碼
* 所在行業(yè)
* 企業(yè)規(guī)模
* 所在職位
* 姓名
* 所在行業(yè)
* 學(xué)歷
* 工作性質(zhì)
請先選擇行業(yè)
您還可以選擇以下福利:
行業(yè)福利,領(lǐng)完即止!

下載app免費領(lǐng)取會員

NULL

ad.jpg

Revit技巧 | 如何顯示隱藏的Revit構(gòu)件?BIM硬貨!快速實現(xiàn)修改視圖中構(gòu)件顯示(Revit宏命令)

發(fā)布于:2024-11-04 21:30:02

BIM中文網(wǎng)

更多

    隨著BIM技術(shù)與應(yīng)用深度的不斷發(fā)展,對BIM模型的數(shù)據(jù)準(zhǔn)確性要求也越來越高,所以常常會需要對構(gòu)件的各項數(shù)據(jù)信息進行逐一檢查,筆者最近在利用國內(nèi)使用頻率較高的Revit檢查構(gòu)件信息時發(fā)現(xiàn),軟件無法快速的區(qū)分“已經(jīng)查看”與“還未查看”的構(gòu)件,這是因為Revit沒有提供快速標(biāo)記(這里的標(biāo)記,是指快速的將一類構(gòu)件的不同實例進行區(qū)分)的功能。

    目前對構(gòu)件的標(biāo)記,通常是利用“替換視圖中的圖形”功能,以修改“視圖專有圖元圖形”的方法來實現(xiàn),也就是說,每次對某視圖中的構(gòu)件進行改色改線性改填充等工作,都需要進行一系列的重復(fù)操作,雖然可以通過設(shè)置選擇集等方法優(yōu)化,但仍然費時費力。

image.png

image.png

    有沒有辦法解決這個無論什么專業(yè)都需要常常使用的問題呢?

    JZFZBIM:有!

    所以今天就給大家分享一下如何利用Revit提供的API接口,實現(xiàn)快速修改構(gòu)件在視圖中的各項顯示內(nèi)容。為了方便沒有開發(fā)經(jīng)驗的用戶使用,我們這次通過Revit宏命令來實現(xiàn)上述功能,無需額外安裝任何編程工具,對于宏命令在Revit中應(yīng)用不熟悉的朋友們也可以借這個機會了解一下。(Revit宏命令A(yù)PI與RevitAPI一致,故以下代碼可直接用于Revit平臺的二次開發(fā)以實現(xiàn)更多功能。)

    Revit中宏命令的位置是在“管理”選項卡中的“宏模塊”,點擊宏管理器即可進入,如下圖所示。

image.png

    進入宏管理器后,依次點擊“模塊”“宏”命令以創(chuàng)建新的宏(詳細(xì)信息可參考相關(guān)教程),如下圖所示(可點擊圖片查看大圖)。

image.png

    之后即可進入程序編輯界面,如下圖可以看到,編輯器中已經(jīng)自動生成了用于生成插件的基礎(chǔ)代碼,我們只需要將我們用于實現(xiàn)功能的代碼加進去即可。

image.png

    整個插件的開發(fā)流程如下圖所示,整個插件主要是利用RevitAPI中提供的Document類中的Pickobject方法實現(xiàn)選擇功能以及OverrideGraphicSettings類用于實現(xiàn)替換視圖顯示功能。文章末尾會附上該插件的完整源代碼,有興趣的朋友可參考查看。如果不想深究代碼的意義,可直接復(fù)制粘貼源代碼,把命名空間與類的名稱改成您自己的,即可使用對構(gòu)件進行變色標(biāo)記的功能。另外,可以通過修改一些變量可以實現(xiàn)更多的應(yīng)用(例如修改color1變量為其他顏色,修改patternElementName變量為其他填充類型名稱等)。編輯完成后,鼠標(biāo)在“解決方案”位置點擊右鍵,選擇重新生成解決方案即可完成開發(fā)工作。

image.png

    順利生成插件以后,選擇對應(yīng)的插件名稱,點擊“運行”就可以快速的進行構(gòu)件變色、變填充的操作了。

    運行插件以前:

image.png

    運行插件以后:

image.png

    這些代碼,也可靈活運用于根據(jù)構(gòu)件的數(shù)據(jù)快速的自動生成圖面表達(例如根據(jù)樓板標(biāo)高對樓板進行不同的圖案填充)等。


    源代碼代碼如下:

using System;

 using Autodesk.Revit.UI;

 using Autodesk.Revit.DB;

 using Autodesk.Revit.UI.ion;

 using System.Collections.Generic;

 using System.Linq;

 

 namespace 選擇改色ByJZFZ

 {

     [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]

     [Autodesk.Revit.DB.Macros.AddInId("DEDEAD0E-736B-4698-81EC-150146BEF142")]

     public partial class ThisApplication

     {

         Document m_doc;

         ion m_sel;

         Color color1 = new Color(255, 0, 0);//指定顏色為紅色

         string patternElementName  = "實體填充";//指定填充類型的名稱,需保證在文檔中存在

         private void Module_Startup(object sender, EventArgs e)

         {

             m_doc  = ActiveUIDocument.Document;

             m_sel  = ActiveUIDocument.ion;

         }

 

         private void Module_Shutdown(object sender, EventArgs e)

         {

             

         }

 

         #region Revit  Macros generated code

         private void InternalStartup()

         {

             this.Startup += new System.EventHandler(Module_Startup);

             this.Shutdown += new System.EventHandler(Module_Shutdown);

         }

         #endregion

         public void ChangeToRed()

         {  

             

             Transaction  transaction = new Transaction(this.m_doc, "testChangeColor");

             try

             { 

                  IList<ElementId> theIds  = new List<ElementId>();

                  IList<Reference> listRfs  = null;

                 if (m_sel.GetElementIds().Count > 0) //檢查用戶是否已經(jīng)選中構(gòu)件

                 {

                     foreach (ElementId eleId in m_sel.GetElementIds())

                     {

                         theIds.Add(eleId);

                     }

                 }

                 else

                 { 

                     listRfs  = this.m_sel.PickObjects(Autodesk.Revit.UI.ion.ObjectType.Face,"請選擇需要改變顏色的構(gòu)件");

                     foreach (Reference rf1 in  listRfs)

                         {

                             Element  ele = m_doc.GetElement(rf1);

                             if(ele != null)

                             {

                                 theIds.Add(ele.Id);

                             }

                         }

                 }

                 transaction.Start();

                 SetColorOverrideByElement(m_doc.ActiveView, theIds,color1, GetPatternElementId());

                 transaction.Commit();

             }

             catch (OperationCanceledException)

                 {

                     transaction.RollBack();

                 }

             catch (Exception)

                 {

                     transaction.RollBack();

                 }

         }

     

         private ElementId GetPatternElementId()//得到本項目中的填充圖案類型


        {

             ElementId  PatternElementId = ElementId.InvalidElementId;

             IList<Element> list  = new FilteredElementCollector(m_doc).OfClass(typeof(FillPatternElement)).ToElements();

             foreach (Element element in list)

             {

                 if (element.Name == patternElementName)

                 {

                     PatternElementId  = element.Id;

                     break;

                 }

             }

             return PatternElementId;

         }

         public void SetColorOverrideByElement(View  view, ICollection<ElementId> ids, Color color,ElementId  PatternElementId, int type  = 2)

         {

             if (view == null)

             {

                 throw new ArgumentNullException("請在視圖中執(zhí)行本命令");

             }

             if (ids != null)

             {

                 foreach (ElementId id in ids)

                 {

                     OverrideGraphicSettings  elementOverrides = view.GetElementOverrides(id);

                     if (type != 1)

                     {

                         elementOverrides.SetCutLineColor(color);

                         elementOverrides.SetCutFillColor(color);

                         elementOverrides.SetProjectionLineColor(new Autodesk.Revit.DB.Color(0, 0, 0));

                         elementOverrides.SetProjectionLinePatternId(ElementId.InvalidElementId);

                         elementOverrides.SetProjectionFillColor(color);

                         elementOverrides.SetProjectionFillPatternId(PatternElementId);

                         elementOverrides.SetCutFillPatternId(PatternElementId);

                     }

                     if (type != 2)

                     {

                         elementOverrides.SetProjectionLineColor(color);

                     }

                     view.SetElementOverrides(id, elementOverrides);

                 }

             }

         }

     }

 }


本文版權(quán)歸腿腿教學(xué)網(wǎng)及原創(chuàng)作者所有,未經(jīng)授權(quán),謝絕轉(zhuǎn)載。

未標(biāo)題-1.jpg

上一篇:CAD教程 | 尋找CAD建筑圖標(biāo)的最佳途徑

下一篇:Revit技巧 | Revit橋架如何布置?Revit橋架設(shè)置及相關(guān)小技巧

60acb4e0ef112.png