12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- using Autodesk.Revit.DB;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace FWindSoft.Revit
- {
- /// <summary>
- /// 事务错误,警告处理
- /// </summary>
- public class ErrorWarningPreprocessor : IFailuresPreprocessor
- {
- #region 构造函数
- public ErrorWarningPreprocessor()
- {
- WarningItems = new List<List<ElementId>>();
- }
- /// <summary>
- /// 是否捕获引起警告的元素id
- /// </summary>
- /// <param name="append"></param>
- public ErrorWarningPreprocessor(bool append) : this()
- {
- Append = append;
- }
- #endregion
- #region 相关操纵选项
- /// <summary>
- /// 是否追加捕获信息
- /// </summary>
- private bool Append { get; set; }
- /// <summary>
- /// 设置是否继续捕获警告信息
- /// </summary>
- /// <param name="continueAdd"></param>
- public void ContinueHitWaring(bool continueAdd)
- {
- Append = continueAdd;
- }
- /// <summary>
- /// 警告的信息组
- /// </summary>
- public List<List<ElementId>> WarningItems { get; private set; }
- #endregion
- public FailureProcessingResult PreprocessFailures(FailuresAccessor failuresAccessor)
- {
- IList<FailureMessageAccessor> 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;
- }
- }
- }
|