CAD二次开发(7)- 实现Ribbon选项卡,面板,功能按钮的添加

作者 : admin 本文共7195个字,预计阅读时间需要18分钟 发布时间: 2024-06-8 共4人阅读

1. 创建工程

CAD二次开发(7)- 实现Ribbon选项卡,面板,功能按钮的添加插图

2. 需要引入的依赖

CAD二次开发(7)- 实现Ribbon选项卡,面板,功能按钮的添加插图(1)

CAD二次开发(7)- 实现Ribbon选项卡,面板,功能按钮的添加插图(2)
如图,去掉依赖复制到本地
CAD二次开发(7)- 实现Ribbon选项卡,面板,功能按钮的添加插图(3)

3. 代码实现

RibbonTool.cs

实现添加Ribbon选项卡,添加面板,以及给面板添加下拉组合按钮。

using Autodesk.Windows;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;
namespace _18Ribbon界面
{
public static partial class RibbonTool
{
/// 
/// 添加Ribbon选项卡
/// 
/// Ribbon控制器
/// 选项卡标题
/// 选项卡ID
/// 是否置为当前
/// RibbonTab
public static RibbonTab AddTab(this RibbonControl ribbonCtrl, string title, string ID, bool isActive)
{
RibbonTab tab = new RibbonTab();
tab.Title = title;
tab.Id = ID;
ribbonCtrl.Tabs.Add(tab);
tab.IsActive = isActive;
return tab;
}
/// 
/// 添加面板
/// 
/// Ribbon选项卡
/// 面板标题
/// RibbonPanelSource
public static RibbonPanelSource AddPanel(this RibbonTab tab, string title)
{
RibbonPanelSource panelSource = new RibbonPanelSource();
panelSource.Title = title;
RibbonPanel ribbonPanel = new RibbonPanel();
ribbonPanel.Source = panelSource;
tab.Panels.Add(ribbonPanel);
return panelSource;
}
/// 
/// 给面板添加下拉组合按钮
/// 
/// 
/// 
/// 
/// 
/// 
public static RibbonSplitButton AddSplitButton(this RibbonPanelSource panelSource,string text,RibbonItemSize size,Orientation orient)
{
RibbonSplitButton splitBtn = new RibbonSplitButton();
splitBtn.Text = text;
splitBtn.ShowText = true;
splitBtn.Size = size;
splitBtn.ShowImage = true;
splitBtn.Orientation = orient;
panelSource.Items.Add(splitBtn);
return splitBtn;
}
}
}

RibbonCommandHandler.cs

命令执行的拦截器

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.Windows;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace _18Ribbon界面
{
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);
}
}
}
}
}

RibbonButtonEX.cs

按钮的属性设置,鼠标事件设置。

using Autodesk.Windows;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;
using System.Windows.Media.Imaging;
namespace _18Ribbon界面
{
public class RibbonButtonEX:RibbonButton
{
//正常显示的图片
private string imgFileName = "";
public string ImgFileName
{
get { return imgFileName; }
set { imgFileName = value; }
}
//鼠标进入时的图片
private string imgHoverFileName = "";
public string ImgHoverFileName
{
get { return imgHoverFileName; }
set { imgHoverFileName = value; }
}
public RibbonButtonEX(string name,RibbonItemSize size,Orientation orient,string cmd)
: base()
{
this.Name = name;//按钮的名称
this.Text = name;
this.ShowText = true; //显示文字
this.MouseEntered += this_MouseEntered;
this.MouseLeft += this_MouseLeft;
this.Size = size; //按钮尺寸
this.Orientation = orient; //按钮排列方式
this.CommandHandler = new RibbonCommandHandler(); //给按钮关联命令
this.CommandParameter = cmd + " ";
this.ShowImage = true; //显示图片
}
public void SetImg(string imgFileName)
{
Uri uri = new Uri(imgFileName);
BitmapImage bitmapImge = new BitmapImage(uri);
this.Image = bitmapImge; //按钮图片
this.LargeImage = bitmapImge; //按钮大图片
this.imgFileName = imgFileName;
}
/// 
/// 鼠标离开事件
/// 
/// 
/// 
private void this_MouseLeft(object sender, EventArgs e)
{
if (this.ImgFileName !="")
{
RibbonButton btn = (RibbonButton)sender;
string imgFileName = this.ImgFileName;
Uri uri = new Uri(imgFileName);
BitmapImage bitmapImge = new BitmapImage(uri);
btn.Image = bitmapImge; //按钮图片
btn.LargeImage = bitmapImge; //按钮大图片
}
}
/// 
/// 鼠标进入事件
/// 
/// 
/// 
private void this_MouseEntered(object sender, EventArgs e)
{
if (this.ImgHoverFileName !="")
{
RibbonButton btn = (RibbonButton)sender;
string imgFileName = this.ImgHoverFileName;
Uri uri = new Uri(imgFileName);
BitmapImage bitmapImge = new BitmapImage(uri);
btn.Image = bitmapImge; //按钮图片
btn.LargeImage = bitmapImge; //按钮大图片
}
}
}
}

CurPath.cs

图片路径地址设置,一般设置为空,我们到时候会获取执行文件的加载路径来赋值。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _18Ribbon界面
{
public static class CurPath
{
public static string curPath = "";
}
}

RibbonButtonInfos.cs

实现自定义的仿CAD的直线按钮功能,多段线按钮功能。

