|
SolidWorks是基于Windows平台的优秀三维机械设计软件,其参数化和特征造型技术,为设计人员提供了良好的设计环境。SolidWorks尽管功能非常强大,但要使其在我国企业中非常有效地发挥作用,就必须对其进行本体化和专业的二次开发工作。SolidWorks通过对象链接嵌入技术(OLE)为用户提供了强大的二次开发接口,凡支持OLE编程的开发工具,如VisualC 、VisualBasic、Delphi等均可用于SolidWorks的二次开发,创建出用户定值的、专用的SolidWorks功能模块。5 {/ q1 T: h: Y4 W0 Y/ y
# p+ h0 J7 g6 _, z% j1 系统的关键技术
: ` C. T, _; T* O% A' m
, v0 H+ k }. u P4 E& v1.1 SolidWorks的软件接口开发& y2 V l) I9 I6 ^* X8 N
, J1 B0 ]+ C! e3 FSolidWorks通过COM技术为用户提供了强大的二次开发接口,以Vc 为例来说明。
! }" z3 s) |/ n, u1 y- O
2 W3 y2 d1 ?! T x. E# _(1)SolidWorksAPIObjects COM技术是由Microsoft提出的组件标准,不仅定义了组件程序之间进行交互的标准,而且也提供了组件程序运行所需的环境。OLE(对象链接嵌入)技术是COM的一个应用。利用OLE技术,用户可以通过使用来自两个或多个Windows应用程序的资源来解决复杂的应用课题。OLE提供了方便的技术,用来将文档和来自不同程序的各种类型的数据结合起来。SolidWorks支持COM技术标准,同时也支持OLE标准,并且已完全实现了OLE自动化。& F# Z- u% B" _: G4 {* }
7 B" C. k: g5 e3 l, o5 v- l
(2)SolidWorksAPI对象简介 SolidWorksAPI接口采用面向对象的方法,所有的函数都是有关对象的方法或属性。SolidWorks主要的API对象(如图。所示)涵盖了全部的SolidWorks数据模型。通过对这些对象属性的设置和方法的调用,就可以在用户自己开发的DLL中实现与SolidWorks相同的功能。
5 ~' j5 S& G5 y' U* q6 f, r5 j2 r2 v; |
(3)APICOM对象及属性的使用 COM对象与C 程序语言对象一样具有封装性和可重用性。COM对象的封装性表现在客户不能直接访问COM对象的属性,只能通过COM对象提供的方法来访问;COM对象的可重用性表现在COM对象的包容和聚合,一个对象可以完全使用另一个对象的所有功能,例如DrawingDoc对象派生于ModelDoc对象,因此DrawingDoc对象可以通过接口指针使用ModelDoc对象里的所有方法与属性。4 {# J) v, E& H. h
5 P& {/ u% s6 z+ j8 {
* F$ w8 x2 @3 g1 \
" Q/ Y& c( |5 b) n* } P7 I. q* E7 e$ a0 R) M4 b
1.2 API接口查询技术- p7 K; G# A' l/ l( y& M# }& F& _% q
8 r1 x7 D r. ~ J4 y# I0 m% y" H D4 m- X3 b1 i9 T" ^
- Y+ s7 b2 N2 U( y X. s1 S4 bSolidWorks作为基于Windows的原创软件,为方便用户开发的程序与SolidWorks通信,提供了采用COM技术开发应用程序的方法。用户开发的代码可以作为独立的EXE文件或DLL文件存在,它们就是COM模块。采用COM技术在SolidWorks平台上作二次开发时,通过直接访问SolidWorks底层对象可以方便地扩充SolidWorks的功能。采用COM技术开发SolidWorks时,COM调用的每个API函数都将有一个HRESULT类型的接口指针,可以按照你的意图使用该指针,但在使用完后必须释放指针。
* f' G! C- D% d( ^& U2 C: y0 D& X k5 v ]2 e$ T6 J7 H
" S/ I8 n8 v; u' ^. s1.3资源的管理
& v+ ]. z H. W; Z9 ^1 @. {/ ~$ M8 F; V) a) [- x; D
为避免用户化的SolidWorks应用程序的资源与平台本身和其它第三方开发的SolidWorks应用程序的资源发生冲突,必须对应用程序的资源进行管理。解决资源冲突的方法是调用AfxGetResourceHandle和AfxSetResourceHandle这两个函数。在使用新的资源前调用AfxGetResourceHandle函数保存当前的资源,然后调用AfxSetResourceHandle函数把当前资源设置成新的资源,使用完后再调用AfxSetResourceHandle函数恢复先前已保存的资源。以对话框的管理为例来说明上述过程。+ C; ]; K2 l- e( i
0 k" ^" j7 H& _. eHINSTANCEsaveResource=∶∶AfxGetResourceHandle();//保存当前资源句柄7 s2 V' @4 R! A1 _( L8 S" R
∶∶AfxSetResourceHandle(∶∶AfxGetInstanceHandle());//把当前资源设置成新的资源句柄定制菜单。在CexampleApp∶∶docCreateMenu函数中加入如下代码:2 f( f' C& k# I- c
1 P7 H9 g7 |% d& U- y& E9 h/ o6 Xhres=pFrame->AddMenu(auT"(PartExample"),swMenuPosition,&bres);
4 a; ^9 l+ X6 w3 r: }hres=pFrame->AddMenuItem (auT"(PartExample"),auT"(Bearing"),
# {2 X4 L: q* x- I% N5 |2 ]swLastPosition,auT(SwPartlib@MenuItemCBBearing,
6 A8 D( v1 W( P, ~& VExamplePropertyManagerPageitem"),&bres);2 E* n$ ]8 ^& C4 a
7 Z# C k, t8 ?5 i2 \然后用MFC向导ClassWizard创建资源,加入所需的控件;最后再恢复先前保存的资源句柄::AfxSetResourceHandle(saveResource)。' Y# E' h: k, a' M) @1 I& V7 }
6 C1 h; c- O; f3 b! w i; u& n1.4导出函数的管理
Y% \/ @. ^0 J) D9 y0 x6 H/ b
3 ?* e3 H M" }# ~/ ]DLL包含一个导出函数表,可以通过函数的符号化的名字和称为序号的整数识别这些函数。函数表也包含了函数在DLL内的地址。DLL函数导出有两种方法:用关键字声明和在模块定义文件(3.def)中声明。1 i+ Z$ T0 @7 w
* O8 k& A4 W, S7 } P
(1)声明显式包含dllexport关键字
( f# {$ l- J- e3 g 3 o. W$ f' s) o6 O
+ o0 V6 Q0 E0 P- m2 w
c( f8 {3 ~9 M+ s+ W(2)模块定义文件方法! A& F$ |2 W& x! N2 D) ? i
LIBRARY"SwPartlib";
$ O: G" @' j4 q" p+ A
O0 E! v. B. I$ Z& b' N @
8 v3 e# z) h# s; {+ f# Y U# K/ f3 H! r" W" Y8 j
1 w* ]. {2 E% t
0 C2 d+ M- p/ L# ?7 h3 系统数据库的实- j5 \4 ~7 H( |! t% P$ K$ C; Q
+ X! s: a" e& r2 L" g
3.1 数据库管理系统6 x7 n/ L/ E2 `1 I/ ?/ ^
' s" Q: p6 J3 x# h; N为了能够生成统一类型不同规格的零件,必须将标准件的数据存储在数据库中,目前可供选择的数据库系统很多,其中Access简单易学,操作方便,可以完成诸如查询、排序、增删记录等对数据的操作功能,完全满足开发零件库对数据管理的要求,因此选用Access作为管理数据的工具。" X' B. C4 v: l m
$ v$ X2 J; J; v8 i6 P% n/ t
3.2访问数据库+ X' k. b& q) Q9 x' C/ n9 M* }
3 i' |' N1 f1 h) I! C! |应为当用户输入主导参数后,程序访问数据库,获得与主导参数相匹配的其它参数,所以必然在开发中涉及到对数据库的操作。常用的数据库接口包括ODBC、DAO、ADO等,其中DAO是一种广泛使用的数据库接口技术,可使用Vc 的标准函数调用公用接口访问数据库的内容。相关的代码如下:
! L8 T9 y1 H) M2 e+ q# }) s3 m6 X U
) H; E( z# E: k8 f# m4 H
: S) g ~. m2 l- h3.3 MFC开发SolidWorks的具体应用
" G" @: U! e, K- S( j, k; O! q0 M1 ^4 A4 { @( j
在前面所述工作的基础上加入了所需的导出函数并确定了连接方式就可以编写系统的具体实现代码了,为了使程序规范化,所有零件系统生成函数都采用了函数调用的方法,即将所有的函数声明放在一个头文件*.h中,函数的实现放在*.cpp文件,这样主程序就可以通过参数传递实现对函数的调用了.5 R) N" ?: ~4 F4 [ L
: B1 M" Q; d5 o: l1 } x. @4 结语
& F/ @8 M Q8 N3 e: k上述基于MFC的SolidWorks二次开发的关键技术是对SolidWorks二次开发技术的初步探索,我们开发的基于SolidWorks的零件信息库系统已经通过省科技厅的项目鉴定,这对CAD/CAM软件的应用、推广,为推动甘肃制造业信息化,都将起到重要作用。 |
|