67 lines
2.6 KiB
C#
67 lines
2.6 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|