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

news2024/11/13 13:03:50

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

板凳--------第20章-信号:基本概念1

tlpi_hdr.h头文件使用及设置 liao__ran 于 2020-09-29 15:12:01 发布 阅读量1.6k 收藏 5 点赞数 1 分类专栏&#xff1a; linux系统编程手册 版权 linux系统编程手册 专栏收录该内容 7 篇文章 1 订阅 订阅专栏 使用的头文件&#xff0c;主要如下&#xff1a; ename.c.inc erro…

【文字+视频教程】在手机上用文生软件平台CodeFlying开发一个整蛊版《Flappy Bird》

前言&#xff1a; 在之前的文章中我们介绍了国内首家文生软件平台码上飞CodeFlying&#xff0c;并且教给了大家如何用它来开发复杂的项目信息管理系统以及恶搞拼图小游戏等。今天就继续给大家带来一起用码上飞开发整蛊版《Flappy Bird》小游戏的教程。 老规矩&#xff0c;咱还…

024.两两交换链表中的节点,用递归和 while 循环

题意 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 难度 中等 示例 输入&#xff1a;head [1,2,3,4] 输出&#xff1a;[…

嵌入式系统中C/C++有仓颉语言对比分析

大家好,今天给大家分享一下,如何使用仓颉,以及优势在哪里? 在 2024 年 6 月 21 日的华为开发者大会上,华为不仅官宣了下一代鸿蒙操作系统 HarmonyOS NEXT,而且还正式推出了自研的编程语言 仓颉 ,可谓是赚足了面子,遥遥领先! 值得一提的是,HarmonyOS NEXT 是华为从内到…

数据库管理系统(DBMS)

一.数据库管理系统 1.简介 数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件&#xff0c;用于建立、使用和维护数据库&#xff0c;简称DBMS。它对数据库进行统一的管理和控制&#xff0c;以保证数据库的安全性和完整性。用户通过DBMS访问数据库中…

无线麦克风哪个品牌音质最好,一文告诉你无线领夹麦克风怎么挑选

随着直播带货和个人视频日志&#xff08;Vlog&#xff09;文化的兴起&#xff0c;以及自媒体内容创作的蓬勃发展&#xff0c;我们见证了麦克风行业的迅猛发展。在这一浪潮中&#xff0c;无线领夹麦克风以其无与伦比的便携性和操作效率&#xff0c;迅速赢得了广大视频制作者的喜…

WPF——属性

一、属性 类最初只有字段与函数&#xff0c;字段为一个变量&#xff0c;访问权限可以是private&#xff0c;protected&#xff0c;public。而将字段设为private&#xff0c;不方便外界对类数据的操作&#xff0c;但是将字段设为public又怕外界对数据进行非法操作&#xff0c;于…

【ChatBI】超轻量Python库Vanna快速上手,对接oneapi

oneapi 准备 首先确保你有oneapi &#xff0c;然后申请 kimi的api 需要去Moonshot AI - 开放平台 然后添加一个api key 然后打开oneapi的渠道界面&#xff0c;添加kimi。 然后点击 测试&#xff0c; 如果能生成响应时间&#xff0c;就是配置正确。 然后创建令牌 http:…

探秘美食新宠:嘴尚绝卤味,口感惊艳你的味蕾!

在繁华的都市中&#xff0c;一道独特的卤味小吃悄然走红&#xff0c;它就是“嘴尚绝卤味”。今天&#xff0c;就让我们一起走进这家卤味店&#xff0c;探寻那令人回味无穷的口感秘密。 一、初识嘴尚绝卤味 “嘴尚绝”这个名字&#xff0c;一听就让人联想到美食的极致诱惑。店内…

从零开始构建CNN模型

猫狗分类问题——从零开始构建CNN 我们将使用相同的体系结构&#xff0c;并进行一些小的更改&#xff0c;如下所示。 第一个线性层的输入尺寸发生变化&#xff0c;因为猫和狗的图像尺寸是(256,256)。添加了另一个线性层来为模型学习提供更多的灵活性。 让我们来看看实现网络架…

