Autodesk.Revit.DB.BuiltInFailures.AutoRouteFailures是一个枚举类型,用于定义Revit中自动路由操作可能出现的失败类型。自动路由操作是指在Revit中使用Pipe, Duct或Cable Tray等工具创建管道系统、风道系统或电缆桥架系统时,系统自动连接两个指定的点。
Autodesk.Revit.DB.BuiltInFailures.AutoRouteFailures定义了以下失败类型:
EndPointsInvalid: 所提供的端点不在规定的区域内,无法自动连接。
ShortenPathInvalid: 无法自动缩短管道系统、风道系统或电缆桥架系统路径。
PipeSizeTooSmall: 管道系统的尺寸太小,无法插入所选的配件。
CableTraySizeTooSmall: 电缆桥架系统的尺寸太小,无法插入所选的配件。
StudHeightConflict: 两个水平方向的管道系统或风道系统不能自动连接。
DuctHeightConflict: 两个垂直方向的管道系统或风道系统不能自动连接。
CableTrayWidthConflict: 两个电缆桥架系统之间的宽度不一致,无法自动连接。
PipeDirectionConflict: 管道系统或风道系统方向不一致,无法自动连接。
ConduitSizeTooSmall: 没有足够的空间插入所选的导管系统。
DuctSystemShapeMismatch: 不能在不同的系统形状之间自动连接。
可以使用以下代码在Revit API的.NET框架和C#语言中使用AutoRouteFailures:
using Autodesk.Revit.DB;
// 对于创建风管系统的自动路由操作,使用如下代码:
FailureMessageId failureMessageId;
FailureHandlingOptions options = new FailureHandlingOptions();
options.SetFailuresPreprocessor(new AutoJoinFailuresPreprocessor());
try
{
using (Transaction transaction = new Transaction(document, "Create Duct System"))
{
transaction.Start();
if (DuctSystem.Create(document, ductIds) == ElementId.InvalidElementId)
{
failureMessageId = BuiltInFailures.AutoRouteFailures.EndPointsInvalid;
throw new Autodesk.Revit.Exceptions.OperationCanceledException(failureMessageId);
}
transaction.Commit(options);
}
}
catch (Autodesk.Revit.Exceptions.OperationCanceledException)
{
FailureMessage fm = new FailureMessage(failureMessageId);
Transaction transaction = new Transaction(document, "Failures");
transaction.Start();
options.SetClearAfterRollback(true);
FailureHandlingResult fhr = options.HandleFailures();
transaction.RollBack();
if (fhr == FailureHandlingResult.ProceedWithCommit)
{
// 回到外部事务
}
else
{
// 处理失败。
}
}
上面的例子中,首先创建一个Transaction对象,并启用事务。然后调用DuctSystem.Create方法创建风管系统。如果方法返回了一个无效的元素ID,就抛出一个OperationCanceledException异常,并设置失败的原因为EndPointsInvalid。如果捕获了异常,则定义了一个FailureMessage对象,并启用第二个Transaction来处理可能出现的任何失败。如果处理失败,将会进行事务回滚,并执行失败处理操作。
通过内置失败类型的定义,AutoRouteFailures可以帮助您更好地处理自动路由操作中可能出现的问题。