Revit API Ribbon Form

Ribbon탭 만들고 Form 띄우기

2024년 10월 11일

커스텀 리본메뉴

Revit API 리본탭의 커스텀 패널
리본탭의 커스텀 패널, ⓒ디지털디자인포럼
Revit API 리본메뉴
리본메뉴, ⓒ디지털디자인포럼

리본메뉴에 별도의 탭을 추가하고 패널을 추가하기.
(참고한 자료 : API Develop GuideYouTube 소주장군님)

Revit API 솔루션 탐색기 구성
솔루션 탐색기 구성, ⓒ디지털디자인포럼

Application.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autodesk.Revit;
using System.Diagnostics;
using System.IO;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.UI.Events;
using System.Drawing;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;
 
namespace MyFirstRibbon
{
    [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
    public class Application : IExternalApplication
    {
        public Result OnStartup(UIControlledApplication application)
        {
            // 리본탭 생성 // Create a custom ribbon tab
            String tabName = “This Tab Name”;
            application.CreateRibbonTab(tabName);
 
            // 리본 패널 생성 // Create a ribbon panel
            RibbonPanel m_projectPanel = application.CreateRibbonPanel(tabName, “This Panel Name”);
 
            // 버튼 2개 생성 // Create two push buttons
            PushButtonData button1 = new PushButtonData(“Button1”“My Button #1”,
                @“D:\OneDrive\@C#\Ribbon\MyFirstRibbon\MyFirstRibbon\bin\Debug\MyFirstRibbon.dll”“MyFirstRibbon.Command”);
            PushButtonData button2 = new PushButtonData(“Button2”“My Button #2”,
                 @“D:\OneDrive\@C#\Ribbon\MyFirstRibbon\MyFirstRibbon\bin\Debug\MyFirstRibbon.dll”“MyFirstRibbon.Command2”);
 
            // 푸쉬버튼 리스트 패널에 추가 // Add the buttons to the panel
            List<object> projectButtons = new List<object>();
            projectButtons.AddRange(m_projectPanel.AddStackedItems(button1, button2));
 
            //추가로 패널 장착하기
            CreateRibbonPanel(application);
 
            return Result.Succeeded;
 
        }
        public Autodesk.Revit.UI.Result OnShutdown(UIControlledApplication application)
        {
            return Autodesk.Revit.UI.Result.Succeeded;
        }
 
        //패널 추가
        private void CreateRibbonPanel(UIControlledApplication application)
        {
            string tabname = “This Tab Name”;
            string panelname = “Hello”;
            RibbonPanel panel = application.CreateRibbonPanel(tabname, panelname);
 
            SplitButtonData buttondata = new SplitButtonData(“Hi”“Hello”);
            SplitButton button = panel.AddItem(buttondata) as SplitButton;
 
            PushButton pushbutton = button.AddPushButton(new PushButtonData(“Hi”,
                “Hey”, @“D:\OneDrive\@C#\Ribbon\MyFirstRibbon\MyFirstRibbon\bin\Debug\MyFirstRibbon.dll”“MyFirstRibbon.Command”));
 
            pushbutton.LargeImage = convertFromBitmap(MyFirstRibbon.Properties.Resources.Rersource_home);
            pushbutton.Image = convertFromBitmap(MyFirstRibbon.Properties.Resources.Rersource_home);
            pushbutton.ToolTip = “창을 띄웁니다.”;
        }
 
        BitmapSource convertFromBitmap(Bitmap bitmap)
        {
            return System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
                bitmap.GetHbitmap(),
                IntPtr.Zero,
                Int32Rect.Empty,
                BitmapSizeOptions.FromEmptyOptions());
        }
    }
}
cs

Command.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.ApplicationServices;
 
namespace MyFirstRibbon
{
    [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
    public class Command : IExternalCommand
    {
        public Autodesk.Revit.UI.Result Execute(ExternalCommandData commandData,
            ref string message, Autodesk.Revit.DB.ElementSet elements)
        {
            Form1 form = new Form1(commandData);
            form.Show();
            return Autodesk.Revit.UI.Result.Succeeded;
        }
    }
 
 
    [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
    public class Command2 : IExternalCommand
    {
        public Autodesk.Revit.UI.Result Execute(ExternalCommandData commandData,
            ref string message, Autodesk.Revit.DB.ElementSet elements)
        {
            TaskDialog.Show(“Form”“Hello Revit”);
            return Autodesk.Revit.UI.Result.Succeeded;
        }
    }
}
 
cs

Form1.cs

revit api winform
WinForm, ⓒ디지털디자인포럼

리소스추가

revit api 리소스 이미지 추가
리소스 이미지 추가, ⓒ디지털디자인포럼

솔루션 탐색기에서 해당 프로젝트를 우클릭하고 속성창으로 이동 후 리소스에 32×32 아이콘 이미지 추가

메니페스트파일(.addin)

<?xml version="1.0" encoding="utf-8"?>
<RevitAddIns>
  <AddIn Type="Application">
    <Name>MyFirstRibbon</Name>
    <Assembly>dll 파일 위치</Assembly>
    <ClientId>GUID</ClientId>
    <FullClassName>네임스페이스.클래스명(MyFirstRibbon.Application)</FullClassName>
    <VendorId>ArchiCode</VendorId>
    <VendorDescription>ArchiCode</VendorDescription>
  </AddIn>
</RevitAddIns>

추가적으로 알게된 사실은

Transaction 이라는게 있는데 Document내에서 변동사항(수정/삭제/추가 등)이 필요한 경우

[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]

코드를 삽입해줘야함.

그리고 리본탬에 추가하는 경우 메니페스트 파일의 Addin Type이 Command가 아니라 Application으로 설정해야함.


답글 남기기


관련 포스트

  • 레빗 API WPF

    WPF로 객체 정보 조회 플러그인 만들기

  • hello revit

    Hello Revit 창 띄우기