下載app免費領(lǐ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)化,但仍然費時費力。
有沒有辦法解決這個無論什么專業(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中宏命令的位置是在“管理”選項卡中的“宏模塊”,點擊宏管理器即可進入,如下圖所示。
進入宏管理器后,依次點擊“模塊”“宏”命令以創(chuàng)建新的宏(詳細(xì)信息可參考相關(guān)教程),如下圖所示(可點擊圖片查看大圖)。
之后即可進入程序編輯界面,如下圖可以看到,編輯器中已經(jīng)自動生成了用于生成插件的基礎(chǔ)代碼,我們只需要將我們用于實現(xiàn)功能的代碼加進去即可。
整個插件的開發(fā)流程如下圖所示,整個插件主要是利用RevitAPI中提供的Document類中的Pickobject方法實現(xiàn)選擇功能以及OverrideGraphicSettings類用于實現(xiàn)替換視圖顯示功能。文章末尾會附上該插件的完整源代碼,有興趣的朋友可參考查看。如果不想深究代碼的意義,可直接復(fù)制粘貼源代碼,把命名空間與類的名稱改成您自己的,即可使用對構(gòu)件進行變色標(biāo)記的功能。另外,可以通過修改一些變量可以實現(xiàn)更多的應(yīng)用(例如修改color1變量為其他顏色,修改patternElementName變量為其他填充類型名稱等)。編輯完成后,鼠標(biāo)在“解決方案”位置點擊右鍵,選擇重新生成解決方案即可完成開發(fā)工作。
順利生成插件以后,選擇對應(yīng)的插件名稱,點擊“運行”就可以快速的進行構(gòu)件變色、變填充的操作了。
運行插件以前:
運行插件以后:
這些代碼,也可靈活運用于根據(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)載。
上一篇:CAD教程 | 尋找CAD建筑圖標(biāo)的最佳途徑
下一篇:Revit技巧 | Revit橋架如何布置?Revit橋架設(shè)置及相關(guān)小技巧
推薦專題