Revit二次开发,新手接入Revit接口,如何使用它们

1.首先安装好Revit,至于版本是哪个关系不大。具体怎么安装,就不啰嗦了。安装完成后,桌面会有类似这样的图标:

上图是Revit2020和2019的图标,我自己的电脑是安装了两个版本的Revit。

2.找到安装目录下的两个dll文件,你可以把它copy出来,或者直接在C#工程项目中引用它:

3.新建一个C#新项目,我们以.net standard类库进行创建,然后编写一个类实现IExternalCommand接口

<code>using Autodesk.Revit.DB; using Autodesk.Revit.UI; using System; namespace UseIExternalCommand { /// /// 演示类 /// /// marc [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 { /// /// 执行指令 /// /// /// /// /// 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; } } } /<code>

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的时候进行资源卸载。

<code>namespace Autodesk.Revit.UI { public interface IExternalApplication { Result OnShutdown(UIControlledApplication application); Result OnStartup(UIControlledApplication application); } }/<code>

OnShutdown:在Revit这个软件关闭时被调用。

OnStartup:在Revit这个软件打开并初始化时被调用,软件打开后,不论你再新建几个Revit工程项目,都不会再第2次执行此方法。

9.介绍.addin文件。

上述操作是在外部工具中加载的。正常一个插件开发出来后,使用者,即我们的用户,他们是不会去用“外部工具”的,所以,我们需要配置一份执行指令以及菜单的.addin文件,具体这个文件的内容,读者可以参考其它文章。

<code> UseIExternalCommand.dll ac97eb33-31cb-434e-a496-d1c5dd079681 UseIExternalCommand.Helloworld 你好世界 Revit二次开发入门。 AlwaysVisible ADSK Autodesk, www.autodesk.com 菜单 UseIExternalCommand.dll 9db84df0-b5b6-4ffb-ad16-a5c607f5624a UseIExternalCommand.Menu ADSK /<code>

10.如上面所示,一个带有执行指令IExternalCommand和菜单功能IExternalApplication的.addin文件就是这样,此时,重新打开Revit软件,将出现如下效果

菜单叫什么名字,是我们在IExternalApplication文件中定义的,具体代码,请参看源码即可。

至于点击“世界”这个菜单按钮,为什么会执行我们的IExternalCommand指令?也是在IExternalApplication中写好的,所以他才触发执行这个指令。


源码下载

下载地址:https://download.csdn.net/download/mazhiyuan1981/12875400