第二章 Solidworks的二次开发及其API函数简介
2.1 相关术语
为了方便用户进行二次开发,SolidWorks提供了几百个API函数,这些API是SolidWorks的OLE或COM接口,用户可以使用VB/VC等高级语言对其进行二次开发,建立适合用户需要的、专用的SolidWorks功能模块。要顺利对SolidWorks进行二次开发,以下的基本术语是需要知道的。
OLE技术
OLE就是对象的嵌入与连接,它使得应用程序之间能够通过数据的嵌入或连接的方式来共享数据。含有嵌入或连接文档的应用程序被称为容器程序,提供文档数据编辑的应用程序被称为服务器程序。OLE2.0推出以后,OLE已经不再是对象的嵌入和连接的缩略词。不妨认为ActiveX是OLE3.0,事实上ActiveX是OLE在网络上的扩展,它使用了OLE技术并且超过了本地机器的范围。自动化技术Automation是OLE技术的一个重要内容。直到今天,自动化技术扩充和发展为ActiveX Automation,它适用于OLE对象和ActiveX对象。自动化技术由客户程序和服务器程序组成,客户程序是操纵者与控制者,服务器程序是被控制者,它包含了一系列的暴露对象。服务器应用程序通过自身对象的属性、方法、事件外显其功能;对象的服务器程序简单而抽象的代表。而客户应用程序则通过操纵服务器应用程序所暴露的一系列对象来操纵服务器应用程序。只要服务器程序提供一定的接口,可以使任何对象实现自动化。对象包含的一些外部接口,它们被称为方法与属性。方法是自动化对象的一些函数,它们是提供给客户程序的外部公共成员函数,属性是一个对象的一些命名特性,即对象的一些共有数据域。操纵程序被称为客户(Client),而被操纵程序称为服务器(Server),被操纵的对象是ActiveX对象如果应用程序支持OLE技术,则在不同应用程序之间的切换由OLE自动完成。SolidWoks支持OLE标准,完全实现了OLE自动化,前已提及,SolidWoks具有开放的结构体系,它的这种开放性体现在它所提供的API对象上。API是一个对SolidWoks的应用编程接口(Application Programming Interface),包含了几百个对象及其属性、方法和事件,这正是SolidWoks为用户提供的功能强大的二次开发接口,凡支持OLE编程的开发工具,如 Visual C++、Visual Basic、Dephi等均可从各自本身操作这些对象,从而直接行使SolidWoks的功能,如画一条直线,拉伸一个凸台,或修改一个表面的参数等。利用这种方法可以完成SolidWoks的二次开发,创建出用户定制的、专用的SolidWoks功能模块。在本课题中,我们用VB来控制SolidWoks提供的各种对象,即把VB 作为客户程序,SolidWoks作为服务器程序。
ActiveX技术
ActiveX是微软新近提出的一种技术,它以COM为基础,其中包括了OLE技术以及应用于internet的多种技术。它使得不同的进程,甚至是网络上的进程之间相互通信,并朝着多媒体方向发展。ActiveX是一种面向对象的组件系统,其中包括了组件软件的各个方面,有复杂文档、自定义控制、OLE自动化、交互应用程序脚本、数据传送及其他分布软件的相互作用。这些组件对象为用户提供了不同的功能,使得不同的软件供应商提供的组件可以在二进制之间进行相互的连接和通信。对象通过接口实现组件之间以及组件与系统之间的相互作用。在桌面系统进行软件交互时,除了系统提供的标准控制外,OLE控件是一个重要的组成部分。ActiveX是一种标准,利用这个标准可以使用通过不同的语言开发的软件构件在单机或网络环境中相互操作。同时,ActiveX也是以组件对象模型为基础的开放技术的集合,它代表了应用程序与internet的一种集成策略。
OLE Automation技术
自动化技术(Automation)为软件之间的交互创造了条件,它允许多个应用程序或组件之间进行通讯和交互,而与它们的语言、分布和原始平台无关。在开发标准件库时,运用OLE(Object Linking and Embedding)Automation技术,无疑会减小开发的难度,使系统更加稳定可靠。SolidWorks系统提供数据操纵接口函数API,专门读写三维零件数据,并提供了一系列的Automation接口(包括对象、属性和方法),使用户进行二次开发更加容易。运用Automation技术使得在自己的应用程序中驱动三维CAD系统中的零件变的有可能而且容易。
尺寸驱动原理
本论文对标准件建模采用尺寸驱动原理,即标准件的生成也是对相应标准件模板进行尺寸驱动的过程。尺寸驱动即在零件拓扑结构不变的情况下,把零件的尺寸参数定义为尺寸变量,并定义出变量间的关系,当给定不同的尺寸值,就可得到一组结构相同而尺寸不同的零件,每一类标准件对应一个模板文件,在模板文件中定义尺寸变量和变量间的关系。由于三维CAD都采用了参数化的设计方法,在开发标准件库时没有必要再做尺寸约束求解,所以零件的最后生成可以依靠系统参数化功能来实现,即通过用新的尺寸值对实现准备好标准件模板进行尺寸驱动来生成一个新的标准件。
在工程实践中用到的具有系列尺寸的标准件,其尺寸参数可分为独立参数和非独立参数,独立参数中包含了主驱动参数(称之为基本参数)和自定义特性参数。一般只要给定独立参数,即可唯一确定零件的全部几何参数(非独立参数可由主驱动参数从标准件特性参数库中取得)。例如GB5780-86,其螺纹规格,螺杆长度,螺纹长度为三个独立参数,由用户根据自身需要进行选取。螺纹规格确定之后,螺栓的六角头厚度,扳手宽,倒角半径等尺寸即可从特性参数库中获得,从而可以对形状模式库中的对应的形状模型进行尺寸驱动,实现零件建模。
2.2 SolidWorks的API函数介绍
2.2.1 SolidWorks 的对象模型
相关术语
对象类定义了具有相同结构和操作的一组对象,其最基本的特征是封装和继承。作为一种抽象数据,对象把实体的相关特征和操作封装在一起,允许人们以自然的方式去模拟外部实体的结构和行为;继承是对象类实现可复用性和可扩充性的重要特征。一个对象类可以定义为另一个更一般的特殊情形, 这个对象类是特殊对象类的父类( SuperClass) ,或者说, 特殊对象是这个一般对象的子类(SubClass) ,子类继承父类的所有属性和操作,除此以外子类还可以定义自己特有的属性和操作。继承是对象类的一种特例化关系,亦即集合包含关系,
子类对象实例集合是父类对象实例集合的子集。
图2.1
对象模型
SolidWorks 的对象模型是一个多层次的对象网络,如图2.1所示。最高级别的对象类是SldWorks ,该对象中封装了很多方法(Methods) , 如OpenDoc2 、ActivateDoc2 、CloseDoc、ExitApp,下面又创建了许多子类, 如ModelDoc、Environment 、Frame。本文将重点介绍ModelDoc 对象,因为大部分绘图操作都在ModelDoc 对象中, 如SelectByID (选择) 、CreateCircle2 ( 画圆) 、CreateLine2 ( 画直线)。ModelDoc 中又创建了PartDoc、AssemblyDoc、DrawingDoc 等子类。其中大部分实体建模操作都在PartDoc 对象中,如FeatureExtrusion (拉伸) 、FeatureRevolve (旋转);而相关的装配操作如AddComponent (插入零部件) 、AddMate (插入配合) 等都在AssemblyDoc 对象中。
2.2.2 对象的属性和方法
在SolidWorks 创建的对象中,每个对象都有自己的属性和方法,通过调用API 函数实现,反过来,应用SolidWorks 的每一步操作都体现在特定的对象类中。下面以VB 为开发平台介绍其一些常用的API 函数。
连接SolidWorks
在对SolidWorks 进行二次开发时,首先要建立SolidWorks 的连接,创建SolidWorks 的应用对象:
Dim swApp As Object
Set swApp = CreateObject (″SldWorks.Application″)
通过这个函数,就打开了SolidWorks 的接口,可以调用它的API 函数了。
建立新的零件图、装配图
创建零件图:
Dim Part As Object
Set Part = swApp.newpart
创建装配图:
Dim Assem As Object
Set Assem = swapp.NewAssembly
这两个函数创建了一个新的工作区,使我们能够进行建模和装配。
选择
“选择”可以说是在使用SolidWorks 时用得最多的一个命令,有很多命令在使用时都要选择操作对象,通过调用ModelDoc 对象中的SelectByID 函数来实现:
ModelDoc.SelectByID(objectName ,object Type ,x , y , z)
这个函数在应用时需要输入五个参数:objectName 表示要选择对象的名称,该名称是SolidWorks在创建对象时按先后顺序自动命名的,如基准面1 、基准面2 、Arc1 、Line3 、D1 @ 草图1 @Part1.SLDPRT;object Type 要输入对象的类型,如PLANE (面) 、SKETCHSEGMENT (草图上的对象如直线、圆弧等) 、DIMENSION (尺寸标注);x , y , z 是平面上任一点的坐标值。
插入草图
在所选平面上插入草图,调用ModelDoc 中的InsertSketch 函数: ModelDoc.InsertSketch ()
基本草图绘制命令
画直线调用ModelDoc 对象中的CreateLine2 函数:ModelDoc.CreateLine2 (xStart ,yStart ,zStart ,xEnd , yEnd , zEnd )[.Const ructionGeomet ry =True ]xStart 、yStart 、zStart 、xEnd、yEnd、zEnd 分别是直线的起点和终点坐标; Const ructionGeomet ry =True 时表示画中心辅助线。画圆调用ModelDoc 对象中的CreateCircle2函数:ModelDoc.CreateCircle2 (xc ,yc ,zc ,xp ,yp ,zp)xc、yc、zc、xp 、yp 、zp 分别是圆心和圆上一点的坐标值。标注尺寸先通过SelectByID 函数选择要标注的对象,再调用ModelDoc 中的AddDimension 函数:ModelDoc.AddDimension ( x , y , z)x、y、z 为尺寸文本所要放的位置的坐标值。
基本实体建模命令
拉伸调用PartDoc 中的FeatureExtrusion 函数:
PartDoc.FeatureExtrusion(sd ,flip ,dir ,t1 ,t2 , d1 ,d2 ,dchk1 ,dchk2 ,ddir1
,ddir2 ,dang1 ,dang2 ,off setReverse1 ,off setReverse2)sd 为TRUE 时表示单向拉伸,为FALSE 时双向拉伸,以0 、1 表示;dir 为TRUE 时表示正向拉伸,为真时有效;dir 为TRUE 时表示反向拉伸,为真时有效; t1 、t2 表示终止类型,可取下列值: 0 (给定深度) 、1 (贯穿) 、2 (为贯穿下一个) 、3 (成形到一顶点) 、4 (成形到一面) 、5 (到离指定面指定的距离) 、6 (两侧对称) ; d1 , d2 表示拉伸的深度; ddir1 、ddir2 为TRUE 时表示带拔模角拉伸;dang1 、dang2 为TRUE时表示向内拔模,为FALSE 是向外拔模;off setRe2verse1 , off setReverse2 控制到离指定面指定的距离,在t1 、t2 为5 时有效。其中d2 、dchk2 、ddir2 、dang2 、off setReverse2 在双向拉伸时有效。旋转调用PartDoc 中FeatureRevolve 函数:PartDoc.FeatureRevolve (angle ,reverseDir ,angle2 ,revType)angle 表示旋转的角度;reverseDir 控制旋转的方向,为TRUE 时表示反向, revTyp 为1 时无效; an2gle2 表示旋转的反向角度,仅当revTyp 为2 时有效;revTyp 表示旋转类型,为0 时单方向旋转,为1 时双向等角度旋转,为2 时双向旋转。倒角调用ModelDoc 中的FeatureChamfer2
Type 函数:ModelDoc.FeatureChamferType(chamfer Type , width ,angle ,flip ,
otherDist ,vertexChamDist1 ,vertexChamDist2 ,vertexChamDist3)chamfer Type 控制倒角的类型,可取下列值: 1(角度- 距离控制) 、2 (距离- 距离控制) 、3 (顶点-倒角控制) 、4 (两边等距离控制) ;width 表示倒角边距;angle 表示倒角角度,仅当chamfer Type1 为1 时有效;otherDist 表示chamfer Type 为2 时的另一边距; vertexChamDist1、vertexChamDist2 、vertex2ChamDist3 表示chamfer Type 为3 时的三个距离。
基本装配命令
零件的建模完成后,即可进行零件的装配,先调用swApp 中的NewAssembly 函数新建一个空白装配文档,再通过调用AssemblyDoc 中的AddComponent 函数插入零部件:
AssemblyDoc.AddComponent (compName ,x , y , z)compName 表示要加入组件的路径及名称; x ,y , z 表示组件在装配文档中放置的位置。插入配合调用AssemblyDoc 中的AddMate 函数:AssemblyDoc.AddMate (mateType ,align ,flip ,dist ,angle)用mateType 控制配合类型,可取下列值:0 (重合) 、1 (同轴心) 、2 (垂直) 、3 (平行) 、4 (相切) 、5 (距
离) 、6 (角度) ;align 控制两配合面的方向,0 (同向对齐) 、1 (反向对齐) 、2 (最近处) ;flip 为TRUE 时表示延缓配合; dist 控制mateType 为5 时的距离; angle控制mateTyp 为6 时的角度。
添加菜单
为了操作方便,把生成标准件的功能挂到Solidworks 装配环境的菜单和工具栏上,在菜单上的提示为各标准件的名称,在工具条上的提示则为图标,用户要插入某个标准件时,只需在菜单或工具条上进行选择,然后由开发的程序调用相应的标准件功能模块。Solidworks 的SldWorks 对象,为VB 对Solidworks 工作环境进行访问处理提供了接口。通过此对象可以对Solidworks工作环境添加菜单、删除菜单、添加工具条、打开文件、新建文件、退出Solidworks 系统等功能,这里主要是通过使用SldWorks 对象的Addmenu 和Addmenuitem 方法来在Solidworks工作环境中添加菜单和下拉子菜单及功能模块的调用;通过使用SldWorks 对象的Addtoolbar 和AddToolbarCommand 方法来完成在Solidworks 工作环境中添加工具条和完成对应标准件功能模块的调用。
Implements SWPublished.SwAddin
Dim iSldWorks As SldWorks.SldWorks
Dim iCookie As Long
bRet = iSldWorks.SetAddinCallbackInfo(App.hInstance, Me, iCookie)
bRet = iSldWorks.AddMenu(swDocNONE, "螺纹联接(&L)", 3)
bRet = iSldWorks.AddMenuItem2(swDocNONE, iCookie, "螺栓库(&S)@螺纹联接(&L)", -1, "LS_Item", "LS_ItemUpdate", "螺栓标准件库")
bRet = iSldWorks.AddMenuItem2(swDocPART, iCookie, "螺栓库(&S)@螺纹联接(&L)", -1, "LS_Item", "LS_ItemUpdate", "螺栓标准件库")
关于菜单插件的具体具体实现方法将在后面谈到。