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

标题: SolidWorks的三维CAD文件快速发布模块的设计 [打印本页]

作者: dumrhyehid    时间: 2013-3-31 14:44
标题: SolidWorks的三维CAD文件快速发布模块的设计
三维建模软件已在CAD技术中广泛应用,但这些软件也并非十全十美,都存在着某些功能不全,导致用户使用效率低下的问题。设计人员采用三维建模软件设计产品,产生了大量装配体、零件、二维图纸等格式数据文件。然后再将需要的数据文件准确地组织好发给加工单位。但是通常存在的问题是,在设计目录中存在其他大量不需要的数据文件,或者需要的数据文件存在不同的目录中,并且三维数据文件存在相关性,装配体、零件、二维图纸相互关联,缺一不可。因此对于有上百、上千零件的数据文件,要准确地寻出需要的相关零件,具有相当大的工作量。而如果数据文件发送错误,就会导致延误加工周期的后果。

针对以上的问题,基于提高三维CAD技术在应用中的自动化,提高设计效率。我们基于三维建模软件,建立了一个三维CAD文件快速发布模块。该模块采用动态链接库的方式,作为独立的DLL(Dynamic link library)文件存在。程序运行时,将该动态链接库加载到其内部,如同使用自身的功能。

近年来,为提高设计速度及效率,王庆明等讨论了用动态链接库方式实现MFC开发应用程序的关键技术,杨洁等讨论了组件化程序设计的COM技术及其在中的应用,徐格宁研究了用VC++进行的变量化设计,使SolidWorks的技术通过二次开发得到广泛应用。

1 快速发布模块的方案设计

1.1 SolidWorks二次开发接口

由于软件的知识产权及技术机密等问题,对三维CAD软件SolidWorks进行二次开发,不可能通过增加或修改系统源程序来完成。因此,SolidWorks软件提供了支持二次开发的应用编程接口(API),用户通过该接口可以开发出新的功能模块,满足特定的需求。

SolidWorks是基于COM组件技术构造的,凡是支持COM编程的开发工具,如Visual C++、Visual Basic、Delphi等均可用于SolidWorks的二次开发。由于SolidWorks系统本身是用VC++编写的,所以VC++与SolidWorks有极好的连接性,可以实现对SolidWorks底层的开发而且代码的执行效率高。通过VC++编写基于COM的动态链接库DLL文件,可直接在SolidWorks的界面下添加菜单、工具条等。本设计将采用VC++语言来实现三维文件快速发布模块的设计,其基于动态链接库的二次开发运行模式原理图,如图1所示。



图1 DLL动态链接库二次开发运行模式原理图

1.2 维CAD文件快速发布模块的结构设计

三维CAD文件快速发布模块的设计就是为了解决在数据文件传输的过程中,能够将所要传输的数据文件准确地组织好发给加工单位,同时保证所产生的文件保持完整、准确,文件与文件之间的相关性保持完好,没有存在文件缺失的情况。因此在文件快速发布模块的设计中,设计一个可以加载到SolidWorks的DLL插件,该插件可以实现对数据文件的进行遍历,同时将遍历后的数据文件复制到指定的文件夹,从而完成数据文件的快速发布。

三维建模软件文件快速发布的操作流程如图2所示。



图2 三维CAD文件快速发布模块的结构图

