Solidwoks PDM Add-ins (C#) 创建菜单命令

news2024/11/27 11:23:17

演示如何创建 C# Add-ins :将菜单命令添加到库视图的上下文相关菜单的。

注意:由于 SOLIDWORKS PDM Professional 无法强制重新加载add-ins,因此必须重新启动所有客户端计算机以确保使用最新版本的add-ins。

  1. 启动VS。
  2. 新建项目,选择类库。
  3. 在“解决方案资源管理器”中右键单击项目名称 ,然后单击添加引用。

      

    1. 单击 COM 在 左侧面板,单击PDMWorks Enterprise 2019 Type Library,然后单击添加

    2. 如果需要,引入相关的程序集。
    3. 设置Interop.EdmLib的嵌入互操作类型为False。
  4. 在“解决方案资源管理器”中右击项目名称,然后单击“属性”。

    1. “应用程序>程序集信息”。
    2. 取消勾选“使程序集 COM 可见(M)”。
  5. 修改Class1.cs。这里修改类名为MenuDemo。

    1. 添加和创建GUID。
    2. 修改代码
      using System;
      using EdmLib;//添加
      using System.Runtime.InteropServices;//添加
      
      namespace Creating_Menu_Commands
      {
          [Guid("32369E8C-7E73-4E33-BA43-9CCDD485C5CE"), ComVisible(true)]
          public class MenuDemo
          {
          }
      }
  6. 实现 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);   //向用户显示一个消息框
                }
            }
        }
    }

  7. 单击“生成”>“生成解决方案” ,生成Add-in。
  8. 安装生成的Add-in。
    1. 打开PDM 管理工作。
    2. 登录。
    3. 在插件中添加调试插件。

  9. 在库视图中单击鼠标右键 ,第一个命令 出现在上下文相关 菜单。

  10. 右键库中的文件夹,出现第二个命令。

打包:https://download.csdn.net/download/hd51cc/87883096

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/625048.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构——队列

数据结构——队列 文章目录 数据结构——队列前言队列基本概念队列的基本操作队列的顺序存储结构创建顺序队列代码入队操作代码出队操作代码顺序队列的关键语句 队列的链式存储结构链式队列初始化链式队列判断空链式队列的入队操作链式队列的出队操作 循环队列循环队列基本思想…

「Tech初见」Linux驱动之chrdev

目录 免责声明I. MotivationII. SolutionS1 - 主次设备号S2 - 设备驱动程序S3 - 字符设备驱动程序 III. Result 免责声明 「Tech初见」系列的文章&#xff0c;是本人第一次接触的话题 对所谓真理的理解暂时可能还不到位&#xff0c;避免不了会出现令人嗤鼻的谬论 所以&#…

Oracle中改变表的Owner和tablespace

初用Oracle&#xff0c;很多的不熟悉&#xff0c;建完库&#xff0c;没有建用户&#xff0c;也没创建表空间&#xff0c;就直接system用户建表添加数据&#xff0c;几个月过去&#xff0c;表建了近百个&#xff0c;数据添加了几万条&#xff0c;才越来越觉得这种方式缺点太多&a…

docker对cpu资源做限制

系列文章目录 文章目录 系列文章目录一、cgroup1.groups四大功能2.CPU 资源控制 二、1.限制可用的 swap 大小&#xff0c; --memory-swap2.对磁盘IO配额控制&#xff08;blkio&#xff09;的限制 总结 一、cgroup 1.groups四大功能 资源限制&#xff1a;可以对任务使用的资源…

华为OD机试真题 JavaScript 实现【相对开音节】【2022Q4 100分】,附详细解题思路

一、题目描述 相对开音节构成的结构为辅音元音&#xff08;aeiou&#xff09;辅音(r除外)e&#xff0c;常见的单词有life,time,woke,coke,joke,note,nose,communicate&#xff0c;use&#xff0c;gate&#xff0c;same&#xff0c;late等。 给定一个字符串&#xff0c;以空格…

递归算法在编程中的重要应用

递归算法在编程中的重要应用 引言一、引言1.1、什么是递归算法&#xff1f;1.2、递归算法的特点和优缺点 二、树和图的遍历2.1、深度优先搜索&#xff08;DFS&#xff09;和广度优先搜索&#xff08;BFS&#xff09;2.2、二叉树遍历、树的深度、节点个数等问题2.2.1、二叉树遍历…

关于对【oracle索引】的理解与简述

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/131094864 出自【进步*于辰的博客】 无论使用的是oracle、mysql&#xff0c;亦或者其他数据库&a…

如何吃透一个Java项目?

现在Austin的文档我觉得还是比较全的&#xff0c;但到了看代码的时候&#xff0c;可能有的同学就不知道应该怎么看&#xff0c;有想知道模块之间的调用链路&#xff0c;有想一点一点把细节给全看了。这时候就很可能在项目里犯迷糊了&#xff0c;绕不出不来了。 Java开源项目消息…