卷积的通俗解释

以时间和空间两个维度分别理解卷积&#xff0c;先用文字来描述&#xff1a; 时间上&#xff0c;任何当前信号状态都是迄至当前所有信号状态的叠加&#xff1b;时间上&#xff0c;任何当前记忆状态都是迄至当前所有记忆状态的叠加&#xff1b;空间上&#xff0c;任何位置状态都…

如何将视频里的语音转成文字?5种方法轻松解决

这个信息爆炸的时代&#xff0c;视频内容如同潮水般涌来&#xff0c;而我们经常需要从这些海量的视频资源中提取关键信息。无论是为了学习、工作还是娱乐&#xff0c;将视频里的语音转换成文字都是一种高效的方法。这不仅可以帮助我们更好地理解内容&#xff0c;还能方便我们进…

【自然语言处理系列】Python 字符串操作技巧:清理、替换与合并

在编写Python程序时&#xff0c;字符串处理是一项常见的任务。了解如何有效地清理、修改和合并字符串对于数据预处理、文本分析和日常编程都至关重要。本文将引导您通过一系列实用的示例来掌握Python中字符串的核心操作&#xff0c;包括去除不需要的空格和特殊字符、替换文本中…

轻松搞定数据可视化配色,这份指南助你一臂之力!

配色是数据可视化图表的主要因素。一组合适的配色可以表达数据的重点和趋势&#xff0c;而不良的配色会削弱可视化表达的有效性。在本文中&#xff0c;我将梳理数据可视化中使用的配色板类型&#xff0c;通过案例揭示数据可视化配色技巧&#xff0c;并介绍可生成配色板的插件&a…

手撕RPC——前言

手撕RPC——前言 一、RPC是什么&#xff1f;二、为什么会出现RPC三、RPC的原理3.1 RPC是如何做到透明化远程服务调用&#xff1f;3.2 如何实现传输消息的编解码&#xff1f; 一、RPC是什么&#xff1f; RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff…

Python笔记 文件的读取操作

1.open()打开函数 再Python&#xff0c;使用open函数&#xff0c;可以打开一个已经存在的文件&#xff0c;或者创建一个新文件&#xff0c;语法如下 open(name,mode,encoding) name:是要打开的文件名的字符串&#xff08;可以包含文件所在的具体路径&#xff09; mode&…

[FreeRTOS 基础知识] 信号量 概念

文章目录 信号量定义信号量特性 信号量定义 信号量是一个抽象的数据类型&#xff0c;通常包含一个整数值以及一个等待该值变为正数的任务列表&#xff08;也称为等待队列&#xff09;。信号量的整数值代表了系统中某种资源的可用数量。 在操作系统中信号量用于控制对共享资源访…

【Solr 学习笔记】Solr 源码启动教程

Solr 源码启动教程 本教程记录了如何通过 IDEA 启动并调试 Solr 源码&#xff0c;从 Solr9 开始 Solr 项目已由 ant 方式改成了 gradle 构建方式&#xff0c;本教程将以 Solr 9 为例进行演示&#xff0c;IDE 选择使用 IntelliJ IDEA。 Solr github 地址&#xff1a;https://gi…

技术干货|使用机器学习进行大数据信用评分实战演练

利用数据进行客户分类是当前金融信用风险、电商精准营销等的主流方法。那么&#xff0c;如何实现轻松实现客户分类呢&#xff1f;下面就为您介绍RapidMiner是如何快速实现客户分类的数据处理和可视化的。 例如&#xff0c;我们手上有某银行8000多名客户的贷款还款记录&#xff…

保姆级 | Windows 复古风格终端样式设置

0x00 前言 前段时间有朋友询问我 Windows 终端的样式是如何设置的&#xff0c;我也进行了一些简单的回复。在之前的 Windows 11 版本中&#xff0c;系统提供了一个界面按钮&#xff0c;可以直接将终端样式设置为复古风格。然而&#xff0c;系统更新之后&#xff0c;这个按钮好像…