revit-api - Python 中的 Revit API 更改组
问题描述
我正在尝试编写一个脚本,将组从一种类型更改为另一种类型。本质上,我想完成 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 不完整,所以有些事情你不能在 python/c# 中做,而 Revit 可以自己做。
有一个工具可以一次复制多个元素(ElementTranformUtils.CopyElements);但是,这需要您在复制它们之前删除所有现有的族。这可能不值得,我也不确定这是否会更快。
由于团队规模庞大,一般来说与他们合作的速度很慢,这无济于事。我正在编写一个脚本,该脚本将编辑组以检查组内的元素。这需要取消分组,编辑元素,重新分组,然后将所有现有的组更改为他的新类型。在一个拥有相当数量的组的项目上运行需要几个小时。
推荐阅读
- azure - 使用 REST API 查询 Blob 内容中的 InvalidQueryParameterValue
- python - 根据输入组在keras中自定义分类损失函数
- database - 多个制造商 ID DB REPLACE - opencart 3.0.3.6
- javascript - 尝试将消息发送到特定频道,但无法定义我的客户端
- python - 每 x 行添加 1 天
- firebase - 在flutter / firebase中登录后屏幕不更新
- xodus - Xodus:如何打开数据库的早期状态
- javascript - 电子邮件已发送但未收到,我正在使用 nodemailer
- python - 为什么我不能将修改后的列表存储在 Python 的新变量中?
- react-native - 在 React Navigation 中禁用自定义标题的动画