9. Revit API UI: UIView、UIDocument、框选聚焦

avatar
作者
筋斗云
阅读量:0

9. Revit API UI: UIView、UIDocument、框选聚焦

UI命名空间下的API,到这里差不多就要讲完了,同Application那篇所讲的几个类与接口,都是带UI的对应了一个不带UI的,如UIApplication和Application,作用呢,也是类似的。

UI级别提供到DB级别的入口。

所以呢,内容较少,作用也有限。

一个应用可以打开多个文档,一个文档包含多个视图。

用偏软件运用的说法就是:Revit可以同时打开多个项目,每个项目都有各种视图(如三维、平面、图纸、统计表等)。

在这里插入图片描述


UIDocuemnt

UIDocumentUIApplication中获取。

UIApplication uiApp = commandData.Application; UIDocument uiDoc = uiApp.ActiveUIDocument; 

获取当前活动的项目文档。至于获取到全部项目文档,得再Application中才行,里面有属性"Documents"。

回到UI话题,来看看类成员吧。

主要属性:

属性描述
ActiveGraphicalView
ActiveView
当前活动的视图
Application:UIApplication互相存了对方的引用
Document:Document提供DB级别文档操作的入口
Selection一个选择器的实例,位于UI.Selection命名空间中

部分方法:

方法描述
GetOpenUIViews()
UpdateAllOpenViews ()
获取已打开的视图
更新已打开的视图
ShowElements(…) x4缩放显示指定元素。
效果类似于双击鼠标中键,或者选择模型后,点击右上角视角盒子。
SaveAs() x2
SaveAndClose()
保存
其它

UIDocument就这样了,至于Document,到Autodesk.Revit.DB命名空间时再讲,应该很快了。


UIView

UIView得使用UIDocument的GetOpenUIViews()方法获取,至于活动视图所对应的UIView,可以通过属性ViewId比较获得。

UIView成员:

类成员描述
ViewId:ElementID所对应的View
Close()关闭视图
GetWindowRectangle()获取View在屏幕上的像素范围
GetZoomCorners ()获取View在模型空间中当前视角的范围
Zoom(…)
ZoomAndCenterRectangle(…)
ZoomSheetSize()
ZoomToFit()
按比例缩放,传入比例
缩放到指定的范围,传入范围
???
缩放到适应大小(双击鼠标中键)

感觉UIDocument上的缩放,就是调用的UIView上的方法。

1. 获取ActiveUIView

private UIView GetActiveUIView(UIApplication uiApp) {     UIDocument uiDoc = uiApp.ActiveUIDocument;     Document doc = uiDoc.Document;     View activeView = uiDoc.ActiveView;      IList<UIView> uiViews = uiDoc.GetOpenUIViews();     UIView activeUIView = null;      string viewNames = string.Empty;     foreach (UIView uiView in uiViews)     {         View view = doc.GetElement(uiView.ViewId) as View;         if (view.Id == activeView.Id)         {             activeUIView = uiView;         }         viewNames += $"{view.Name}\r\n";     }     viewNames += $"\r\nActive View: {activeView.Name}";      TaskDialog.Show("OpenUIViews", viewNames);      return activeUIView; } 

在这里插入图片描述

2. 框选聚焦

框选聚焦,可以直接采用ZoomSheetSize()方法。为什么还有写这个呢,因为开始时,我没有测试这个方法的效果,然后采用了另一个方法实现,这里还是记录一下。

采用UIView的ZoomSheetSize()方法

P.S. 上面删除线处写错了,那方法效果不明呐,没搞懂。当时测试是没有重新编译🙄,使用下面的方法实现。

自己计算范围的框选聚焦实现。

private void ZoomToRectangle(Selection selection, UIView uiView) {     PickedBox box = selection.PickBox(PickBoxStyle.Enclosing);      XYZ minPoint = box.Min;     XYZ maxPoint = box.Max;      uiView.ZoomAndCenterRectangle(minPoint, maxPoint); } 

在这里插入图片描述

快捷键:ZR


总结

这篇内容就这些了,感觉有用/有趣点的就框选聚焦了。

到这里,UI篇主要内容都讲完了吧,但还是有一些边边角角漏掉了,看看下篇就结束的掉吧。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!