【问题标题】:Is it possible to keep a variable active with Revit Python Shell, using canned commands?是否可以使用预设命令通过 Revit Python Shell 保持变量处于活动状态?
【发布时间】:2016-11-30 03:51:15
【问题描述】:

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

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

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

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

对不起这里使用的初学者语言,希望我的问题足够清楚!并且有人可以提供帮助;)

最好的,
阿诺。

【问题讨论】:

  • 你有没有得到这个工作?如果你这样做了,请发布你的答案,我很想看看你是如何解决它的
  • 我做到了.. 使用另一种方式来做到这一点;)再次感谢! (我在下面发布了我的“答案”)

标签: revit-api revitpythonshell


【解决方案1】:

所以,

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

【讨论】:

  • 非常酷的 Arnaud,该页面上还有其他一些很棒的 pyRevit 实用程序
【解决方案2】:

这是一个很好的问题 Arnaud,过去我做过以下事情:

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

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

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

【讨论】:

  • 谢谢!实际上,我想到了这个问题,因为我在模型中创建了很多墙壁和曲线(通过 doc.Create.NewModelCurve)。我创建的墙是特定类型的,因此我可以在之后轻松识别它们并删除它们(假设我按类型过滤新创建的墙)。但是对于我创建的曲线,我不能(或“我不知道如何”)使用类似的过滤方法。所以我得出的结论是,我可以重新识别这些曲线的唯一方法是通过它们的 ID。但为此,我需要将 ID 存储在 2 个固定命令之间的“某处”。谢谢!
  • @Arnaud 一种可靠的方法可能是使用外部命令。 Daren 在他的网站上有一个很好的例子:darenatwork.blogspot - External command。我仍然对您需要的过程有点模糊,但是您可以使用外部命令来存储 ID(或实际的 Curve 对象),并在事后擦除它们吗?或者,模型曲线具有“线”类型 - 您可以制作新的线类型供您的固定命令专用吗?所以你可以全选并安全删除?
  • 非常感谢这一切。我会试试的。我确实可以(我猜)使用自定义 Line 类型,但 External Command 方法可能会更“通用”!我会让你知道它是怎么回事!再次感谢!
猜你喜欢
  • 2012-03-06
  • 1970-01-01
  • 2012-05-24
  • 2020-10-11
  • 2019-03-21
  • 1970-01-01
  • 1970-01-01
  • 2018-03-09
  • 2020-10-10
相关资源
最近更新 更多