备注:学习自博主黑夜の骑士REVIT二次开发入门教程
本节学习如何在Rvit中添加一个带图标的命令,点击命令后在revit界面显示“HelloRevit”。
1、首先新建一个项目,添加一个类,这里命名为HelloRevitDemo,实现IExternalCommand接口,添加以下代码,这样我们在revit外部工具中加载dll文件就会在revit界面显示“Hello,Revit”.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
namespace UIDemo {
[Transaction(TransactionMode.Manual)]
public class HelloRevitDemo : IExternalCommand {
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) {
//获取当前文档
Document doc = commandData.Application.ActiveUIDocument.Document;
//显示信息
TaskDialog.Show("Demo", "Hello,Revit");
return Result.Succeeded;
}
}
}
2、以上是通过外部工具命令调用来实现,那么如何通过创建一个图标来调用这段代码来实现呢?
再次添加一个类,这里我们实现IExternalApplication接口,此接口需要实现两个方法,返回值类型为Result 的OnShutdown(UIControlledApplication application)方法及返回值类型为Result类型的OnStartup(UIControlledApplication application)方法,我们主要在第二个方法里面写,第一个方法直接返回Result.Succeeded即可。
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.UI;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using System.Windows.Media.Imaging;
using System.Reflection;
using System.Diagnostics;
namespace UIDemo {
public class UIDemo : IExternalApplication {
public Result OnShutdown(UIControlledApplication application) {
return Result.Succeeded;
}
public Result OnStartup(UIControlledApplication application) {
......//接下来要具体实现的代码
return Result.Succeeded;
}
}
}
3、首先我们需要在Revit中添加一个选项卡,这里将选项卡命名为“UITab”,并在选项卡下方的功能区中添加一个面板,以便我们后面在面板上添加图标。
//创建一个选项卡
application.CreateRibbonTab("UITab");
//在选项卡中创建面板
RibbonPanel rp = application.CreateRibbonPanel("UITab", "UIPanel");
4、将之前的HelloRevitDemo类赋值给一个字符串,方便我们接下来调用它。并且需要获取该程序集运行时的路径。
string classNameHelloRevitDemo = "UIDemo.HelloRevitDemo";
string assemblyPath = Assembly.GetExecutingAssembly().Location; //获取当前程序路径
5、接下来我们在刚刚创建的面板中添加一个按钮,并且给该按钮添加一个图标。图标可以到iconfont-阿里巴巴矢量图标库该网站下载免费的素材,大小及格式建议选择32或16,png
//创建命令按钮
PushButtonData pbd = new PushButtonData("InnerNameRevit", "HelloRevit", assemblyPath, classNameHelloRevitDemo);
//将按钮添加到面板
PushButton pushButton = rp.AddItem(pbd) as PushButton;
我们在项目资源管理器中新建一个文件夹,用于存放及管理下载好的图标,然后将图标拖入该文件夹中。并且将图片的属性改为Resource
然后将图片添加给刚刚创建好的Button
pushButton.LargeImage = new BitmapImage(new Uri("pack://application:,,,/UIDemo;component/pic/星.png", UriKind.Absolute));
6、还可以给按钮设置一些默认的提示信息
//给按钮设置默认提示信息
pushButton.ToolTip = "HelloRevit";
7、接下来我们右键生成dll文件,并利用外部工具加载该dll文件
8、这时候在我们C:\ProgramData\Autodesk\Revit\Addins\2014这个文件夹里会生成一个UIDemo.addin文件,注意最后的路径名对应你的Add-In Manager版本,由于我是2014版本,所以addin文件在对应的2014的文件夹里。
9、将生成的addin文件复制到对应版本的Revit文件夹里C:\ProgramData\Autodesk\Revit\Addins\2019,我安装的是2019的revit,所以最后的路径名为2019,不管你安装的revit在哪个盘,这里的文件路径应该都是这个:C:\ProgramData\Autodesk\Revit\Addins\你的revit版本。
10、这时候revit界面就会出现如下提示,选择载入一次。
11、这时候在revit选项卡中就会出现刚刚创建的命令了,点击图标,就可以看到显示的命令了
12、如果想继续往该面板中添加命令,就重复之前的代码就好
//再创建一个按钮
string classNameHelloWorldDemo = "UIDemo.HelloWorldDemo";
PushButtonData pbd2 = new PushButtonData("InnerNameWorld", "HelloWorld", assemblyPath, classNameHelloWorldDemo);
PushButton pushButton2 = rp.AddItem(pbd2) as PushButton;
pushButton2.LargeImage = new BitmapImage(new Uri("pack://application:,,,/UIDemo;component/pic/架构.png", UriKind.Absolute));
pushButton2.ToolTip = "HelloWorld";
如果要卸载,删除刚刚添加的addin文件即可