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

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篇主要内容都讲完了吧,但还是有一些边边角角漏掉了,看看下篇就结束的掉吧。

  • 23
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值