MySQL的下载安装以及环境配置---图文教程

目录 一.下载 二.安装 三.设置环境变量 四.MySQL数据库的使用及注意事项 SQL语句注意事项 一.下载 1.打开 MySQL 数据库的网站。 2.往下滑 3.进入新的页面之后&#xff0c;点击 MySQL Installer for Windows 4.进入新的页面时&#xff0c;就可以下载MySQL数据库了&#x…

数据结构05:树的定义与双亲、孩子表示法[更新中]

参考用书&#xff1a;王道考研《2024年 数据结构考研复习指导》 参考用书配套视频&#xff1a;5.1.1 树的定义和基本术语_哔哩哔哩_bilibili 特别感谢&#xff1a; Chat GPT老师[部分名词解释、修改BUG]、BING老师[封面图]~ 备注&#xff1a;博文目前是未完成的状态&#xff…

Web安全:拿到 Web 服务器 最高权限.(vulntarget 靶场 A)

Web安全&#xff1a;拿到 Web 服务器 最高权限. Web 服务器一般指网站服务器&#xff0c;是指驻留于因特网上某种类型计算机的程序&#xff0c;可以处理浏览器等Web客户端的请求并返回相应响应&#xff0c;也可以放置网站文件&#xff0c;让全世界浏览&#xff1b;可以放置数据…

43 最佳实践-性能最佳实践-IOThread配置

文章目录 43 最佳实践-性能最佳实践-IOThread配置43.1 概述43.2 配置说明 43 最佳实践-性能最佳实践-IOThread配置 43.1 概述 KVM平台上&#xff0c;对虚拟磁盘的读写在后端默认由QEMU主线程负责处理。这样会造成如下问题&#xff1a; 虚拟机的I/O请求都由一个QEMU主线程进行…

基于springboot的数码论坛系统设计(Java、MySQL、B/S)

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;数码论坛 获取源码源文件论文报告PPT 网络的广泛应用给生活带来了十分的便利。所以把数码论坛与现在网络相结合&#xff0c;利用java技术建设数码论坛系统&#xff0c;实现数码论坛的信息化。则对于进一步提高数码论坛发展…

Linux 下pause函数是如何实现的?

当你在程序中调用 pause() 函数时&#xff0c;它会使得你的程序停止执行&#xff0c;直到有一个信号被捕获。这是通过系统调用实现的。系统调用会使得程序从用户模式切换到内核模式。 这里是 pause() 函数的基本工作原理&#xff1a; 当你的程序调用 pause() 函数时&#xff…

python基础知识(十):类

目录 1. 类和方法的概念2. 类的定义3. 类的继承4. 重写父类的方法 1. 类和方法的概念 类&#xff1a;用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。举个例子&#xff0c;狗类就是狗的集合&#xff0c;每条狗都是狗…

kali学习笔记(二)

一、关闭自动锁屏 关闭自动锁屏对于测试人员来说&#xff0c;可以按照自己的习惯来设置&#xff0c;不然kali会过十分钟就锁屏&#xff0c;有的时候会比较不方便。 1、使用root账号登录&#xff0c;在display设置选项中做如下设置。 2、把休眠选项关掉。 二、创建快照 关机创…

透视Linux内核,BPF 深度分析与案例讲解

本次主要对BPF的部分原理、应用案例上进行一次分析记录。 BPF介绍 当内核触发事件时&#xff0c;BPF虚拟机能够运行相应的BPF程序指令&#xff0c;但是并不是意味着BPF程序能访问内核触发的所有事件。将BPF目标文件加载到BPF虚拟机时&#xff0c;需要确定特定的程序类型&…

SpringBoot中的定时任务@Scheduled的使用

1.Scheduled注解介绍 在spring boot的项目中需要使用到定时任务的时候&#xff0c;可以使用Scheduled注解&#xff0c;这只是在一个JVM进程中很适用&#xff0c;如果涉及到服务器是集群的情况下&#xff0c;建议使用任务调度平台。这样任务调度平台会在多台服务器中选择一台进…

【linux】在Ubuntu下部署nginx——nginx的安装与卸载

介绍 这里是小编成长之路的历程&#xff0c;也是小编的学习之路。希望和各位大佬们一起成长&#xff01; 以下为小编最喜欢的两句话&#xff1a; 要有最朴素的生活和最遥远的梦想&#xff0c;即使明天天寒地冻&#xff0c;山高水远&#xff0c;路远马亡。 一个人为什么要努力&a…

Think PHP6+Swagger3

swagger是一个解决接口规范化、标准化、文档化的一个组件&#xff0c;既可以直接自动生成resutful接口文档又能进行功能测试的一个web服务。本文是think PHP6结合swagger3的一个记录过程。 composer安装ThinkPHP 一般安装最新稳定版本&#xff0c;不一定是最新版本 composer…