??在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二次開發之創建風管方法和函式定義,希望能幫到有緣人,學無止境,大家加油,(我給出的代碼是定義了一個靜態方法,需要在函式入口處呼叫,需注意)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/458183.html
標籤:.NET技术
上一篇:c# 語音識別 | 智能對話
下一篇:快取中間件-Redis(二)