using Autodesk.Windows;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;
using System.Windows.Media.Imaging;
namespace _18Ribbon界面
{
public static class RibbonButtonInfos
{
//直线按钮
private static RibbonButtonEX lineBtn;
public static RibbonButtonEX LineBtn
{
get
{
lineBtn = new RibbonButtonEX("直线",RibbonItemSize.Large,Orientation.Vertical,"Line");
lineBtn.SetImg(CurPath.curPath + "Images\Line.PNG");//设置按钮图片
//添加提示对象
RibbonToolTip toolTip = new RibbonToolTip();
toolTip.Title = "直线";
toolTip.Content = "创建直线段";
toolTip.Command = "LINE";
toolTip.ExpandedContent = "是用LINE命令,可以创建一些列连续的直线段。每条线段都是可以单独进行编辑的直线对象。";
string imgToolTipFileName = CurPath.curPath + "Images\LineTooTip.PNG";
Uri toolTipUri = new Uri(imgToolTipFileName);
BitmapImage toolTipBitmapImge = new BitmapImage(toolTipUri);
toolTip.ExpandedImage = toolTipBitmapImge;
lineBtn.ToolTip = toolTip;
//鼠标进入时的图片
lineBtn.ImgHoverFileName = CurPath.curPath + "Images\LineHover.PNG";
return lineBtn;
}
}
//多段线按钮
private static RibbonButtonEX polylineBtn;
public static RibbonButtonEX PolylineBtn
{
get
{
polylineBtn = new RibbonButtonEX("多段线", RibbonItemSize.Large, Orientation.Vertical, "Pline");
polylineBtn.SetImg(CurPath.curPath + "Images\Polyline.PNG");//设置按钮图片
//添加提示对象
RibbonToolTip toolTip = new RibbonToolTip();
toolTip.Title = "多段线";
toolTip.Content = "创建二维多段线";
toolTip.Command = "PLINE";
toolTip.ExpandedContent = "二维多段线是作为单个平面对象创建的相互连接的线段序列。可以创建直线段、圆弧段或者两者的组合线段。";
string imgToolTipFileName = CurPath.curPath + "Images\PolylineToolTip.PNG";
Uri toolTipUri = new Uri(imgToolTipFileName);
BitmapImage toolTipBitmapImge = new BitmapImage(toolTipUri);
toolTip.ExpandedImage = toolTipBitmapImge;
polylineBtn.ToolTip = toolTip;
//鼠标进入时的图片
polylineBtn.ImgHoverFileName = CurPath.curPath + "Images\PolylineHover.PNG";
return polylineBtn;
}
}
//圆心半径按钮
private static RibbonButtonEX circleCRBtn;
public static RibbonButtonEX CircleCRBtn
{
get
{
circleCRBtn = new RibbonButtonEX("圆心,半径", RibbonItemSize.Large, Orientation.Horizontal, "Circle");
circleCRBtn.SetImg(CurPath.curPath + "Images\CircleCR.PNG");//设置按钮图片
circleCRBtn.ShowText = false;
//添加提示对象
RibbonToolTip toolTip = new RibbonToolTip();
toolTip.Title = "圆心,半径";
toolTip.Content = "用圆心和半径创建圆";
toolTip.Command = "CIRCLE";
toolTip.ExpandedContent = "用圆心和半径创建圆。
示例:";
string imgToolTipFileName = CurPath.curPath + "Images\CircleCDHover.PNG";
Uri toolTipUri = new Uri(imgToolTipFileName);
BitmapImage toolTipBitmapImge = new BitmapImage(toolTipUri);
toolTip.ExpandedImage = toolTipBitmapImge;
circleCRBtn.ToolTip = toolTip;
//鼠标进入时的图片
circleCRBtn.ImgHoverFileName = CurPath.curPath + "Images\CircleToolTip.PNG";
return circleCRBtn;
}
}
}
}

测试

using System;
using Autodesk.AutoCAD.Runtime;
using Autodesk.Windows;
using System.Linq;
using System.Windows.Interop;
using System.Windows.Media.Imaging;
using System.IO;
using System.Windows.Shapes;
using _18Ribbon界面;
using Path = System.IO.Path;
namespace RibbonTest01
{
public class Class1
{
[CommandMethod("RibbonCmd")]
public void RibbonCmd()
{
RibbonControl ribbonCtrl = ComponentManager.Ribbon; //获取cad的Ribbon界面
RibbonTab tab = ribbonCtrl.AddTab("选项卡1", "Acad.RibbonId1", true); //给Ribbon界面添加一个选项卡
CurPath.curPath = Path.GetDirectoryName(this.GetType().Assembly.Location) + "\"; //获取程序集的加载路径
RibbonPanelSource panelSource = tab.AddPanel("绘图"); //给选项卡添加面板
panelSource.Items.Add(RibbonButtonInfos.LineBtn); //添加直线命令按钮
panelSource.Items.Add(RibbonButtonInfos.PolylineBtn); //添加多段线命令按钮
}
}
}

结果

启动并自动加载CAD,输入netload,加载自定义执行文件,并输入RibbonCmd命令。

CAD二次开发(7)- 实现Ribbon选项卡,面板,功能按钮的添加插图(4)

本站无任何商业行为
个人在线分享 » CAD二次开发(7)- 实现Ribbon选项卡,面板,功能按钮的添加
E-->