9. Revit API UI: UIView、UIDocument、框选聚焦
UI命名空间下的API,到这里差不多就押送讲完了,同Application那篇所讲的几个类与接口,都是带UI的对应了一个不带UI的,如UIApplication和Application,作用呢,也是类似的。
由
UI
级别提供到DB
级别的入口。
所以呢,内容较少,作用也有限。
一个应用可以打开多个文档,一个文档包含多个视图。
用偏软件运用的说法就是:Revit可以同时打开多个项目,每个项目都有各种视图(如三维、平面、图纸、统计表等)。
UIDocuemnt
UIDocument
从UIApplication
中获取。
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);
}
总结
这篇内容就这些了,感觉有用/有趣点的就框选聚焦了。
到这里,UI篇主要内容都讲完了吧,但还是有一些边边角角漏掉了,看看下篇就结束的掉吧。