您的位置:网站首页 > Solidworks

基于SW的三维CAD系统二次开发方法

时间:2008-07-21 18:51:57 来源:
摘要:以SolidWorks2001为开发平台,结合VisualC++6.0和VisualBasic6.0这2种高级程序开发语言,提出了一种三维CAD二次开发方法.该方法避开了开发中的难点,减少了工作量,具有一定的参考价值

    关键词:SolidWorks;CAD;二次开发

  CAD的应用目的是提高设计质量,传播和保存设计经验,提高设计效率,降低设计成本,提高设计管理水平等,目前国际和国内知名的CAD商品软件主要有Pro/Engineer,UGⅡ,I-Deas,SolidWorks,Au toCAD以及华正CAXA、高华CAD系统等.这些商品化的通用设计平台基本上覆盖了整个制造行业,但专业针对性差,不能满足各种各样具体领域的设计需求,在工程设计中难以达到CAD真正的应用目的.因此CAD的二次开发成为CAD技术推广应用过程中面临的主要问题之一.

    CAD的二次开发是使商品化、通用化的CAD系统用户化、本土化的过程[1].商品化CAD系统一般都提供二次开发工具、开发语言等.但怎样才能达到使用方便、记忆量少、灵活的提示信息、良好的交互方式、良好的出错处理,对选择合理的二次开发方法是至关重要的.

    1 二次开发的软硬件环境

    1.1 硬件环境

    微型计算机(微机)和工作站是应用最广泛的2种硬件平台,虽然工作站具有速度快、工作效率高、支持分布式计算和多任务进程等优点,但其操作复杂、价格昂贵.随着CPU速度的不断提高,图形处理能力的不断增强,微机平台已经能够满足CAD系统对硬件的要求[2].且由于其价格相对较低,及出现的一批基于微机的三维CAD软件,如Pro/Engineer,I-Deas,SolidWorks等,使微机得到了迅速的普及.故选择普通微机作为二次开发的硬件平台.

    1.2 软件环境

    1.Windows98,Windows2000或WindowsXP操作系统.
    2.SolidWorks2001或更高版本的CAD软件系统.SolidWorks是基于Windows的CAD/CAE/CAM/PDM桌面集成系统,其核心技术是在Windows环境下开发而成,具有强大的实体建模功能和用户熟悉的Windows图形界面,开放性好,提供的应用编程接口API是基于OLEAutomation的编程接口,包含了大量的功能函数,可以被VisualBasic,VBA(Excel,Access,etc.),C,VisualC++,SolidWorksmacro或任何支持MicrosoftOLE(ObjectLinkingandEmbedding)技术的编程语言调用[1].
    3.VisualC++6.0和VisualBasic6.0高级编程语言平台.
    4.SolidWorks-API-SDK.
