软件系统定制开发AutoCAD C# 自动加载自定义RibbonUI界面

目录


实现效果:

        用户打开CAD,软件系统定制开发自动加载自定义RibbonUI界面(图 1),点击按钮,软件系统定制开发自动运行自定义命令(图 3)。

图 1 自定义RibbonUI界面

图 2 自带RibbonUI

图 3 点击“TestEnv”按钮,执行“TestEnv”命令

开发环境:

环境名称

版本

AutoCAD

2017

Visual Studio

2019

.Net

4.6

打开Visual Studio ,创建 .NET FrameWork 类库项目

软件系统定制开发填写项目名称 “RibbonUI”,选择.NET 版本为 4.6 (AutoCAD 2017 对应 .NET 4.6 )

软件系统定制开发在项目解决方案中,右键点击“引用”,点击 “ 管理 程序包 (N)” 选项

软件系统定制开发点击浏览选项卡,在搜索栏中填入 “AutoCAD-2017 ”,在给出的搜索结果中,选中 “AutoCAD-2017.Net.Base” ,在右侧面板中点击 “安装”。

安装完成后,可在输出界面看到,成功安装,解决方案引用下会出现多个引用。

如何调试测试

在Class1.class 中用以下代码覆盖,在 TestEnv 方法中添加断点。

  1. using Autodesk.AutoCAD.ApplicationServices;
  2. using Autodesk.AutoCAD.EditorInput;
  3. using Autodesk.AutoCAD.Runtime;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. namespace RibbonUI
  10. {
  11. public class Class1
  12. {
  13. [CommandMethod("TestEnv")] // 添加命令标识符​
  14. public void TestEnv()
  15. {
  16. // 声明命令行对象
  17. Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  18. // 向命令行输出一段文字
  19. ed.WriteMessage("智能数据笔记(1):CAD二次开发环境测试!");
  20. }
  21. }
  22. }

修改项目属性,在调试界面选择启动外部程序 ,勾选 “ 启动本地代码调试 ”

 此时,可点击 “ 启动 ” 按钮,会自动打开 CAD 界面

在打开的界面中,点击 “ + ” 按钮,新建 DWG 

在命令行中输入 “ netload ” ,在弹出的窗体中,选中我们代码生成的dll文件,点击 “ 打开 ” 按钮,选择 “ 始终加载 ” 选项。

在命令行中输入自定义命令 “ TestEnv ”,回车后就会进入代码的断点处

构建自定义 Ribbon UI

