演示如何创建 C# Add-ins :将菜单命令添加到库视图的上下文相关菜单的。
注意:由于 SOLIDWORKS PDM Professional 无法强制重新加载add-ins,因此必须重新启动所有客户端计算机以确保使用最新版本的add-ins。
- 启动VS。
- 新建项目,选择类库。
- 在“解决方案资源管理器”中右键单击项目名称 ,然后单击添加引用。
-
单击 COM 在 左侧面板,单击PDMWorks Enterprise 2019 Type Library,然后单击添加。
- 如果需要,引入相关的程序集。
- 设置Interop.EdmLib的嵌入互操作类型为False。
-
- 在“解决方案资源管理器”中右击项目名称,然后单击“属性”。
- “应用程序>程序集信息”。
- 取消勾选“使程序集 COM 可见(M)”。
- 修改Class1.cs。这里修改类名为MenuDemo。
- 添加和创建GUID。
- 修改代码
using System; using EdmLib;//添加 using System.Runtime.InteropServices;//添加 namespace Creating_Menu_Commands { [Guid("32369E8C-7E73-4E33-BA43-9CCDD485C5CE"), ComVisible(true)] public class MenuDemo { } }
- 实现 IEdmAddIn5::GetAddInInfo 和IEdmAddIn5::OnCmd EdmMenuFlags.EdmMenu_MustHaveSelection意味着 second command在用户选择了一个或多个文件或文件夹时生效。
using System; using EdmLib;//添加 using System.Runtime.InteropServices;//添加 namespace Creating_Menu_Commands { [Guid("32369E8C-7E73-4E33-BA43-9CCDD485C5CE"), ComVisible(true)] public class MenuDemo: IEdmAddIn5 { public void GetAddInInfo(ref EdmAddInInfo poInfo, IEdmVault5 poVault, IEdmCmdMgr5 poCmdMgr) { //指定要在Add-ins的“属性”对话框中显示的信息 poInfo.mbsAddInName = "Menu command sample"; poInfo.mbsCompany = "SOLIDWORKS Corporation"; poInfo.mbsDescription = "Adds menu command items"; poInfo.mlAddInVersion = 1; //指定 SOLIDWORKS PDM Professional 所需的最低版本 poInfo.mlRequiredVersionMajor = 5; poInfo.mlRequiredVersionMinor = 2; //Register menu commands; SOLIDWORKS PDM Professional passes command IDs, 1000 and 1001, to IEdmAddIn5::OnCmd to indicate which command the user selects //注册菜单命令;SOLIDWORKS PDM Professional 将命令 ID 1000 和 1001 传递给 IEdmAddIn5::OnCmd 以指示用户选择哪个命令 poCmdMgr.AddCmd(1000, "First command", (int)EdmMenuFlags.EdmMenu_Nothing, "This is the first command", "First command", 0, 99); poCmdMgr.AddCmd(1001, "Second command", (int)EdmMenuFlags.EdmMenu_MustHaveSelection, "This is the second command", "Second command", 1, 99); } public void OnCmd(ref EdmCmd poCmd, ref Array ppoData) { //Handle the menu command 处理菜单命令 { string CommandName = null; if (poCmd.mlCmdID == 1000) { CommandName = "The first command."; } else { CommandName = "The second command."; } //Retrieve the bounds of the array containing the selected files and folders 检索包含所选文件和文件夹的数组的边界 int index = 0; int last = 0; index = ppoData.GetLowerBound(0); //返回数组的指示维度的最小可用下标。 index = ppoData.GetLowerBound(0); //返回数组的指示维度的最大可用下标。 string StrID = null; //Create a message showing the names and IDs of all selected files and folders 创建显示所有选定文件和文件夹的名称和 ID 的消息 string message = null; message = "You have selected the following files and folders: " + "\r\n"; while (index <= last) { //GetValue:获取当前 Array 中指定元素的值。 //EdmCmdData.mlObjectID1:文件、文件夹、数据卡或控件的 ID,具体取决于命令的类型。 if (((EdmCmdData)ppoData.GetValue(index)).mlObjectID1 == 0) { message += "Folder: (ID="; StrID = ((EdmCmdData)ppoData.GetValue(index)).mlObjectID2.ToString();//文件、文件夹、数据卡或控件的 ID,具体取决于命令的类型。 message = message + StrID + ") "; } else { message += "File: (ID="; StrID = ((EdmCmdData)ppoData.GetValue(index)).mlObjectID1.ToString(); message = message + StrID + ") "; } message = message + ((EdmCmdData)ppoData.GetValue(index)).mbsStrData1 + "\r\n"; //mbsStrData1:变量、配置、标签或路径的名称,具体取决于命令的类型。 index++; } //Display the message EdmVault5 v = default(EdmVault5); v = (EdmVault5)poCmd.mpoVault; v.MsgBox(poCmd.mlParentWnd, message, EdmMBoxType.EdmMbt_OKOnly, CommandName); //向用户显示一个消息框 } } } }
- 单击“生成”>“生成解决方案” ,生成Add-in。
- 安装生成的Add-in。
- 打开PDM 管理工作。
- 登录。
- 在插件中添加调试插件。
-
在库视图中单击鼠标右键 ,第一个命令 出现在上下文相关 菜单。
- 右键库中的文件夹,出现第二个命令。
打包:https://download.csdn.net/download/hd51cc/87883096