目录

实现效果:

开发环境:

开发流程:

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

填写项目名称 “RibbonUI”,选择.NET 版本为 4.6 (AutoCAD 2017 对应 .NET 4.6 )

在项目解决方案中,右键点击“引用”,点击 “ 管理 NuGet 程序包 (N)” 选项

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

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

如何调试测试

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

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

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

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

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

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

构建自定义 Ribbon UI

把以下代码覆盖到 Class1.class

注意此时引用:

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

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

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


实现效果:

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

图 1 自定义RibbonUI界面

图 2 AutoCAD 自带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 )

在项目解决方案中,右键点击“引用”,点击 “ 管理 NuGet 程序包 (N)” 选项

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

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

如何调试测试

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

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace RibbonUI
{public class Class1{[CommandMethod("TestEnv")] // 添加命令标识符​public void TestEnv(){// 声明命令行对象Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;// 向命令行输出一段文字ed.WriteMessage("智能数据笔记(1):CAD二次开发环境测试!");}}
}

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

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

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

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

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

构建自定义 Ribbon UI

把以下代码覆盖到 Class1.class

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;
using Autodesk.Windows;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media.Imaging;namespace RibbonUI
{public class Class1{[CommandMethod("RibbonDemo")]public void RibbonDemo(){// 获取程序集的加载路径string currentDLLLocation = Path.GetDirectoryName(this.GetType().Assembly.Location) + "\\";// 获取cad的Ribbon界面RibbonControl ribbonCtrl = ComponentManager.Ribbon; // 添加选项卡RibbonTab tab = new RibbonTab();tab.Title = "我的测试选项卡";tab.Id = "Acad.RibbonId1";tab.IsActive = true;ribbonCtrl.Tabs.Add(tab);// 给选项卡添加面板RibbonPanelSource panelSource = new RibbonPanelSource();panelSource.Title = "绘图";RibbonPanel ribbonPanel = new RibbonPanel();ribbonPanel.Source = panelSource;tab.Panels.Add(ribbonPanel);// 直线命令按钮RibbonButton pLineBtn = new RibbonButton();string imgFileNameLineBtn = string.Format("{0}\\{1}\\{2}.png", currentDLLLocation, "Images", "Line");Uri uriLineBtn = new Uri(imgFileNameLineBtn);BitmapImage bitmapImgeLineBtn = new BitmapImage(uriLineBtn);// 按钮图片 16 * 16pLineBtn.Image = bitmapImgeLineBtn;// 按钮图片 32 * 32pLineBtn.LargeImage = bitmapImgeLineBtn; pLineBtn.ShowImage = true;pLineBtn.Size = RibbonItemSize.Large;pLineBtn.Orientation = System.Windows.Controls.Orientation.Vertical;pLineBtn.Text = "直线";pLineBtn.ShowText = true;//添加提示对象RibbonToolTip toolTipLine = new RibbonToolTip();toolTipLine.Title = "直线";toolTipLine.Content = "创建直线段";toolTipLine.Command = "LINE";toolTipLine.ExpandedContent = "是用LINE命令,可以创建一些列连续的直线段。每条线段都是可以单独进行编辑的直线对象。";string imgToolTipFileNameLineBtn = string.Format("{0}\\{1}\\{2}.png", currentDLLLocation,"Images","LineTip"); Uri toolTipUriLineBtn = new Uri(imgToolTipFileNameLineBtn);BitmapImage toolTipBitmapImgeLineBtn = new BitmapImage(toolTipUriLineBtn);toolTipLine.ExpandedImage = toolTipBitmapImgeLineBtn;pLineBtn.ToolTip = toolTipLine;// 给按钮关联命令pLineBtn.CommandHandler = new RibbonCommandHandler(); pLineBtn.CommandParameter = "Line"+" ";// 添加直线命令按钮panelSource.Items.Add(pLineBtn); // 多段线命令按钮RibbonButton pPLineBtn = new RibbonButton();string imgFileNamePLineBtn = string.Format("{0}\\{1}\\{2}.png", currentDLLLocation, "Images", "PLine");Uri uriPLineBtn = new Uri(imgFileNamePLineBtn);BitmapImage bitmapImgePLineBtn = new BitmapImage(uriPLineBtn);// 按钮图片 16 * 16pPLineBtn.Image = bitmapImgePLineBtn;// 按钮图片 32 * 32pPLineBtn.LargeImage = bitmapImgePLineBtn;pPLineBtn.ShowImage = true;pPLineBtn.Size = RibbonItemSize.Large;pPLineBtn.Orientation = System.Windows.Controls.Orientation.Vertical;pPLineBtn.Text = "多段线";pPLineBtn.ShowText = true;//添加提示对象RibbonToolTip toolTipPLine = new RibbonToolTip();toolTipPLine.Title = "多段线";toolTipPLine.Content = "创建二维多段线";toolTipPLine.Command = "PLINE";toolTipPLine.ExpandedContent = "二维多段线是作为单个平面对象创建的相互连接的线段序列。可以创建直线段、圆弧段或者两者的组合线段。";string imgToolTipFileNamePLineBtn = string.Format("{0}\\{1}\\{2}.png", currentDLLLocation, "Images", "PLineTip");Uri toolTipUriPLineBtn = new Uri(imgToolTipFileNamePLineBtn);BitmapImage toolTipBitmapImgePLineBtn = new BitmapImage(toolTipUriPLineBtn);toolTipPLine.ExpandedImage = toolTipBitmapImgePLineBtn;pPLineBtn.ToolTip = toolTipPLine;// 给按钮关联命令pPLineBtn.CommandHandler = new RibbonCommandHandler();pPLineBtn.CommandParameter = "PLINE" + " ";// 添加多段线命令按钮panelSource.Items.Add(pPLineBtn); RibbonButton btn3 = new RibbonButton();string imgFileName = string.Format("{0}Images\\{1}.png", currentDLLLocation, "mobile-share-twitter");Bitmap bitmap = new Bitmap(imgFileName);Uri uri = new Uri(imgFileName);BitmapImage bitmapImge = new BitmapImage(uri);btn3.Image = bitmapImge; //按钮图片// 16 * 16btn3.LargeImage = bitmapImge; //按钮图片 // 32 * 32btn3.ShowImage = true;btn3.Size = RibbonItemSize.Large;btn3.Orientation = System.Windows.Controls.Orientation.Vertical;btn3.Text = "TestEnv";btn3.ShowText = true;btn3.CommandHandler = new RibbonCommandHandler(); //给按钮关联命令btn3.CommandParameter = "TestEnv ";panelSource.Items.Add(btn3);// checkBoxAutodesk.Windows.RibbonCheckBox ribbonCheckBox = new RibbonCheckBox();ribbonCheckBox.Text = "RibbonCheckBox";ribbonCheckBox.ShowText = true;panelSource.Items.Add(ribbonCheckBox);// RibbonMenuButtonAutodesk.Windows.RibbonMenuButton ribbonMenuButton = new RibbonMenuButton();ribbonMenuButton.Text = "ribbonMenuButton";ribbonMenuButton.ShowText = true;RibbonMenuItem ribbonMenuItem = new RibbonMenuItem();ribbonMenuItem.Text = "ribbonMenuItem1";ribbonMenuButton.Items.Add(ribbonMenuItem);RibbonSeparator rsP = new RibbonSeparator();rsP.SeparatorStyle = RibbonSeparatorStyle.Invisible;ribbonMenuButton.Items.Add(rsP);RibbonMenuItem ribbonMenuItem2 = new RibbonMenuItem();ribbonMenuItem2.Text = "ribbonMenuItem2";ribbonMenuButton.Items.Add(ribbonMenuItem2);//Attempting to add invalid object in RibbonMenuButton.Items collection. Valid objects are RibbonMenuItem and RibbonSeparator.”//  ribbonListButton2.Items.Add(RibbonButtonInfos.PolylineBtn);panelSource.Items.Add(ribbonMenuButton);// RibbonComboRibbonCombo ribbonCombo = new RibbonCombo();ribbonCombo.Name = "mylist";ribbonCombo.Size = RibbonItemSize.Large;//create text list in comboboxList<string> stringtext = new List<string> { "A", "B", "C" };for (int i = 0; i < stringtext.Count; i++){var ribtext = new RibbonButton();ribtext.Text = stringtext[i];ribtext.ShowText = true;ribbonCombo.Items.Add(ribtext);}panelSource.Items.Add(ribbonCombo);// RibbonSplitButtonAutodesk.Windows.RibbonSplitButton ribbonSplitButton = new RibbonSplitButton();ribbonSplitButton.Text = "ribbonSplitButton";ribbonSplitButton.ShowText = true;ribbonSplitButton.IsSplit = true;ribbonSplitButton.Size = RibbonItemSize.Large;stringtext = new List<string> { "A", "B", "C" };for (int i = 0; i < stringtext.Count; i++){var ribtext = new RibbonButton();ribtext.Text = stringtext[i];ribtext.ShowText = true;ribbonSplitButton.Items.Add(ribtext);}panelSource.Items.Add(ribbonSplitButton);}[CommandMethod("TestEnv")] // 添加命令标识符​public void TestEnv(){// 声明命令行对象Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;// 向命令行输出一段文字ed.WriteMessage("智能数据笔记(1):CAD二次开发环境测试!");}}
}

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

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.Windows;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace RibbonUI
{public class RibbonCommandHandler : System.Windows.Input.ICommand{//定义用于确定此命令是否可以在其当前状态下执行的方法。public bool CanExecute(object parameter){return true;}public event EventHandler CanExecuteChanged;// 定义在调用此命令时调用的方法。public void Execute(object parameter){if (parameter is RibbonButton){RibbonButton btn = (RibbonButton)parameter;if (btn.CommandParameter != null){Document doc = Application.DocumentManager.MdiActiveDocument;doc.SendStringToExecute(btn.CommandParameter.ToString(), true, false, false);}}}}
}

注意此时引用:

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

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

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

<?xml version="1.0" encoding="utf-8" ?>
<ApplicationPackage SchemaVersion="1.0" AppVersion="1.0"ProductCode="{29D4EA99-A2B2-4C14-B105-55DC4C9B6736}"Name="ribbon测试插件"
><CompanyDetailsName="****"Email="****"/><RuntimeRequirements OS="Win32|Win64" Platform="AutoCAD*" /><Components><ComponentEntry ModuleName="./debug/RibbonUI.dll"><Commands><Command Local="RibbonDemo" Global="RibbonDemo" StartupCommand="True"/></Commands></ComponentEntry></Components></ApplicationPackage>

学习来源:

C#之CAD二次开发(15) Ribbon交互界面实例_数据智能笔记的博客-CSDN博客

cad二开之不通过netload加载命令(bundle文件的使用)_黑夜de骑士的博客-CSDN博客_cad netload

CAD二开之打开时插件命令自动加载(RibbonUI自动显示)_黑夜de骑士的博客-CSDN博客_cadribbon命令

AutoCAD C# 自动加载自定义RibbonUI界面相关推荐

  1. 如何在NCL(The NCAR Command Language )启动时自动加载自定义的函数和程序

    首先任意建立一个目录存放自定义的程序,例如: $ mkdir ~/MyNCL 然后建立一个环境变量: export NCL_DEF_SCRIPTS_DIR="~/MyNCL" 然后 ...

  2. springboot自动加载--自定义启动器

    创建自定义启动器 0.项目总览 1.创建项目,引入依赖 创建项目 spring-boot-jdbc-starter,引入依赖,pom文件如下: <?xml version="1.0&q ...

  3. cad2006安装未找到html文件,启动 AutoCAD 时显示“加载自定义文件失败。未找到文件”...

    解决方案: 执行以下一个或多个操作: 查找安装的 ARG 文件是否来自 AutoCAD 工具组合 ARG 文件无法从 AutoCAD 工具组合(如 AutoCAD Architecture.AutoC ...

  4. 探索SwipeRefreshLayout配合自定义ListView完成下拉刷新、滑到底部自动加载更多

    在Android开发过程中经常需要实现上下拉刷新功能,Google推出的下拉刷新控件SwipeRefreshLayout(彩虹条),由于官方版本只有下拉刷新而没有上拉加载更多的功能,很多人也尝试在这个 ...

  5. AutoCAD二次开发(C#)完成后,如何实现CAD启动时自动加载dll(不必输入netload)?

    AutoCAD二次开发(C#)完成后,如何实现CAD启动时自动加载dll(不必输入netload)? 1.复制编译后的dll路径,比如我的是[C:\SectionManager_CAD_1.1_031 ...

  6. Android复习06【网络编程提高篇-安装GsonFormat、HttpUrlConnection封装、线程池、GsonFormat解析Json、自动加载下一页、自定义组件、页头页尾刷新、侧滑删除】

    2020-04-07 星期二 [第8周] [考试不考...] 目   录 思维导图 安装GsonFormat插件 添加网络访问权限 GitHub---HttpUrlConnection封装 线程池 G ...

  7. AutoCAD .Net 程序自动加载 AutoLoader

    AutoCAD .Net 程序如何实现在 AutoCAD 启动时自动加载呢? 我们通过一个实例来讲解. 现有程序 HelloAcad2014.dll.包含命令HelloAcad和HelloUI. 一. ...

  8. Autocad、中望CAD自动加载程序研究(注册表法、acad.rx、acaddoc.lsp或acad.lsp)

    Autocad.中望CAD自动加载程序研究(注册表法.acad.rx.acaddoc.lsp或acad.lsp) 一.使用注册表 假设你的arx文件名字是aaa.arx绝对路径是c:\aaa.arx ...

  9. AutoCAD自动加载ARX文件

    AutoCAD自动加载ARX文件 我们以格式刷(matchprop)命令为例教大家如何解决这种问题 1.首先找到AUTOCAD根目录下面的Acad.lsp这个文件,然后在适当的位置加上如下代码: (l ...

最新文章

  1. html手机和电脑显示内容不同,同一个网站,手机端跟电脑端显示不同是怎么实现的?...
  2. redis shutdown (error) ERR Errors trying to SHUTDOWN. Check logs.
  3. STM32的ADC笔记
  4. android 拖动缩放窗口大小,Android小应用----图片的拖动、缩放
  5. dismiss和remove_remove的近义词辨析
  6. 042_前端规范 2021-06-03
  7. iOS 蓝牙使用小结 bluetooth
  8. 数据结构笔记(六)-- 双向链表
  9. api-ms-win-crt-runtime-l1-1-0.dll丢失问题
  10. 三维点云数据处理软件供技术原理说明_基于Geomagic Studio的点云数据处理三维建模技术...
  11. 清空oracle的注册表,Oracle中清除注册表
  12. Sql Server 增加字段、修改字段、修改类型、修改默认值
  13. WebView---Android与Javascript交互之入门
  14. 关于网站版权声明(Copyright)的格式和写法
  15. Linux内核的WRITE_ONCE函数分析
  16. OA课程--word2013实用技巧大全-目录
  17. usb设备驱动之uvc设备
  18. 2022QS世界大学排名:全球全日制MBA、商科硕士榜单公布
  19. 百度地图经纬度与腾讯地图经纬度之间的转换
  20. 信息学奥赛一本通(C++版) 网站补充题目

热门文章

  1. java -1%3_Java_SE 流程控制
  2. 30岁自学python找工作-自学编程的30岁男人,能按应届生那样找工作吗?
  3. 又一暴强的截图工具 ShareX
  4. 华为鸿蒙2.0来了,挑战谷歌安卓APP成关键?
  5. H.264压缩算法详解
  6. 2万行java代码的系统_PublicCMS: 200万行代码修改 打造安全快速的java cms 轻松支撑千万数据、千万PV;目前已经拥有全球0.0002%的用户,诸多明星网站案例。...
  7. 伍鸣博士受邀出席徐汇区住房租赁市场研讨会
  8. IP地址、子网掩码与划分方法
  9. InfluxDB常用函数
  10. python3 输出中文、日文等等乱码问题的解决办法