Revit二次开发说难也难,说容易也容易,关键看客官你的情况和兴趣。
要想做Revit二次开发,首先需要有一些开发的基础知识,尤其是.NET的开发语言(首选C#,或者http://VB.NET也行)。其次要知道Revit相关的一些基本概念。
有了上面的基础,入门就是手到擒来的事(当然入门后要转成高手,还是需要磨练的,不是一朝一夕就可以完成的)。
(1)准备工作
开发前需要先安装对应的软件,包括Autodesk Revit
Visual Studio Express (如果是企业或土豪,请使用收费版VS)
(2)创建项目
打开Visual Studio,单击菜单栏“File”→“New”→“Project…”,或者按快捷键(Ctrl+Shift+N),打开“New Project”对话框。在该对话框中,选择“Visual C#”→“Windows”,在“Templates”中选择“Class Library”,在“Name”栏中输入项目名称“HelloRevit”,单击“OK”。
注:Revit不同版本要求的最低.NET Framework版本不一样。例如2017至少需要4.5.2版本。
(3)添加引用
选择“Solution Explorer”的“References”节点,右击选择“Add Reference…”,打开“Add Reference”对话框。在该对话框中,选择“Browse”选项卡,进入Revit安装目录(根据本地情况选择对应安装目录,例如:C:\ProgramFiles\Autodesk\Revit 2017,具体根据客官安装的Revit版本不同而不同),选择“RevitAPI.dll”以及“RevitAPIUI.dll”两个动态链接库,单击“OK”添加到项目引用。
(4)代码编写
接下来,就可以开始编写具体代码了。项目创建后Visual Studio会默认创建一个Class1.cs文件,该文件包含一个public类Class1,代码如下:
namespace HelloRevit
{
publicclass Class1
{
}
}
请将以上代码替换为下面的代码(后面会有代码的详细解释):
namespace HelloRevit
{
[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.ReadOnly)]
public class Class1 : Autodesk.Revit.UI.IExternalCommand
{
public Autodesk.Revit.UI.Result Execute(Autodesk.Revit.UI.ExternalCommandData commandData, ref string message, Autodesk.Revit.DB.ElementSet elements)
{
Autodesk.Revit.UI.TaskDialog.Show("Hello", "Hello Revit!");
return Autodesk.Revit.UI.Result.Succeeded;
}
}
}
也可以通过使用using关键字简化下面的代码,简化更改后的代码如下:
using Autodesk.Revit.Attributes;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
namespace HelloRevit
{
[Transaction(TransactionMode.ReadOnly)]
public class Class1 : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
TaskDialog.Show("Hello", "Hello Revit!");
return Result.Succeeded;
}
}
}
注:所有的Revit插件功能都以外部命令的方式存在,每一个外部命令都必须继承于IExternalCommand。命令类还必须实现Execute接口,该接口包含三个参数:commandData:包含Revit应用程序的各种信息,包括文档、应用程序接口、当前视图等等。用户需要的所有信息都从该参数获取。
message:主要用于当命令执行遇到问题时给用户报告的错误信息,所以仅当返回值为Result.Cancelled或Result.Failed时,传入该参数的值才会对用户可见。可以将一些异常信息放入该参数以提示用户问题原因。
elements:也是当命令执行遇到问题时给用户报告错误时使用,因此它跟message参数一样仅当返回值为Result.Cancelled或Result.Failed时有用。该参数包含一个元素集,开发人员可以通过该元素集告知用户哪些元素有问题。
(5)注册外部命令
要让Revit能使用外部命令,除了对应的项目和代码,还需要对命令进行注册。Revit通过后缀名为.addin的文件(该文件实际为xml格式)来进行注册。具体步骤如下:
1)新建一个文本文件,并将文件名改为“HelloRevit.addin”(请确认文件名不是“HelloRevit.addin.txt”)。然后在该文件中输入以下内容,并保存:
C:\Projects\HelloRevit\bin\HelloRevit.dll
2FA16D42-9AE3-491d-A919-1A3B04701B9F
HelloRevit.Class1
YourCompany
AddInType="Command"表明该库是一个外部命令
Assembly是编译的“HelloRevit.dll”文件的具体路径,请改为本机路径
AddInId是一个全局的GUID值,每个外部命令都应该包含一个自己的GUID值(不同命令不能AddInId重复)
FullClassName指类的名称(这里是Class1,请注意一定要将命名空间名称加上,例如HelloRevit,否则命令执行时会找不到对应的接口)
VendorId指明该命令的厂商,请自定义使用厂商的名称
2)文件保存好之后需要将该文件放入特定目录,如果你希望该插件只有当前用户可用,需要将文件放入:%appdata%\Autodesk\Revit\Addins\2017;
如果你希望所有用户都可以使用该插件,则将文件放入C:\ProgramData\Autodesk\Revit\Addins\2017\
(6)执行命令
所有步骤完成后,启动Revit,功能区中将出现一个“附加模块”选项卡。
单击“外部工具”下拉列表中的“HelloRevit.Class1”,执行后将弹出一个窗口显示“Hello Revit”。