Files
SzmediTools/Szmedi.Toolkit.Revit/RvAssists/FailuresPreProcessor.cs

67 lines
2.6 KiB
C#
Raw Normal View History

2025-09-16 16:06:41 +08:00
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Events;
namespace Szmedi.Toolkit.RvAssists
{
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.GetSeverity() == FailureSeverity.Error)
{
//模拟手动单击"删除连接"按钮
if (fma.HasResolutions())
{
failuresAccessor.ResolveFailure(fma);
}
}
//如果是警告,则禁止弹框
if (fma.GetSeverity() == FailureSeverity.Warning)
{
if (fma.GetFailureDefinitionId() == BuiltInFailures.JoinElementsFailures.JoiningDisjointWarn || fma.GetFailureDefinitionId() == BuiltInFailures.JoinElementsFailures.CannotJoinElementsWarn)
{
fma.SetCurrentResolutionType(FailureResolutionType.Default);
}
failuresAccessor.ResolveFailure(fma);
//failuresAccessor.DeleteWarning(fma);
}
}
return FailureProcessingResult.ProceedWithCommit;
//return FailureProcessingResult.ProceedWithRollBack;
}
public void FailuresProcessing(object sender, FailuresProcessingEventArgs e)
{
var failuresAccessor = e.GetFailuresAccessor();
failuresAccessor.GetTransactionName();
var failureMessages = failuresAccessor.GetFailureMessages();
if (failureMessages.Count != 0)
{
using var enumerator = failureMessages.GetEnumerator();
if (enumerator.MoveNext())
{
var failureMessageAccessor = enumerator.Current;
if (failureMessageAccessor.GetFailureDefinitionId() ==
BuiltInFailures.JoinElementsFailures.CannotJoinElementsError)
{
failuresAccessor.ResolveFailure(failureMessageAccessor);
e.SetProcessingResult(FailureProcessingResult.ProceedWithCommit);
}
}
}
}
}
}