【问题标题】:Revit API Change Groups in PythonPython 中的 Revit API 更改组
【发布时间】:2018-10-29 07:27:09
【问题描述】:

我正在尝试编写一个脚本,将组从一种类型更改为另一种类型。本质上,我想完成 UI 等效于右键单击组类型、选择所有实例并更改类型。

我可以使用类似下面的代码,但是当有很多组(例如 270 左右)时,它比 UI 方法花费的时间要长得多。在 UI 中需要不到 5 分钟的时间,以编程方式需要大约 20 分钟或更长时间。

有没有更好的方法来做到这一点,这样它就不会比 UI 方法花费那么多时间?

这是我在 Revit Python Shell 中测试的代码:

import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *

uidoc = __revit__.ActiveUIDocument
doc = uidoc.Document
sel = uidoc.Selection.GetElementIds()

t = Transaction(doc, "Test")
t.Start()

g1 = doc.GetElement(sel[0])
g2 = doc.GetElement(sel[1])

for group in g2.Groups:
    group.GroupType = g1

t.Commit()

【问题讨论】:

  • Revit API 基本上是围绕核心 Revit 功能的点网包装器。我在这里不是从知识角度说话,但可以想象 Revit 对其模型数据库具有更低级别的访问权限,这使其能够比面向用户的 API 更快地批量修改数据。
  • 这完全有道理。有点无赖,但我想它就是这样。感谢您的帮助!

标签: revit-api revitpythonshell pyrevit


【解决方案1】:

我可能是错的,但我认为这是你唯一的选择。有一些实用程序可以一次移动一堆对象,但我不知道有什么方法可以同时更改多个对象的类型。 Revit API 不完整,所以有些事情你不能在 python/c# 中做,而 Revit 可以自己做。

有一个工具可以一次复制多个元素(ElementTranformUtils.CopyElements);但是,这需要您在复制它们之前删除所有现有的族。这可能不值得,我也不确定这是否会更快。

由于组的规模很大,一般来说,他们处理起来很慢,这无济于事。我正在编写一个脚本,该脚本将编辑组以检查组内的元素。这需要取消分组,编辑元素,重新分组,然后将所有现有的组更改为他的新类型。运行一个包含大量组的项目需要几个小时。

【讨论】:

  • 这听起来像是一个雄心勃勃的丹尼斯项目,听到如何创造性地使用 Revit 功能真是太棒了。我的下一个工具箱项目将是组的“Workset Enforcer”...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-24
  • 1970-01-01
  • 2020-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多