“Fork

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/
转载请保留此信息,谢谢。
posted @ 2019-11-06 17:09  颜廷国  阅读(4769)  评论(0编辑  收藏  举报