【问题标题】:How to reload keynotes using pyRevit如何使用 pyRevit 重新加载主题演讲
【发布时间】:2018-09-16 23:41:18
【问题描述】:

我正在尝试修改非常有用的打开主题演讲按钮脚本以创建“重新加载主题演讲”按钮。

目前我正在尝试使用 KeyBasedTreeEntryTable 类的 Reload 方法。

kt = DB.KeynoteTable.GetKeynoteTable(revit.doc)
kt_ref = kt.GetExternalFileReference()
path = DB.ModelPathUtils.ConvertModelPathToUserVisiblePath(
    kt_ref.GetAbsolutePath()
    )

reloader = DB.KeyBasedTreeEntryTable.Reload()



if not path:
    forms.alert('No keynote file is assigned.')
else:
    reloader 

这是我收到的错误消息。

TypeError: Reload() 只需要 2 个参数(给定 0)

我被困在这里,感谢任何帮助。

【问题讨论】:

  • 我不确定 Reload 方法在寻找什么参数...
  • 你会发现关于参数in this doc的一些提示,但是Reload不是一个静态方法,你不能直接从类中调用它。第一个参数(隐式)应该引用类KeyBasedTreeEntryTable的实例。

标签: python revit-api revit pyrevit


【解决方案1】:

您可以使用Revit API重新加载keynotes,方法KeyBasedTreeEntryTable.Reload只需要一个参数来存储操作过程中抛出的警告,这个参数可以是None方便。

还有KeyBasedTreeEntryTable应该是一个实例,reload方法不是静态的。

很酷的是你不需要找到任何KeyBasedTreeEntryTable 实例,因为KeynoteTable 类继承自KeyBasedTreeEntryTable,所以Reload 方法已经在你的kt 实例中可用脚本。

(此操作也需要事务上下文,如下例所示)

简单的方法

kt = DB.KeynoteTable.GetKeynoteTable(revit.doc)

t = DB.Transaction(revit.doc)
t.Start('Keynote Reload')
try:
    result = kt.Reload(None)
    t.Commit()

except:
    t.RollBack()

forms.alert('Keynote Reloading : {}'.format(result))
# result can be 'Success', 'ResourceAlreadyCurrent' or 'Failure'

完整方式

kt = DB.KeynoteTable.GetKeynoteTable(revit.doc)

# create results object
res = DB.KeyBasedTreeEntriesLoadResults() 

t = DB.Transaction(revit.doc)
t.Start('Keynote Reload')
try:
    result = kt.Reload(res) # pass results object
    t.Commit()

except:
    t.RollBack()

# read results
failures = res.GetFailureMessages()
syntax_err =  res.GetFileSyntaxErrors()
entries_err = res.GetKeyBasedTreeEntryErrors()
# res.GetFileReadErrors() returns files errors, should be already in failures Messages

warnings = ''
warnings += '\n'.join([message.GetDescriptionText() for message in failures])

if syntax_err:
    warnings += '\n\nSyntax errors in the files :\n'
    warnings += '\n'.join(syntax_err)

if entries_err:
    warnings += '\nEntries with error :\n'
    warnings += '\n'.join([key.GetEntry().Key for key in entries_err])

forms.alert('Keynote Reloading : {}\n{}'.format(result, warnings))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-04
    • 2015-07-06
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    • 2017-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多