我正在尝试修改非常有用的开放主题演示按钮脚本以创建“重新加载主题演讲”按钮。
目前我正在尝试使用KeyBasedTreeEntryTable类的重新加载方法。
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)
我被困在这里并感谢任何帮助。
答案 0 :(得分:1)
您可以使用Revit API重新加载主题演讲,方法KeyBasedTreeEntryTable.Reload
只需要一个参数来存储操作期间抛出的警告,此参数可以None
以便于操作。
同样KeyBasedTreeEntryTable
应该是一个实例,重载方法不是静态的。
很酷的是,您不需要找到任何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))