
Ribbon탭 만들고 Form 띄우기
2024년 10월 11일
커스텀 리본메뉴


리본메뉴에 별도의 탭을 추가하고 패널을 추가하기.
(참고한 자료 : 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 | 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

리소스추가

솔루션 탐색기에서 해당 프로젝트를 우클릭하고 속성창으로 이동 후 리소스에 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으로 설정해야함.
← 이전 글
다음 글 →
답글 남기기
댓글을 남기려면 로그인 해야 합니다.