Revit 二次开发之IFailuresProcessor

添加操作失败的自定义处理代码。
[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Automatic)]
[Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)]
public class MyFailuresUI : IExternalApplication
{
    
static AddInId m_appId = new AddInId(new Guid("9F179363-B349-4541-823F-A2DDB2B86AF3"));
    
public Autodesk.Revit.UI.Result OnStartup(UIControlledApplication uiControlledApplication)
    {
        IFailuresProcessor myFailUI 
= new FailUI();
        
//Autodesk.Revit.ApplicationServices.Application.RegisterFailuresProcessor(myFailUI);
        return Result.Succeeded;
    }

    
public Autodesk.Revit.UI.Result OnShutdown(UIControlledApplication application)
    {
        
return Result.Succeeded;
    }

    
public class FailUI : IFailuresProcessor
    {
        
public void Dismiss(Document document)
        {
            
// This method is being called in case of exception or document destruction to 
            
// dismiss any possible pending failure UI that may have left on the screen
        }

        
public FailureProcessingResult ProcessFailures(FailuresAccessor failuresAccessor)
        {
            IList
<FailureResolutionType> resolutionTypeList = new List<FailureResolutionType>();
            IList
<FailureMessageAccessor> failList = new List<FailureMessageAccessor>();
            
// Inside event handler, get all warnings
            failList = failuresAccessor.GetFailureMessages(); 
            
string errorString = "";
            
bool hasFailures = false;
            
foreach (FailureMessageAccessor failure in failList)
            {
                
// check how many resolutions types were attempted to try to prevent
                
// entering infinite loop
                resolutionTypeList = failuresAccessor.GetAttemptedResolutionTypes(failure);
                
if (resolutionTypeList.Count >= 3)
                {
                    TaskDialog.Show(
"Error""Cannot resolve failures - transaction will be rolled back.");
                    
return FailureProcessingResult.ProceedWithRollBack;
                }

                errorString 
+= "IDs ";
                
foreach (ElementId id in failure.GetFailingElementIds())
                {
                    errorString 
+= id + "";
                    hasFailures 
= true;
                }
                errorString 
+= "\nWill be deleted because: " + failure.GetDescriptionText() + "\n";
                failuresAccessor.DeleteElements(failure.GetFailingElementIds() 
as IList<ElementId>);
            }
            
if (hasFailures)
            {
                TaskDialog.Show(
"Error", errorString);
                
return FailureProcessingResult.ProceedWithCommit;
            }

            
return FailureProcessingResult.Continue;
        }
    }
}
end
posted @ 2011-06-22 19:49  大气象  阅读(1118)  评论(0编辑  收藏  举报
http://www.tianqiweiqi.com