Revit二次开发之“创建窗体执行Revit命令”

Ribbon菜单的空间有限,因此可能需要大量控件放在一个Windows窗体里,
然后在窗体里执行Revit命令。方法就是传递参数,新建IExternalCommand
调用Execute();

窗体
复制代码
using  System;
using  System.Collections.Generic;
using  System.ComponentModel;
using  System.Data;
using  System.Drawing;
using  System.Linq;
using  System.Text;
using  System.Windows.Forms;

using  DB  =  Autodesk.Revit.DB;
using  Autodesk.Revit.UI;

namespace  RevitBlog
{
    
public   partial   class  FrmCmd : Form
    {
        ExternalCommandData cmdDataForm;
        
string  msgForm;
        DB.ElementSet elementsForm 
=   new  DB.ElementSet();
        
public  FrmCmd()
        {
            InitializeComponent();
        }
        
// 重载一个构造函数,用来传递参数
         public  FrmCmd(ExternalCommandData cmdData,  string  msg, DB.ElementSet elements)
        {
            InitializeComponent();
            cmdDataForm 
=  cmdData;
            msgForm 
=  msg;
            elementsForm 
=  elements;
        }

        
private   void  btnCmd_Click( object  sender, EventArgs e)
        {
            cmdFromForm fromForm 
=   new  cmdFromForm();
            fromForm.Execute(cmdDataForm,
ref  msgForm, elementsForm);
        }
    }
}
复制代码
命令
复制代码
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;

using  WinForm  =  System.Windows.Forms;

using  Autodesk.Revit.UI;
using  Autodesk.Revit.DB;
using  Autodesk.Revit.Attributes;

using  Autodesk.Revit.DB.Mechanical;
using  Autodesk.Revit.UI.Selection;
using  RevitApp  =  Autodesk.Revit.ApplicationServices;

namespace  RevitBlog
{
    
// 显示一个非模态窗体
    [Transaction(TransactionMode.Manual)]
    [Regeneration(RegenerationOption.Manual)]
    
public   class  cmdShowForm : IExternalCommand
    {
        
public  Result Execute(ExternalCommandData cmdData,  ref   string  msg, ElementSet elements)
        {
            FrmCmd frmCmd 
=   new  FrmCmd(cmdData, msg, elements);
            frmCmd.Show();
            
return  Result.Succeeded;
        }
    }
    
// 在窗体里执行Revit命令
    [Transaction(TransactionMode.Manual)]
    [Regeneration(RegenerationOption.Manual)]
    
public   class  cmdFromForm : IExternalCommand
    {
        
public  Result Execute(ExternalCommandData cmdData,  ref   string  msg, ElementSet elements)
        {
            
string  version  =  cmdData.Application.Application.VersionBuild;
            version 
+=   " \n "   +  cmdData.Application.Application.VersionName;
            version 
+=   " \n "   +  cmdData.Application.Application.VersionNumber;
            TaskDialog.Show(
" info " , version);
            
return  Result.Succeeded;
        }
    }
}
复制代码
有些初接触的朋友可能因为一点问题就进行不下去了,建议我把代码发全并附全部源码。
我新建了一个RevitBlog项目,用来记录平时的小积累。
本文源码下载: http://revit.5d6d.com/thread-1072-1-1.html
把RevitAPI.dll和RevitAPIUI.dll添加引用。
这两个dll在revit的安装目录中。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值