AutoCAD二次開發添加Ribbon菜單


對一款軟件進行二次開發,不可避免的要添加菜單或者功能欄,通過一些按鈕觸發命令。以下是對AutoCAD二次開發添加Ribbon菜單的代碼編寫:

       本文參考的文章如下:

        https://www.cnblogs.com/junqilian/archive/2012/06/18/2553662.html

        https://blog.csdn.net/hisinwang/article/details/78797068

       利用vs添加AutoCAD 的.net Plugin之后,找到解決方案中的myPlugin(在myCommands中寫代碼需要利用命令進行操作,在myPlugin中編寫可以直接自動加載Ribbon),把代碼寫在Initialize()中。

       1、聲明需要添加的Ribbon Tab頁:

1 Autodesk.Windows.RibbonControl ribbonControl = Autodesk.Windows.ComponentManager.Ribbon;
2             RibbonTab Tab = new RibbonTab();
3             Tab.Title = "圖層權限管理";
4             Tab.Id = "RibbonSample_TAB_ID";
5 
6             ribbonControl.Tabs.Add(Tab);

     2、 創建新的Panel:

1 // create Ribbon panels
2             Autodesk.Windows.RibbonPanelSource panel1Panel = new RibbonPanelSource();
3             panel1Panel.Title = "圖層管理";
4             RibbonPanel Panel1 = new RibbonPanel();
5             Panel1.Source = panel1Panel;
6             Tab.Panels.Add(Panel1);

      3、 添加按鈕到Panel中:(添加按鈕時,在函數的參數中,輸入cmd參數后加一個空格,可以直接觸發命令,不加空格代表只是輸入,還需要點擊Enter鍵。)

 1         RibbonButton pan1btnAddLayers = NewRibbonButton("添加圖層", "ADDLAYER ",Resource1.AddLayer16x16,Resource1.AddLayer32x32);
 2         RibbonButton pan1btnEraseLayers = NewRibbonButton("允許導出", "DelteObjects ", Resource1.AddLayer16x16, Resource1.AddLayer32x32);
 3           
 4         RibbonRowPanel pan1row1 = new RibbonRowPanel();
 5         pan1row1.Items.Add(pan1btnEraseLayers);
 6         pan1row1.Items.Add(new RibbonRowBreak());
 7             
 8         panel1Panel.Items.Add(pan1btnAddLayers);
 9         //panel1Panel.Items.Add(new RibbonSeparator());
10         panel1Panel.Items.Add(pan1row1);

      4、創建一個按鈕觸發的自定義類commandHandlers:用來實現System.Windows.Input.ICommand接口,在Execute時把commandParameter發送到AutoCAD命令行窗口執行。

 1 using System;
 2 using System.Collections.Generic;
 3 //using System.Linq;
 4 //using System.Text;
 5 using Autodesk.Windows;
 6 
 7 
 8 namespace AutoCAD_Debugger
 9 {
10   class RibbonCommandHandler : System.Windows.Input.ICommand
11   {
12     public bool CanExecute(object parameter)
13     {
14       return true;
15     }
16 
17     public event EventHandler CanExecuteChanged;
18 
19     public void Execute(object parameter)
20     {
21       //is from Ribbon Button
22       RibbonButton ribBtn = parameter as RibbonButton;
23       if (ribBtn != null)
24       {
25         //execute the command 
26         Autodesk.AutoCAD.ApplicationServices.Application
27           .DocumentManager.MdiActiveDocument
28           .SendStringToExecute(
29              (string)ribBtn.CommandParameter, true, false, true);
30       }
31     }
32   }
33 }

      5、 設置按鈕屬性的函數:參數分別代表按鈕名稱、觸發命令(myCommands中編寫命令)、顯示小圖片、顯示大圖片。

 1   private static RibbonButton NewRibbonButton(string text, string cmd,Bitmap image, Bitmap largeimage)
 2         {
 3             RibbonButton button = new RibbonButton();
 4             button.Text = text;
 5             button.ShowText = true;
 6             button.Image = imagesourceForBitmap(image);
 7             button.LargeImage = imagesourceForBitmap(largeimage);
 8             button.ShowImage = true;
 9             button.Size = RibbonItemSize.Large;
10             button.Orientation = System.Windows.Controls.Orientation.Vertical;
11             button.CommandHandler = new RibbonCommandHandler();
12             button.CommandParameter = cmd;
13 
14             return button;
15         }

      6、在添加處理圖片的函數之前需要把按鈕圖標添加到解決方案中:選擇項目-添加-資源文件,添加一個資源文件夾之后,把32x32和16x16的png圖片拖拽到資源文件夾中。

      7、處理圖片的函數:

 1 [DllImport("gdi32.dll", EntryPoint = "DeleteObject")]
 2         [return: MarshalAs(UnmanagedType.Bool)]
 3         public static extern bool DeleteObject([In] IntPtr hObject);
 4 
 5         public static ImageSource imagesourceForBitmap(Bitmap bmp)
 6         {
 7             var handle = bmp.GetHbitmap();
 8             try
 9             {
10                 return Imaging.CreateBitmapSourceFromHBitmap(handle, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
11             }
12             finally { DeleteObject(handle); }
13         }

      至此,已完成AutoCAD的Ribbon菜單的編寫工作。進行測試,打開AutoCAD—命令行輸入netload—選擇編譯生成的.dll文件—確定加載一次或者永久加載或者取消,就可以看到自己設計的Ribbon菜單。

AutoCAD添加Ribbon菜單的基本過程應該就是這樣,如果你正在尋找這方面的資料,可以參考。

作者: AndyTGYan
郵箱:892700091@qq.com
出處: https://www.cnblogs.com/yantingguo/
轉載請保留此信息,謝謝。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM