SolidWorks机械工程师网——最大的SolidWorks学习平台

标题: SolidWorks二次开发的文章(转载) [打印本页]

作者: 315138978    时间: 2011-11-15 09:35
标题: SolidWorks二次开发的文章(转载)
  
我从事二次开发工作已经有一段时间,最近想把有关二次开发的经验与同道中人相互交流一下!  说起程序,我也接触不是很长时间,但自从接触以后,发现在如今国内的机械制造行业,有自主知识产权的软件确实不多,
  国内最大的CAD软件公司CAXA公司,前些年推出的CAXA图版就是完全自主产权的,做的很出色,非常适合中国国情,很多功能都严格遵照国标.后来,CAXA公司又推出了,实体设计软件,但其核心是购买国外Dassault公司,所以在自主三维软件在国内可以说还是一个空白,国外的软件做的确实不错,功能也非常强大,但是价格却是让国人难以接受的,只有少数大型企业能够买的起,但是买的安装点数也不是很多.比如:中国运载火箭第一,第二,第三,第五设计研究院,汽车行业的一汽,二汽,还有华为,海尔应用的都是Pro/E软件,Pro/E功能非常强大,尤其在模具方面,当然,在其他方面,比如曲面造型都有它本身的特色,因为PTC公司是最先提出参数全关联的概念,所以该软件在八十年代一经推出,便引起了业界的轰动,而且,它的核心也是自成一派的.所以,PTC公司发展到现在已经二十年,它的Pro/E软件已经非常成熟了.说起CAD软件,法国Dassault公司的Catia(Computer Aided Tri-Dimensional Interface Application )应当是首屈一指了,该软件在曲面方面的造诣是非常深的.法国 Dassault Aviation 是世界著名的航空航天企业,该公司,在70年代,Dassault只是想解决飞机曲面的相关设计问题,就成为了Catia的第一个用户,随后Catia才应运而生,如今,经过几十年的发展,Catia已经是功能强大的CAD/CAE/CAM 软件.后来,PTC公司提出参数化的概念,Dassault公司才将参数化引入了Catia软件,并于94年推出CatiaV5产品,可以说Pro/E比Catia晚20年,但却比Catia先进20年,其参数化这种理念,在如今看来,是很实用很成功的.
  现在,世界最流行的中档CAD软件莫过于SolidWorks了,其实SolidWorks公司的现任总裁原来任职于PTC公司,后来,自己独立组建了SolidWorks公司,上个世纪九十年代,一些CAD巨头沉溺于以往的成功,忽视了中端三维CAD的市场,这就使得SolidWorks获得了快速的增长。SolidWorks公司在全球有500家解决方案合作伙伴,包括50家完全数据集成和数据全相关的合作伙伴,200多家分销商,在全球超过60万用户。2003年,soliworks的收入是1.6亿美元,SolidWorks软件带来的收入是4亿美元包括合作伙伴的增值服务和解决方案。2007年,继SolidWorks2007之后又推出了 soliworks2008(第16个版本),这使得soliworks软件的功能更加强大。
  由于SolidWorks是完全在windows下开发出来的,所以与windows是无缝结合的,windows下的许多函数在SolidWorks中都能使用。我们对soliworks进行二次开发采用的是VC6.0和VS2005,通常用VC开发SolidWorks是生成动态链接库(DLL)文件,这样,便会以插件的形式,被soliworks调用,并且在soliworks中生成菜单。我们就像使用soliworks自己的模块一样使用该插件了。但是,不是仅有这一种方法,许多开发者应用VB,Delphi开发时,生成.exe文件来调用soliworks。但是,应用VC来生成.exe文件来调用SolidWorks却不是很多,因为VC支持OLE,支持COM,而SolidWorks API就提供了OLE和COM两种函数,这为我们开发soliworks提供了很大帮助。当然,VC入门很难,更何况,如果应用MFC,微软封装的更复杂,我们用起来就更摸不着头脑了,对于,学工科机械的人来说,刚从事制造业信息化的,学开发软件没有一年的苦读是不会入门的。所以,还要努力啊!
  VC6.0是微软98年推出的,很实用的一个C++编译器,操作起来也很简单,虽然推出的早,但是国内仍然有很多人在用,尽管其中的bug有很多。而VS2005是微软推出没几年的产品了,功能那不用说了,自然很强大了,其人性化的界面,操作的便利性都非常棒。
  如果想用VC6.0生成插件来开发SolidWorks的话,SolidWorks公司提供了一个SWizard.awx的向导程序,它能够生成 DLL框架,我们只需在该框架下开发即可,你只需把SWizard.awx拷贝到Xrogram FilesMicrosoft Visual StudioCommonMSDev98Template下就可以了。这样,打开VC程序,新建project的时候,在project选项卡目录中就能出现SolidWorks-Add-in AppWizard选项,只需选择它,新建工程名,选择保存目录,然后一直下一步便可。
  以上仅仅是vc6.0中创建DLL的步骤。如果你想应用VC6.0创建.exe文件来调用SolidWorks,那就不这么简单了,这需要OLE技术,比如,我们要在VC6.0下创建了单文档的EXE应用程序:
  选择MEC AppWizard(exe),然后输入文件名(Project name): SolidWorks,选择目录:D:,单击OK;
  选择single document;点击next,默认选择。然后再点击next,在最下面,将Automation选上(一定要选)。
  点击next;一直到最后,点击Finish。
  到此,我们生成了一个具有自动化功能的单文档应用程序。
  接下来,我们要加载soliworks类型库:选择VIEW--ClassWizard--Automation选项卡--点击Add Class按钮,
  选择From a type Library,然后我们寻找SolidWorks安装目录,找到SolidWorks文件夹,在该文件夹里找到sldworks.tlb文件,选则打开。这时出现Confirm Class(确定类)对话框,选择第一个:ISldWorks,然后,点击ok,
  再点击ok;这时,你会发现,在SourceFiles里多了sldworks.cpp文件,在HeaderFiles里多了sldworks.h文件,这便是我们加载的类型库。打开sldworks.h,会看到里面封装了很多slidworks的应用函数,我们先不说。加载完成之后,我们便开始编程了。我们要使生成的应用程序中的文件--新建命令来打开SolidWorks,所以选择View--ClassWizard选择MEssage Maps选项卡,在Class Name中选择CSolidWorksView类,在Object IDs选择ID_FILE_NEW.在message中选择Command,然后单击Add Function按钮,单击ok,在单击Edit Code;在CSolidWorksView::OnFileNew()
  中键入以下程序:
  ISldWorks m_pSldWorks;
  m_pSldWorks.CreateDispatch("SldWorks.Application");
  ASSERT(m_pSldWorks.m_lpDispatch);
  m_pSldWorks.SetVisible(TRUE);
  当然,我们还要包含sldwoks.h,即#include "sldworks.h";
  然后编译程序。
  单文档程序运行,选择文件--新建,接着,SolidWorks程序便启动起来了。
  m_pSldWorks.SetVisible(TRUE);这句的用途是使SolidWorks显式启动,当然m_pSldWorks.SetVisible(FALSE);便是隐藏调用了。
  以上仅仅是COM技术的一个小小的应用而已,以后还会经常接触的。
  接下来,我想说说,在VS2005种如何应用智能指针来调用SolidWorks;
  启动Visual Studio 2005;创建项目,选择MFC-MFC应用程序,下一步--选择单文档,一直下一步,直到高级功能界面,选择自动化。下一步--完成。这样生成了单文档框架。我们还是加载SolidWorks类型库。选择“项目”--“添加类”--“TypeLib中的MFC类”双击进入.
