如何使用 pyRevit 重新加载主题
How to reload keynotes using pyRevit
我正在尝试修改非常有用的 open keynotes 按钮脚本来创建一个 'reload keynotes' 按钮。
目前我正在尝试使用 KeyBasedTreeEntryTable 的重新加载方法 class。
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() takes exactly 2 arguments (0 given)
我被困在这里,感谢任何帮助。
你可以使用Revit API重新加载注释记号,方法KeyBasedTreeEntryTable.Reload
只需要一个参数来存储操作过程中抛出的警告,这个参数可以None
方便.
另外KeyBasedTreeEntryTable
应该是一个实例,reload方法不是静态的
很酷的是你不需要找到任何 KeyBasedTreeEntryTable
实例,因为 KeynoteTable
class 继承自 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))
我正在尝试修改非常有用的 open keynotes 按钮脚本来创建一个 'reload keynotes' 按钮。
目前我正在尝试使用 KeyBasedTreeEntryTable 的重新加载方法 class。
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() takes exactly 2 arguments (0 given)
我被困在这里,感谢任何帮助。
你可以使用Revit API重新加载注释记号,方法KeyBasedTreeEntryTable.Reload
只需要一个参数来存储操作过程中抛出的警告,这个参数可以None
方便.
另外KeyBasedTreeEntryTable
应该是一个实例,reload方法不是静态的
很酷的是你不需要找到任何 KeyBasedTreeEntryTable
实例,因为 KeynoteTable
class 继承自 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))