【问题标题】:How to make a list from Elements ID's in IronPython in Revit Api如何在 Revit Api 中从 IronPython 中的 Elements ID 制作列表
【发布时间】:2021-02-09 02:19:41
【问题描述】:

我正在尝试使用 Revit API 中的选定元素 ID 创建一个 python 列表。我尝试在示例结构文件中收集网格的 ID,然后在 Visual Studio Code 中使用此列表。我在 .NET 4.0.30319.42000(64 位)上使用 Revit 2020 和 IronPython 2.7.7 (2.7.7.0)。

当我在 IronPython 中运行代码时,我得到了我想要的 ID 列表,但是如何制作打印的 ID 列表以供在 Visual Studio Code 中进一步使用?

Attached image of result

Screenshot of code

我的代码:

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

app = __revit__.Application
doc = __revit__.ActiveUIDocument.Document

transaction = Transaction(doc, "Get grids")
transaction.Start()

new_list = DB.FilteredElementCollector(doc) \
    .OfCategory(DB.BuiltInCategory.OST_Grids) \
    .ToElementIds()

for x in range(len(new_list)):
    new_list[x]
    print(new_list[x])


transaction.Commit()

【问题讨论】:

  • 你对“在 VSCode 中使用这个列表有什么用?”。如果您在 vscode 中有单独的 python 脚本,请查看 python pickle 模块。您可以将此列表写入泡菜文件并将其加载到您的其他脚本中
  • 感谢您的快速回答@EhsanIran-Nejad :) 我已经在 VSCode 中编写了代码,并在 Revit 中的 IronPython 中打开了 .py 文件并运行它。我想使用这个元素 ID 列表对元素执行一些操作。我认为将这个列表带回 VSCode 以继续在那里工作会很酷。对我来说,在试验 pickle 模块时只使用 IronPython 中的列表就可以了。你能指导我如何在 Revit 中的 IronPython 中创建和使用这个列表吗?
  • Ehsan 的方向是正确的。一旦你的代码运行完毕,所有的值都会从内存中消失。要持久保存它们并在另一个 python 执行环境中使用它,您需要将值作为文件保存在硬盘中。您可以通过将列表“转储”为 pickle 文件,或使用 json 或 csv 等格式对其进行序列化来做到这一点。搜索如何将 python 列表转储为任何这些格式
  • 与您的问题无关:不需要交易,因为您没有修改文档。

标签: ironpython revit-api revitpythonshell


【解决方案1】:

如果我理解正确,您将获得元素 ID 列表,但需要在逻辑的另一部分或完全单独的脚本中引用该信息。我建议在此操作结束时将此数据保存到文件中,然后在需要数据的任何其他逻辑/脚本中使用该文件。

就个人而言,我更喜欢将数据保存/读取为 JSON 格式。以下是一些可帮助您入门的资源:

  1. Read & Write JSON with Python
  2. How do I write JSON data to a file?
  3. Reading JSON from a file?

【讨论】:

    猜你喜欢
    • 2021-03-14
    • 2019-11-23
    • 2019-12-17
    • 1970-01-01
    • 2018-07-08
    • 2019-09-21
    • 2019-03-29
    • 1970-01-01
    • 2020-10-04
    相关资源
    最近更新 更多