Building Coder 链接:Failure API Take Two
Revit 二次开发论坛链接:翻译 Building Coder - 失败处理API(上)
下面是Joe Ye(译者注:传说中的叶雄进老师)整理的失败处理API的使用方法:
在模型中出现错误时,Revit 通常是通过报告警告或者错误信息的形式来提示用户的。例如:当两面墙部分重叠时,Revit弹出如下警告消息:
Revit 2011 公开失败处理API用于发布和处理这些类型的失败。失败发布API能够被用于定义和注册新的自定义失败。自定义失败可以在插件中被自由地发布。在针对模型的操作结束时,失败发布API可以删除或者解决 Revit 失败。程序可以在失败处理过程中针对模型进行进一步的操作。如果失败处理API已经处理了失败,用户可能就察觉不到警告或者错误了。因为它们已经被你的程序处理了。
发布错误
错误发布API绝对属于易用型。我们可以首先在外部应用程序的OnStartup方法中注册新的错误定义,通常还需要设置其严重程度和解决方案类型。下面是注册一个新警告的例子。自定义的错误被注册之后,就可以在程序中自由地使用了。public Result OnStartup( UIControlledApplication a )
{
// Create failure definition Ids
m_idWarning = new FailureDefinitionId( new Guid(
"0C3F66B5-3E26-4d24-A228-7A8358C76D39" ) ); // VS工具菜单里有GUID生成器
// Create failure definition and add resolution
m_fdWarning
= FailureDefinition.CreateFailureDefinition(
m_idWarning,
FailureSeverity.Warning, // 严重程度
"I am the warning." );
m_fdWarning.AddResolutionType(
FailureResolutionType.MoveElements,
"MoveElements", typeof( DeleteElements ) ); // 解决方案类型
return Result.Succeeded;
}
Document.PostFailure()方法用于告诉文档对象当前有一个错误。
transaction.Start(); // 需要包含在一个事务中
FailureMessage fm = new FailureMessage( m_idWarning );
m_doc.PostFailure( fm );
transaction.Commit();
错误会在提交事务时被验证,解决错误(如果需要的话)也是在事务被提交时进行。
未完待续……