1、新建类库
打开VS,【新建项目】→【Visual C#】→【类库(.NET框架)】
输入程序名称,如:Hello Revit
#注意:框架与Revit版本对应
2、引用dll
点击【项目】→【添加引用】
引用【RevitAPI.dll】和【RevitAPIUI.dll】。 若之前未引用过,点击【浏览】,在Revit安装目录下找到并添加。
在【解决方案资源管理器】中,右键【RevitAPI】和【RevitAPIUI】,点击【属性】,将属性【复制本地】改False,否则你编译会生成一大堆没什么用的东西。
4、修改类名,默认为Class1,右键重命名。
5、编写类的代码
using System;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
namespace HelloWorld
{
[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
public class Class1: IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
TaskDialog.Show("Demo", "Hello World!");
return Result.Succeeded;
}
}
}
using System:
using-命名空间的入口,
System-.NET Framework 中提供的一个核心命名空间,其中包含了许多常用的系统级类型和常量。
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
Autodesk.Revit.DB
命名空间-包含了与 Revit 数据库(包括元素、参数、视图等)进行交互的类和接口。通过引入这个命名空间,您可以访问并操作 Revit 中的构件、图形、参数等。
Autodesk.Revit.UI
命名空间则包含了与 Revit 用户界面进行交互的类和接口。通过引入这个命名空间,您可以创建 Revit 的自定义工具栏、菜单、按钮,并处理用户的交互事件。
#这也是为什么要安装 Revit API
[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]:
用于设置该命令的事务模式为手动模式,这意味着在调用此命令时,需要手动启动和提交事务。
public class Class1: IExternalCommand
定义了一个名为 Class1
的类,它实现了 IExternalCommand
接口。IExternalCommand
是 Revit API 中定义的接口,用于创建外部命令,以便与 Revit 软件进行交互。
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements):
Execute
方法是 IExternalCommand
接口中要求实现的方法,用于执行外部命令的逻辑。该方法有以下参数:
ExternalCommandData commandData
:包含与 Revit 交互所需的数据,例如当前 Revit 文档、命令的调用者等。ref string message
:用于存储可能发生的错误或警告消息,可以在方法中对其进行修改。ElementSet elements
:可用于存储命令执行期间可能影响的元素集合。
在编写具体的逻辑时,可以使用这些参数来访问和操作 Revit 中的元素,执行构件创建、修改参数等操作。
TaskDialog.Show("Demo", "Hello World!");
TaskDialog
类显示一个简单对话框的示例。TaskDialog
类提供了一种在 Revit 中显示对话框和用户交互的方法。在这个示例中,TaskDialog.Show
方法接受两个参数:对话框的标题和内容。对话框的标题是 “Demo”,内容是 “Hello World!”。
6、生成dll文件
完成代码后保存,项目属性里把“生成”→“目标平台”由Any CPU改成x64(或者试运行,提醒用哪个平台就用哪个平台,省略这步的话编译时会出现警告)。
检查无误后生成类库,并记下输出窗口中的文件位置。
7、建立addin文件
添加一个文本文件,输入以下内容:
<?xml version ="1.0" encoding ="utf-8" standalone ="no"?>
<RevitAddIns>
<AddIn Type="Command">
<Assembly>{类库的路径(含文件名)}</Assembly>
<AddInId>{Guid}</AddInId>
<FullClassName>HelloWorld.Class1</FullClassName>
<Text>HelloWorld</Text>
<VendorId>NAME</VendorId>
</AddIn>
</RevitAddIns>
这段 XML 代码是一个用于在 Revit 中注册外部命令的 Add-in 文件。Add-in 文件用于将自定义功能集成到 Revit 中,并在 Revit 启动时加载和注册这些功能。
<?xml version="1.0" encoding="utf-8" standalone="no"?>
:指定 XML 文件的版本和编码格式。<RevitAddIns>
:根元素,包含了所有的 Add-in 定义。<AddIn Type="Command">
:type参数Command表明插件是IExternalCommand(外部命令)类型。相应的还有IExternalApplication(外部应用)和IExternalDBApplication(外部数据应用)类型。<Assembly>{类库的路径(含文件名)}</Assembly>
:指定外部命令所在的程序集路径(包括文件名)。<AddInId>{Guid}</AddInId>
:指定唯一的 Add-in ID,通常使用 GUID(全局唯一标识符)生成。<FullClassName>HelloWorld.Class1</FullClassName>
:指定外部命令类的完整类名,包括命名空间。<Text>HelloWorld</Text>
:指定用于显示的外部命令的文本,通常是命令的名称。<VendorId>NAME</VendorId>
:指定供应商 ID,可以随意指定一个名字。
将上述 XML 代码保存为 .addin
文件,然后将该文件复制到适当的 Revit 插件目录(例如 C:\ProgramData\Autodesk\Revit\Addins\2022),就可以在 Revit 中注册和加载您的外部命令。
7、使用插件
启动Revit,在“附加模块”→“外部工具”的下拉箭头处找到“HelloWorld”,执行后,可以看到弹出对话框,成功。