在Revit中,風管用於連接管件,風道末端和機械設備,今天簡單嘗試了下使用RevitAPI創建風管,現分享下我的方法。 風管從類型上可分為三類:一般風管,軟風管和風管占位符;從形狀上也分為三類:橢圓管,方管和圓管。 ...
在Revit中,風管用於連接管件,風道末端和機械設備,今天簡單嘗試了下使用RevitAPI創建風管,現分享下我的方法。
風管從類型上可分為三類:一般風管,軟風管和風管占位符;從形狀上也分為三類:橢圓管,方管和圓管。
風管的屬性和方法
風管的父類MEPCurve
有三個屬性,如下圖:
而風管本身也有兩個屬性,分別是DuctType
和IsPlaceholder
,前者是獲取管道的類型,後者為判斷是否是管道占位符。
小提示:使用
Duct.Location
屬性,將它轉型成LoactionCurve
,再通過LoactionCurve.Curve
屬性即可獲得管道對應的位置曲線。
創建一般風管
創建風管的函數
需要調用RevitAPI函數Duct.Create(Document document,ElementId systemTypeId,ElementId ductTypeId,ElementId levelId,XYZ firstPoint,XYZ secondPoint)
,該參數含義如下圖所示:
創建一般的矩形風管
public static Duct CteDct(Document doc)
{
ElementId systemTypeId, ductTypeId, levelId;
systemTypeId = ductTypeId = levelId = ElementId.InvalidElementId;
//獲取標高ID
var levelFilter = new ElementClassFilter(typeof(Level));
FilteredElementCollector levels = new FilteredElementCollector(doc);
levels = levels.WherePasses(levelFilter);
foreach (Level level in levels)
{
if (level.Name == "標高 1")
{
levelId = level.Id;
break;
}
}
if (levelId == ElementId.InvalidElementId)
{ throw new Exception("無法標高"); }
//獲取類型為SupplyAir的系統類型
var systemTypeFilter = new ElementClassFilter(typeof(MEPSystemType));
FilteredElementCollector systemTypes = new FilteredElementCollector(doc);
systemTypes = systemTypes.WherePasses(systemTypeFilter);
List<MEPSystemType> systypes = new List<MEPSystemType>();
foreach (MEPSystemType element in systemTypes)
{
if (element.SystemClassification == MEPSystemClassification.SupplyAir)
{
systemTypeId = element.Id;
break;
}
}
if (systemTypeId == ElementId.InvalidElementId) { throw new Exception("無法找到系統類型"); }
//獲取風管類型
var ductTypeFilter = new ElementClassFilter(typeof(DuctType));
FilteredElementCollector ductTypes = new FilteredElementCollector(doc);
var result = ductTypes.WherePasses(ductTypeFilter).ToList();
foreach (DuctType element in result)
{
ductTypeId = element.Id;
break;
}
//創建風管
using (Transaction trans = new Transaction(doc,"創建風管"))
{
trans.Start();
Duct duct = Duct.Create(doc, systemTypeId, ductTypeId, levelId, new XYZ(0, 10, 0), new XYZ(10, 0, 0));
trans.Commit();
return duct;
}
}
以上就是大體的Revit二次開發之創建風管方法和函數定義,希望能幫到有緣人,學無止境,大家加油。(我給出的代碼是定義了一個靜態方法,需要在函數入口處調用,需註意)