[Revit API] Ribbon탭 만들고 Form 띄우기
리본메뉴에 별도의 탭을 추가하고 패널을 추가하기.
(참고한 자료 : API Develop Guide, YouTube 소주장군님)
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
80
81
82
83
84
|
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
|
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
리소스추가
솔루션 탐색기에서 해당 프로젝트를 우클릭하고 속성창으로 이동 후 리소스에 32x32 아이콘 이미지 추가
메니페스트파일(.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으로 설정해야함.