Autodesk.Revit.DB.BuiltInFailures.GeometryFailures
是Revit API中的一个枚举类型,用于表示Revit模型中几何方面的失败情况。这些失败可能在尝试更改模型时发生,例如在试图改变元素的位置或形状时。
该枚举类型包括以下成员:
InconsistentGeometry
: 元素的几何形状不一致。TooShortCurve
: 曲线长度太短。TooSmallBox
: 包围盒太小。TooSmallVolume
: 所选元素的几何体积太小。ZeroAreaFace
: 曲面区域为零。在Revit API中,可以使用Autodesk.Revit.DB.BuiltInFailures.FailureDefinitionId
和Autodesk.Revit.DB.IFailuresAccessor
来处理失败情况。其中,FailureDefinitionId
表示应用于指定失败情况的标识符,IFailuresAccessor
允许您在事务中控制失败情况的处理方式。
以下示例演示了如何在代码中处理几何失败情况:
public void MoveElement(Element element, XYZ delta)
{
Document doc = element.Document;
using(Transaction trans = new Transaction(doc, "Move Element"))
{
FailureHandlingOptions options = trans.GetFailureHandlingOptions();
options.SetFailuresPreprocessor(new MyGeometryFailuresPreprocessor());
options.SetClearAfterRollback(true);
trans.SetFailureHandlingOptions(options);
try
{
trans.Start();
ElementTransformUtils.MoveElement(doc, element.Id, delta);
trans.Commit();
}
catch(Exception ex)
{
trans.RollBack();
TaskDialog.Show("Error", "Failed to move element: " + ex.Message);
}
}
}
public class MyGeometryFailuresPreprocessor : IFailuresPreprocessor
{
public FailureProcessingResult PreprocessFailures(FailuresAccessor failuresAccessor)
{
IList<FailureMessageAccessor> geometeryFailures = failuresAccessor.GetFailureMessages().Where(x => x.GetFailureDefinitionId() == BuiltInFailures.GeometryFailures).ToList();
foreach(FailureMessageAccessor failure in geometeryFailures)
{
failuresAccessor.ResolveFailure(failure);
}
return FailureProcessingResult.Continue;
}
}
在上述示例中,MoveElement
方法将遍历Revit模型中的元素,并尝试将其移动指定的delta
量。如果移动失败,则会触发一个异常,并在事务回滚后显示错误消息。
为了在失败处理过程中捕获几何失败情况,我们使用IFailuresAccessor
和MyGeometryFailuresPreprocessor
将处理程序添加到事务中。One该处理程序将遍历所有几何失败情况,并调用ResolveFailure
方法标记它们为已解决。
值得注意的是,处理器应该返回FailureProcessingResultEnum.Continue
以允许事务继续,否则事务将被中止。
Autodesk.Revit.DB.BuiltInFailures.GeometryFailures
枚举类型允许您处理与Revit模型中几何方面的失败情况。通过使用FailureDefinitionId
和IFailuresAccessor
,您可以编写自定义代码来捕获和处理这些失败情况。