一、引言
Solid Edge是EDS公司推出的普及型主流CAD软件包,是EDS PLM系统的一个分支。基于特征的参数化、变量化设计技术,使其操作方便,简单易学。此外,Solid Edge还为用户提供了采用标准Windows“对象链接与嵌入(OLE)”技术和“部件对象模式(COM)”技术的应用程序接口,开发者和用户能够通过使用Visual Basic、Visual C++以及任何一种支持ActiveX Automation技术的工具,对Solid Edge进行二次开发,来适应用户的一些特殊要求,减少重复性建模制图工作,全面扩展Solid Edge的功能或将其功能集成到客户应用程序中,以实现Solid Edge的完全客户化。本文介绍了基于ActiveX Automation技术开发Solid Edge的基本原理。
二、 ActiveX Automation技术与Solid Edge的对象层次结构
1. ActiveX Automation技术
ActiveX Automation是Microsoft公司提出的一个基于COM的技术标准,以前被称为OLE技术,其宗旨是在windows系统的统一管理下,协调不同的应用程序,准许这些应用程序之间相互沟通、相互控制。它通过在两个程序间安排对话,达到一个程序控制另一个程序的目的。其过程为:首先一个应用程序决定引发ActiveX Automation操作,这个应用程序自动成为C1ient,被它调用的应用程序成为Server。Server收到对话请求后,决定暴露哪些对象给C1ient。在给定时刻,由C1ient决定实际使用哪些对象,然后ActiveX Automation命令被传给Server,由Server对命令作出反应。Client可以持续地发出命令,Server忠实地执行每一条命令,最后由Server提出终止对话。
这里将So1id Edge理解为一个服务程序(Server),而二次开发出来的程序为客户程序(C1ient)。用户只要在客户程序上进行操作,客户程序将驱动So1id Edge完成相关的工作,用户无需全面掌握Solid Edge。
2.So1id Edge的对象层次结构
对象之间通过被称为对象模型或对象层次结构的形式相互联系。So1id Edge的对象层次结构可以描述为自上而下的树结构,其根节点对象就是一个应用。So1id Edge拥有4种工作环境:零件(Part)、钣金(Sheet metal)、装配(Assembly)和工程图(Drdt)。其中,零件和钣金共用一个对象层次结构,而装配和工程图分别拥有各自独立的层次结构。根节点作为应用对象,是惟一一个允许开发程序直接访问的对象,可以也只能通过该对象才能访问其下级的所有对象。图1所示为装配环境的简单对象层次结构,Application指Solid Edge应用程序,documents是一个集合对象,它包含了前面所提到的四种工作环境。要访问某一工作环境,首先必须得到它的文档对象(document)。这里为了进入装配环境,用到了装配文档对象Assemblydocument。
图1 简单对象层次结构
三、 ActiveX Automation应用方法
1.引用Solid Edge类型库
Solid Edge通过类型库提供了大量的内部功能,以便于从Visual Basic(以下简称VB)等开发工具中,通过ActiveX Automdion访问这些功能。Solid Edge提供的类型库包括:Assembly.tlb(装配类型库)、constant.tlb(常数类型库)、Drdt.tlb(制图类型库)、propauto.dll(文件属性对象库)、framewrk.rlb(框架结构类型库)、geometry.tlb(几何类型库)、part.tlb(零件和板金类型库)等。若以VB作为开发工具,首先必须在其环境中引用Solid Edge的有关类型库,才能通过ActiveX Automation访问Solid Edge提供的主要对象。在VB的集成环境中,通过“工程”菜单中的“引用”命令,将所要用的库选中,即可调用对应的类型库(图2),并且可以在VB的对象浏览器中查看对象库、类型库、类、属性、方法以及事件(图3)。
图2 选中所需要的库
图3 VB的对象浏览器
2.调用Solid Edge应用程序
当选择VB为一个支持ActiveX Automation的应用程序进行编程开发时,就必须和该程序进行通讯。Solid Edge提供的应用对象(Application)为实现这种通讯提供了可能。应用对象是惟一一个允许Visual Basic程序直接访问的对象,它位于层次结构树的顶部,可以也只能通过该对象才能访问其下级的所有其他对象。
VB提供了两个函数调用Solid Edge:CreateObject和GetObject。
Dim objApp as Object
Set objApp=CreateObject(“SolidEdge.Application”)
Set objApp =GetObject(“”,“SolidEdge.Application”)
两个语句都创建不可见的Solid Edge应用对象。
下面的语句使用GetObject连接到已经存在的Solid Edge实例:
Set objApp=GetObject(,” SolidEdge.Application”)
该语句会搜索已经存在的Solid Edge实例,如果找到,变量objApp指向该实例;否则,命令失败。
在使用CreateObject或者GetObject来驱动Solid Edge的应用时,该应用不会自动创建文档对象,必须使用文档集合对象的Add方法来建立一个文档对象。Add方法是有参数的,该参数用于确定所创建的文档对象的类型或者使用的模板。如果参数为空,程序会提示用户选择一个模板。下面语句的功能是在新建的应用中建立一个零件文档对象:
Set objApp=GetObject(,” SolidEdge.Application”)
Set objdocument=obj App.document.Add(“SolidEdge. Partdocument”)
要将一个Solid Edge的应用实例从内存中移除,则需要使用应用对象的Quit方法:
ObjApp.Quit
3.创建轮廓
和交互环境创建特征一样,绝大多数特征需要先定义二维轮廓,再向空间拉伸形成特征。而轮廓的创建往往是在一个平面上进行的,所以首先要定义参考平面。定义参考平面的方法有以下几种:
AddParallelByDistance(重合或平行平面);
AddParallelByTangent(相切平面)
AddAngularByAangle(倾斜或垂直平面);
AddNormalToCurve和AddNormalToCurveAtDistanse(法线方向平面)。
例如,下面语句就创建了一个与ParentPlane平面平行的参考平面objRefPlane。
Set objRefPlane=objRefPlanes. AddParallelByDistance(ParentPlane, Distance,_ NormalSide,Local)
创建好参考平面后,便可在参考平面上创建二维轮廓。一个轮廓由若干个线框因素构成,如果轮廓包括不止一个因素,则这些元素必须首尾相连,可以通过在元素端点之间增加关系来实现。二维轮廓的创建步骤如下:
(1)创建空的轮廓对象(Profile object);
(2)利用Solid Edge提供的直线和圆弧等对象来绘制轮廓图;
(3)利用Relations2d集合对象设置集合图形之间的关系;
(4)设置必要的尺寸;
(5)使用End方法验证轮廓的有效性。
4.创建特征
在Partdocument环境下,利用模型集合(Models)中的不同方法对以创建的轮廓进行AddExtrudedProtrusion(拉伸) 、AddRevolvedProtrusion(旋转拉伸) 、AddbaseHelix(螺旋拉伸)等操作创建出基本模型对象(Model),再利用每个基本模型对象的Chamfers(倒角) 、rounds(倒圆) 、Holes(孔)、Thins(抽壳)等对象集合中的Add方法创建出后续的特征。
例如,语句“Set objModel = objDoc.Models. AddFiniteExtruded Protrusion(1, objProfile, both, 0.05)”表示将objProfile几何轮廓对象双向拉伸50mm创建出基本拉伸特征objModel。
语句“Set objChamf=objModel. Chamfers. AddEqualSetback(2, objEdge, 0.005)”表示对拉伸体objModel的objedge边集合进行回切值为5mm的等边倒角。
5. 装配零件
在装配文档(Assemblydocument)中,一个装配体就是一个零部件的集合(Occurrences)。向装配图中加入零件分为两步:第一步,利用零部件集合提供的AddByFilename方法添加一个零部件(Occurrence)。语句“Set objOccurrence=objAssmDoc. Occurrences.AddByFilename("D: chead.par")”就是表示向Occurrences装配体中加入D盘下的零件chead。第二步,删除加入装配体的零件的三维关系,并设置其新的三维关系。可以通过两个集合访问装配关系对象:Aassemblydocument对象中的Relations3d集合和每个零件对象的Relations3d集合。零件的三维关系共有五种类型:AxialRelation3d用来定义回转面之间的关系;GroundRelation3d用来定义固定关系;PlanarRelation3d用来定义两个平面间的关系,包括贴合和对齐;PointRelation3d用来定义装配中点与点的连接关系;AngularRelation3d用来定义两个对象之间的角度关系。
例如,删除加入装配体的零件(objOccurrence)的三维关系用语句:“Call objOccurrence. Relations3d (1).Delete”;将加入零件的孔(objReference Hole)和装配体中一个零件的轴(objReferencePole)对齐,用语句:“Set objPoleToHole = obj Doc.Relations3d.AddAxial(obj ReferenceHole, objReferencePole,_ False)”。
四、程序运行方式
用VB技术和Solid Edge二次开发接口开发的应用程序有两种运行方式:一是将应用程序作为可执行文件直接运行,由程序控制Solid Edge的调入和退出。二是将程序作为一条宏命令嵌入到Solid Edge中。具体方法是:在VB的“文件”菜单中选择“制作 .exe”,将应用程序编译生成ActiveX Automation程序。打开Solid Edge的“工具条”对话框,按照提示新建一个工具条,确定后在出现的“自定义”对话框中选择“宏”,单击“浏览”,找到刚才编译的EXE程序,拖放到新建的工具条上,并选择合适的图标。用户在Solid Edge环境下,只要点击该工具条即可运行程序。
五、开发实例
笔者用VB在Solid Edge平台上开发了一套注塑模标准模架的自动装配系统,图4为主界面。从对话框中选择零件及其尺寸规格,系统将读入参数数据,修改零件库中该零件的变量表,并存入指定文件夹。完成所有零件的选择后,系统将其自动装配在一起。
图4 自动装配系统主界面