SonnyBIM
Published on

Sonny.EasyRibbon - Framework Tạo Revit Ribbon UI Đơn Giản Với C# Attributes

Authors

Giới thiệu

Nếu bạn đã từng lập trình Revit Add-in, chắc hẳn bạn sẽ không xa lạ gì với việc phải viết hàng trăm dòng code chỉ để tạo một Ribbon UI đơn giản. Chính vì vậy, mình đã phát triển Sonny.EasyRibbon - một framework mã nguồn mở giúp đơn giản hóa quá trình tạo Revit Ribbon UI bằng cách sử dụng C# Attributes. Thay vì viết hàng trăm dòng code, giờ đây bạn chỉ cần vài dòng attribute là có thể tạo được một giao diện Ribbon đẹp mắt và chuyên nghiệp.

Vấn đề với cách làm truyền thống

Khi tạo Revit Ribbon UI theo cách truyền thống, bạn phải viết rất nhiều code boilerplate chỉ để tạo một button đơn giản:

// Traditional way - verbose and hard to maintain
public Result OnStartup(UIControlledApplication application)
{
    string tabName = "My Tools";
    application.CreateRibbonTab(tabName);
    
    RibbonPanel panel = application.CreateRibbonPanel(tabName, "Design Tools");
    
    PushButtonData buttonData = new PushButtonData(
        "ColumnRebar",
        "Column Rebar",
        Assembly.GetExecutingAssembly().Location,
        "MyAddin.Commands.ColumnRebarCommand"
    );
    
    buttonData.Image = new BitmapImage(new Uri("pack://application:,,,/MyAddin;component/Resources/Icons/icon16.png"));
    buttonData.LargeImage = new BitmapImage(new Uri("pack://application:,,,/MyAddin;component/Resources/Icons/icon32.png"));
    buttonData.ToolTip = "Generate column reinforcement";
    
    PushButton button = panel.AddItem(buttonData) as PushButton;
    
    // And this is just for ONE button...
    return Result.Succeeded;
}

Code như vậy rất dài dòng và khó maintain khi có nhiều buttons.

Sonny.EasyRibbon - Giải pháp đơn giản và thanh lịch

Với Sonny.EasyRibbon, bạn chỉ cần viết:

using EasyRibbon.UIAttributeBase;

[Tab("My Tools")]
public class MyToolsTab
{
    [Panel("Design Tools")]
    public class DesignPanel
    {
        [Button("Column Rebar",
            typeof(ColumnRebarCommand),
            Image = "/MyAddin;component/Resources/Icons/icon16.png",
            LargeImage = "/MyAddin;component/Resources/Icons/icon32.png",
            ToolTip = "Generate column reinforcement")]
        public class ColumnRebarButton;
    }
}

Chỉ vậy thôi! Code ngắn gọn, dễ đọc, dễ hiểu và dễ maintain hơn rất nhiều.

Ribbon UI mẫu được tạo bằng EasyRibbon

Tính năng nổi bật

  • 🎯 Attribute-Based UI Definition - Định nghĩa giao diện Ribbon thông qua C# Attributes, cách tiếp cận hiện đại và declarative
  • 🧩 Modular Architecture - Tổ chức nhiều add-ins thành các modules độc lập, có thể load và debug riêng biệt
  • 🔄 Multi-Version Support - Hỗ trợ Revit từ phiên bản 2021 đến 2026
  • 🌐 Resource-Based Localization - Hỗ trợ đa ngôn ngữ thông qua WPF ResourceDictionary
  • 📦 Stacked Buttons & Pulldown Buttons - Hỗ trợ đầy đủ các loại UI elements của Revit Ribbon

So sánh trước và sau

Trước khi dùng EasyRibbonSau khi dùng EasyRibbon
200+ dòng code cho 5 buttonsChỉ 30-40 dòng code
Code dài dòng, khó đọcCode ngắn gọn, dễ đọc
Khó maintain và mở rộngDễ dàng maintain và mở rộng
Mất nhiều thời gianTiết kiệm thời gian đáng kể

Kết luận

Sonny.EasyRibbon giúp đơn giản hóa quá trình phát triển Revit Add-in. Thay vì viết hàng trăm dòng boilerplate code, bạn có thể tập trung vào logic nghiệp vụ thực sự. Framework này đặc biệt hữu ích cho developers mới bắt đầu, teams làm việc với nhiều add-ins, và các projects cần maintain lâu dài.

Để tìm hiểu chi tiết về cách sử dụng, các tính năng, và examples, vui lòng xem README trên GitHub repository:

🔗 GitHub Repository: https://github.com/PhanCongVuDuc/Sonny.EasyRibbon

Nếu bạn thấy project hữu ích, hãy cho một ⭐ star trên GitHub nhé! Mọi đóng góp đều được chào đón qua GitHub Issues, Pull Requests hoặc LinkedIn.


Happy Coding with Sonny.EasyRibbon! 🚀