6. Revit API UI: PreviewControl(预览控件)

6. Revit API UI: PreviewControl(预览)

PreviewControl

有时我们需要一个预览功能,而Revit也提供了一个PreviewControl类来帮助我们实现这个功能。

从类的继承关系来看,PreviewControl就是一个用户自定义控件,它就几个新的类成员。

// 构造函数
public PreviewControl(Document document,ElementId viewId);
// 无新方法
// 属性
ScrollbarVisibility; // 滚动条显示
UIView;
ViewId;  // 来自构造函数参数

在这里插入图片描述

关于构造函数,还是有一点小要求的

  • 传入的View,必须是图形视图。非图像视图如统计表,就不行
  • 窗口必须先是非模态的
  • 一次只能有一个PreviewControl处于活动状态

有模型的视图就是图形视图,平面、剖图、3D视图等。

视图(View) 有6个子类,TableViewView3DViewDraftingViewPlanViewSectionViewSheet

View后面讲。

使用

既然是一个用户自定义控件,那么就直接塞进WPF中就好了。

XAML

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="100" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <Grid Grid.Column="0" Background="#dfe6e9" >
        <Button x:Name="Btn_1" Content="按钮" Width="80" Height="30"/>
    </Grid>
    <Grid Name="PreviewControl" Grid.Column="1">
        <TextBlock Text="这里放预览控件" FontSize="20" VerticalAlignment="Center" HorizontalAlignment="Center"/>
    </Grid>
</Grid>

使用

// 外部命令需要实现的方法
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
    var uiApp = commandData.Application;
    var uiDoc = uiApp.ActiveUIDocument;
    var app = uiApp.Application;
    var doc = uiDoc.Document;

    // 创建一个预览控件
    var previewControl = new PreviewControl(doc, doc.ActiveView.Id);
    var window = new PreviewControlWindow();
    window.PreviewControl.Children.Add(previewControl);

    window.ShowDialog();

    return Result.Succeeded;
}

加载运行后,就能看到下面的界面。

通过测试,发现有这样几个特性:

  • 在预览控件缩放和平移,Revit视图不会变化;旋转视角,Revit视图会在旋转结束后变为同样的视角
  • 预览控件,就是个Canvas,就相当于投屏,真的就是"预览",不能鼠标点点获取到构件。

注:在使用预览控件时进行的事务,会推迟到预览控件关闭后执行

比如,点击“按钮”执行删除Floor的命令,点击后无反应,等到窗体关闭后,才会执行一次

在这里插入图片描述

设置窗体Interop

通常,我们需要让插件窗体在Revit窗体上方,并能够随着Revit窗体一起最小化和显示。

// 设置窗口再Revit窗口上方,并一起 最小化/显示
    System.Windows.Interop.WindowInteropHelper helper = new System.Windows.Interop.WindowInteropHelper(window);
    helper.Owner = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle;

结尾

这篇,我们主要讲了PreviewControl,并提到了View

还有在例子中,说到点击按钮,删除Floor。这个操作是如何做到的呢,我记得在第二篇中提到了下,下篇就讲一讲,在这个例子的基础上。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值