把以下代码覆盖到 Class1.class

  1. using Autodesk.AutoCAD.ApplicationServices;
  2. using Autodesk.AutoCAD.EditorInput;
  3. using Autodesk.AutoCAD.Runtime;
  4. using Autodesk.Windows;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Drawing;
  8. using System.IO;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using System.Windows.Media.Imaging;
  13. namespace RibbonUI
  14. {
  15. public class Class1
  16. {
  17. [CommandMethod("RibbonDemo")]
  18. public void RibbonDemo()
  19. {
  20. // 获取程序集的加载路径
  21. string currentDLLLocation = Path.GetDirectoryName(this.GetType().Assembly.Location) + "\\";
  22. // 获取cad的Ribbon界面
  23. RibbonControl ribbonCtrl = ComponentManager.Ribbon;
  24. // 添加选项卡
  25. RibbonTab tab = new RibbonTab();
  26. tab.Title = "我的测试选项卡";
  27. tab.Id = "Acad.RibbonId1";
  28. tab.IsActive = true;
  29. ribbonCtrl.Tabs.Add(tab);
  30. // 给选项卡添加面板
  31. RibbonPanelSource panelSource = new RibbonPanelSource();
  32. panelSource.Title = "绘图";
  33. RibbonPanel ribbonPanel = new RibbonPanel();
  34. ribbonPanel.Source = panelSource;
  35. tab.Panels.Add(ribbonPanel);
  36. // 直线命令按钮
  37. RibbonButton pLineBtn = new RibbonButton();
  38. string imgFileNameLineBtn = string.Format("{0}\\{1}\\{2}.png", currentDLLLocation, "Images", "Line");
  39. Uri uriLineBtn = new Uri(imgFileNameLineBtn);
  40. BitmapImage bitmapImgeLineBtn = new BitmapImage(uriLineBtn);
  41. // 按钮图片 16 * 16
  42. pLineBtn.Image = bitmapImgeLineBtn;
  43. // 按钮图片 32 * 32
  44. pLineBtn.LargeImage = bitmapImgeLineBtn;
  45. pLineBtn.ShowImage = true;
  46. pLineBtn.Size = RibbonItemSize.Large;
  47. pLineBtn.Orientation = System.Windows.Controls.Orientation.Vertical;
  48. pLineBtn.Text = "直线";
  49. pLineBtn.ShowText = true;
  50. //添加提示对象
  51. RibbonToolTip toolTipLine = new RibbonToolTip();
  52. toolTipLine.Title = "直线";
  53. toolTipLine.Content = "创建直线段";
  54. toolTipLine.Command = "LINE";
  55. toolTipLine.ExpandedContent = "是用LINE命令,可以创建一些列连续的直线段。每条线段都是可以单独进行编辑的直线对象。";
  56. string imgToolTipFileNameLineBtn = string.Format("{0}\\{1}\\{2}.png", currentDLLLocation,"Images","LineTip");
  57. Uri toolTipUriLineBtn = new Uri(imgToolTipFileNameLineBtn);
  58. BitmapImage toolTipBitmapImgeLineBtn = new BitmapImage(toolTipUriLineBtn);
  59. toolTipLine.ExpandedImage = toolTipBitmapImgeLineBtn;
  60. pLineBtn.ToolTip = toolTipLine;
  61. // 给按钮关联命令
  62. pLineBtn.CommandHandler = new RibbonCommandHandler();
  63. pLineBtn.CommandParameter = "Line"+" ";
  64. // 添加直线命令按钮
  65. panelSource.Items.Add(pLineBtn);
  66. // 多段线命令按钮
  67. RibbonButton pPLineBtn = new RibbonButton();
  68. string imgFileNamePLineBtn = string.Format("{0}\\{1}\\{2}.png", currentDLLLocation, "Images", "PLine");
  69. Uri uriPLineBtn = new Uri(imgFileNamePLineBtn);
  70. BitmapImage bitmapImgePLineBtn = new BitmapImage(uriPLineBtn);
  71. // 按钮图片 16 * 16
  72. pPLineBtn.Image = bitmapImgePLineBtn;
  73. // 按钮图片 32 * 32
  74. pPLineBtn.LargeImage = bitmapImgePLineBtn;
  75. pPLineBtn.ShowImage = true;
  76. pPLineBtn.Size = RibbonItemSize.Large;
  77. pPLineBtn.Orientation = System.Windows.Controls.Orientation.Vertical;
  78. pPLineBtn.Text = "多段线";
  79. pPLineBtn.ShowText = true;
  80. //添加提示对象
  81. RibbonToolTip toolTipPLine = new RibbonToolTip();
  82. toolTipPLine.Title = "多段线";
  83. toolTipPLine.Content = "创建二维多段线";
  84. toolTipPLine.Command = "PLINE";
  85. toolTipPLine.ExpandedContent = "二维多段线是作为单个平面对象创建的相互连接的线段序列。可以创建直线段、圆弧段或者两者的组合线段。";
  86. string imgToolTipFileNamePLineBtn = string.Format("{0}\\{1}\\{2}.png", currentDLLLocation, "Images", "PLineTip");
  87. Uri toolTipUriPLineBtn = new Uri(imgToolTipFileNamePLineBtn);
  88. BitmapImage toolTipBitmapImgePLineBtn = new BitmapImage(toolTipUriPLineBtn);
  89. toolTipPLine.ExpandedImage = toolTipBitmapImgePLineBtn;
  90. pPLineBtn.ToolTip = toolTipPLine;
  91. // 给按钮关联命令
  92. pPLineBtn.CommandHandler = new RibbonCommandHandler();
  93. pPLineBtn.CommandParameter = "PLINE" + " ";
  94. // 添加多段线命令按钮
  95. panelSource.Items.Add(pPLineBtn);
  96. RibbonButton btn3 = new RibbonButton();
  97. string imgFileName = string.Format("{0}Images\\{1}.png", currentDLLLocation, "mobile-share-twitter");
  98. Bitmap bitmap = new Bitmap(imgFileName);
  99. Uri uri = new Uri(imgFileName);
  100. BitmapImage bitmapImge = new BitmapImage(uri);
  101. btn3.Image = bitmapImge; //按钮图片// 16 * 16
  102. btn3.LargeImage = bitmapImge; //按钮图片 // 32 * 32
  103. btn3.ShowImage = true;
  104. btn3.Size = RibbonItemSize.Large;
  105. btn3.Orientation = System.Windows.Controls.Orientation.Vertical;
  106. btn3.Text = "TestEnv";
  107. btn3.ShowText = true;
  108. btn3.CommandHandler = new RibbonCommandHandler(); //给按钮关联命令
  109. btn3.CommandParameter = "TestEnv ";
  110. panelSource.Items.Add(btn3);
  111. // checkBox
  112. Autodesk.Windows.RibbonCheckBox ribbonCheckBox = new RibbonCheckBox();
  113. ribbonCheckBox.Text = "RibbonCheckBox";
  114. ribbonCheckBox.ShowText = true;
  115. panelSource.Items.Add(ribbonCheckBox);
  116. // RibbonMenuButton
  117. Autodesk.Windows.RibbonMenuButton ribbonMenuButton = new RibbonMenuButton();
  118. ribbonMenuButton.Text = "ribbonMenuButton";
  119. ribbonMenuButton.ShowText = true;
  120. RibbonMenuItem ribbonMenuItem = new RibbonMenuItem();
  121. ribbonMenuItem.Text = "ribbonMenuItem1";
  122. ribbonMenuButton.Items.Add(ribbonMenuItem);
  123. RibbonSeparator rsP = new RibbonSeparator();
  124. rsP.SeparatorStyle = RibbonSeparatorStyle.Invisible;
  125. ribbonMenuButton.Items.Add(rsP);
  126. RibbonMenuItem ribbonMenuItem2 = new RibbonMenuItem();
  127. ribbonMenuItem2.Text = "ribbonMenuItem2";
  128. ribbonMenuButton.Items.Add(ribbonMenuItem2);
  129. //Attempting to add invalid object in RibbonMenuButton.Items collection. Valid objects are RibbonMenuItem and RibbonSeparator.”
  130. // ribbonListButton2.Items.Add(RibbonButtonInfos.PolylineBtn);
  131. panelSource.Items.Add(ribbonMenuButton);
  132. // RibbonCombo
  133. RibbonCombo ribbonCombo = new RibbonCombo();
  134. ribbonCombo.Name = "mylist";
  135. ribbonCombo.Size = RibbonItemSize.Large;
  136. //create text list in combobox
  137. List<string> stringtext = new List<string> { "A", "B", "C" };
  138. for (int i = 0; i < stringtext.Count; i++)
  139. {
  140. var ribtext = new RibbonButton();
  141. ribtext.Text = stringtext[i];
  142. ribtext.ShowText = true;
  143. ribbonCombo.Items.Add(ribtext);
  144. }
  145. panelSource.Items.Add(ribbonCombo);
  146. // RibbonSplitButton
  147. Autodesk.Windows.RibbonSplitButton ribbonSplitButton = new RibbonSplitButton();
  148. ribbonSplitButton.Text = "ribbonSplitButton";
  149. ribbonSplitButton.ShowText = true;
  150. ribbonSplitButton.IsSplit = true;
  151. ribbonSplitButton.Size = RibbonItemSize.Large;
  152. stringtext = new List<string> { "A", "B", "C" };
  153. for (int i = 0; i < stringtext.Count; i++)
  154. {
  155. var ribtext = new RibbonButton();
  156. ribtext.Text = stringtext[i];
  157. ribtext.ShowText = true;
  158. ribbonSplitButton.Items.Add(ribtext);
  159. }
  160. panelSource.Items.Add(ribbonSplitButton);
  161. }
  162. [CommandMethod("TestEnv")] // 添加命令标识符​
  163. public void TestEnv()
  164. {
  165. // 声明命令行对象
  166. Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  167. // 向命令行输出一段文字
  168. ed.WriteMessage("智能数据笔记(1):CAD二次开发环境测试!");
  169. }
  170. }
  171. }

