Revit二次开发,新手接入IExternalCommand、IExternalApplication,如何使用它们!

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

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值