您的位置:首页 > 其它

AutoCAD二次开发三种添加插件按钮的方法之三

2015-12-14 21:28 691 查看
再之前两篇的介绍中,无论是第一篇还是第二篇都需要依赖于AutoCAD中的acad.cuix文件,这是写插件所不能容忍的啊!所以这一篇我们不依赖任何的配置,直接加载dll并输入相应的命令即可实现添加命令按钮的操作!这次我们需要使用的dll是AcWindows.dll!~

逻辑如下:

1.如果没有打开Ribbon,控制命令行打开

2.判断当前的Tabs中是否存在同title的Tab,初次加载不会存在的

3.添加Panel并在panel中添加button

private const string New_Tab_ID = "New_Tab_ID";
private bool PluginAdded = false;//是否已经加载了插件--读取配置文件判断
[CommandMethod("addplugin")]
public void AddPlugIn()
{
if (Autodesk.Windows.ComponentManager.Ribbon == null)
{//如果Ribbon没有打开,直接操作命令行打开
Application.DocumentManager.MdiActiveDocument.SendStringToExecute("_.ribbon\r", true, false, false);
}
if (PluginAdded)
{
System.Windows.Forms.MessageBox.Show("自定义插件已加载!");
return;
}
bool TabExist = false;//名称为自定义插件的tab是否存在
Autodesk.Windows.RibbonControl pRibbonControl = Autodesk.Windows.ComponentManager.Ribbon;
foreach (RibbonTab itemTab in pRibbonControl.Tabs)
{
if (itemTab.Title == "自定义插件Tab")
{
AddNewPanel(itemTab);
TabExist = true;
}
}
if (!TabExist)
{
RibbonTab newTab = new RibbonTab();
newTab.Title = "自定义插件Tab";
newTab.Id = New_Tab_ID;
pRibbonControl.Tabs.Add(newTab);

AddNewPanel(newTab);

newTab.IsActive = true;
}
}
//添加新的panel
private void AddNewPanel(RibbonTab newTab)
{
try
{
Autodesk.Windows.RibbonPanelSource panelSource = new Autodesk.Windows.RibbonPanelSource();
panelSource.Title = "自定义插件Panel";

RibbonPanel newRibbonPanel = new RibbonPanel();
newRibbonPanel.Source = panelSource;
newTab.Panels.Add(newRibbonPanel);

Autodesk.Windows.RibbonButton pButton = new Autodesk.Windows.RibbonButton();
pButton.Text = "自定义插件button";
pButton.ToolTip = "自定义的button1测试";
pButton.ShowToolTipOnDisabled = true;
pButton.IsToolTipEnabled = true;
pButton.Size = RibbonItemSize.Large;
pButton.LargeImage = LoadImage(AutoCAD_CSharp_plug_in1_2010.Resource1.test32);
pButton.Image = LoadImage(AutoCAD_CSharp_plug_in1_2010.Resource1.test16);
pButton.Orientation = System.Windows.Controls.Orientation.Vertical;
pButton.ShowText = true;
pButton.ShowImage = true;
pButton.CommandParameter = "plugincommand ";
pButton.CommandHandler = new TestCommandHandler();

Autodesk.Windows.RibbonButton pRemovePluginButton = new Autodesk.Windows.RibbonButton();
pRemovePluginButton.Text = "删除插件按钮";
pRemovePluginButton.ToolTip = "自定义的button2测试";
pRemovePluginButton.ShowToolTipOnDisabled = true;
pRemovePluginButton.IsToolTipEnabled = true;
pRemovePluginButton.Size = RibbonItemSize.Standard;
pRemovePluginButton.LargeImage = LoadImage(AutoCAD_CSharp_plug_in1_2010.Resource1.test32);
pRemovePluginButton.Image = LoadImage(AutoCAD_CSharp_plug_in1_2010.Resource1.test16);
pButton.Orientation = System.Windows.Controls.Orientation.Vertical;//小按钮都是横向的,即使设置纵向
pRemovePluginButton.ShowImage = true;
pRemovePluginButton.ShowText = true;
pRemovePluginButton.CommandParameter = "removeplugin ";
pRemovePluginButton.CommandHandler = new RemovePluginCommandHandler();

panelSource.Items.Add(pButton);
panelSource.Items.Add(pRemovePluginButton);
}
catch (System.Exception ex)
{
Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage( Environment.NewLine,ex.Message);
}
}
//--配置图片
private System.Windows.Media.Imaging.BitmapImage LoadImage(System.Drawing.Bitmap bitmap)
{
System.IO.MemoryStream ms = new System.IO.MemoryStream ();
bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
System.Windows.Media.Imaging.BitmapImage bitImage = new BitmapImage();
bitImage.BeginInit();
bitImage.StreamSource = ms;
bitImage.EndInit();
return bitImage;
}

每个button都有一个CommandHandler属性,这个就是我们写我们自定义的触发按钮事件的类,继承于System.Windows.Input.ICommand!

至此,三种方式都写完了,这里小结一下。

总体来说这三种方式前两种依赖性较强,依赖于acad.cuix文件,第三种非要说依赖性的话,依赖于Ribbon一定要是打开状态的;第一种的配置文件做好了的话,甚至可以不写代码添加按钮代码就可以实现按钮(但是自定义CommandMethod还是要写的);第二种代码添加按钮写起来较为简便,条理也比较清晰;第三种完全基于代码实现,比较适合纯码农们!也比较适合插件开发的真正实施!亲们喜欢哪种就自己选吧!~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: