EaBIM一直以来积极响应国家“十二五”推进建筑业信息化的号召,对建筑领域的信息技术开展深入技术交流和探讨!致力于打造“BIM-建筑师-生态技术”三位一体综合资源交流共享平台,希望为BIM与可持续设计理念及技术的普及做出微小的贡献!!!

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 1295|回复: 1
打印 上一主题 下一主题

Revit Ribbon 制作

[复制链接]

1514

主题

7465

帖子

1万

积分

admin

Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10

积分
12408

社区QQ达人

跳转到指定楼层
楼主
发表于 2014-1-9 13:21:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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 = undefinedath.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(按钮组)->undefinedushButton(按钮)
            SplitButtonData splitButtonData =
new SplitButtonData("NewWallSplit", "创建墙");//按钮数据,按钮组显示的文字为第一个按钮的文字
            SplitButton splitButton = ribbonSamplePanel.AddItem(splitButtonData) as SplitButton;//添加到面板

            
//PushButton pushButton = splitButton.AddPushButton(new undefinedushButtonData("WallPush", "普通墙", AddInPath, "Revit.SDK.Samples.Ribbon.CS.CreateWall"));
            
//最后一个参数是执行按钮事件的响应类名
            undefinedushButtonData pushButtonDataWall =
new undefinedushButtonData("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>
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对

相关帖子

工作时间:工作日的9:00-12:00/13:30-18:00,节假日不在线,请勿留言
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|EaBIM网 ( 苏ICP备2020058923号-1  苏公网安备32011502011255号

GMT+8, 2024-11-30 20:34

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表