如何从 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