英语原文共 18 页,剩余内容已隐藏,支付完成后下载完整资料
从零开始创建一个SolidWorks插件
想把自己的编写SolidWorks宏等工具的技能提升
到更高的层次,却并不知道何从下手吗? 为什么不
创建一个具有强大灵活性并且完美地集成在
SolidWorks之中的SolidWorks插件程序呢?
在我竭尽所能完成两本SolidWorks的书后,我一
直想做的事就是将如何用.Net技术创建SolidWorks
的Taskpane仔细地讲解一遍, 但是我不想把这部分
内容塞进一本书的最后二十页;我想深入透彻地讲
解它. 基于此我决定在接下的几个月我会在我的网
站开设一个新的教程来讲解。
闲话少叙,让我们直奔主题. 这个第一篇教程会教会你如何创建一个在solidworks启动时就启动和注册的.Net Taskpane插件, 该插件在插件栏中对所有人都可见.在本篇教程中除了让该插件框架成功运行起来外我不会提及其他的SolidWorksAPI的内容 (不要再用原来的Visual Studio自带的差劲模板了,这才是正确的做法!).
首先打开你的Visual Studio,无论你现在正在使用什么版本,然后创建一个 C# (或者 VB.Net 如果你更喜欢这个) 类库.给它命个名 然后点击确定按钮,你就已经准备好开始了。.
引用
对于一个Taskpane 插件的唯一要求就是继承自位于SolidWorks library 的ISwAddin接口,我们同样也需要编写COM注册的代码,这样当我们编译我们的Visual Studio解决方案时,他会为我们在系统注册表中SolidWorks文件夹下为我们增添条目,这样我们所编写的插件就会在SolidWorks加载时启动并且出现在插件菜单上。
在我们编写一些有意义的代码之前我们必须添加SolidWorks 引用. 从我们右手边的解决方案浏览器中, 在“项目”上右击(从上往下数第二个) 然后选择“添加引用”... 在浏览面板找到SolidWorks安装的文件夹 (一般会是C:\Program Files\SolidWorks 20XX\SolidWorks), 然后选择下面的文件:
'solidworkstools.dll' 'SolidWorks.Interop.sldworks.dll' 'SolidWorks.Interop.swcommands.dll'
'SolidWorks.Interop.swconst.dll' 'SolidWorks.Interop.swpublished.dll'
点击确定,然后把它们添加到解决方案中待用。
ISwAddin 接口
默认的情况下 Visual Studio会给你的项目创建一个叫 Class1 的类. 从解决方案浏览器中重命名给它一个更加合适的名字比如 “SWIntegration”。 这样应该会自动地给代码中的类重命名。
在这个类中我们需要引用我们刚刚添加的 SolidWorks类库, 这样他才知道在哪儿去寻找代码中有关SolidWorks的东西。注意到代码上面那些 using System; (or Imports System for those in VB)的东西了吗? 这些就是名称空间引用。为把SolidWorks 名称空间加入,添加下面的内容:
using
using
using
using
using
SolidWorks.Interop.sldworks; SolidWorks.Interop.swcommands; SolidWorks.Interop.swconst; SolidWorks.Interop.swpublished; SolidWorksTools;
这样就会让我们能够使用到我们需要的SolidWorks条目了. 这个类会是我们程序的主类,它会处理插件集成到 SolidWorks中的事情——注册插件到注册表中,连接到SolidWorks, 创建我们的 Taskpane。为了达到这个目的我们需要在我们的类中实现 ISwAddin接口.。在 C# 实现这个需要在类名后面添加一个冒号, 在 VB 之中是在类名下面添加一条直线然后输入 Implements。
当你在冒号后面输入完 ISwAddin后 你会发现类名下面出现了小的蓝色的线。把你的鼠标悬浮在这上面 然后点击出现的下拉式选项按钮选择实现接口#39;ISwAddin#39; 这样就会添加该接口所包含的类成员使之有意义。
你会注意到添加了两个叫做ConnectToSW和DisconnectFromSW
的新函数. 他们会在SolidWorks试图添加或者移除我们插件时
被调用,然后我们想要什么我们就可以添加相应的代码。
通过 Disconnect 函数我们干净地关闭和处置我们的
程序, 但是目前我们没有要处置的程序, 所以让我们仅仅创建
一个叫做UITeardown的空白程序,然后在DisconnectFromSW
中调用它,然后returning true;
在ConnectToSW函数中, 我们想把 SolidWorks实列 和 cookie ID 存储到变量之中,因为我们之后还会用到它们,然后创建一个名称为Taskpane 的类,在类中创建两个变量的代码如下:
public SldWorks mSWApplication;
private int mSWCookie;
创建一个叫做UISetup的空白函数 ,之后我们会把我们初始化UI的代码放在里面.
在 ConnectToSW 函数中我们需要定义变量, 设置SolidWorks想发送给我们的回调参数, 调用我们目前的 空白UISetup 函数。
mSWApplication = (SldWorks)ThisSW;
mSWCookie = Cookie;
// Set-up add-in call back info
bool result = mSWApplication.SetAddinCallbackInfo(0, this, Cookie);
this.UISetup();
return true;
这就是目前我们得到的代码,Connect and Disconnect函数的功能都已经定义好了
using
using
using
using
using
using
using
using
using
System;
System.Collections.Generic; System.Linq;
System.Text;
SolidWorks.Interop.sldworks; SolidWorks.Interop.swcommands; SolidWorks.Interop.swconst; SolidWorks.Interop.swpublished; SolidWorksTools;
namespace AngelSix_SwAddin
{
public class SWIntegration : ISwAddin
{
public SldWorks mSWApplication ;
private int mSWCookie;
public bool ConnectToSW(object ThisSW, int Cookie)
{
mSWApplication = (SldWorks)ThisSW;
mSWCookie = Cookie;
// Set-up add-in call back info
bool result = mSWApplication.SetAddinCallbackInfo(0, this, Cookie); this.UISetup();
return true;
}
public bool DisconnectFromSW()
{
this.UITeardown();
return true;
}
private void UISetup()
{
}
private void UITeardown()
{
}
}
}
就是这样!
现在我们有一个 ISwAddin接口的子类并且能操作 SolidWorks。在我们添加Taskpane之前 让我们搞定麻烦的 COM 注册. 尽管你可以跳过这个部分然后手动地添加注册表条目或者从 SolidWorks的 文件-gt;打开 菜单加载插件,但是就让它从一开始就已经在代码中做好。.
COM 注册
在这儿我不会在技术上的问题深挖过多 ,因为这不是那种你需要通彻理解的代码. 我能保证一旦你的插件成功注册并且在COM对SolidWorks可见,你就再也不需要碰这部分代码了。所以...从添加一个新的using语句开始,把System.Runtime.InteropServices添加进来,然后把下面的代码添加进去。
[ComRegisterFunction()]
private static void ComRegister(Type t)
{
string keyPath = String.Format(@'SOFTWARE\SolidWorks\AddIns\{0:b}', t.GUID);
using (Microsoft.Win32.RegistryKey rk = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(keyPath))
{
rk.SetValue(null, 1); // Load at startup
rk.SetValue('Title', 'My SwAddin'); // Title
rk.SetValue('Description', 'All your pixels are belong to us'); // Description
}
}
[ComUnregisterFunction()]
private static void ComUnregister(Type t)
{
string keyPath = String.Format(@'SOFTWARE\SolidWorks\AddIns\{0:b}', t.GUID);
Microsoft.Win32.Registry.LocalMachine.DeleteSubKeyTree(keyPath);
}
这部分代码很短也容易理解,从类名前的[]讲起(在VB中是lt;gt; )。位于方括号之中并且放在变量、函数和类之前的任何东西,叫做Attribute。这个 ComRegisterFunction和ComUnregisterFunction attributes 告诉 COM 当我们的.dll文件想注册在COM之中时该Attribute修饰的函数应该被调用。我们所做的就是根据我们的插件在注册表的正确位置添加三个条目,当SolidWorks启动时它会在这个地方查找来决定什么插件应该加载到它的应用中, 当我们想从把插件从COM中删除时我们只需要删除这些条目就可以了。
在COM注册时输入的变量是来自操作系统的我们程序集实例的一个唯一的标识符,该程序集操作系统已经编译过了并且对COM对象可见。通过添加这个IDE SolidWorks会知道怎么去找到并加载它。
虽然我们能够手动地使用 regasm工具把我们的程序集注册到COM,但是既然我们正在使用Visual Studio 这个工具设计我们的插件,我们也会想让Visual Studio替我们处理这件事情。 我会在我之后的教程讲解如何在客户的计算机上安装我们所编写的程序和对其进行COM注册 (或者你也可以买我的书)。为了让Visual Studio对我们的程序进行COM注册,并让它在我们每次编译程序后保持COM可见,我们必须要设置两个选项。第一个是 在解决方案管理器中右击项目然后选择属性、然后点击程序集信息按钮、然后在assembly COM-Visible 选项上打钩。
第二是去“编译”检查“注册到COM”中的选项.。以上就是将你的程序注册到COM所需要进行的设置。
可以通过编译你的程序然后去注册表查看(开始-gt;运行... 'regedit')来判断注册是否成功。在Local Machine\Software\SolidWorks\Addins 的目录下来寻找你的插件条目
如果你现在打开SolidWorks你应该已经能够看见你的插件了,但是我们在程序中还没有实现任何有用的功能,当然这就是我们之后需要做的事情。
创建 Taskpane
为了在
全文共21284字,剩余内容已隐藏,支付完成后下载完整资料
资料编号:[369],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。