using Autodesk.Revit.DB; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FWindSoft.Revit { /// /// 事务错误,警告处理 /// public class ErrorWarningPreprocessor : IFailuresPreprocessor { #region 构造函数 public ErrorWarningPreprocessor() { WarningItems = new List>(); } /// /// 是否捕获引起警告的元素id /// /// public ErrorWarningPreprocessor(bool append) : this() { Append = append; } #endregion #region 相关操纵选项 /// /// 是否追加捕获信息 /// private bool Append { get; set; } /// /// 设置是否继续捕获警告信息 /// /// public void ContinueHitWaring(bool continueAdd) { Append = continueAdd; } /// /// 警告的信息组 /// public List> WarningItems { get; private set; } #endregion public FailureProcessingResult PreprocessFailures(FailuresAccessor failuresAccessor) { IList messages = failuresAccessor.GetFailureMessages(); if (messages.Count == 0) return FailureProcessingResult.Continue; foreach (FailureMessageAccessor message in messages) { var currentSeverity = message.GetSeverity(); switch (currentSeverity) { case FailureSeverity.Error: { if (message.HasResolutions()) failuresAccessor.ResolveFailure(message); break; } case FailureSeverity.Warning: { if (Append) { var elementIds = message.GetFailingElementIds(); if (elementIds.Any()) { WarningItems.Add(elementIds.ToList()); } } failuresAccessor.DeleteWarning(message); break; } } } return FailureProcessingResult.ProceedWithCommit; } } }