作者: zdj0988    时间: 2013-3-31 14:58
2 快速发布模块的设计

    三维CAD文件快速发布模块包含4个组件:SolidWorks addin插件组件、用户操作界面组件、装配体遍历组件、数据文件发布组件。

    2.1 SolidWorks addin插件组件的实现

    对于SolidWorks addin插件组件的创建,基本方法是利用SolidWorks ATL Object Wizard制作DLL文件,通过编译,完成DLL文件在SolidWorks中的自动注册。同时在SolidWorks中增加一项菜单,此菜单有相应的下拉菜单,对应相应的功能,如图3所示。其基本过程如下:

    1)在VC++中,通过ATL COM AppWizard新建一个支持MFC的DLL工程。

    2)在新建的DLL工程名上右击,选择New ATL Object,在弹出的ATL Object Wizard对话框中选择SwAddln,生成一个SwAddln对象,同时自动生成一个名为Iswobj的接口,用于和SolidWorks通信。

    3)添加自定义方法。在Class View界面中,右击Iswobj类,选择Add Method命令,输入相应命令名,VC向导自动生成相应代码,用户添加实现的相关代码。

    4)在自定义的菜单项下增加相应的菜单命令。通过VC++开发环境中资源管理器的String Table,添加String资源。包括命令项显示的内容、命令项的相应函数(对应步骤3的命令名)、命令项显示的提示信息。

    5)菜单命令的函数实现。在swobj.cpp文件中的void Cswobj::AddMenus()函数中添加相应代码。此函数可以实现在无文档模式、零件文档模式、装配体文档模式、工程图文档模式下分别添加各自的菜单代码。

    6)编译并链接工程,VC++开发环境自动在注册表的HKEY LOCAL_MACHINESOFTWARESolidWorksAddlns下添加一键值,对应DLL工程对应的COM对象的唯一标志CLSID:在注册表的HKEY_CLASSES_ROOTCLSID下添加该工程的键值,在该键值下有5项:InprocServer32、ProgID、Programmable、TypeLib、VersionlndependentProgID。



    图3 三维CAD文件快速发布模块菜单

    2.2 用户操作界面组件的实现

    三维CAD文件快速发布模块的用户界面是通过在SolidWorks主界面中添加设计菜单按钮,并通过菜单按钮的调用来实现的。调用程序后,显示一个快速发布的对话框,如图4所示。

    在对话框中,主要功能有两个按钮,一个为“装配体遍历”,用于对当前的装配体进行遍历,显示其装配及子装配结构:一个为“快速发布”,用于对遍历的文件进行复制,将此装配体及所有下级装配体、零件、工程图复制到指定目录。在保存至文本框旁边有一“浏览”按钮,用于显示通过树状目录浏览得到用户所要复制的指定路径,也可以直接在文本框内输入指定路径。

    在对话框的头文件中,要添加SolidWorks的类型库:sldworks.tlb、swpublished.tlb、swconst.tlb。在对话框类中添加一个函数,用于得到SldWorks对象:void*dlg::getSW(ISldWorks*sw)。



    图4 快速发布对话框

作者: cdfq    时间: 2013-3-31 15:02
2.3 装配体遍历组件的实现

    装配体遍历组件是整个模块实现的关键技术。需要通过循环搜寻打开的SolidWorks装配体及其下级的所有子装配体和零件、工程图

    其设计的思路是:首先得到文档列表对象ENUMDOCUMENTS2,然后通过文档列表对象来遍历对象中的文件。从SldWorks对象对其子对象进行遍历,直到找到特定的对象——文档列表对象ENUMDOCUMENTS2,然后通过函数m_iSldWorks_dlg→EnumDocuments2对其进行操作,从而获得当前所有打开的文件列表。由于装配体及其至装配体、零件存在多个文件,需要一个循环操作while来进行操作。最后得到文件的完整路径名,并且显示每个文件的文件名,该项操作可以通过函数m_iModelDoc→GetPathName来完成。应用程序段:




    2.4 数据文件发布组件的实现

    通过装配体遍历,得到了此装配体下的所有子装配体及其零件名称,通过命令:CopyFile(LPCSTR) SourcePath,(LPCSTR) DisPath,cover),将此装配体下所含的装配体、零件及工程图均快速发布到用户指定的目录中。这样在三维CAD文件的传输中,既可以保证不发布不必要的文件,又保证了发布的文件的准确性,提高工作效率。应用程序段如下:



作者: 流浪孤星    时间: 2013-3-31 15:04
3 运行实例

    利用上述组件,我们开发了三维CAD文件快速发布模块。在SolidWorks中打开需要发布的装配体,在菜单项中选择:FastGenerate——遍历装配体,打开快速发布窗口,选择遍历装配体按钮,显示一个对话框,内部显示了遍历后的子装配体及零件的名称,如图5所示。通过在保存至指示的文本框内输入目录名,可以将此装配体的所有相关工程文档发送到指定目录。



    图5 模块运行实例

4 结束语

    本文利用SolidWorks提供的二次开发接口,在VC++编译环境下,开发了三维CAD文件的快速发布模块,并将其通过动态链接库技术集成到SolidWorks环境中。可以实现将需要外发加工的三维CAD文件快速地发布到指定目录,保证了三维CAD的装配体、零件、工程图的全相关性,大大提高了设计效率。其中设计思路对于Pro/E、NX等三维CAD文件的二次开发也同样具有指导意义。





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