在Solidworks开发新的菜单或命令选项卡,主要使用ICommandManager的属性和相关成员函数。
在我们创建的ISwAddin自定类中创建一个成员函数CreateCommandTab(),此函数用来在SW中增加新的命令或菜单。
ConnectToSW()的函数代码如下:
public bool ConnectToSW(object ThisSW, int Cookie)
{
_swApp = (ISldWorks)ThisSW;
_addinCookie = Cookie;
_swApp.SetAddinCallbackInfo(0, this, _addinCookie);
CreateCommandTab();
return true;
}
在CreateCommandTab()函数中用成员函数CreateCommandGroup2()创建一个ICommandGroup命令组对象。
用ICommandGroup成员函数AddCommandItem2()向命令组中添加添加命令,主要代码如下:
ICommandGroup cmdGroup = cmdMgr.CreateCommandGroup2(groupId, "蜗牛插件", "蜗牛插件工具集", "ICommandGroup演示", -1, true, ref cmdGroupErr);
var cmdIndexes = new List<int>();
int menuToolbarOption = (int)(swCommandItemType_e.swMenuItem | swCommandItemType_e.swToolbarItem);
int idx1 = cmdGroup.AddCommandItem2("Cmd1",-1, "Export Data to STP", "To STP",0, "OnCommand1", "",1, menuToolbarOption);
cmdIndexes.Add(idx1);
添加命令后要对命令显示进行设置和激活:
//设置并激活命令组
cmdGroup.HasToolbar = true;
cmdGroup.HasMenu = true;
cmdGroup.Activate();
激活之后菜单和动作条应该有相关命令了,但是现在主流UI是用选项卡。
创建选项卡,要用到2个对象:ICommandTab,ICommandTabBox以及成员函数AddCommands()
// 创建新 Tab
ICommandTab newTab = cmdMgr.AddCommandTab(docTypes[0], "蜗牛插件");
// 创建 TabBox
ICommandTabBox cmdBox = newTab.AddCommandTabBox();
// 准备命令 ID 数组
int[] commandIds = new int[cmdIndexes.Count];
int[] textTypes = new int[cmdIndexes.Count];
for (int i = 0; i < cmdIndexes.Count; i++)
{
commandIds[i] = cmdGroup.get_CommandID(cmdIndexes[i]);
textTypes[i] = (int)swCommandTabButtonTextDisplay_e.swCommandTabButton_TextBelow;
}
// 添加命令(关键步骤)
bool addResult = cmdBox.AddCommands(commandIds, textTypes);
// 再次激活命令组(确保生效)
cmdGroup.Activate();
AddCommandItem2参数解释
System.int AddCommandItem2(
System.string Name, //要添加到命令组(CommandGroup)的项目名称
System.int Position, //该项目在命令组内的位置,指定 `-1` 则添加至命令组末尾。
System.string HintString, //鼠标悬停在项目上时,SOLIDWORKS 状态栏显示的文本
System.string ToolTip, //鼠标悬停在项目上时弹出的提示文本(API help 有误应为命令在Tab上面显示的名称)
System.int ImageListIndex, //父命令组中该项目所用图标的索引号
System.string CallbackFunction, //选中该项目时调用的函数
System.string EnableMethod, //可选函数,用于控制项目的启用状态;
System.int UserID, //用户自定义命令 ID;不使用则填 0
System.int MenuTBOption //菜单 / 工具栏选项,用来指定命令项的类型(按钮、分隔线、弹出菜单等,对应枚举 `swCommandItemType_e`)
)