SolidWorks-API-SDK包含SolidWorksAPI例子、一个用于在VisualC++编程平台上建立Solid Works插件(Add-In-DLL)的动态链接库模板和ATL工程模板.

    2 思路与实现方法

    2.1 思路

    SolidWorks提供了多种二次开发方法,每种方法都各有所长,如果能将他们的优点集中起来,必将达到良好的效果.故考虑用VisualC++开发SolidWorks插件和菜单,用VisualBasic开发建模、装配等驱动程序和人机交互界面,之间的逻辑关系如图1所示.

    2.2 实现方法

    2.2.1 插件

    利用SolidWorks-API-SDK的DLL工程模板,开发SolidWorks的插件.具体方法如下:

    1.启动MicrosoftVisualC++6.0,在文件下拉菜单选择“新建工程”,选取SolidWorksAdd-InApp Wizard,输入工程名(如MyPro)及位置(如e:mypro),点击“下一步”;#p#分页标题#e#

    2.确定SolidWorks的安装路径,选取其他相应选项,点击“下一步”;

    3.输入插件名称以及描述,选取其他相应选项,点击“完成”;

    4.在工作区选择MyProresourcesToolbar,修改工具条大小图标;在文件MyPro.h和MyPro.cpp的Toolbarcallbacks部分添加或删除工具条执行函数;#p#分页标题#e#

    5.在文件ExampleApp.cpp的函数voidCMyproApp::docCreateMenu(longDocumentType)中修改相应的菜单和子菜单命令,例如把
    //addmenu
    hres=pFrame->AddMenu(auT(“MyPro&App”),swMenuPosition,&bres);
    //addmenuitem
    修改为
    //addmenu
     hres=pFrame->AddMenu(auT(“齿轮设计(&G)”),swMenuPosition,&bres);
    //addmenuitem
    hres=pFrame->AddMenuItem(auT(“齿轮设计(&G)”),auT(“开始运行程序(&B)...”),swLastPo sition,auT(“mypro@MenuItemCBGuanli,齿轮设计程序运行”),&bres).

    上面程序中,addmenu项为主菜单,即“齿轮设计(&G)”;addmenuitem项为子菜单,即“开始运行程序(&B)...”;“齿轮设计程序运行”是提示信息.

    6.在文件MyPro.cpp的documentcallbacks部分修改菜单命令的执行函数;例如若建模等驱动程序为“D:myprogs.exe”,则可将原来的菜单命令执行函数voidMenuItemCB(void)

    {
    return;
    }
    修改为
    voidMenuItemCB(void)
    {
    STARTUPINFOsi;
    PROCESSINFORMATIONpi;
    ZeroMemory(&si,sizeof(si));
    si.cb=sizeof(si);
    ZeroMemory(&pi,sizeof(pi));
    //Startthechildprocess.
    CreateProcess(“D:myprogs.exe”,
    ””, //Commandline.
    NULL,//Processhandlenotinheritable.
  NULL,//Threadhandlenotinheritable.
    FALSE,//SethandleinheritancetoFALSE.
    0,//Nocreationflags.
    NULL,//Useparent’senvironmentblock.
  NULL,//Useparent’sstartingdirectory.
  &si,//PointertoSTARTUPINFOstruc ture.
  &pi);//PointertoPROCESSINFORMA TIONstructure.
    return;
    }

    7.编译工程并注册生成动态链接库[3].

    插件部分完成了图1中的a,b,c关系.尤其是函数CreateProcess的应用,实现了从菜单或工具条到建模驱动程序之间的连接,即图1中的关系c.#p#分页标题#e#

    2.2.2 建模等驱动程序

    下面以创建一个0.20m×0.10m×0.05m的长方体为例:

    1.启动MicrosoftVisualBasic6.0,在下拉菜单“文件”项选择“新建工程”,选择“标准EXE”,“确定”;

    2.在窗体Form1上添加2个CommandButton,分别命名为“创建长方体”和“退出”;

    3.双击命令按钮“创建长方体”,在函数Com mand1Click()内添加代码如下:

    DimswAppAsObject#p#分页标题#e#
    DimPartAsObject
    DimboolstatusAsBoolean
    DimlongstatusAsLong
    DimAnnotationAsObject
    DimGtolAsObject
    DimDatumTagAsObject
    DimFeatureDataAsObject
    DimFeatureAsObject
    DimComponentAsObject
    DimchangAsLong,kuanAsLong,gaoAsLong‘定义长、宽、高
    chang=0.20 ‘为长赋值0.20m
    kuan=0.10 ‘为宽赋值0.10m
    gao=0.05 ‘为高赋值0.05m
    SetswApp=CreateObject(“SldWorks.Applica tion”)
    swApp.ActiveDoc.ActiveView.FrameLeft=0
    swApp.ActiveDoc.ActiveView.FrameTop=0
    swApp.ActiveDoc.ActiveView.FrameState=1
    swApp.ActiveDoc.ActiveView.FrameState=1
    SetPart=swApp.NewDocument(“C:ProgramFilesSolidWorksdataTemplates零件.prtdot”,0,0#,0#)
    SetPart=swApp.ActivateDoc(“Part2”)
    swApp.ActiveDoc.ActiveView.FrameState=1
    Part.InsertSketch
    Part.SketchRectangle-(chang/2),(gao/2),0,(chang/2),(gao/2),0,1
    Part.FeatureExtrusion1,0,0,0,0,kuan,0,0,0,0,0,0,0,0,0
    Part.ShowNamedView2“ 等轴测”,7
    Part.ViewZoomtofit2
    Part.SaveAs2“D:mypro长方体.SLDPRT”,0,False,False
    Part.ClearSelection
    SetPart=Nothing
    swApp.CloseDoc“长方体”

    这部分程序的开发,可用SolidWorks的宏功能,录制1个创建长方体的宏文件.由于宏录制的文件是VBA代码,所以,对其稍加修改就可移植到VisualBasic的程序代码中.这样明显降低了开发难度,加快了开发进程.

    4.双击命令按钮“退出”,在函数Command2Click()内添加代码如下:#p#分页标题#e#
    UnloadMe‘卸载窗体

    5.在下拉菜单“文件”项选择“生成工程.exe”,输入文件名“D:myprogs.exe”,“确定”[4].(注意:此处路径与文件名必须与函数CreateProcess的第一个参数相同.)
    该部分完成了图1中的d,e关系,实现了程序驱动的自动建模.

    3 结语

    所提出的二次开发方法避开了开发过程中的难点,减少了工作量,达到了开发目的.
    1.直接利用MicrosoftVisualC++6.0中Solid Works插件模板,不需过多考虑动态链接库等编程方法,降低了开发难度.
    2.用VisualC++的函数CreateProcess搭建了菜单与建模程序之间的关系.
3.开发建模程序时,参考SolidWorks的宏文件,明显减少了工作量.

    参考文献

    [1]王青,邬义志,夏冠华.三维CAD/CAM系统二次开发技术[J].江苏机械制造与自动化,2001,(4):183-185.#p#分页标题#e#
    [2]张淑珍.CAD系统二次开发方法的研究[J].西北纺织工学院学报,2000,14(2):173-175.
    [3]DavidJ.Kruglinski,ScotWingo,GeorgeShepherd,等.Visu alC++6.0技术内幕(第五版)[M].北京:北京希望电子出版社,1999.
    [4]EvangelosPetroutsos.VisualBasic6从入门到精通[M].北京:电子工业出版社,1999