2024-09-22 11:05:41 +08:00
|
|
|
|
using Autodesk.Revit.DB;
|
|
|
|
|
|
|
2025-02-10 20:53:40 +08:00
|
|
|
|
namespace ShrlAlgo.Toolkit.Revit.Helpers
|
2024-09-22 11:05:41 +08:00
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 错误预处理
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class FailuresPreProcessor : IFailuresPreprocessor
|
|
|
|
|
|
{
|
|
|
|
|
|
////警告、错误处理,放在发生警告的前面
|
|
|
|
|
|
|
|
|
|
|
|
public FailureProcessingResult PreprocessFailures(FailuresAccessor failuresAccessor)
|
|
|
|
|
|
{
|
|
|
|
|
|
//获取所有的失败信息
|
|
|
|
|
|
var listFma = failuresAccessor.GetFailureMessages();
|
|
|
|
|
|
if (listFma.Count == 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
return FailureProcessingResult.Continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
foreach (var fma in listFma)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (fma?.GetFailureDefinitionId() == BuiltInFailures.JoinElementsFailures.CannotJoinElementsError)
|
|
|
|
|
|
{
|
|
|
|
|
|
failuresAccessor.ResolveFailure(fma);
|
|
|
|
|
|
}
|
|
|
|
|
|
if (fma.GetFailureDefinitionId() == BuiltInFailures.OverlapFailures.WallsOverlap)
|
|
|
|
|
|
{
|
|
|
|
|
|
failuresAccessor.DeleteWarning(fma);
|
|
|
|
|
|
}
|
|
|
|
|
|
//如果是错误,则尝试解决
|
|
|
|
|
|
if (fma.GetSeverity() == FailureSeverity.Error)
|
|
|
|
|
|
{
|
|
|
|
|
|
//模拟手动单击"删除连接"按钮
|
|
|
|
|
|
if (fma.HasResolutions())
|
|
|
|
|
|
{
|
|
|
|
|
|
failuresAccessor.ResolveFailure(fma);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return FailureProcessingResult.ProceedWithRollBack;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//如果是警告,则禁止弹框
|
|
|
|
|
|
if (fma.GetSeverity() == FailureSeverity.Warning)
|
|
|
|
|
|
{
|
|
|
|
|
|
failuresAccessor.DeleteWarning(fma);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return FailureProcessingResult.ProceedWithCommit;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|