下載app免費(fèi)領(lǐng)取會(huì)員
隨著BIM技術(shù)與應(yīng)用深度的不斷發(fā)展,對(duì)BIM模型的數(shù)據(jù)準(zhǔn)確性要求也越來越高,所以常常會(huì)需要對(duì)構(gòu)件的各項(xiàng)數(shù)據(jù)信息進(jìn)行逐一檢查,筆者最近在利用國(guó)內(nèi)使用頻率較高的Revit檢查構(gòu)件信息時(shí)發(fā)現(xiàn),軟件無法快速的區(qū)分“已經(jīng)查看”與“還未查看”的構(gòu)件,這是因?yàn)镽evit沒有提供快速標(biāo)記(這里的標(biāo)記,是指快速的將一類構(gòu)件的不同實(shí)例進(jìn)行區(qū)分)的功能。
目前對(duì)構(gòu)件的標(biāo)記,通常是利用“替換視圖中的圖形”功能,以修改“視圖專有圖元圖形”的方法來實(shí)現(xiàn),也就是說,每次對(duì)某視圖中的構(gòu)件進(jìn)行改色改線性改填充等工作,都需要進(jìn)行一系列的重復(fù)操作,雖然可以通過設(shè)置選擇集等方法優(yōu)化,但仍然費(fèi)時(shí)費(fèi)力。
有沒有辦法解決這個(gè)無論什么專業(yè)都需要常常使用的問題呢?
JZFZBIM:有!
所以今天就給大家分享一下如何利用Revit提供的API接口,實(shí)現(xiàn)快速修改構(gòu)件在視圖中的各項(xiàng)顯示內(nèi)容。為了方便沒有開發(fā)經(jīng)驗(yàn)的用戶使用,我們這次通過Revit宏命令來實(shí)現(xiàn)上述功能,無需額外安裝任何編程工具,對(duì)于宏命令在Revit中應(yīng)用不熟悉的朋友們也可以借這個(gè)機(jī)會(huì)了解一下。(Revit宏命令A(yù)PI與RevitAPI一致,故以下代碼可直接用于Revit平臺(tái)的二次開發(fā)以實(shí)現(xiàn)更多功能。)
Revit中宏命令的位置是在“管理”選項(xiàng)卡中的“宏模塊”,點(diǎn)擊宏管理器即可進(jìn)入,如下圖所示。
進(jìn)入宏管理器后,依次點(diǎn)擊“模塊”“宏”命令以創(chuàng)建新的宏(詳細(xì)信息可參考相關(guān)教程),如下圖所示(可點(diǎn)擊圖片查看大圖)。
之后即可進(jìn)入程序編輯界面,如下圖可以看到,編輯器中已經(jīng)自動(dòng)生成了用于生成插件的基礎(chǔ)代碼,我們只需要將我們用于實(shí)現(xiàn)功能的代碼加進(jìn)去即可。
整個(gè)插件的開發(fā)流程如下圖所示,整個(gè)插件主要是利用RevitAPI中提供的Document類中的Pickobject方法實(shí)現(xiàn)選擇功能以及OverrideGraphicSettings類用于實(shí)現(xiàn)替換視圖顯示功能。文章末尾會(huì)附上該插件的完整源代碼,有興趣的朋友可參考查看。如果不想深究代碼的意義,可直接復(fù)制粘貼源代碼,把命名空間與類的名稱改成您自己的,即可使用對(duì)構(gòu)件進(jìn)行變色標(biāo)記的功能。另外,可以通過修改一些變量可以實(shí)現(xiàn)更多的應(yīng)用(例如修改color1變量為其他顏色,修改patternElementName變量為其他填充類型名稱等)。編輯完成后,鼠標(biāo)在“解決方案”位置點(diǎn)擊右鍵,選擇重新生成解決方案即可完成開發(fā)工作。
順利生成插件以后,選擇對(duì)應(yīng)的插件名稱,點(diǎn)擊“運(yùn)行”就可以快速的進(jìn)行構(gòu)件變色、變填充的操作了。
運(yùn)行插件以前:
運(yùn)行插件以后:
這些代碼,也可靈活運(yùn)用于根據(jù)構(gòu)件的數(shù)據(jù)快速的自動(dòng)生成圖面表達(dá)(例如根據(jù)樓板標(biāo)高對(duì)樓板進(jìn)行不同的圖案填充)等。
源代碼代碼如下:
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 = "實(shí)體填充";//指定填充類型的名稱,需保證在文檔中存在
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,"請(qǐng)選擇需要改變顏色的構(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()//得到本項(xiàng)目中的填充圖案類型
{
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("請(qǐng)?jiān)谝晥D中執(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)小技巧
推薦專題