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。这个操作是如何做到的呢,我记得在第二篇中提到了下,下篇就讲一讲,在这个例子的基础上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/740519.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue3滚动日历选择器

倒叙日历&#xff1a; <template><div class"date-picker"><div class"column" wheel"onYearScroll"><div v-for"(year, index) in displayedYears" :key"index" :class"{current: year current…

Vue和React总结

数据的更改更为简单,不需要进行逻辑代码的修改,只需要操作数据就能完成相关操作 (5)虚拟dom 不再使用原生的dom操作节点,极大解放dom操作,但具体操作的还是dom不过是换了另一种方式 (6)各种指令;过滤器 v-text主要用来更新textContent&#xff0c;可以等同于JS的text属性。 v-…

学习金字塔模型

学习金字塔模型由美国缅因州巴特尔教育研究所&#xff08;National Training Laboratories, Bethel, Maine&#xff09;开发&#xff0c;它展示了不同学习活动的平均知识保留率。这种方法可以帮助人们理解不同学习方式的有效性&#xff0c;从而更好地选择适合的学习方法。学习金…

el-dialog el-select适配移动端

一、el-dialog 2024.06.20今天我学习了如何对el-dialog弹窗适配移动端展示&#xff0c;效果如下&#xff1a; 代码如下&#xff1a; media screen and (min-width: 220px) and (max-width: 600px) {::v-deep .el-dialog {width: 95% !important;} } 二、el-select 代码如下…

Linux调试器 gdb

gbd基本概念 GDB (GNU Debugger) 是一个强大的命令行调试工具,用于调试各种编程语言(如C、C、Java、Python等)编写的程序。使用 gdb可以帮助开发人员更快地定位和修复程序中的缺陷,提高代码质量和开发效率。它是 Linux/Unix 系统上最常用的调试工具之一。 1. 背景 程序的发布方…

数据挖掘常见算法(聚类)

划分方法 K-均值算法(K-means算法) 方法: 首先选择K个随机的点,称为聚类中心.对于数据集中的,每一个数据,按照距离K个中心点的距离,将其与距离最近的中心点关联起来,与同一个中心点关联的所有点聚成一类.计算每一个组的平均值,将改组所关联的中心点移动到平均值的位置重复2~…

泰迪智能科技与成都文理学院人工智能与大数据学院开展校企合作交流

近日&#xff0c;在推动高等教育与产业深度融合的背景下&#xff0c;成都文理学院人工智能与大数据学院携手广东泰迪智能科技股份有限公司开展“专业建设交流会”。人工智能与大数据学院院长胡念青、院长助理陈坚、骨干教师刘超超、孙沛、赵杰、文运、胡斌、邹杰出席本次交流会…

北邮《计算机网络》传输层笔记

内容一览 缩写复习单词复习传输层前言传输协议的要点拥塞控制UDPTCP VS UDPTCP 缩写复习 AIMD XCP ECN WFQ max-min-fair ARQ PAWS TSAP NSAP TCP UDP RTT SCTP SACK NAK RST MSS 单词复习 inverse multiplexing(SCTP) convergence crashed machine protocol scenarios asym…

外贸行业 - 收汇日期

“收汇日期”指的是外贸业务中&#xff0c;出口方从进口方收到货款的具体日期。在外贸交易中&#xff0c;特别是使用信用证&#xff08;Letter of Credit, L/C&#xff09;、电汇&#xff08;Telegraphic Transfer, T/T&#xff09;、付款交单&#xff08;Documents against Pa…

“移”起AI+丨首创AI值守无人小店!中国移动视觉大模型加速落地

在城市里开设一家24小时便利店有多难&#xff1f;创业者常常面临着熬夜看店、全年无休的困境&#xff0c;而选择增加雇佣员工看店又会面临着成本高昂、利润微薄的问题。 日前在温州&#xff0c;一家AI无人值守便利店引发关注。在这家无人便利小店内&#xff0c;浙江移动试点部…

C++STL梳理

CSTL标准手册&#xff1a; https://cplusplus.com/reference/stl/ https://cplusplus.com/reference/vector/vector/at/ 1、STL基础 1.1、STL基本组成(6大组件13个头文件) 通常认为&#xff0c;STL 是由容器、算法、迭代器、函数对象、适配器、内存分配器这 6 部分构成&…

Tomcat多实例配置

目录 一. 复制程序文件 二. 启动tomcat多实例 三. Tomcat多实例负载均衡 多实例&#xff08;多进程&#xff09;&#xff1a;同一个程序启动多次&#xff0c;分为两种情况: 第一种&#xff1a;一台机器跑多个站点&#xff1b; 第二种&#xff1a;一个机器跑一个站点多个实…

基于Java家庭理财系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;…

ardupilot开发 --- 视觉伺服 篇

风驰电掣云端飘&#xff0c;相机无法对上焦 视觉伺服分类视觉伺服中的坐标系成像模型推导IBVS推导参考文献 视觉伺服分类 控制量是在图像空间中推导得到还是在欧式空间中推导得到&#xff0c;视觉伺服又可以分类为基于位置(PBVS)和基于图像的(IBVS)视觉伺服。 视觉伺服中的坐…

算法设计与分析:并查集法求图论桥问题

目录 一、实验目的 二、问题描述 三、实验要求 四、算法思想 1. 基准算法 1.1 算法思想 1.2 代码 1.3 时间复杂度 2. 使用并查集的高效算法 2.1 算法思想 2.2 代码&#xff1a; 2.3 时间复杂度&#xff1a; 五、实验结果 一、实验目的 1. 掌握图的连通性。 2. 掌…

MySQL数据库初体验+数据库管理(其一)

【1】 操作系统介绍&#xff1a; Linux操作系统有 RedHat CentOS Debian Ubuntu OpenSUSE 信创标准 国产系统 &#xff1a; 华为&#xff08;欧拉&#xff09; 阿里&#xff08;龙蜥&#xff09; 腾讯 &#xff08;tencentOS&#xff09; 麒麟&#xf…

cefsharp 修改请求头request.Headers,以实现某种请求验证(v100+已测试)含主要源码和注释

(一)目的:cefsharp实现修改请求头 Tip:网上搜的很多代码都无法实现(要么版本较低,方法有变,要么就行不通),较多的错误是:集合属性只读。其中一个bili网友的测试方法注解一张图,但没有具体代码。参考一下。 (二)实现方法 2.1 创建对象 ChromiumWebBrowser home…

台式扫描电镜低真空和高真空区别

台式扫描电镜的低真空和高真空模式主要有以下区别&#xff1a; 1. 真空条件&#xff1a;在高真空模式下&#xff0c;扫描电镜工作在高度真空的环境中&#xff0c;通常要求真空度优于\(10^{-3}\) Pa。而低真空模式则允许样品室的真空度相对较低&#xff0c;通常在1&#xff5e;…

08.QT控件:QWidget

一、Widget 简介 Widget 是 Qt 中的核⼼概念.。英⽂原意是 "小部件"&#xff0c;我们此处也把它翻译为 "控件"。控件是构成⼀个图形化界⾯的基本要素。 Qt 作为⼀个成熟的 GUI 开发框架, 内置了⼤量的常⽤控件。并且 Qt 也提供了 "⾃定义控件" 的…

Mysql简述

Java - sql语句学习 sql分类 sql语句 sql数据类型