using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.DB.Electrical;
using Autodesk.Revit.DB.Mechanical;
using Autodesk.Revit.DB.Plumbing;
namespace DuctCreat
{
[Transaction(TransactionMode.Manual)]
public class Class1 : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIDocument uidoc = commandData.Application.ActiveUIDocument;
Document doc = uidoc.Document;
//选定指定名称的系统类型
MechanicalSystemType mechanicalSystemType = null;
//新建类型收集器,过滤出所有系统类型
FilteredElementCollector typeCol = new FilteredElementCollector(doc);
typeCol.OfClass(typeof(MechanicalSystemType));
//转化为list,查找特定名称的系统类型
IList<Element> mstypes = typeCol.ToElements();
try
{
//此处选择风管系统
mechanicalSystemType = mstypes.First(m => m.Name == "排风") as MechanicalSystemType;
}
catch
{
TaskDialog.Show("信息提示","没有找到指定的风管系统类型");
return Result.Succeeded;
}
//选择矩形风管类型
FilteredElementCollector dtCol = new FilteredElementCollector(doc);
dtCol.OfClass(typeof(DuctType));
//获得风管类型,找出地提个矩形形状的风管类型
List<DuctType> dts = dtCol.ToList().ConvertAll(m => m as DuctType);
DuctType ductType = dts.Find(m => m.Shape == ConnectorProfileType.Rectangular);
//当前视图标高
Level level = doc.ActiveView.GenLevel;
//风管端点,案例以长度为6m的风管为例
XYZ p1 = new XYZ(0, 0, level.Elevation + 3000 / 304.8);
XYZ p2 = new XYZ(6000 / 304.8, 0, level.Elevation + 3000 / 304.8);
//新建并启动事务
Transaction transaction = new Transaction(doc, "创建风管");
transaction.Start();
//创建风管
Duct duct = Duct.Create(doc, mechanicalSystemType.Id, ductType.Id, level.Id, p1, p2);
duct.get_Parameter(BuiltInParameter.RBS_CURVE_WIDTH_PARAM).Set(800 / 304.8);
duct.get_Parameter(BuiltInParameter.RBS_CURVE_HEIGHT_PARAM).Set(400 / 304.8);
//提交事务
transaction.Commit();
return Result.Succeeded;
}
}
}
创建风管
最新推荐文章于 2022-08-23 09:41:13 发布