2016-01-14 77 views
3

我正在尝试使用Revit API激活视图。我想要做的就是提示用户选择一些墙,但是当用户被问到时,他不能切换视图来选择更多的墙(在这一点上所有东西都是灰色的)。 所以我想要激活的视图(我的意思是,我希望这个视图实际显示在屏幕上)已经存在,我可以访问它的Id。如何使用Revit API激活(显示)视图?

我已经看到有关创建,浏览,过滤视图的线程,但没有激活它......这是一个平面图视图。

到目前为止,我可以访问其关联的ViewPlan对象和关联的参数(名称,ID,..)。

可以吗?

非常感谢!

Arnaud。

+0

我有一个我开发的(使用Dynamo + Python)调用PickObjects()的插件。用户可以切换视图。 分享一些代码,这样我可以帮助更好。 我的代码调用ActiveUIDocument并使用我筛选用户选择的ISelectionFilter类。 正如下面的答案所述,大多数API使用是“无模式”,您应该避免使API做UI更改(例如切换视图),因为控制权已经离开Revit主线程。 –

回答

4

我认为最好的方式是UIDocument.RequestViewChange()方法。关于这个棘手的部分是,除非你设计你的应用程序是无模式的,没有外部事件或怠速,否则直到稍后当控制权从你的插件返回到Revit时才可能发生。 (还有设置UIDocument.ActiveView属性 - 如果这有不同的约束,则不是正值)。

历史上我完成它的另一种方式是通过使用UIDocument.ShowElements()命令。这里的诀窍是,你不能控制确切的视图 - 但是如果你可以找出只出现在视图中的元素,通常可以做到这一点(即使你必须做一个单独的查询来获得只有在给定的平面图视图中的一堆元素)。

祝你好运!

+0

非常感谢!我想我会用ShowElements()来试试你的方法! – Arnaud