Как правильно выбрать функцию LoadFamily в revitpythonshell

revitpythonshell предоставляет два очень похожих метода для загрузки семейства.

LoadFamily(self: Document, filename:str) -> (bool, Family)
LoadFamily(self: Document, filename:str) -> bool

Так что похоже, что только возвращаемые значения отличаются. Я попытался назвать это несколькими различными способами:

(success, newFamily) = doc.LoadFamily(path)
success, newFamily = doc.LoadFamily(path)
o = doc.LoadFamily(path)

Но я всегда просто возвращаюсь назад. Я тоже хочу семью.

1 ответ

Вы можете получить нужную вам перегрузку следующим образом:

import clr
family = clr.Reference[Family]()
# family is now an Object reference (not set to an instance of an object!)
success = doc.LoadFamily(path, family)  # explicitly choose the overload
# family is now a Revit Family object and can be used as you wish

Это работает путем создания ссылки на объект для передачи в функцию, а метод решения о перегрузке метода теперь знает, какой искать.

Работая в предположении, что список перегрузок, показанный в справке RPS, имеет тот же порядок, в котором они появляются, - что я считаю довольно безопасным предположением, вы также можете сделать это:

success, family = doc.LoadFamily.Overloads.Functions[0](path)

и это действительно вернет кортеж (bool, Autodesk.Revit.DB.Family),

Обратите внимание, что это должно происходить внутри транзакции, поэтому полный пример может быть:

t = Transaction(doc, 'loadfamily')
t.Start()
try:
    success, family = doc.LoadFamily.Overloads.Functions[0](path)
    # do stuff with the family
    t.Commit()
except:
    t.Rollback()
Другие вопросы по тегам