在项目工程中可以看到SwAddin.cs文件。这个文件是插件的核心文件,包括插件的名称,注册表项,菜单,以及菜单的回调函数都在该文件中实现。

1.修改插件的名称和描述

Guid为插件生成后注册到注册表的项,由系统自动生成。

Description为插件的描述信息

Title为插件的名称。

修改完成,安装插件后会在注册表中看到如下信息

2.添加插件菜单

添加插件菜单项是在方法“AddCommandMgr()”中,示例代码如下:

  1. public void AddCommandMgr()
  2. {
  3. if (iBmp == null)
  4. iBmp = new BitmapHandler();
  5. Assembly thisAssembly;
  6. int cmdIndex0, cmdIndex1;
  7. string Title = "PDM", ToolTip = "SolidWorks_PDM";
  8. ICommandGroup cmdGroup;
  9.  
  10. int[] docTypes = new int[]{(int)swDocumentTypes_e.swDocASSEMBLY,
  11. (int)swDocumentTypes_e.swDocDRAWING,
  12. (int)swDocumentTypes_e.swDocPART};
  13.  
  14. thisAssembly = System.Reflection.Assembly.GetAssembly(this.GetType());
  15.  
  16. int cmdGroupErr = ;
  17. bool ignorePrevious = false;
  18.  
  19. object registryIDs;
  20. //get the ID information stored in the registry
  21. bool getDataResult = iCmdMgr.GetGroupDataFromRegistry(mainCmdGroupID, out registryIDs);
  22.  
  23. int[] knownIDs = new int[] { mainItemID1, mainItemID2 };
  24.  
  25. if (getDataResult)
  26. {
  27. if (!CompareIDs((int[])registryIDs, knownIDs)) //if the IDs don't match, reset the commandGroup
  28. {
  29. ignorePrevious = true;
  30. }
  31. }
  32.  
  33. cmdGroup = iCmdMgr.CreateCommandGroup2(mainCmdGroupID, Title, ToolTip, "", , ignorePrevious, ref cmdGroupErr);//添加主菜单 cmdGroup.LargeIconList = iBmp.CreateFileFromResourceBitmap("SolidWorks_PDM.ToolbarLarge.bmp", thisAssembly);
  34. cmdGroup.SmallIconList = iBmp.CreateFileFromResourceBitmap("SolidWorks_PDM.ToolbarSmall.bmp", thisAssembly);
  35. cmdGroup.LargeMainIcon = iBmp.CreateFileFromResourceBitmap("SolidWorks_PDM.MainIconLarge.bmp", thisAssembly);
  36. cmdGroup.SmallMainIcon = iBmp.CreateFileFromResourceBitmap("SolidWorks_PDM.MainIconSmall.bmp", thisAssembly);
  37.  
  38. int menuToolbarOption = (int)(swCommandItemType_e.swMenuItem | swCommandItemType_e.swToolbarItem);
  39. //cmdIndex0 = cmdGroup.AddCommandItem2("CreateCube", -1, "Create a cube", "Create cube", 0, "CreateCube", "", mainItemID1, menuToolbarOption);
  40. //cmdIndex1 = cmdGroup.AddCommandItem2("Show PMP", -1, "Display sample property manager", "Show PMP", 2, "ShowPMP", "EnablePMP", mainItemID2, menuToolbarOption);
  41.  
  42. cmdIndex0 = cmdGroup.AddCommandItem2("自定义用户属性", , "填写自定义用户属性", "填写自定义用户属性", , "WriteAttribute","", mainItemID1, menuToolbarOption);//添加主菜单下的子菜单
    cmdIndex1 = cmdGroup.AddCommandItem2("写入PDM数据库", , "写入PDM数据库", "写入PDM数据库", , "FillSQL", "", mainItemID2, menuToolbarOption);//添加主菜单下的子菜单
  43. cmdGroup.HasToolbar = true;
  44. cmdGroup.HasMenu = true;
  45. cmdGroup.Activate();
  46.  
  47. bool bResult;
  48.  
  49. #region
  50. //FlyoutGroup flyGroup = iCmdMgr.CreateFlyoutGroup(flyoutGroupID, "Dynamic Flyout", "Flyout Tooltip", "Flyout Hint",
  51. // cmdGroup.SmallMainIcon, cmdGroup.LargeMainIcon, cmdGroup.SmallIconList, cmdGroup.LargeIconList, "FlyoutCallback", "FlyoutEnable");
  52.  
  53. //flyGroup.AddCommandItem("FlyoutCommand 1", "test", 0, "FlyoutCommandItem1", "FlyoutEnableCommandItem1");
  54.  
  55. //flyGroup.FlyoutType = (int)swCommandFlyoutStyle_e.swCommandFlyoutStyle_Simple;
  56.  
  57. foreach (int type in docTypes)
  58. {
  59. CommandTab cmdTab;
  60.  
  61. cmdTab = iCmdMgr.GetCommandTab(type, Title);
  62.  
  63. if (cmdTab != null & !getDataResult | ignorePrevious)//if tab exists, but we have ignored the registry info (or changed command group ID), re-create the tab. Otherwise the ids won't matchup and the tab will be blank
  64. {
  65. bool res = iCmdMgr.RemoveCommandTab(cmdTab);
  66. cmdTab = null;
  67. }
  68.  
  69. //if cmdTab is null, must be first load (possibly after reset), add the commands to the tabs
  70. if (cmdTab == null)
  71. {
  72. cmdTab = iCmdMgr.AddCommandTab(type, Title);
  73.  
  74. CommandTabBox cmdBox = cmdTab.AddCommandTabBox();
  75.  
  76. int[] cmdIDs = new int[];
  77. int[] TextType = new int[];
  78.  
  79. cmdIDs[] = cmdGroup.get_CommandID(cmdIndex0);
  80.  
  81. TextType[] = (int)swCommandTabButtonTextDisplay_e.swCommandTabButton_TextHorizontal;
  82.  
  83. cmdIDs[] = cmdGroup.get_CommandID(cmdIndex1);
  84.  
  85. TextType[] = (int)swCommandTabButtonTextDisplay_e.swCommandTabButton_TextHorizontal;
  86.  
  87. cmdIDs[] = cmdGroup.ToolbarId;
  88.  
  89. TextType[] = (int)swCommandTabButtonTextDisplay_e.swCommandTabButton_TextHorizontal | (int)swCommandTabButtonFlyoutStyle_e.swCommandTabButton_ActionFlyout;
  90.  
  91. bResult = cmdBox.AddCommands(cmdIDs, TextType);
  92.  
  93. //CommandTabBox cmdBox1 = cmdTab.AddCommandTabBox();
  94. //cmdIDs = new int[1];
  95. //TextType = new int[1];
  96.  
  97. //cmdIDs[0] = flyGroup.CmdID;
  98. //TextType[0] = (int)swCommandTabButtonTextDisplay_e.swCommandTabButton_TextBelow | (int)swCommandTabButtonFlyoutStyle_e.swCommandTabButton_ActionFlyout;
  99.  
  100. //bResult = cmdBox1.AddCommands(cmdIDs, TextType);
  101.  
  102. //cmdTab.AddSeparator(cmdBox1, cmdIDs[0]);
  103.  
  104. }
  105.  
  106. }
  107. #endregion
  108. thisAssembly = null;
  109.  
  110. }

