Revit 2011之后取消了菜单和工具条,全部使用Ribbon即按钮组,如图

步骤一:
新建类库项目Ribbon
修改命名空间为HY
修改Class1.cs为Ribbon.cs用来控制按钮显示
添加一个类AddInCommand.cs用来响应命令

步骤二:
引入类库
RevitAPI.dll
RevitAPIUI.dll
System.Windows.Forms;
PresentationCore
WindowBase

Ribbon.cs

using System;
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;
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

<?xml version="1.0" encoding="utf-8"?>
<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相关推荐

  1. Revit 2011 二次开发之“取得两条直线的交点”

    Revit提供特殊的类和集合来完成这些操作,积累一下.     /// <summary>     /// Utility method for getting the intersect ...

  2. Revit二次开发之DMU

    Revit二次开发之DMU   Revit是一款三维联动的设计软件,一处修改处处修改, 比如,在三维视图修改了墙的位置,二维视图上墙的位置也跟着变化了,同时,墙上的门窗也会跟着移动. 这种联动关系是R ...

  3. C#进行Visio二次开发之Shape的Data1、Data2、Data3的用处

    我们知道,Visio的Shape对象有有3个比较特别的属性,分别是Data1.Data2.Data3,平常我们很少用到它,因为我们如果需要属性的话,可能会通过ShapeSheet的Customed P ...

  4. U9二次开发之BP定时任务插件开发

    采购订单BP定时任务插件开发 最近我们公司要做采购订单审批和OA的集成,也就是把u9的审批流程搬到OA里去做.当业务员点击标准采购提交按钮的时候,把采购订单的信息触发到OA流程,在OA里做审核,OA审 ...

  5. C#进行Visio二次开发之Web查看Visio图纸

    前面介绍的Visio开发知识,都是基于Winform的Visio的开发知识,图纸的展示都是基于Winform方式展示的.但很多时候,如果能够通过Web方式可以查看最新的图纸信息,那么系统将更加趋向完美 ...

  6. C#进行MapX二次开发之MapX基础知识

    C#进行MapX二次开发之MapX基础知识 MapX的主要技术特点 (1). 以表(Table)的形式组织信息 每一个表都是一组MapInfo文件,这些文件组成了地图文件和数据库文件.为使用MapIn ...

  7. Vissim11二次开发之C#---实现仿真时间内实施不同信号控制方案

    Vissim11二次开发之C#-实现仿真时间内实施不同信号控制方案 本文起源:近些日子,由于论文仿真需求,重重重操Vissim旧业. 先说下需求情况吧:路网区域优化前后两种信号控制方案,由于论文场景要 ...

  8. AutoCAD .Net二次开发之Editor选择集

    AutoCAD .Net二次开发之Editor选择集 PickFirst选择集 一般选择集 选择集过滤SelectionFilter Editor的路径: Autodesk.AutoCAD.Appli ...

  9. Datax 插件二次开发之parquet日志问题处理

    Datax 插件二次开发之parquet日志问题处理 Date: December 31, 2021 参考文档: https://blog.csdn.net/wuleidaren/article/de ...

最新文章

  1. 关于页面加载的方法收集
  2. linux 文件大小_linux系统中查看目录大小的du命令常
  3. C# 6.0的字典(Dictionary)的语法
  4. 川大优秀毕业生在GitHub上建了一个项目《深度学习500问》,还未完结就获赞无数
  5. PHP实现弹出消息提示框的两种方法
  6. centOS7 安装mysql 设置远程访问
  7. jert oracle 统计说明,Oracle JET简单入门(一)Oracle JET介绍
  8. React工作(1)---export导出
  9. 将一段区间的偶数分解为两个素数相加(Java)
  10. 【转】各种树:trie树、B树、B-树、B+树、B*树
  11. 网络基础四 DNS DHCP 路由 FTP
  12. android -------- 打开本地浏览器或指定浏览器加载,打电话,打开第三方app
  13. SpringBoot启动报错(一篇教你如何处理mapper绑定问题) BindingException: Invalid bound statement (not found)
  14. LPC1788 UART-DMA遇到的问题
  15. 指纹识别、图形识别、aliOCR 识别
  16. 如何区分网线是几类的_5类、6类网线双绞线如何区分又怎么样使用?
  17. 苹果Mac新手必备技巧|了解使用 Mac 桌面
  18. Power Apps 应用实战|轻松用 Power Apps 开发员工休假考勤管理小程序
  19. IDEA 安装快捷键提示工具:Key promoter X
  20. css textarea行数_超级简单:在一个TextArea中如何限制行数和字符数

热门文章

  1. 从源码分析RocketMQ系列-start()方法详解
  2. 12864液晶使用例程
  3. Go 单元测试--Mock接口实现和对接口打桩
  4. gRPC基础--Protobuf编码格式详解
  5. 你知道K8S暴露服务的方式有哪些吗?
  6. Zookeeper的ZAB协议和Leader选举过程剖析
  7. 关于JVM类加载的几个问题
  8. 记录一次跨国笔试经过
  9. 《Adobe Dreamweaver CS6中文版经典教程》——第2课 HTML基础2.1 什么是HTML
  10. OC之description