Building Coder(Revit 二次开发) - 失败处理API(上)

Building Coder 链接:Failure API Take Two

Revit 二次开发论坛链接:翻译 Building Coder - 失败处理API(上)


我们之前在 失败处理第一季中讨论过 Revit 2011 中最新的失败处理API和SDK例程“ErrorHandling”。Revit API 最广泛的用途之一就是屏蔽不需要的警告和错误。Revit 之前的版本中程序已经可以简便地使用 DialogShowing 事件来实现了。但正如我另外两篇博文 editing elements inside groups和 suppressing an unwanted dialogue中展现的那样,失败处理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();
错误会在提交事务时被验证,解决错误(如果需要的话)也是在事务被提交时进行。


未完待续……

你可能感兴趣的:(Building Coder(Revit 二次开发) - 失败处理API(上))