Revit 2011 二次开发之Ribbon
步骤一:
新建类库项目Ribbon
修改命名空间为HY
修改Class1.cs为Ribbon.cs用来控制按钮显示
添加一个类AddInCommand.cs用来响应命令
步骤二:
引入类库
RevitAPI.dll
RevitAPIUI.dll
System.Windows.Forms;
PresentationCore
WindowBase
Ribbon.cs
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Windows.Forms;
using System.Windows.Media.Imaging;
using Autodesk.Revit.UI;
using Autodesk.Revit.Attributes;
namespace HY
{
[Transaction(TransactionMode.Automatic)]
[Regeneration(RegenerationOption.Manual)]
[Journaling(JournalingMode.NoCommandData)]
public class Ribbon : IExternalApplication
{
// 程序集路径
static string AddInPath = typeof(Ribbon).Assembly.Location;
// 按钮图标目录
static string ButtonIconsFolder = Path.GetDirectoryName(AddInPath);
// uiApplication
//static UIApplication uiApplication = null;
#region IExternalApplication Members
public Autodesk.Revit.UI.Result OnStartup(UIControlledApplication application)
{
try
{
CreateRibbonSamplePanel(application);
return Autodesk.Revit.UI.Result.Succeeded;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), "Ribbon Sample");
return Autodesk.Revit.UI.Result.Failed;
}
}
public Autodesk.Revit.UI.Result OnShutdown(UIControlledApplication application)
{
return Autodesk.Revit.UI.Result.Succeeded;
}
#endregion
private void CreateRibbonSamplePanel(UIControlledApplication application)
{
//RibbonPanel显示一个大按钮,图标为第一个按钮的图标
string firstPanelName = "Ribbon 实例";//面板底部文字提示
RibbonPanel ribbonSamplePanel = application.CreateRibbonPanel(firstPanelName);
#region 创建墙和结构墙
//RibbonPanel(面板)->SplitButton(按钮组)->PushButton(按钮)
SplitButtonData splitButtonData = new SplitButtonData("NewWallSplit", "创建墙");//按钮数据,按钮组显示的文字为第一个按钮的文字
SplitButton splitButton = ribbonSamplePanel.AddItem(splitButtonData) as SplitButton;//添加到面板
//PushButton pushButton = splitButton.AddPushButton(new PushButtonData("WallPush", "普通墙", AddInPath, "Revit.SDK.Samples.Ribbon.CS.CreateWall"));
//最后一个参数是执行按钮事件的响应类名
PushButtonData pushButtonDataWall = new PushButtonData("WallPush", "普通墙", AddInPath, "HY.CreateWall");
PushButton pushButton = splitButton.AddPushButton(pushButtonDataWall);
//大图标,小图标
pushButton.LargeImage = new BitmapImage(new Uri(Path.Combine(ButtonIconsFolder, "CreateWall.png"), UriKind.Absolute));
pushButton.Image = new BitmapImage(new Uri(Path.Combine(ButtonIconsFolder, "CreateWall-S.png"), UriKind.Absolute));
//提示文字,提示图片
pushButton.ToolTip = "Creates a partition wall in the building model.";
pushButton.ToolTipImage = new BitmapImage(new Uri(Path.Combine(ButtonIconsFolder, "CreateWallTooltip.bmp"), UriKind.Absolute));
//按钮组里第二个按钮
pushButton = splitButton.AddPushButton(new PushButtonData("StrWallPush", "结构墙", AddInPath, "HY.CreateStructureWall"));
pushButton.LargeImage = new BitmapImage(new Uri(Path.Combine(ButtonIconsFolder, "StrcturalWall.png"), UriKind.Absolute));
pushButton.Image = new BitmapImage(new Uri(Path.Combine(ButtonIconsFolder, "StrcturalWall-S.png"), UriKind.Absolute));
#endregion
ribbonSamplePanel.AddSeparator();
}
}
}
AddInCommand.cs
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.Attributes;
namespace HY
{
[Transaction(TransactionMode.Automatic)]
[Regeneration(RegenerationOption.Manual)]
[Journaling(JournalingMode.NoCommandData)]
public class CreateWall : IExternalCommand
{
public Result Execute(ExternalCommandData revit,ref string message,ElementSet elements)
{
MessageBox.Show("创建墙");
return Autodesk.Revit.UI.Result.Succeeded;
}
}
[Transaction(TransactionMode.Automatic)]
[Regeneration(RegenerationOption.Manual)]
public class CreateStructureWall : CreateWall
{
}
}
Ribbon.addin
<RevitAddIns>
<AddIn Type="Application">
<Name>External Tool</Name>
<Assembly>F:\Ribbon\Ribbon\bin\Debug\Ribbon.dll</Assembly>
<ClientId>cb5c768a-dc2f-4289-a803-58ee5afc5708</ClientId>
<FullClassName>HY.Ribbon</FullClassName>
</AddIn>
</RevitAddIns>
参考上篇:http://www.cnblogs.com/greatverve/archive/2011/03/08/revit-api-begin.html
源码:http://files.cnblogs.com/greatverve/Ribbon.rar
转载于:https://www.cnblogs.com/greatverve/archive/2011/03/09/revit-ribbon.html
Revit 2011 二次开发之Ribbon相关推荐
- Revit 2011 二次开发之“取得两条直线的交点”
Revit提供特殊的类和集合来完成这些操作,积累一下. /// <summary> /// Utility method for getting the intersect ...
- Revit二次开发之DMU
Revit二次开发之DMU Revit是一款三维联动的设计软件,一处修改处处修改, 比如,在三维视图修改了墙的位置,二维视图上墙的位置也跟着变化了,同时,墙上的门窗也会跟着移动. 这种联动关系是R ...
- C#进行Visio二次开发之Shape的Data1、Data2、Data3的用处
我们知道,Visio的Shape对象有有3个比较特别的属性,分别是Data1.Data2.Data3,平常我们很少用到它,因为我们如果需要属性的话,可能会通过ShapeSheet的Customed P ...
- U9二次开发之BP定时任务插件开发
采购订单BP定时任务插件开发 最近我们公司要做采购订单审批和OA的集成,也就是把u9的审批流程搬到OA里去做.当业务员点击标准采购提交按钮的时候,把采购订单的信息触发到OA流程,在OA里做审核,OA审 ...
- C#进行Visio二次开发之Web查看Visio图纸
前面介绍的Visio开发知识,都是基于Winform的Visio的开发知识,图纸的展示都是基于Winform方式展示的.但很多时候,如果能够通过Web方式可以查看最新的图纸信息,那么系统将更加趋向完美 ...
- C#进行MapX二次开发之MapX基础知识
C#进行MapX二次开发之MapX基础知识 MapX的主要技术特点 (1). 以表(Table)的形式组织信息 每一个表都是一组MapInfo文件,这些文件组成了地图文件和数据库文件.为使用MapIn ...
- Vissim11二次开发之C#---实现仿真时间内实施不同信号控制方案
Vissim11二次开发之C#-实现仿真时间内实施不同信号控制方案 本文起源:近些日子,由于论文仿真需求,重重重操Vissim旧业. 先说下需求情况吧:路网区域优化前后两种信号控制方案,由于论文场景要 ...
- AutoCAD .Net二次开发之Editor选择集
AutoCAD .Net二次开发之Editor选择集 PickFirst选择集 一般选择集 选择集过滤SelectionFilter Editor的路径: Autodesk.AutoCAD.Appli ...
- Datax 插件二次开发之parquet日志问题处理
Datax 插件二次开发之parquet日志问题处理 Date: December 31, 2021 参考文档: https://blog.csdn.net/wuleidaren/article/de ...
最新文章
- 关于页面加载的方法收集
- linux 文件大小_linux系统中查看目录大小的du命令常
- C# 6.0的字典(Dictionary)的语法
- 川大优秀毕业生在GitHub上建了一个项目《深度学习500问》,还未完结就获赞无数
- PHP实现弹出消息提示框的两种方法
- centOS7 安装mysql 设置远程访问
- jert oracle 统计说明,Oracle JET简单入门(一)Oracle JET介绍
- React工作(1)---export导出
- 将一段区间的偶数分解为两个素数相加(Java)
- 【转】各种树:trie树、B树、B-树、B+树、B*树
- 网络基础四 DNS DHCP 路由 FTP
- android -------- 打开本地浏览器或指定浏览器加载,打电话,打开第三方app
- SpringBoot启动报错(一篇教你如何处理mapper绑定问题) BindingException: Invalid bound statement (not found)
- LPC1788 UART-DMA遇到的问题
- 指纹识别、图形识别、aliOCR 识别
- 如何区分网线是几类的_5类、6类网线双绞线如何区分又怎么样使用?
- 苹果Mac新手必备技巧|了解使用 Mac 桌面
- Power Apps 应用实战|轻松用 Power Apps 开发员工休假考勤管理小程序
- IDEA 安装快捷键提示工具:Key promoter X
- css textarea行数_超级简单:在一个TextArea中如何限制行数和字符数