1.首先安装好Revit,至于版本是哪个关系不大。具体怎么安装,就不啰嗦了。安装完成后,桌面会有类似这样的图标:
上图是Revit2020和2019的图标,我自己的电脑是安装了两个版本的Revit。
2.找到安装目录下的两个dll文件,你可以把它copy出来,或者直接在C#工程项目中引用它:
3.新建一个C#新项目,我们以.net standard类库进行创建,然后编写一个类实现IExternalCommand接口
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using System;
namespace UseIExternalCommand
{
/// <summary>
/// 演示类
/// </summary>
/// <creator>marc</creator>
[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
[Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)]
[Autodesk.Revit.Attributes.Journaling(Autodesk.Revit.Attributes.JournalingMode.NoCommandData)]
public class Helloworld : IExternalCommand
{
/// <summary>
/// 执行指令
/// </summary>
/// <param name="commandData"></param>
/// <param name="message"></param>
/// <param name="elements"></param>
/// <returns></returns>
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
using (Transaction tran = new Transaction(commandData.Application.ActiveUIDocument.Document, Guid.NewGuid().ToString()))
{
tran.Start();
TaskDialog.Show("提示", "工程名:" + commandData.Application.ActiveUIDocument.Document.ProjectInformation.Name);
tran.Commit();
}
return Result.Succeeded;
}
}
}
4.编译后,将生成bin目录,我们把bin目录的路径copy到下图中:
选择外部工具下的Add-In Manager(Manual Mode),如果你没有外部工具,那么你可以先找一下其它文章,先让Revit把这个插件装上。至于为什么会选择第一项Add-In Manager(Manual Mode),这个是在代码中定义的:
5.好,下面将bin目录的地址copy进去 :
点击“Load"按钮,然后选择bin目录下的编译好的项目dll文件。然后截入得到下面的效果:
6.选中刚刚载入的helloworld,进行点击"Run"的按钮,运行它:
7.如此便可完成Revit的IExternalCommand扩展入门。
除了IExternalCommand外,还有一个相应的叫IExternalApplication,二者的区别在于:
IExternalCommand:是用来执行具体的命令任务的,是执行者。如客户拿着一个菜单跟你说要来份炒粉,那么炒粉这个事情,就你来做。
IExternalApplication:是界面相关,主要用途是显示菜单。如客户拿着一个菜单跟你说要来份炒粉,那么菜单上有什么可以选的,那么这个菜单就是用IExternalApplication来做的。他不做具体的炒粉动作,只负责告诉客户,我有炒粉这道菜,你可以选择。
如果你实现了IExternalApplication,那么就可以类似上图红圈一样,在面板上任意加上你起的名字的菜单 。当点击这个菜单 的时候 ,会自动执行IExternalCommand这个动作。
IExternalApplication是与IExternalCommand关联的,你指定一个菜单的时候,必须告诉Revit点击这个菜单的时候 ,要启动哪个动作(IExternalCommand)。
8.IExternalApplication接口,他的使用时机是在Revit启动时进行初始化加载,关闭Revit的时候进行资源卸载。
namespace Autodesk.Revit.UI
{
public interface IExternalApplication
{
Result OnShutdown(UIControlledApplication application);
Result OnStartup(UIControlledApplication application);
}
}
OnShutdown:在Revit这个软件关闭时被调用。
OnStartup:在Revit这个软件打开并初始化时被调用,软件打开后,不论你再新建几个Revit工程项目,都不会再第2次执行此方法。
9.介绍.addin文件。
上述操作是在外部工具中加载的。正常一个插件开发出来后,使用者,即我们的用户,他们是不会去用“外部工具”的,所以,我们需要配置一份执行指令以及菜单的.addin文件,具体这个文件的内容,读者可以参考其它文章。
<?xml version="1.0" encoding="utf-8"?>
<RevitAddIns>
<AddIn Type="Command">
<Assembly>UseIExternalCommand.dll</Assembly>
<ClientId>ac97eb33-31cb-434e-a496-d1c5dd079681</ClientId>
<FullClassName>UseIExternalCommand.Helloworld</FullClassName>
<Text>你好世界</Text>
<Description>Revit二次开发入门。</Description>
<VisibilityMode>AlwaysVisible</VisibilityMode>
<VendorId>ADSK</VendorId>
<VendorDescription>Autodesk, www.autodesk.com</VendorDescription>
</AddIn>
<AddIn Type="Application">
<Name>菜单</Name>
<Assembly>UseIExternalCommand.dll</Assembly>
<AddInId>9db84df0-b5b6-4ffb-ad16-a5c607f5624a</AddInId>
<FullClassName>UseIExternalCommand.Menu</FullClassName>
<VendorId>ADSK</VendorId>
</AddIn>
</RevitAddIns>
10.如上面所示,一个带有执行指令IExternalCommand和菜单功能IExternalApplication的.addin文件就是这样,此时,重新打开Revit软件,将出现如下效果
菜单叫什么名字,是我们在IExternalApplication文件中定义的,具体代码,请参看源码即可。
至于点击“世界”这个菜单按钮,为什么会执行我们的IExternalCommand指令?也是在IExternalApplication中写好的,所以他才触发执行这个指令。
下载地址:https://download.csdn.net/download/mazhiyuan1981/12875400