SolidWorks API是SolidWorks的OLE应用程序开发接口,用户可以利用它和支持OLE编程的开发工具,如VB、VBA(Excel,Access)、C、VC++等对SolidWorks进行二次开发,建立适合用户需要的、专用的SolidWorks 功能模块。 O9sEaVX
kJ_8|
一、问题的提出 VX$WL"A
T^1
Z_|A
大多数工程图纸的标题栏中应该包括一些基本的设计信息,如零件名称、零件代号、材料以及设计人员和设计日期等,其中,零件的名称、代号、材料、数量、重量及一些重要的后处理要求等信息还应该出现在装配图的材料明细表(BOM)中。这些内容如果在工程图中一一进行编写和修改,其工作量是很大的,并且这种处理方法也不利于保证设计信息的一致性,对模型文件(零件或装配体文件)和图纸文件的管理来讲是脱节的。SolidWorks是一个全相关的三维机械设计软件,模型文件中的设计数据,如尺寸、注释、文件属性等内容与工程图相关,因此,我们在处理上述工程图标题栏和材料明细表中的设计数据时,应该将这些内容保存在模型文件中,并且自动显示在工程图相应的位置上。当需要对工程图中的内容进行修改时,直接修改模型文件中的相应数据即可实现。 06S
R74
K] (*l"'U5
这样的处理方法不仅保证了设计信息的一致性,而且可以大大提高设计效率。根据这个设想,笔者将这些设计信息进行了归纳,并将它们作为模型文件的自定义属性保存在模型文件指定配置的属性(在SolidWorks中,选择菜单"文件→属性",单击"指定配置"标签,如图1所示)中,针对模型文件指定配置的这些属性可以自动带入到工程图的标题栏和材料明细表。 CP~ZIIip"
LTTMa-]Yy
对于材料明细表模板进行修改或建立新的明细表模板就可以在装配图中的材料明细表中显示所需要的设计信息(工程图格式文件的定义和材料明细表模板的定义,请参阅《SolidWorks2001中文版实用技术精粹》一书)。因此,无论何时需要修改设计信息,只需在SolidWorks中打开相应的模型文件,修改指定配置属性即可。然而,即使采用这样的处理方法,在修改文件当前配置属性时仍然显得有些繁琐,能否为SolidWorks建立一个工作界面,可以更加方便地添加和修改这些信息就成了问题的关键。 ;KlYiu
aaR& -M@
二、自定义属性Cpbom lhGJ/By- -
-d\sKc
为了更大程度地提高工作效率,我们利用VB6.0通过SolidWorks API建立了自定义属性设置程序--Cpbom,这个程序通过一个对话界面直接对当前模型文件的当前配置进行添加或修改,其基本功能如下: nMyl(kF[
Mqr_w!8d
☆ 针对配置添加模型文件的自定义属性; u
S1O-Q>
3=YpZ\l}
☆ 设置的项目包括:零件代号、材料名称、后处理、设计者姓名、设计日期; i7Up AHd/
DW. w=L|5R
☆ 确定自定义属性后,自动保存文件;如当前文件还没有保存,提示文件保存路径和文件名称; u=.8M`FxP
aj1]ZT\
☆ 针对装配文件,可以选择是否删除"材料"和"后处理"两个属性。本程序利用VB进行编译生成可执行文件。自定义属性界面 "自定义属性"程序就是通过SolidWorks API对当前模型文件中当前配置的自定义属性的名称和值进行"读"和"写"的操作,程序非常简单,这里介绍一下该程序中用到的一些SolidWorks API的对象和方法。 cs+3&T:,*
y?<KN0j
1.SolidWorks对象这里指的是SolidWorks API的最高级别的对象。通过该对象可以控制SolidWorks软件的执行或退出,以及SolidWorks文件的建立、打开、关闭等操作。在VB中利用CreateObject方法来获得SolidWorks对象,利用该对象的activedoc方法可以获得当前SolidWorks文件对象,文件对象为空时,表示SolidWorks 没有打开任何文件。 gw]%:
WeH
-fq
Dim swApp As ObjectDim _B0(1(M<2
K& #il
activeDocument As ObjectSet swApp=CreateObject("SldWorks.Application") )XN_|zCk
X8$i*#D
Set activeDocument = swApp.activedocIf (activeDocument Is Nothing) Then Dim Msg, Style, title Style = vbExclamation B.q/}\
?(
S(zp_
title = "模型自定义属性" =SfNA
F
6:ettdj
Msg = "请首先打开一个Solidworks模型文件" /4&gA5BS]
-]Z7^
Call MsgBox(Msg, Style, title) " Display error message R~\R>\
[7Lr"
End QqA=QTZ}
(~GQncqa
End If uuC ["Z
tVAi0`DV
2.获取当前文件信息自定义属性程序是对模型文件设置自定义属性,与工程图文件无关,因此需要利用GetType方法获得当前文件的类型,并利用Gettitle()方法和Getpathname()方法获得当前文件的名称和存盘路径。 w4U,7%V
AW]\n;f
Dim docType As LongDim zjpZ] $
J}#gTG( '
docName As StringDim ?QOU9"@+B
7n7Xyb
filename As StringDim jRJG .hcB5
YB 38K(
FilePath as StringdocType = activeDocument. tbFAVGcAM
ZL(
j5E
GetTypeIf (docType = swDocPART) oac)na:O#
'Gy`e-yB
Then docName = "零件"With CPbomfrm .deldescription.Enabled = False .delmaterial.Enabled = FalseEnd With Picture5.Picture = Picture3.Picture ,;$OaJFT
F]aoTy
ElseIf (docType = swDocASSEMBLY) Then docName = "装配" Picture5.Picture = Picture2.Picture xXe3E&
+Nt4R:N
ElseIf (docType = swDocDRAWING) Then Style = vbExclamation Msg = "当前文件是工程图文件,请打开零件或装配文件" ABWn49c.
EoAr}fI
Call MsgBox(Msg, Style, title) " Display error message +\eJxyO
v e&d"8+]
End n{tc{LII/
$.PRav
End ,
>LJpv
4p:d#,?r
If filename = activeDocument.GETTITLE() PkvW6,lS
7v5]%%E/
FilePath = activeDocument.getpathname() my (@~'
!oWB5x~:P
3.获取文件配置名称SolidWorks API提供了按照配置名称访问自定义属性的方法--CustomInfo2(读取自定义属性的值)、deletecustominfo2(删除指定的自定义属性)、ADDcustominfo3(添加自定义属性的名称和参数值),这些方法都要求指定文件的配置名称。因此,为了对当前模型文件和当前配置设定自定义属性,必须首先要获得当前配置的名称,利用GetActiveConfiguration()方法可以获得当前模型文件配置的对象,并利用Name方法获得当前配置的名称。 7Ak<e tHD
(RddR{mX
Dim ConfName As StringSet 6'^_*n
m5K?oV@n
CurCFG = activeDocument.GetActiveConfiguration() 3\7MeG`tl
1}(22Q;
ConfName = CurCFG.Name 0<,{poMM
&<A,\M
4.按照配置访问自定义属性在本程序中,笔者对于指定配置的属性设置按照如下的步骤: i2=- su
%'Cj~An
(1)按照配置名称读取文件中的自定义属性值,并赋值于相应的文本框; /2tA
n
#])"1fk
(2)判定当前文件和当前配置是否已经改变,如其中之一发生变化,则提示错误信息; }]x \ `}o
2bt>t[0ad
(3)根据配置名称删除指定的自定义属性; OoB|Eh|),
F%w!I 9
(4)将相应文本框中的内容按照配置名称添加到模型文件自定义属性名称和参数值。下面对上述控制配置自定义属性的三种方法加以介绍。 :u>RyKu|&R
j4$nr=d.6
☆ CustomInfo2:获取或设置当前文档指定配置的自定义属性的值。 4MgN
roADC?@r
value = ModelDoc.CustomInfo2 (configuration, fieldName) r w?wi}}gn
.5|[gBK
其中,configuration为配置名称; ;uBGB
h<
6S`_L
fieldName为自定义属性的名称。 V*vQNPey
'RjEdLrI
☆ deletecustominfo2:删除当前文档指定配置的自定义属性的值 `16'qc
\Zj%eW!m
retval = ModelDoc.DeleteCustomInfo2(configuration, FieldName ) UG2+Y']
IWv 9!lW
☆ ADDcustominfo3:向当前文档中指定的配置添加自定义属性以及值 .9J^\%JD
Ac:`xk<
retval = ModelDoc.AddCustomInfo3 ( configuration, FieldName, FieldType, FieldValue ) @6;OF5VsQ
_2fW/U54_
其中,FieldType为自定义属性的类型;FieldValue为自定义属性的值。 btW#ebm
Nq8ON!<<
下面这段代码是单击"确定"的子程序,为了简单,只给出了其中一个自定义属性的处理过程。 };Q}C0E
csP4Oq\g[
Private Sub cmd_OK_Click()On Error GoTo ERR_91 K~L&Z?~|E
m$vq%[/#
Dim swApp2 As ObjectDim )N.3Q1g-
s)-An(Uw
activeDocument2 As ObjectDim )D8op;Fn
1Lb)S@Q`*R
curcfg2 As ObjectDim g}_2T\$k
_Ewh:IM-
cfgname2 As StringDim "~4V(
0#V"
retval As BooleanSet )!8qJQD
kV'zAF
v
swApp2 = CreateObject("SldWorks.Application") /YJo"\7
!>48`o^
Set activeDocument2 = swApp2.activedoc <cTX;&0=
<"3q5ic/Z
Set curcfg2 = activeDocument2.GetActiveConfiguration() ?_eLrz4>L^
RY;V@\pRY+
cfgname2 = curcfg2.Name" 判断文件或配置是否改变,如改变,则提示错误。 iv*RE9?^
?!RbS#QV}
If cfgname2 = ConfName And FilePath = activeDocument2.getpathname() Then " 删除属性设置
+SFFwjI
R27'00(Z0
retval = activeDocument2.deletecustominfo2(ConfName, "PartID")" 添加属性 x^lcT
=xk>yw!O)
retval = activeDocument2.ADDcustominfo3(ConfName, "PartID", swCustomInfoText, frmPartID) " 保存文件 c=v016r\
|f_'(-v`E
retval = activeDocument2.Save() A7L; ims7
[UwQi!^-O
Else Style = vbExclamation Tvv>9gS
/pF8S!,z
title = "模型自定义属性" ^Mq/Cf_T
,
z\Qd07u
Msg = "错误:打开的文件或配置已经改变!" & Chr(10) & "请重新执行本程序" 8ZtJvk`
6,q0F*q
Call MsgBox(Msg, Style, title) N@thewt|
Z_GGH2u
End 8F[];LF>
aE0R{yup Z
End \GEz.Vb
2J=`"6c
IfERR_91: Style = vbExclamation title = "模型自定义属性" %pVsafV
An_(L*Qz
Msg = "程序运行错误,文件可能已经关闭" & Chr(10) & "自定义属性无法添加,单击确定退出!" P00G*iY~\
q^xG%YdPz+
Call MsgBox(Msg, Style, title) z</C)ObL
gP>pbW_
End 3eY>LWx
-;cF)C--12
End Sub 2/3yW.C
zY/Oh9`=v
三、在SolidWorks界面中执行应用程序 #M!u';bZ
jU-LT8y:
对于使用VB编译的EXE、DLL文件,目前SolidWorks还不能直接支持这些文件作为插件使用,如果要在SolidWorks 中直接调用通过VB编译的可执行程序,可以使用SolidWorks"宏"操作来进行。利用"宏"在SolidWorks界面中添加指定的应用程序后,就好像SolidWorks调用了自身的功能一样,利用类似的方法,可以在SolidWorks添加任何可执行的文件。下面利用"自定义属性"程序来说明一下步骤。1.建立"宏"文件在SolidWorks中,我们利用录制并修改"宏"的方法来建立所需要的"宏"文件。主要步骤如下: fr~Eb'8
0(i3RPIj\
(1)选择菜单"工具→宏操作→录制"。 >vD}gGBe
c#x~x
(2)停止录制,并保存宏文件。给定文件名称,如:Cpbom.swp。 b_sasZo
<VZ43I
(3)选择菜单"工具→宏操作→编辑",把Cpbom.swp "宏"文件录制的内容全部删除,并输入下面的内容。 8Yc-3ozH
DOyO`TJi
Sub main()MyAppID = Shell("C:Program FilesCPbomCPbom.exe", 1) AppActivate MyAppID I'xc$f_+
w6Gez~8
End Sub 4D&