选择"文件"点击"位置"编辑框后面的按钮.再找到SolidWorks安装目录:SolidWorks;同样加载sldworks.tlb文件,在接口列表框中选择"ISldWorks"单击"添加"生成类CSldWorks。同样在在HeaderFiles里多了CSldWorks.h文件,而在Source Files并没有都添加任何文件,而且在CSldworks中包含的函数似乎也少了,这其实是VS2005将所有的函数进行封装隐藏起来,我们只需引用CSldWorks.h,就可以完全调用API函数。
  我们同样还是选择新建的时候调用SolidWorks。选择菜单资源中的“新建”,点击右键--“添加事件处理程序”在类型表中选择CSolidWorksView类,消息类型选择Command,点击“添加编辑”按钮。输入以下代码:
  //Initialize COM
  CoInitialize(NULL);
  //Use ATL smart pointers
  CComPtr swApp;
  //Create an instance of SolidWorks
  HRESULT hres = swApp.CoCreateInstance(__uuidof(SldWorks), NULL, CLSCTX_LOCAL_SERVER);
  VARIANT_BOOL visibility;
  swApp->get_Visible(&visibility);
  swApp->put_Visible( TRUE);
  别忘了加入头文件,#include "CSldWorks.h"
  编译运行,在程序中选择“文件”--“新建”,这样就启动了SolidWorks。
