【问题标题】:How to handle Failures within Revit API?如何处理 Revit API 中的故障?
【发布时间】:2018-07-09 21:40:38
【问题描述】:

我试图避免在使用 Revit 2018 API 复制大量墙壁时收到警告消息,例如当有些墙壁重叠时。为此,我正在实现 Building Coder 中记录的 FailureHandler 类,稍微适用于 Python,也记录在 here 中。

现在,在一个简单的测试用例中,复制几堵墙不会引发任何警告/错误(我尝试过不考虑失败,只是复制墙,它可以完美运行,没有任何错误),当我实现和使用 FailureHandler 类时,我所有的墙创建事务都是 RolledBack。他们不应该,因为没有警告!我将 FailureHandler 实现减少到严格的最小值以尝试理解行为,但它不断回滚事务...

这是我对 FailureHandler 的实现:

class FailureHandler(IFailuresPreprocessor):
  def __init__(self):
    self.ErrorMessage = ""
    self.ErrorSeverity = ""
  def PreprocessFailures(self, failuresAccessor):
    return FailureProcessingResult.ProceedWithCommit

如您所见,我希望它只是继续进行交易。但它会回滚。

主程序:

wallTransaction = Transaction(doc,"creating new walls")
wallTransaction.Start()

failureHandlingOptions = wallTransaction.GetFailureHandlingOptions()
failureHandler = FailureHandler()
failureHandlingOptions.SetFailuresPreprocessor(failureHandler)
failureHandlingOptions.SetClearAfterRollback(True)
wallTransaction.SetFailureHandlingOptions(failureHandlingOptions)

newWall = Wall.Create(doc, geoLine, wallTypeId, levId, wallHeight, 0, False, True)

wallTransaction.Commit()
print wallTransaction.GetStatus()

同样,如果没有所有这些 failureHandler 考虑因素,此例程会创建没有警告/错误的墙

有人能解释一下为什么它会回滚吗? FailureProcessingResult.ProceedWithCommit 不只是暗示事务应该提交吗?

非常感谢!

【问题讨论】:

    标签: revit-api pyrevit


    【解决方案1】:

    请在 Detecting and Handling Dialogues and Failures 上探索 The Building Coder 主题组,尤其是在 Gathering and Returning Failure Information 上的最后一次讨论。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-09
      • 2012-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多