ErrorWarningPreprocessor.cs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using Autodesk.Revit.DB;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. namespace FWindSoft.Revit
  8. {
  9. /// <summary>
  10. /// 事务错误,警告处理
  11. /// </summary>
  12. public class ErrorWarningPreprocessor : IFailuresPreprocessor
  13. {
  14. #region 构造函数
  15. public ErrorWarningPreprocessor()
  16. {
  17. WarningItems = new List<List<ElementId>>();
  18. }
  19. /// <summary>
  20. /// 是否捕获引起警告的元素id
  21. /// </summary>
  22. /// <param name="append"></param>
  23. public ErrorWarningPreprocessor(bool append) : this()
  24. {
  25. Append = append;
  26. }
  27. #endregion
  28. #region 相关操纵选项
  29. /// <summary>
  30. /// 是否追加捕获信息
  31. /// </summary>
  32. private bool Append { get; set; }
  33. /// <summary>
  34. /// 设置是否继续捕获警告信息
  35. /// </summary>
  36. /// <param name="continueAdd"></param>
  37. public void ContinueHitWaring(bool continueAdd)
  38. {
  39. Append = continueAdd;
  40. }
  41. /// <summary>
  42. /// 警告的信息组
  43. /// </summary>
  44. public List<List<ElementId>> WarningItems { get; private set; }
  45. #endregion
  46. public FailureProcessingResult PreprocessFailures(FailuresAccessor failuresAccessor)
  47. {
  48. IList<FailureMessageAccessor> messages = failuresAccessor.GetFailureMessages();
  49. if (messages.Count == 0)
  50. return FailureProcessingResult.Continue;
  51. foreach (FailureMessageAccessor message in messages)
  52. {
  53. var currentSeverity = message.GetSeverity();
  54. switch (currentSeverity)
  55. {
  56. case FailureSeverity.Error:
  57. {
  58. if (message.HasResolutions())
  59. failuresAccessor.ResolveFailure(message);
  60. break;
  61. }
  62. case FailureSeverity.Warning:
  63. {
  64. if (Append)
  65. {
  66. var elementIds = message.GetFailingElementIds();
  67. if (elementIds.Any())
  68. {
  69. WarningItems.Add(elementIds.ToList());
  70. }
  71. }
  72. failuresAccessor.DeleteWarning(message);
  73. break;
  74. }
  75. }
  76. }
  77. return FailureProcessingResult.ProceedWithCommit;
  78. }
  79. }
  80. }