以上,是应用VC6.0和VS2005,运用OLE和COM技术生成单文档程序,并实现了soliworks的启动,这是开发的第一步,因为我们只要有了SolidWorks的这个对象,才能进一步的控制它的模型草图工程图等等。但是,单文档程序与soliworks之间的通讯会有一定的瓶颈,传输速度会有些延迟,所以开发者通常应用VC开发时会选用插件的形式,这样会提高程序的运行速度。
作者: litaohong    时间: 2011-11-15 09:36
分析得很到位
作者: owenlee    时间: 2011-11-15 09:38
我虽然不全懂,但感觉说的很好
作者: 峰哥仔    时间: 2011-11-15 09:38
没看完不好意思
作者: longzhimeng    时间: 2011-11-15 09:43
楼主大神,顶一个,我现在正在学VC++,自己想给SolidWorks做个简单的2次开发,希望哪天有什么问题的可以向您请教!
作者: yaochengzhi    时间: 2011-11-15 09:43
我一个高中的毕业生,还是文科的,自学SolidWorks也想学soildworks 的二次开发,自己都觉的有点搞笑,不知道上楼是什么学历
作者: 浙江越隆    时间: 2011-11-15 09:48
楼上的:学历不限的,不过最好要了解机械设计和软件开发基础。其它的都可以慢慢培养。
作者: zrbzrb    时间: 2011-11-15 09:49
楼主大侠,我是学计算机的,能看懂你所讲的,但是对sw操作不是很熟,设计部门要我来帮忙搞个二次开发,不知道怎么入手,还望指点下,先谢谢!
作者: rgtraautni    时间: 2011-11-15 09:53
太有用了,收了!!!!感谢
作者: deets119    时间: 2011-11-15 09:54
再来看看
作者: tracy.zhang    时间: 2011-11-15 09:54
楼主太高,我实在看不懂.
作者: zwzsy    时间: 2011-11-15 09:55
分析的好透彻啊!我是学机械的,对计算机有一点了解,但二次开发还是刚入门,以后有问题还得麻烦楼主了。
作者: mjqoqvrikb    时间: 2011-11-15 09:55

作者: 与世隔绝    时间: 2011-11-15 09:58
很不错
作者: sunweidong    时间: 2011-11-15 09:59
学习~~~~~~~~~~~~~
作者: yerigui    时间: 2011-11-15 10:03
看的半懂 !
作者: wvcdmdnoxb    时间: 2011-11-15 10:03
不懂!路过!
作者: qbufycepjd    时间: 2011-11-15 10:03
要是有VB教程就好了




欢迎光临 SolidWorks机械工程师网——最大的SolidWorks学习平台 (https://www.swbbsc.com/) Powered by Discuz! X3.2