本教程适合零基础入门学习。
今天的内容是创建面板,就是类似于Revit软件中原有的面板。
1. 新建一个文件,复制以下创建面板的代码模板
using System.Data;
using System.Windows;
using System.Windows.Media.Imaging;
using Autodesk.Revit;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Architecture;
using Autodesk.Revit.DB.Mechanical;
using Autodesk.Revit.DB.Plumbing;
using Autodesk.Revit.DB.Electrical;
using Autodesk.Revit.ApplicationServices;
using System.Data.SqlClient;
using Autodesk.Revit.Creation;
using Autodesk.Revit.DB.Structure;
using Autodesk.Revit.Attributes;
using System;
using System.IO;
namespace Ribbon_demo
{
[Transaction(TransactionMode.Manual)]
[Regeneration(RegenerationOption.Manual)]
[Journaling(JournalingMode.NoCommandData)]
//这里使用的IExternalApplication接口,使用接口后会自动出现
//public Result OnShutdown(UIControlledApplication application)
//和public Result OnStartup(UIControlledApplication application)
//两个函数
public class Ribbon_de : IExternalApplication
{
//获取当前文件所在的路径
static string AddInPath = typeof(Ribbon_de).Assembly.Location;
static string ButtonIconsFolder = Path.GetDirectoryName(AddInPath);
public Result OnShutdown(UIControlledApplication application)
{
return Result.Succeeded;
}
public Result OnStartup(UIControlledApplication application)
{
// 这里写代码
return Result.Succeeded;
}
}
}
2. 引用程序
除了RevitAPI.dll和RevitAPIUI.dll,还要引用以下程序集。
3. 编写功能代码
这里我是创建了一个函数来进行调用,使得文本结构更加清晰,复制以下代码就行了,代码有部分解释,涉及到类的使用方法,应该寻求C#基本知识和Revit的API文档。
using System.Data;
using System.Windows;
using System.Windows.Media.Imaging;
using Autodesk.Revit;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Architecture;
using Autodesk.Revit.DB.Mechanical;
using Autodesk.Revit.DB.Plumbing;
using Autodesk.Revit.DB.Electrical;
using Autodesk.Revit.ApplicationServices;
using System.Data.SqlClient;
using Autodesk.Revit.Creation;
using Autodesk.Revit.DB.Structure;
using Autodesk.Revit.Attributes;
using System;
using System.IO;
namespace Ribbon_demo
{
[Transaction(TransactionMode.Manual)]
[Regeneration(RegenerationOption.Manual)]
[Journaling(JournalingMode.NoCommandData)]
public class Ribbon_de : IExternalApplication
{
//获取当前文件所在的路径,注意typeof中的参数名和类名一致
static string AddInPath = typeof(Ribbon_de).Assembly.Location;
static string ButtonIconsFolder = Path.GetDirectoryName(AddInPath);
public Result OnShutdown(UIControlledApplication application)
{
return Result.Succeeded;
}
public Result OnStartup(UIControlledApplication application)
{
//调用CreateRibbon函数,在下面创建
CreateRibbon(application);
return Result.Succeeded;
}
//创建CreateRibbon函数
public void CreateRibbon(UIControlledApplication application)
{
application.CreateRibbonTab("设计协同平台");//创建一个名称为“设计协同平台”Tab
#region 创建“登录”和“访问云平台”两个按钮
//创建一个名称为"用户界面"panel,并将"用户界面"panel附着在“设计协同平台”Tab下面
string PanelName = "设计用户界面";
RibbonPanel ribbonPanelTest = application.CreateRibbonPanel("设计协同平台", PanelName);
//创建一个按钮群组
RadioButtonGroupData radioButtonGroupData = new RadioButtonGroupData("group信息");
//新建“设计用户登录”按钮,并指定按钮图标,指定按钮点击后实现的功能(这里是运行同级目录下Form_demo.dll中的Form_demo命名空间下的Form_de类,也就是上一期中的成果)
//指定鼠标挪上按钮的提示文字,
RadioButtonGroup radioButtonGroup = (RadioButtonGroup)(ribbonPanelTest.AddItem(radioButtonGroupData));
ToggleButton toggleButton_login = radioButtonGroup.AddItem(new ToggleButtonData("设计用户登录", "设计用户登录", ButtonIconsFolder + "\\Form_demo.dll", "Form_demo.Form_de"));
toggleButton_login.LargeImage = new BitmapImage(new Uri(Path.Combine(ButtonIconsFolder, "登录.png"), UriKind.Absolute)); //这行代码决定图标
toggleButton_login.ToolTip = "使用管理员发放的账号密码,登录以体验更多功能";
toggleButton_login.Image = new BitmapImage(new Uri(Path.Combine(ButtonIconsFolder, "2.png"), UriKind.Absolute));
//以下创建第二名为“访问设计云平台”的按钮,同上。
ToggleButton toggleButton_Cloud = radioButtonGroup.AddItem(new ToggleButtonData("访问设计云平台", "设计设计访问云平台", ButtonIconsFolder + "\\Form_demo.dll", "Form_demo.Form_de"));
toggleButton_Cloud.LargeImage = new BitmapImage(new Uri(Path.Combine(ButtonIconsFolder, "云平台.png"), UriKind.Absolute)); //这行代码决定图标
toggleButton_Cloud.Image = new BitmapImage(new Uri(Path.Combine(ButtonIconsFolder, "4.png"), UriKind.Absolute));
toggleButton_Cloud.ToolTip = "将直接跳转到网页平台界面";
#endregion 创建“设计用户登录”和“访问设计云平台”两个按钮结束
}
}
4. 生成解决方案
生成dll动态文件成功。
注意:这里我们需要把图标和绑定的dll文件放在生成的dll文件目录下,一般用Windows自带的画图工具把下载到的图标像素改成32×32或者16×16,根据实际需求调整图片像素大小。
5. 生成admin文件
打开Revit,找到dll文件路径,并加载进来,注意加载进来实在Loaded Application。
点击右下角的Save,自动生成addin文件到dll文件所在路径。
6. 操作addin文件
打开addin文件,修改<Assembly>标签下的dll路径为当前文件路径,如下图。
保存后,将addin文件拷贝到C:\ProgramData\Autodesk\Revit\Addins\2017路径下。
7. 载入到Revit软件
打开Revit2017,提示载入,点击载入,载入方式看个人需求。
随意打开一个项目,找到“设计协同管理”tab,这就是我们创建的面板啦。
随意点击一个按钮,弹出绑定的程序。
微信公众号【BIM技术应用交流】回复“二开7”获取本期材料。
知乎专栏【BKM — Revit二次开发】获取更多更新。
欢迎加入QQ群:427981585