1、引用
AcDbMgd.dll. 当使用图形文件中的对象时使用这个DLL文件。
AcMgd.dll. 当使用AutoCAD应用程序时使用这个DLL文件。
AcCui.dll. 当使用自定义文件时使用这个DLL文件。
DLL被引用后,必须设置引用DLL文件的“复制到本地”属性为False。
2、代码
namespace cadPlugin
{
public class MainStart
{
static AcadPopupMenu testMenu = null;
// 自定义命令
[CommandMethod("loadButton")]
public void MenuLoad()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
AcadApplication acadApp = Application.AcadApplication as AcadApplication;
// 创建菜单栏按钮
if (testMenu == null)
{
testMenu = acadApp.MenuGroups.Item(0).Menus.Add("cad插件");
testMenu.AddMenuItem(testMenu.Count, "打开", "loadRibbon");
}
// 按钮是否显示
bool isShowd = false;
foreach (AcadPopupMenu menu in acadApp.MenuBar)
{
if (menu == testMenu)
{
isShowd = true;
break;
}
}
// 显示按钮
if (!isShowd)
{
testMenu.InsertInMenuBar(acadApp.MenuBar.Count);
}
}
[CommandMethod("loadRibbon")]
public void doLogin()
{
// 创建工具栏RibbonTab页
AddRibbon();
}
private static RibbonTab myRibbonTab = null;
public void AddRibbon()
{
if (myRibbonTab == null && DataBuffer.user != null)
{
//==========创建Ribbon菜单按钮==========
myRibbonTab = new RibbonTab();
myRibbonTab.Title = "cad插件";
myRibbonTab.Id = "CAD-Utils";
//==========创建RibbonPanel窗口==========
RibbonPanel panel = new RibbonPanel();
RibbonPanelSource panelSrc = new RibbonPanelSource();
panelSrc.Title = "功能菜单";
panel.Source = panelSrc;
myRibbonTab.Panels.Add(panel);
//==========创建RibbonPanel菜单按钮==========
RibbonButton jianzhuBtn = NewRibbonPBtn("建筑专业", "JZStart\n", Resource.jianzhu_B);
panelSrc.Items.Add(jianzhuBtn);
RibbonButton dianqiBtn = NewRibbonPBtn("电气专业", "DQStart\n", Resource.dianqi_B);
panelSrc.Items.Add(dianqiBtn);
// 在AutoCAD的Ribbon窗口中显示
RibbonControl ribCntrl = RibbonServices.RibbonPaletteSet.RibbonControl;
bool isShow = false;
foreach (RibbonTab rbnTab in ribCntrl.Tabs)
{
if (rbnTab == myRibbonTab)
{
isShow = true;
break;
}
}
if (!isShow)
{
ribCntrl.Tabs.Add(myRibbonTab);
//优先展示此工具栏
myRibbonTab.IsActive = true;
}
}
}
[CommandMethod("DQStart")]
public void bjcjDQStart()
{
// 打开WinForm窗体
电气专业 nq = new 电气专业();
nq.TopMost = false;
Application.ShowModelessDialog(nq);
}
[CommandMethod("JZStart")]
public void bjcjJZStart()
{
// 打开WinForm窗体
建筑专业 nq = new 建筑专业();
nq.TopMost = false;
Application.ShowModelessDialog(nq);
}
//不带图标
private static RibbonButton NewRibbonBtn(string text, string cmd)
{
RibbonButton button = new RibbonButton();
button.Text = text;
button.ShowText = true;
button.CommandHandler = new AdskCommonHandler();
button.CommandParameter = cmd;
return button;
}
//带图标
private static RibbonButton NewRibbonPBtn(string text, string cmd, Bitmap Picture)
{
RibbonButton button = new RibbonButton
{
Text = text,
ShowText = true,
Image = ImageSourceForBitmap(Picture),//存放小图片16x16
LargeImage = ImageSourceForBitmap(Picture),//存放大图片32x32
ShowImage = true,
Size = RibbonItemSize.Large,//通过指定Size为Standard还是Large确定显示小图片还是大图片
Orientation = System.Windows.Controls.Orientation.Vertical,//指定文字、图片的排布方式,Horizontal:水平方向;Vertical垂直方向
CommandHandler = new AdskCommonHandler(),
CommandParameter = cmd
};
return button;
}
[DllImport("gdi32.dll", EntryPoint = "DeleteObject")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool DeleteObject([In] IntPtr hObject);
public static System.Windows.Media.ImageSource ImageSourceForBitmap(Bitmap bmp)
{
var handle = bmp.GetHbitmap();
try
{
return Imaging.CreateBitmapSourceFromHBitmap(handle, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
}
finally { DeleteObject(handle); }
}
}
}
3、执行
启动 AutoCAD,在命令行输入 NETLOAD 命令,选择生成的DLL文件。
输入loadButton命令调出菜单栏按钮。
如果不需要在菜单展示按钮,可直接执行工具栏命令loadRibbon,调出工具栏按钮。