Revit二次开发之添加选项卡和按钮
我们日常在revit开发中经常会用到按钮,可以通过revitAPI提供的接口创建按钮,今天我简单介绍一下两种按钮,一种是单命令按钮,另一种是含下拉菜单的按钮,包括创建他们的方法。
实现方法
1.实现思路
创建按钮的思路大体为:1、编写好自己的命令文件(一般就是继承IExteralCommand接口);2、创建一个继承IExternalApplication接口的文件;3、编辑Addin文档,并将其放入C:\ProgramData\Autodesk\Revit\Addins\2020\路径下。
2.添加必要的引用
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using System.Windows.Media.Imaging;
using Autodesk.Revit.Attributes;
3.示例代码
namespace HelloRevit
{
[Transaction(TransactionMode.Manual)]
public class CsAddPanel:IExternalApplication
{
public Result OnStartup(UIControlledApplication application)
{
//新建一个选项卡,并在该选项卡总新建一个命令栏(命令栏可以放多个命令按钮)
application.CreateRibbonTab("NewTab");
RibbonPanel ribbonPanel = application.CreateRibbonPanel("NewTab", "TabBar");
//1、建立一个可下拉的命令栏
//1.1、新建一个可下拉按钮
SplitButtonData sbd1 = new SplitButtonData("Name", "Text");
SplitButton sb1 = ribbonPanel.AddItem(sbd1) as SplitButton;
//1.2、在该按钮添加两个按钮
PushButtonData p1 = new PushButtonData("Helloworld1", "按钮1", @"E:\practice\Retrieve\CreateModelLine\bin\Debug\CreateModelLine.dll", "CreateModelLine.Class1");
PushButton pushButton1 = sb1.AddPushButton(p1);
PushButtonData p2 = new PushButtonData("Helloworld2", "按钮2", @"E:\practice\Retrieve\ClassLibrary4\bin\Debug\ClassLibrary4.dll", "ClassLibrary4.Class1");
PushButton pushButton2 = sb1.AddPushButton(p2);
//2、在选项卡栏添加一个普通按钮
PushButtonData p3 = new PushButtonData("Helloworld3", "按钮3", @"E:\practice\Retrieve\Retrieve\bin\Debug\Retrieve.dll", "Retrieve.Document_Selection");
PushButton pushButton3 = ribbonPanel.AddItem(p3) as PushButton;
//3、先准备一张图片,后面给按钮加图片。(这里要引用PresentationCore程序集,再引用system.windows.media.imaging)
Uri uriImage = new Uri(@"E:\practice\HelloRevit\HelloRevit\bin\Debug\1.jpg");
BitmapImage largeImage = new BitmapImage(uriImage);
//3.1、将图片赋值给按钮。PushButton有两个属性,当按钮是堆叠时,显示的是Image;当按钮是下拉或单个的时候显示的是LargeImage。
pushButton1.LargeImage = largeImage;
pushButton2.LargeImage = largeImage;
pushButton3.LargeImage = largeImage;
return Result.Succeeded;
}
public Result OnShutdown(UIControlledApplication application)
{
return Result.Succeeded;
}
}
}
注意:PushButtonData()内四个参数,第三个参数为外部命令文件所在。
4.编辑Addin文件
<?xml version="1.0" encoding="utf-8"?>
<RevitAddIns>
<AddIn Type="Application">
<Name>CreateButton</Name>
<Assembly>D:\practice\HelloRevit\HelloRevit\bin\Debug\HelloRevit.dll</Assembly>
<AddInId>6cdba932-c058-4ec1-b038-33ed590c41d3</AddInId>
<FullClassName>HelloRevit.CsAddPanel</FullClassName>
<VendorId>ADSK</VendorId>
</AddIn>
</RevitAddIns>
注意将Addin文件放入上面所提位置,FullClassName就是该文件命名空间下的类(本文例子的命名空间为HelloRevit,类名为CsAddPanel)
5.Ribbon菜单插件介绍


