如何从 Revit API 调用 Revit 清除按钮

Posted

技术标签:

【中文标题】如何从 Revit API 调用 Revit 清除按钮【英文标题】:How to Call Revit Purge Button from the Revit API 【发布时间】:2017-11-07 06:45:17 【问题描述】:

我正在开发一个插件来从中心分离一个文档,当它完成时它也会被清除。我正在努力编写清除代码,我正在考虑从代码中调用 Revit Purge 按钮。如果可能,将感谢支持或分享在 API 中编写清除命令的代码。

谢谢

【问题讨论】:

【参考方案1】:

The Building Coder 在purge and detecting an empty view 的讨论中提供了一些清除示例的摘要。

【讨论】:

感谢您在单独的线程上分享它。感谢支持。干杯!! 感谢阿里的回答。我也在指向此处的博客文章中添加了一条注释,以获取您提供的限制列表。干杯【参考方案2】:

通过一些研究,我想出了解决方案,但它也有一些限制。我们可以从 API 调用 Revit 按钮,包括 Purge。

限制:

您无法在插件中途调用按钮。 您必须将其设置为在插件完成后运行。 您也许可以通过订阅 Executed 事件来解决此问题,但我需要对此进行试验。 您不知道该命令是否会成功运行。 此外,由于您无法在程序中途运行它,因此您无法在代码中检查它是否成功。 您可以检查日志日志并解析最新命令的结果,但这是一个非常 hack-y 感觉的解决方案。 您无法提前知道其他人是否已覆盖该按钮以执行其他操作。 只需按下按钮即可调用。上面的文章重点介绍了覆盖按钮。您无法保证该按钮仍能按您的预期工作。 您通过按下按钮触发的过程无法自动化。 您的脚本必须在按下按钮之前完成,因此您无法控制生成的对话框。 您也许可以订阅按钮事件并以这种方式进行操作。同样,需要进行实验。

以下是实现此目的的示例代码:

        UIApplication uiapp = commandData.Application;

        //Store the ID of desired plugin button, in this case its 'purge unused'
        String s_commandToDisable = "ID_PURGE_UNUSED";
        RevitCommandId s_commandId = RevitCommandId.LookupCommandId(s_commandToDisable);

        //This revit button will run at the end of your application. 
        uiapp.PostCommand(s_commandId);

要查找默认 Revit 命令 ID 列表,请单击 here

【讨论】:

以上所有观点均有效且遵守良好。如果您需要“清除”,最好的方法是执行您自己的收集 + 删除操作。 Revit API 完全支持这些。因此,例如,如果您希望删除所有未放置的视图,只需将它们全部收集起来,检查它们是否放置在工作表上,如果没有则将其删除。您可能注意到调用 revit 命令不允许您向它传递任何参数。它只是打开了窗口。现在,除非您想深入了解以编程方式单击按钮的细节,否则它实际上是一个无用的窗口。

以上是关于如何从 Revit API 调用 Revit 清除按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何从 revit 插件或使用 Forge api 为 Revit 文件创建 URN

Revit API调用Revit内部命令PostableCommand

如何使用 Forge API 从模型 Revit 2022 获取零件类别

从 REVIT Api 导入 gbxml

revit怎么卸载干净重新安装

如何使用 Forge 模型衍生 API 获取 revit 模型的单位?