当进行管道生成的时候,发现二次开发基本教程中仅有弯头的示例,于是我补充上三通与四通的生成示例。
弯头的生成最简单,书中有教程,且弯头的生成对于角度的要求较低。
using Autodesk.Revit.UI.Selection;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
[Transaction(TransactionMode.Manual)]
class NewElbow : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIApplication uiApp = commandData.Application;
Document doc = uiApp.ActiveUIDocument.Document;
Selection sel = uiApp.ActiveUIDocument.Selection;
//选取两个管
var reference1 = sel.PickObject(ObjectType.Element, "请选择第1个管");
MEPCurve duct1 = doc.GetElement(reference1) as MEPCurve;
var reference2 = sel.PickObject(ObjectType.Element, "请选择第2个管");
MEPCurve duct2 = doc.GetElement(reference2) as MEPCurve;
//弯头
ConnectTwoDuctsWithElbow(doc, duct1, duct2);
return Result.Succeeded;
}
/// <summary>
/// 连接管道
/// </summary>
/// <param name="doc"></param>
/// <param name="duct1"></param>
/// <param name="duct2"></param>
public static void ConnectTwoDuctsWithElbow(Document doc, MEPCurve duct1, MEPCurve duct2)
{
double minDistance = double.MaxValue;
Connector connector1, connector2;
connector1 = connector2 = null;
foreach (Connector con1 in duct1.ConnectorManager.Connectors)
{
foreach (Connector con2 in duct2.ConnectorManager.Connectors)
{
var dis = con1.Origin.DistanceTo(con2.Origin);
if (dis < minDistance)
{
minDistance = dis;
connector1 = con1;
connector2 = con2;
}
}
}
if (connector1 != null && connector2 != null)
{
using (Transaction tran = new Transaction(doc))
{
tran.Start("1033067630");
var elbow = doc.Create.NewElbowFitting(connector1, connector2);
tran.Commit();
}
}
}
}
接下是三通,三通最需要注意的事角度!!角度!!角度!!,第二根管应该垂直于第一根管,不能超出1°!极为严格!
还有主次顺序问题。
[Transaction(TransactionMode.Manual)]
class