其他按钮创建方法与上面分享方法类似,希望对大家有所帮助。
Revit二次开发之添加选项卡和按钮的更多相关文章
- Revit二次开发环境配置(Revit 2020 +Visual Studio 2019)
Revit二次开发环境搭建(Revit 2019+Visual Studio 2017)准备内容 Revit 2019开发环境的搭建,需要安装的内容如下: Revit 2019(主要的开发环境) Vi ...
- Revit二次开发初体验
最近换了下工作,由之前的互联网企业转入了BIM软件开发行列.具体原因不多说,作为一个程序员来说学习永无止境.下面来一个Hello World体验下Revit的二次开发 事前准备 VS Revit 20 ...
- [Revit]Autodesk Revit 二次开发整理(资料、准备工作和环境搭建)
1 前言 Revit被Autodesk收购之后,整理和开放了一大部分API,供开发者实现自己的功能和程序,总体来说API的功能比较完善,毕竟市面上已经出现了各式各样的插件. 本人也是初学者,在Revi ...
- Revit二次开发——非模态窗口的事件处理
一.起因 自己在写revit二开时,有一个Winform窗体按钮点击事件需要 触发调用事务进行处理,结果出现“异常“Starting a transaction from an external ...
- Openstack Murano(kilo)二次开发之添加Volume
Openstack Murano(kilo)二次开发之添加Volume 欢迎转载,转载请注明出处:http://www.cnblogs.com/fmnisme/p/openstack_murano_a ...
- Revit二次开发-BIM模型导出
最近一个月一直在研究Revit二次开发-BIM模型的导出,在网上找了很多相关资料学习.下面简单介绍一下我最近做的这个BIM模型的导出功能. 开始尝试使用Revit2015的样例程序里提供的读取模型几何 ...
- Revit二次开发之绘制钢筋
第一次在博客园上写东西,也不知道该写些什么,我想就写点最近项目到遇到的问题吧. 最近在做一个小项目,具体需求大概是在一个revit模型中的对应的楼板位置绘制钢筋. 由于刚接触Revit二次开发,之前也 ...
- revit二次开发wpf里button按钮无法实现事务
不能在revit提供的api外部使用事务,解决此方法, 1.把button里要实现的功能写到外部事件IExternalEventHandler中,注册外部事件,在button事件中.raise()使用 ...
- Revit二次开发 推荐
学习revit二次开发,建议还是先把revit熟悉一下,去建立一下模型,亲自感受一下是如何创建模型的流程,其中会遇到什么问题.这样在自己做二次开发的时候,一些问题自己就能提前想到,规避掉.我大概用了半 ...
随机推荐
- tensorflow2.4与目标检测API在3060显卡上的配置安装
目前,由于3060显卡驱动版本默认>11.0,因此,其不能使用tensorflow1版本的任何接口,所以学习在tf2版本下的目标检测驱动是很有必要的,此配置过程同样适用于任何30系显卡配置tf2 ...
- RocketMq基础 看这一篇就够了
RocketMQ 编译安装 HelloWorld 官方网站 http://rocketmq.apache.org GitHub https://github.com/apache/rocketmq Q ...
- matplotlib字体
matplotlib官方文档 https://matplotlib.org/stable/gallery/index.html 使用以下代码查看 import matplotlib.pyplot as ...
- Skye无人机刷Betaflight详细图文教程
前言 首先十分感谢B站TASKBL up主的视频教程以及他的耐心指导,视频链接Skye 原机主板刷BetaFlight 参考教程_哔哩哔哩_bilibili.整个改造过程耗时三天,现把改造过程以及遇 ...
- 《前端运维》三、Docker--1镜像与容器
一.基本概念 如果我们想要让软件运行起来,首先要保证操作系统的设置,其次还需要依赖各种组件和库的正确安装.那么虚拟机就是一种带环境安装的一种解决方案,它可以实现在一种操作系统里面运行另外一种操作系统, ...
- bzoj5315/luoguP4517 [SDOI2018]战略游戏(圆方树,虚树)
bzoj5315/luoguP4517 [SDOI2018]战略游戏(圆方树,虚树) bzoj Luogu 题目描述略(太长了) 题解时间 切掉一个点,连通性变化. 上圆方树. $ \sum |S| ...
- 突发!Gitee 图床,废了!
大家好,我是鱼皮,这两天又发生了一件挺意外的事情:Gitee 的图床废了! 图床:指储存图片的服务器,便于在网上展示图片 昨天晚上,星球里不止一位小伙伴发帖子表示自己网站.文章中的图片竟然全部变成了 ...
- RenderDoc图形调试器详细使用教程(基于DirectX11)
前言 由于最近Visual Studio的图形调试器老是抽风,不得不寻找一个替代品了. 对于图形程序开发者来说,学会使用RenderDoc图形调试器可以帮助你全面了解渲染管线绑定的资源和运行状态,从而 ...
- linux下的shell脚本
先说明以下内容来自: http://c.biancheng.net/cpp/shell/ ,C语言中文网,请大家支持原作,点击链接查看. 我写下来只是作为笔记,如果侵权,请留言,立马删除. Shell ...
- Oracle入门基础(七)一一集合运算
SQL> /* SQL> 查询10和20号部门的员工 SQL> 1. select * from emp where deptno=10 or deptno=20; SQL> ...