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); } } } } } }