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