引用 SW 二次开发新手教程(第一部分)
引用
Richard.Li 的 SW 二次开发新手教程(第一部分)
前言
二次开发能做什么?
二次开发最基本的功能就是借助程序,自动完成原本需要手动操作的功能,从而减轻人的劳动强度。
其次,我们可以借助编成语言本身的功能,完成复杂的科学计算。,|7vjgh2~dcS
并且,我们可以通过二次开发,建立与Windows和其他应用程序的联系,或者连接到数据库甚至是网络上完成更复杂的功能。CAD,CAE,CAM,CATIA,PROE,UG,SOLIDWORKS,模具,设计,招聘,培训,汽车,CAxHome7q,L
i5p+{
总之,让原来的程序更实用就是二次开发的任务。
.comBY1ibi8t+H
选择什么语言进行SW二次开发?www.caxhome.com Oe*zY!Bf1Z
理论上,能够在Windows下开发应用程序的语言都可用于SW的二次开发。所以尽量选择熟悉的语言。5fqZ"{Y,M+S
对于新手,建议使用VB。有以下原因:1. VB简单易学,且功能强大,最适合初学者。2. SW帮助中的实例以及官方网张上的实例大多是基于VB的。3. SW中集成了VBA环境,所以我们可以不安装任何编成语言环境,直接在VBA环境下开发。
.com,u!A/fZ;b
什么是VBA?www.CAxHome.com7sLn3pm:M-kK_
VBA(Visual Basic for Application)实际就是集成在应用程序内部的开发语言,可以看作是VB的简化版本。使用VBA编写的程序即称为“宏”。注意,VBA编写的宏是不能脱离应用程序而独立运行的,例如SW的宏必须在SW环境下运行。
在SW中打开VBA的方法:使用菜单【工具/宏操作/新建...】或者 【工具/宏操作/编辑】第一课
简单的VB知识
(VB是我们使用的开发工具,多了解VB知识有助于我们更好的进行SW的二次开发。如有可能,请尽可能抽出时间认真学习VB)CAD/CAM之家论坛LZc2``"D
VB是面向对象的开发工具。所以“对象”是我们所需要操作的核心。
对象代表应用程序中的元素,例如 草图直线,拉伸特征
如果我们需要在SW中画一条直线,实际就是添加一个草图直线对象。如果需要修改拉伸特征的定义实际就是编辑拉伸特征对象。CAD/CAM之家论坛SS1F6nY h;O!s
每个对象都有自己的“属性”和“方法”。CAD/CAM之家论坛:I[rN3AA8Y
“属性”描述了对象的特性,例如Layer(图层)对象有这样几个属性:Name(名称),Color(颜色),Widty(线宽)。显然,只要我们将这几个属性一一表述清楚就可以准确的描述出这个图层对象的特性。
“方法”就是对象所能进行的操作。例如PartDoc(零件文档)对象有这个方法:SaveToFile2。只要我们获得了PartDoc对象,就可以使用这个方法将当前选择的曲面或实体保存为文件。
对于简单的VB知识,可以查看VBA的帮助。(打开VBA的编程界面,然后使用菜单【帮助/VB 帮助】,或者直接按 F1 键)第二课
SW的对象模型www.caxhome.com(t*k+ta\!Ub.~
我们可以SW的API帮助查询SW相关的对象、属性和方法。CAD/CAM之家论坛DB
PY \%t%@
z
打开SW,使用菜单【帮助/SW API和插件帮助主题】,在弹出的帮助窗口中选择【索引】标签,并输入关键字“object”,然后双击想要查看的主题(object diagram, SolidWorks API)CAD/CAM之家论坛-Xr(^)]Z~
如需要进一步查询某个对象的具体信息,可以点击图片中对应的对象明。
例如,我们单击“SldWorks”,显示结果如下图:
(如果你很熟悉对象名,可以直接在索引中输入对象名,这样查询对象的属性和方法更便捷)
第三课
开始简单的编程www.caxhome.coma`*]"N7j&v-p$^\K
如何使用SW提供的这些对象进行我们的二次开发,我们来看看下面这个简单的例子。
我们可以看到SW众多的对象中,SldWorks对象(SW应用程序对象)处于最顶层,所以获得SldWorks对象是首先要做的/O'QBU}@j8y
Set swApp = Application.SldWorks
上面这条语句的作用是将swApp变量设置成为SW应用程序对象
获得应用程序对象之后,我们就可以使用他的方法来完成我没需要的功能。例如,现在我们需要知道当前SW所使用的语言。
Lang = swApp.GetCurrentLanguage()CAD,CAE,CAM,CATIA,PROE,UG,SOLIDWORKS,模具,设计,招聘,培训,汽车,CAxHome5s
p_+jF1V&O
DHW@1d
使用swApp对象的GetCurrentlanguage方法,并将返回值赋予变量Lang。
完整的程序是这样
c,h5a.x
a,|
S:J\
Sub main()
Set swApp = Application.SldWorks
Lang = swApp.GetCurrentLanguage() de5Y$KH\s]
MsgBox Lang '弹出消息框,显示当前SW使用的语言www.caxhome.comseWbKO@ Ou
End Subwww.CAxHome.comN#Y.i)r-z {
具体的操作方法是这样
1. 打开SWCAD/CAM之家论坛 {:G9V%\ hX.Im
2. 使用菜单【工具/宏操作/新建...】
. 输入文件名,并保存
4. 显示VBA的工作界面#G,Q TnSn
5. 删除窗口中自动生成的程序代码,然后将上面的程序复制到窗口中(中括号内的部分,不包括中括号)&@)k.O$gvz.q f m2H;@O
6. 使用工具栏上的保存按钮,保存结果
使用菜单【运行/运行子过程】,或者单击工具栏上的运行按钮(蓝色箭头)%urkj P
|6K
8. 显示运行结果第四课www.CAxHome.comg*g(S}U0RGE
L*\bSq
关于变量的声明
,CATIA,PROE,UG,SOLIDWORKS,模具,设计,招聘,培训,汽车,CAxHome[b*X\LM
一般在变量使用前,都要首先声明变量,下面来看看声明对象变量的方法CAD/CAM之家论坛J6p
c/V:^_V4Ly5O9G{
www.CAxHome.com`6HTc4IW |
Dim swApp As Objict
swApp As SldWorks.SldWorks
y7lD S0\(B2V6j)P"a,S
上面两段语句的作用都是声明了对象变量“swApp”。
前一段语句将变量声明为一般的对象类型pc O)c1_;H,c4l
后一段语句将变量声明为指定的对象类型(此例中声明为Solidworks应用程序对象)CAD,CAE,CAM,CATIA,PROE,UG,SOLIDWORKS,模具,设计,招聘,培训,汽车,CAxHome-Td;v!D3_z%dO
G&o&D&F
声明指定的对象类型提供自动的类型检查,更快的代码,并增加可读性。建议尽量使用这种声明的方法。
如果有的对象只有在程序执行时才能确定起变量的类型,在编程时不能确定其确切的类型,那么就可以将其声明为一般的对象类型。
CAxHome.com'nhkr;gc;M
下面列举几个SW种常用对象的声明`/uv-B2l*VD3R'W
Dim swApp As SldWorks.SldWorks 'SW应用程序对象-P%g&XdF~H&w,l
Dim swModel As SldWorks.ModelDoc2 '文档对象
Dim swPart As SldWorks.PartDoc '零件文档对象
Dim swAssembly As SldWorks.AssemblyDoc '装配体文档对象
Dim swDrawing As SldWorks.DrawingDoc '工程图文档对象CAD/CAM之家论坛V
W8g
u;C
J9^iu\M
Dim swFeature As SldWorks.Feature '特征对象CAD,CAE,CAM,CATIA,PROE,UG,SOLIDWORKS,模具,设计,招聘,培训,汽车,CAxHome3EcrBF~k6a.@ eB'R
Dim swSelectMgr As SldWorks.SelectionMgr '选择管理器对象第五课
在开发环境中添加类型库的引用CAD/CAM之家论坛G#X5O%m[q0~
先看看添加引用的方法:0^IU5l
BV8j.w[i\2z|
通过菜单 【工具/引用...】,在对话框中选择下面两项 (根据SW的不同,名称可能略有不同)。
SldWorks 2006 Type Library
SolidWorks 2006 Constant Type LibraryCAD/CAM之家论坛:w%W@
QW
前一项定义了SW中的所有对象。如果在你的程序中需要操作SW的对象,就不要忘记选中它。在默认的环境中已经选择了这项。(如果你需要在程序中操作Excel对象,例如读取表格数据,那么不要忘了选中Execl对象库的应用)
后一项定义了二次开发中会用到的SW中所有的常量,默认环境中没有选择,需要自己添加引用。让我们举个例子看看它用什么作用。
下面是一个典型的创建新文档的语句3`W5n(mf0j
set newDoc = SldWorks.NewDocument ( ***, swDwgPaperA3size, ***, *** )CAD/CAM之家论坛-RI-O,X-h(y9f ?)\c
set newDoc = SldWorks.NewDocument ( ***, 8, ***, *** )www.CAxHome.comg"J:NM XZ v
两句语句作用是相同的,但是前一句的可读性更好,我们可以很直观的看到创建了一个A3大小的文档。www.CAxHome.com!e,M"}H#b;Lv
如果没有添加对SW常量的引用,那么,前一种写法将导致程序运行出错。第六课CAD,CAE,CAM,CATIA,PROE,UG,SOLIDWORKS,模具,设计,招聘,培训,汽车,CAxHomeFma6Dd,z
赋值和引用 (Let & Set)CAD,CAE,CAM,CATIA,PROE,UG,SOLIDWORKS,模具,设计,招聘,培训,汽车,CAxHomed9\r&ZI],V-T9G
对于变量的赋值,我们使用Let语句,如:
Let a = 10
我们也可以省略Let,如上句也可写成:^`5acNtS:M,{X
a = 10
对于对象的引用,我们使用Set语句,如:CAD,CAE,CAM,CATIA,PROE,UG,SOLIDWORKS,模具,设计,招聘,培训,汽车,CAxHomeZG5oDX;x8@
Set obj1 = ***Udd$w;L)a(Yjtt
注意,Set不能省略。CAD/CAM之家论坛9f#Lt&E(h;cs4a
赋值和引用是有区别的s9jH*p0^,JE F-_
如:
a = 10
b = a
上例中出现了两个变量,这两个变量是独立的,虽然此时他们的值都是10,但是,如果修改其中一个变量的值并不会影响另一个变量。2kqkY/G |
i2j:ut$Q!Xd0u/_d
Set obj1 = ***www.CAxHome.com"q[mR`? A2B
Set obj2 = obj1
上例中也出现了两个变量,但他们引用了同一个对象,无论如何修改对象,都会同时反映到两个变量。www.caxhome.comh,{[?CU`k9w
其实,引用只是建立了一个访问对象的路径,即使上例中两个变量都被释放,对象依然存在,只是暂时不能被访问而已。第七课
录制宏——快速写代码的方法
所谓录制宏,就是记录人的操作过程,并将其转换成程序代码。
注意,并不是所有的操作都能被转换成代码的,而且,自动录制的程序对环境的要求比较严谨,导致录制的程序兼容性很差。所以,在真正的开发中,录制宏只能担当辅助的角色。
但是录制宏易学易用,值得初学者学习。
以下是录制的过程,以及得到的程序。
第八课
修改特征定义CAD,CAE,CAM,CATIA,PROE,UG,SOLIDWORKS,模具,设计,招聘,培训,汽车,CAxHome PGWb-fx"Yn
手动修改特征定义是我们经常作的事,当然,也可以使用程序自动完成。(修改特征定义的操作是不能用录制宏功能记录的)
让我们利用上边录制的程序来练练如何修改特征定义。
CAM之家论坛 Y$J i1f3v)sG Ok
1. 获得特征对象(Feature Object)的引用
我们可以很容易的找到程序中添加拉伸特征的语句,但是他没有建立引用。自己手动改一下;
原来:Part.FeatureManager.FeatureExtrusion True, False, False, 0, ...
改为:Set featObject = Part.FeatureManager.FeatureExtrusion (True, False, False, 0, ...)CAD,CAE,CAM,CATIA,PROE,UG,SOLIDWORKS,模具,设计,招聘,培训,汽车,CAxHome2v&~]Ri:F*O6|+?X
2. 获得特征定义对象(Feature Definition Object)的引用www.caxhome.comFw D@e4DJk5nD
注意,特征对象中保存的数据主要是特征的名称,特征的显示状态等信息,而特征定义对象中保存的信息才是我们需要的。www.caxhome.com0du~
s,c1I
可以用 "GetDefinition" 方法获得特征定义对象的引用www.CAxHome.com$eWe*d;H
OW
Set featObjDef = featObject.GetDefinition()3. 使用对象的属性和方法以获得需要的数据,例如获取拉伸特征第一方向的拉伸深度2vK'[Y3Y3sp
a = featObjDef.GetDepth(True)\J}C8DB w
4. 修改特征定义,设置拉伸深度为原来的两倍
featObjDef.SetDepth True, a * 2www.caxhome.com{1t)^%V3fj-D:X
5. 更新特征定义
featObject.ModifyDefinition featObjDef, Part, Nothing
(H2m:UB&L~XP A'P
编辑原文件,按以上步骤修改,并且在文档头部添加适当的变量声明,然后看看运行结果。CAD,CAE,CAM,CATIA,PROE,UG,SOLIDWORKS,模具,设计,招聘,培训,汽车,CAxHome5_U1iu;A2C
特别注意,无论你的模型使用的是什么单位制,在二次开发时,一律使用米(m)为长度单位,弧度(rad)为角度单位。
可以尝试一下,修改特征定义中的其他项目。