是否可以使用预设命令通过 Revit Python Shell 保持变量处于活动状态?

问题描述 投票:0回答:3

我目前正在使用 Revit Python Shell 2017,我想让我们“交流”不同的预设命令。
例如,假设我加载了一个房屋模型,并通过我之前创建的预设命令在其上创建了一些额外的墙壁。创建这些墙时,我可以将所有这些新墙 ID 作为列表存储在变量中。

现在,如果我想稍后删除这些墙,我想使用我存储在列表中的 ID 来识别它们,然后删除它们。
如果我处于交互式 Python Shell 会话中,那么“ID 列表”变量仍然可以访问(只要我不关闭 shell),并且我可以从中检索 ID,然后删除墙壁。
但是如果我使用预设命令怎么办?第一个命令是“创建墙壁”,第二个命令是“擦除这些墙壁”。但是第二个预设命令环境中不存在“ID 列表”变量,因此我无法使用它来擦除墙壁。

那么,采取什么方法呢?当然,在这个例子中,我可以使用不同的方法来识别第二个命令中的墙壁,例如要求用户选择它们等等。但我想要的想法是从第一个命令中列出的商店“ Revit 中的某处”,并在调用第二个命令时检索它。

我可以将列表写入外部文本文件,然后在第二个命令中读取该文件...但是有更干净的方法吗?

我对这里使用的初学者语言感到抱歉,并希望我的问题足够清楚!有人可以帮忙;)

最好的,
阿诺。

revit-api revitpythonshell
3个回答
2
投票

那么,

为了留下痕迹,我使用 pyRevit 及其在临时文件中存储数据的功能解决了这个问题(此处,查找“使用临时文件”)。


1
投票

这是一个很好的问题,阿诺,过去我做过以下工作:

创建一个文本项目参数,并使用 XML 填充它(是的,您可以在文本参数中使用换行符)。这与 Ideate BIM Link 的作用类似(检查任何已使用 BIM Link 的项目的项目参数)。这是一种在命令之间保持数据持久性的冗长方法。

我认为第二部分(保存墙壁 ID)更困难,因为据我了解,每次打开项目时,ID 都会重新分配。你可以测试一下是否是这样?

另一种方法可能涉及使用外部命令,该命令在您完成选择墙壁后仍然存在。您能否详细介绍一下您想要实现的目标?


0
投票

避免将数据写入外部文件的另一种方法可能是可扩展存储(将数据保存在文档中,并支持简单的数据类型和复杂的结构)。

这个答案包含一个 Python 片段 - 该主题的在线大多数代码都是 C#。

© www.soinside.com 2019 - 2024. All rights reserved.