新建RibbonCommandHandler.class文件,将以下代码写入:

  1. using Autodesk.AutoCAD.ApplicationServices;
  2. using Autodesk.Windows;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. namespace RibbonUI
  9. {
  10. public class RibbonCommandHandler : System.Windows.Input.ICommand
  11. {
  12. //定义用于确定此命令是否可以在其当前状态下执行的方法。
  13. public bool CanExecute(object parameter)
  14. {
  15. return true;
  16. }
  17. public event EventHandler CanExecuteChanged;
  18. // 定义在调用此命令时调用的方法。
  19. public void Execute(object parameter)
  20. {
  21. if (parameter is RibbonButton)
  22. {
  23. RibbonButton btn = (RibbonButton)parameter;
  24. if (btn.CommandParameter != null)
  25. {
  26. Document doc = Application.DocumentManager.MdiActiveDocument;
  27. doc.SendStringToExecute(btn.CommandParameter.ToString(), true, false, false);
  28. }
  29. }
  30. }
  31. }
  32. }

注意此时引用:

在debug文件夹下新建Images文件夹,存入以下图形:

 

如何将自定义 Ribbon UI 在用户打开 CAD 后自启动。

在“C:\Program Files\Autodesk\ApplicationPlugins”目录下创建文件夹 “ RibbonUI.bundle ”,将生成的 debug 文件夹(包含Image)拷贝入 “ RibbonUI.bundle ” ,在此文件夹中,新建PackageContents.xml,填入以下代码

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <ApplicationPackage SchemaVersion="1.0" AppVersion="1.0"
  3. ProductCode="{29D4EA99-A2B2-4C14-B105-55DC4C9B6736}"
  4. Name="ribbon测试插件"
  5. >
  6. <CompanyDetails
  7. Name="****"
  8. Email="****"
  9. />
  10. <RuntimeRequirements OS="Win32|Win64" Platform="AutoCAD*" />
  11. <Components>
  12. <ComponentEntry ModuleName="./debug/RibbonUI.dll">
  13. <Commands>
  14. <Command Local="RibbonDemo" Global="RibbonDemo" StartupCommand="True"/>
  15. </Commands>
  16. </ComponentEntry>
  17. </Components>
  18. </ApplicationPackage>

学习来源:

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发