添加完成之后运行程序即可看到刚刚添加的菜单项

3.回调函数

创建菜单后,由于没有给菜单绑定任何事件,单击不会产生任何效果。于是第二部要做的就是给自定义菜单添加事件,即回调函数。以菜单“自定义用户属性”为例,在添加菜单时有一个参数会指定其回调函数的函数名,如图5.2所示,该处利用反射机制在单击该菜单时调用具有该函数名的函数。

添加相应的回调函数事件

  1. public void WriteAttribute()
  2. {
  3. //ITaskpaneView pTaskPanView;
  4. //pTaskPanView = iSwApp.CreateTaskpaneView2("", "自定义用户属性");
  5. Form1 TaskPanWinFormControl = new Form1();
  6. TaskPanWinFormControl.iSwApp = iSwApp;
  7. TaskPanWinFormControl.ShowDialog();
  8.  
  9. //pTaskPanView.DisplayWindowFromHandle(TaskPanWinFormControl.Handle.ToInt64());
  10. //TaskPanUserControl = (UserControl1)pTaskPanView.GetControl();
  11. //Debug.Print(TaskPanUserControl.Name);
  12. }

运行程序,单击“自定义属性”,即可看到如下图所示的效果

这样,一个最简单的插件就完成了,最后将插件打包即可在安装有SolidWorks的计算机上使用。

