e-works数字化企业网  »  文章频道  »  产品创新数字化(PLM)  »  CAD

Solid Edge二次开发相关的DCOM技术

2006/8/31    来源:e-works    特约撰稿人:朱全敏      
关键字:Solid Edge 二次开发 DCOM技术  
本文简要介绍了与Solid Edge二次开发相关的DCOM技术,以及采用VBA二次开发Solid Edge的基本原理和方法。为读者提供了采用VBA二次开发Solid Edge的整体思路。

    一、引言
    Solid Edge是UGS公司推出的普及型主流CAD软件包,是UGS PLM系统的一个分支。基于特征的参数化、变量化设计技术,使其操作方便,简单易学。此外,Solid Edge还为用户提供了采用标准Windows“对象链接与嵌入(OLE)”技术和“部件对象模式(DCOM)”技术的应用程序接口,开发者和用户能够通过使用Visual Basic for Application(VBA)、Visual C++以及任何一种支持ActiveX Automation技术的工具,对Solid Edge进行二次开发,来适应用户的一些特殊要求,减少重复性建模制图工作,全面扩展Solid Edge的功能或将其功能集成到客户应用程序中,以实现Solid Edge的完全客户化。本文介绍了基于DCOM技术开发Solid Edge的基本原理。
    二、So1id Edge的对象层次结构 
    对象之间通过被称为对象模型或对象层次结构的形式相互联系。So1id Edge的对象层次结构可以描述为自上而下的树结构,其根节点对象就是一个应用。So1id Edge拥有4种工作环境:零件(Part)、钣金(Sheet Metal)、装配(Assembly)和工程图(Drdt)。其中,零件和钣金共用一个对象层次结构,而装配和工程图分别拥有各自独立的层次结构。根节点作为应用对象,是惟一一个允许开发程序直接访问的对象,可以也只能通过该对象才能访问其下级的所有对象。图1所示为装配环境的简单对象层次结构,Application指Solid Edge应用程序,Documents是一个集合对象,它包含了前面所提到的四种工作环境。要访问某一工作环境,首先必须得到它的文档对象(Document)。这里为了进入装配环境,用到了装配文档对象AssemblyDocument。

    三、 ActiveX Automation应用方法
    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.引用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.调用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
    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)”。

责任编辑:杜玮
本文为e-works原创投稿文章,未经e-works书面许可,任何人不得复制、转载、摘编等任何方式进行使用。如已是e-works授权合作伙伴,应在授权范围内使用。e-works内容合作伙伴申请热线:editor@e-works.net.cn tel:027-87592219/20/21。
相关资料
e-works
官方微信
掌上
信息化
编辑推荐
新闻推荐
博客推荐
视频推荐