【问题标题】:How to pick the right LoadFamily function in revitpythonshell如何在 revitpythonshell 中选择正确的 LoadFamily 函数
【发布时间】:2015-10-06 21:29:22
【问题描述】:

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)

但我总是得到一个布尔值。我也想要家人。

【问题讨论】:

  • 我认为问题在于 Python 如何处理重载并且编译器会感到困惑......不确定是否有解决方案,因为我相信 Python 并非“设计”为具有重载(像其他 . NET 语言,原始的 Revit API)。我可能错了。

标签: python overloading revit revit-api revitpythonshell


【解决方案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()

【讨论】:

    猜你喜欢
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 2023-01-16
    • 2015-05-19
    • 2016-08-13
    • 2011-06-06
    • 1970-01-01
    相关资源
    最近更新 更多