用Delphi对SolidWorks进行二次开发
伍 涛,谢庆生
(贵州工业大学 CAD技术研究所,贵州 贵阳 550003)
摘 要:介绍了目前微机平台上的主流三维CAD系统SolidWorks的OLE对象及其编程方法,并通过实例说明利用开发工具Delphi对SolidWorks进行二次开发的方法。?
关键词:SolidWorks;OLE对象;Delphi
中图分类号:TP391.72;TP311.52 文献标识码:B
0 概 述
SolidWorks 是基于Windows 平台的三维设计软件,它的设计数据100%可以编辑,尺寸、相互关系和几何轮廓形状可以随时修改;SolidWorks具有特征管理器,复杂零部件的细节和局部设计安排条理清晰明了,操作简单;SolidWorks的全相关技术使得零部件之间和零部件与图纸之间的更新完全同步;SolidWorks能自动进行动态约束检查,具有强劲复杂曲面造型能力,能设计表面形状复杂的曲面零件;SolidWorks既可以先设计立体的钣金零件也可以按零件的平面展开图进行设计。由于以上特点,SolidWorks成为目前微机平台上的主流三维设计软件。
SolidWorks通过OLE (对象链接与嵌入)技术为用户提供了强大的二次开发接口,凡支持OLE编程的开发工具,如Visual C++、Visual Basic、Delphi等均可用于SolidWorks的二次开发,创建出用户定制的、专用的SolidWorks 功能模块。
本文通过对SolidWorks中的OLE技术的分析,结合实例给出利用高级编程开发工具Delphi对SolidWorks进行二次开发的方法。
1 OLE技术及SolidWorks中的OLE自动化技术
OLE(Object Linking And Embedding)是对象链接与嵌入技术的简称,利用OLE技术,用户可以通过使用来自两个或多个Windows应用程序的资源来解决复杂的应用课题。OLE提供了方便的技术用来将文档和来自不同程序的各种类型的数据结合起来。
SolidWorks支持OLE标准,完全实现了OLE自动化。作为一个OLE服务器,SolidWorks提供了大量的OLE对象,以及这些对象所拥有的方法和属性,用户通过在客户应用程序中对这些OLE对象及其方法和属性的操作,可以在自己开发的应用软件中实现诸如创建直线、构造实体、检查曲面表面参数等几乎所有的SolidWorks软件的功能。
2 SolidWorks的主要OLE对象介绍
SolidWorks提供了大量的OLE对象用于二次开发,这些OLE对象涵盖了全部的SolidWorks的数据模型,通过对SolidWorks的 OLE对象属性的设置和对OLE对象方法的调用,就可以在用户自己开发的系统中实现与SolidWorks相同的功能。
SolidWorks中常用的主要OLE对象有SldWorks、ModelDoc、PartDoc、AssemblyDoc、DrawingDoc、Sketch、Dimension等。
SldWorks对象位于应用程序的底层,可以实现应用程序的最基本的操作,如创建、打开、关闭和退出SolidWorks文档,设置当前的活动文档,并可以对SolidWorks的系统环境进行设置。
Dimension对象用于设置尺寸标注值和公差标注等内容。
Sketch对象允许获取关于轮廓线的基本信息。?
ModelDoc对象属于模型层,是SldWorks的子对象。用ModelDoc对象可以实现视图设置、轮廓线修改、参数控制、对象选择/打开和保存文档、创建编辑特征参量、创建框架等与实体模型相关的各类操作,ModelDoc对象包括PartDoc、AssemblyDoc和DrawingDoc等三个常用的对象。
PartDoc对象允许创建实体和特征, 执行禁止操作,还可以利用实体名称进行零件拼装。PartDoc对象是构建新零件的主要应用对象,它包括Configuration、Feature、Attribute、RefAxis、RefPlane、MidSurface和Body等子对象。Configuration子对象可以让用户管理不同的零件或装配,例如,可以隐藏或禁止一个零件的某些特征并将其保存为一个配置。Feature子对象用于访问特征类型、名称、参数,以及特征管理器中设计树的下一级特征;Attribute子对象用于访问储存在面、边、顶点、环或特征对象上的附加信息。一旦将属性放置到面、边、顶点、环或特征对象上,就可以使用属性对象并查询或改变参数值。如数控加工信息属性可以放置到一个表面上,这样在加工这个表面时,就可以知道加工过程中需要的刀具的类型和刀具运动速度。属性也可以附加到文档对象上。从属性实例中还可以获得属性定义、关联实体、参数值或实例名称等信息;RefAxis子对象用于访问参考轴;RefPlane子对象用于访问参考面;MidSurface子对象用于访问中轴面信息;Body对象可以访问实体表面和创建可以缝合成实体对象的曲面。
AssemblyDoc对象用于完成装配功能,如增加一个新组件,增加配合要求,隐藏或炸开组件等。AssemblyDoc对象的Configuration、Feature、Attribute、RefAxis、RefPlane和Body等子对象与PartDoc对象的作用相同,除此外,AssemblyDoc对象有Component、Mate、MateEntity等子对象等三个特有子对象。Component对象用于装配遍历,即从基于当前配置的组件的方法和属性的返回信息,如果用户选择了不同的配置则可能会有较大的变化;Mate对象用于访问不同的装配配合参数;而MateEntity对象用于访问配合对象和装配配合定义。
DrawingDoc 对象用于完成制图操作,如创建、排列与访问视图,创建标注、说明、明细表说明等任务。DrawingDoc对象只有View和Sheet两个子对象,其中View对象用于取得在图纸页面或图纸视图上全部对象的有关信息,例如图纸视图的装订、变换等;而Sheet对象用于获取或设置图纸页面上的信息并可以访问图纸页面上的对象(如BOM表)。
3 用Delphi开发SolidWorks应用模块的方法
Delphi是目前Windows平台下的优秀开发工具,支持各类最新的Windows技术,拥有强大的数据库编程能力,利用Delphi对SolidWorks进行二次开发,可以将数据库技术与SolidWorks的强大设计能力相结合,实现功能强大的用户定制模块。
Delphi对OLE的支持有多种方式,如使用OLE控件,或在运行时创建OLE对象等方法。程序运行时创建OLE对象可以充分利用SolidWorks的API接口,实现对SolidWorks对象的完全控制。
用Delphi开发SolidWorks应用时应按以下步骤进行:首先创建SldWorks对象,然后通过创建好的SldWorks对象创建PartDoc、AssemblyDoc等子对象,用这些子对象完成实体的构建、编辑和修改,最后保存结果并关闭SldWorks对象结束该应用。Delphi中的Variant类型可用于OLE对象变量的声明,CreateOleObject 函数用于创建OLE对象。
下面的程序实现了对SolidWorks对象的基本的操作,通过创建SldWorks对象、创建PartDoc
对象并根据用户设置生成简单的SolidWorks实体、保存文档等过程简要说明了用Delphi开发SolidWorks应用的基本方法。参照此程序和SolidWorks的API手册,用户可以实现更加复杂的SolidWorks应用,设计出用户定制的三维CAD专用系统。
本程序只包含一个单独的窗体,该窗体上的四个TButton控件分别用于创建新文档、创建零件、保存文档和关闭对象及退出,两个TSpinEdit控件用于设置用户定义的零件参数。
uses
ComObj, ActiveX;//常量和变量声明及单元引用声明
var
swApp, Part: Variant;//定义OLE对象变量,分别对应SldWorks和PartDoc对象
DocName:String;//DocName用于存放要保存的文档的名称
function GetOrCreateObject (const ClassName: string): IDispatch;
var//根据SolidWorks的运行情况创建或获取SldWorks对象
ClassID: TGUID;
Unknown: IUnknown;
begin
ClassID := ProgIDToClassID (ClassName);
if Succeeded (GetActiveObject (ClassID, nil, Unknown)) then
OleCheck (Unknown.QueryInterface (IDispatch, Result))
else
Result := CreateOleObject (ClassName);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
swApp := GetOrCreateObject ('SldWorks.Application'); //创建或获取SldWorks对象
swApp.Visible := True;//使创建的SldWorks对象可见
end;
procedure TForm1.Button1Click(Sender: TObject);
Var//利用PartDoc对象的CreateCircle方法创建圆环,并用
d1, d2 : double;// FeatureExtrusion方法以该圆环为基础创建圆柱体
begin
Part.CreateCircle(0, 0, 0, spinEdit1.value, spinEdit1.value,0);
//FeatureExtrusion方法的调用参数分别用于指定对轮廓线拉伸时的不同效果
//此处创建一个单向拉伸距离为spinEdit3.value的实体(不含倾斜、翻转等特殊效果)
//可参考SolidWorks的API编程帮助了解这些变量的作用
d1 := spinEdit3.value;d2 := 0.7;
Part.FeatureExtrusion (True, False, False, 0, 0, d1, d2, False, False, False, False, 0, 0, True, False);
Part.EditRebuild;
button1.Enabled := False; button2.Enabled := True;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin//用PartDoc对象的Save和SaveAs方法保存已修改的文档
if DocName = '' Then
if SaveDialog1.Execute Then
Begin
DocName := SaveDialog1.FileName;
Part.SaveAs(DocName);
End
Else Part.Save;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin //用SldWorks对象的CloseDoc和ExitApp方法关闭SolidWorks文档并退出
swApp.CloseDoc(DocName);
swApp.ExitApp;
Close;
end;
//用SldWorks对象的NewPart方法创建一个新的PartDoc对象
procedure TForm1.Button0Click(Sender: TObject);
begin
Part := swApp.NewPart;
button0.Enabled := False;
button1.Enabled := True;
end;
参考文献
[1]SolidWorks, SolidWorks 98 API Help[EB].1998.
[2]Gary Cornell, Troy Strain等著.Delphi程序员必读[EB].1995.
The Secondary Development of SolidWorks by Delphi
WU Tao,XIE Qing-sheng
(CAD Institute,GUT,Guiyang,550003)
Abstract: This paper introduces OLE objects and their programming in SolidWorks,the best 3D CAD products on PC platform.It also explains how to use Delphi to actuate the secondary development of SolidWorks.
Key Words:solidWorks;OLE;object;Delphi
(本文责编:伍玉娇)
收稿日期:1999-06-28
基金项目:贵州省科学技术基金(黔科合工字1997,1053号)