我们日常在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二次开发之添加选项卡和按钮的更多相关文章

  1. Revit二次开发环境配置(Revit 2020 +Visual Studio 2019)

    Revit二次开发环境搭建(Revit 2019+Visual Studio 2017)准备内容 Revit 2019开发环境的搭建,需要安装的内容如下: Revit 2019(主要的开发环境) Vi ...

  2. Revit二次开发初体验

    最近换了下工作,由之前的互联网企业转入了BIM软件开发行列.具体原因不多说,作为一个程序员来说学习永无止境.下面来一个Hello World体验下Revit的二次开发 事前准备 VS Revit 20 ...

  3. [Revit]Autodesk Revit 二次开发整理(资料、准备工作和环境搭建)

    1 前言 Revit被Autodesk收购之后,整理和开放了一大部分API,供开发者实现自己的功能和程序,总体来说API的功能比较完善,毕竟市面上已经出现了各式各样的插件. 本人也是初学者,在Revi ...

  4. Revit二次开发——非模态窗口的事件处理

    一.起因    自己在写revit二开时,有一个Winform窗体按钮点击事件需要 触发调用事务进行处理,结果出现“异常“Starting a transaction from an external ...

  5. Openstack Murano(kilo)二次开发之添加Volume

    Openstack Murano(kilo)二次开发之添加Volume 欢迎转载,转载请注明出处:http://www.cnblogs.com/fmnisme/p/openstack_murano_a ...

  6. Revit二次开发-BIM模型导出

    最近一个月一直在研究Revit二次开发-BIM模型的导出,在网上找了很多相关资料学习.下面简单介绍一下我最近做的这个BIM模型的导出功能. 开始尝试使用Revit2015的样例程序里提供的读取模型几何 ...

  7. Revit二次开发之绘制钢筋

    第一次在博客园上写东西,也不知道该写些什么,我想就写点最近项目到遇到的问题吧. 最近在做一个小项目,具体需求大概是在一个revit模型中的对应的楼板位置绘制钢筋. 由于刚接触Revit二次开发,之前也 ...

  8. revit二次开发wpf里button按钮无法实现事务

    不能在revit提供的api外部使用事务,解决此方法, 1.把button里要实现的功能写到外部事件IExternalEventHandler中,注册外部事件,在button事件中.raise()使用 ...

  9. Revit二次开发 推荐

    学习revit二次开发,建议还是先把revit熟悉一下,去建立一下模型,亲自感受一下是如何创建模型的流程,其中会遇到什么问题.这样在自己做二次开发的时候,一些问题自己就能提前想到,规避掉.我大概用了半 ...

随机推荐

  1. Windows10运行Cura源代码,搭建环境教程

    参考官方文档 https://github.com/Ultimaker/Cura/wiki/Running-Cura-from-Source-on-Windows#python-3810 注意 这些说 ...

  2. luoguP6623 [省选联考 2020 A 卷] 树(trie树)

    luoguP6623 [省选联考 2020 A 卷] 树(trie树) Luogu 题外话: ...想不出来啥好说的了. 我认识的人基本都切这道题了. 就我只会10分暴力. 我是傻逼. 题解时间 先不 ...

  3. IDEA使用Docker插件构建镜像

    IDEA使用Docker插件构建镜像 记一次坑  第一次插件docker-maven-plugin的 配置文件中没写远程主机的地址 <dockerHost>http://192.168.1 ...

  4. zookeeper 是如何保证事务的顺序一致性的?

    zookeeper 采用了全局递增的事务 Id 来标识,所有的 proposal(提议)都在被 提出的时候加上了 zxid,zxid 实际上是一个 64 位的数字,高 32 位是 epoch(时 期; ...

  5. python实现AES加密、解密

    AES加密方式有五种:ECB, CBC, CTR, CFB, OFB 从安全性角度推荐CBC加密方法,本文介绍了CBC,ECB两种加密方法的python实现 python 在 Windows下使用AE ...

  6. 什么情况下使用break关键字?什么情况下使用Continue关键字

    return用于返回一个值给函数,或者直接使用,结束函数:break用于结束循环,即从循环中退出:continue用于结束当次循环,直接进行下次循环.

  7. 简述在 MySQL 数据库中 MyISAM 和 InnoDB 的区别 ?

    MyISAM: 不支持事务,但是每次查询都是原子的: 支持表级锁,即每次操作是对整个表加锁: 存储表的总行数: 一个 MYISAM 表有三个文件:索引文件.表结构文件.数据文件: 采用菲聚集索引,索引 ...

  8. Spring常用的注入方式有哪些?

    Spring通过DI(依赖注入)实现IOC(控制反转),常用的注入方式主要有三种:构造方法注入,setter注入,基于注解的注入. 参考链接:Spring常用的三种注入方式

  9. 构造器注入和 setter 依赖注入,那种方式更好?

    每种方式都有它的缺点和优点.构造器注入保证所有的注入都被初始化,但是 setter 注入提供更好的灵活性来设置可选依赖.如果使用 XML 来描述依赖, Setter 注入的可读写会更强.经验法则是强制 ...

  10. zookeeper 的应用

    不建议使用(单独)zookeeper 做分布式队列,有几点原因,以下原因摘抄于curator的官网: 1.zookeeper有1MB的传输限制.而在队列中,拥有很多的数据节点,通常包括数千个,如果有较 ...