基于C#的SolidWorks插件开发(2)--创建插件的更多相关文章

  1. 基于C#的SolidWorks插件开发(1)--SolidWorks API接口介绍

    这是两年前毕业时写的一篇关于SolidWorks插件开发与公司PDM集成的毕业设计,最近闲来无事拿出来整理一下,大神们可以略过. 1.1   SolidWorks API接口 正确调用SolidWor ...

  2. Tridiv:基于 Web 的 CSS 编辑器,创建炫丽 3D 图形

    Tridiv 是一个基于 Web 的编辑器,使用 CSS 创建 3D 形状.它提供了一个传统的四个面板的操作界面,给出了从每个平面的视图,以及一个预览窗格中示出的最终的效果.使用 Tridiv 可以创 ...

  3. 【eclipse插件开发实战】 Eclipse插件开发5——时间插件Timer开发实例详解

    Eclipse插件开发5--时间插件Timer开发实例详解 这里做的TimeHelper插件设定为在菜单栏.工具栏提供快捷方式,需要在相应地方设置扩展点,最后弹出窗体显示时间. 在上一篇文章里创建好了 ...

  4. Vue 基于node npm & vue-cli & element UI创建vue单页应用

    基于node npm & vue-cli & element UI创建vue单页应用 开发环境   Win 10   node-v10.15.3-x64.msi 下载地址: https ...

  5. 【odoo14】第三章、创建插件

    现在我们已经有了开发环境并了解了如何管理实例及数据库,现在让我们来学习下如何创建插件模块. 本章内容如下: 创建和安装模块 完成manifest文件 组织模块文件结构 添加模型 添加菜单及视图 添加访 ...

  6. 创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表

    创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表 创建数据模型类(POCO类) 在Models文件夹下添 ...

  7. 基于jquery的bootstrap在线文本编辑器插件Summernote

    Summernote是一个基于jquery的bootstrap超级简单WYSIWYG在线编辑器.Summernote非常的轻量级,大小只有30KB,支持Safari,Chrome,Firefox.Op ...

  8. MixItUp:超炫!基于 CSS3 & jQuery 的过滤和排序插件

    MixItUp 是一款轻量,但功能强大的 jQuery 插件,提供了对分类和有序内容的美丽的动画过滤和排序功能.特别适合用于作品集网站,画廊,图片博客以及任何的分类或有序内容. 它是如何工作的? Mi ...

  9. 基于Bootstrap简单实用的tags标签插件

    http://www.htmleaf.com/jQuery/ jQuery之家 自由分享jQuery.html5和css3的插件库 基于Bootstrap简单实用的tags标签插件

随机推荐

  1. Servlet, Listener 、 Filter.

    Java Web的三大组件:Servlet, Listener . Filter. 使用Listener监听器:八大监听器: 第一组:用于监听Servlet三个域对象的创建与销毁 1. Servlet ...

  2. sysctl

    /proc/sys目录下存放着大多数内核参数,并且可以在系统运行时进行更改,不过重新启动机器就会失效./etc/sysctl.conf是一个允许改变正在运行中的Linux系统的接口,它包含一些TCP/ ...

  3. Windows环境下使用Apache+mod_wsgi部署webpy

    1.安装Python和Apache. 2.安装mod_wsgi后获得wsgi.so,并将wsgi.so放到Apache的modules文件夹下. 3.安装webpy. 4.打开httpd.conf(在 ...

  4. Floyd判圈算法(判断是否有环)

    介意转吗博主~~http://blog.csdn.net/thestoryofsnow/article/details/6822576,我知道不介意啦~ 问题:如何检测一个链表是否有环,如果有,那么如 ...

  5. (转)战斗bug技巧全攻略

    原文地址:http://www.cnblogs.com/manuosex/p/3736077.html 程序员不是有一幅这样的对联吗 上联:一个项目两部电脑三餐盒饭只为四千工资搞得五脏俱损六神无主仍然 ...

  6. oracle的sid

    SID是一个数据库的唯一标识符!是你在建立一个数据库时系统自动赋予的一个初始ID,虽说他和数据库名(DB_NAME)都是一个数据库的唯一标识符,但是在作用上就有不小区别.SID主要用于在一些DBA操作 ...

  7. 自己动手写一个简单的(IIS)小型服务器

    因为第一次在博客园发表随笔,不太会用,这个笔记是我之前在印象笔记中写好的,然后直接copy过来,有兴趣自己做一个IIS服务器的小伙伴们可以参照下面的流程做一次,也可以叫我要源代码,不过要做完,我觉得花 ...

  8. Sql三种分页方法

    --分页三种方法--第一种 ROW_NUMBER() OVER( ORDER BY OrgID) AS indexs 大于pagesize*pageindex,少于等于pagesize*(pagein ...

  9. sqlserver的增删改查

    select*from shuiguo  查询表 且小于等于7的范围) select distinct name from shuiguo--去除重复,只针对一列 select * from shui ...

  10. CocoaPods的使用详解

    CocoaPods是什么 当我们开发 iOS 项目时候,会经常使用到第三方类库,并且会使用很多.大家的做法基本上都是到 GitHub 上下载一个一个的类库,然后导入到工程中,并且引入各种的类库,做各种 ...