一、现有的方法分析
最近在使用solidworks画三维图,使用的是图号+空格+图名的命名方式。这样的命名方式可以保证零部件名称的唯一性,在两个机台互相装配的时候,不会因为重名而出现问题。但是在工程图里面的标题栏中一般图号和图名是分开填写在不同的地方,所以需要做图号分离操作。
搜了网上不少的教程,有纯用宏命令的办法,也有使用方程式的办法。
1.宏代码的方式
宏就是写了一段VBA代码,在已经建好的模型里面点击一下运行,即可自动将图号和图名更新到属性里面。宏用起来比较简单,做成宏按钮一键即可分离,但是图名和图号属性与文件名没有关联,有时候我们需要对零部件改名,而改了名字之后它没办法自动更新,需要手动更新。
- 优点:新旧零件都比较方便(都是一键实现)
- 缺点:零件改名后,需要手动更新
2.方程式的方式
方程式的方法呢,就是使用全局变量和属性,利用solidworks全局变量自动更新的特点,将图号和图名自动更新到相应的属性里面去。
在实际使用的过程中,零部件改名后,方程式可以自动更新。对于新的零件,可以将前面含有方程式的零件做成零件模板,调用这个模板,就不用每个零件都输入方程式了。但是对于已经建立好的模型,就需要挨个输一遍方程式,太过于麻烦。
- 优点:无需手动更新,可以自动关联、做成模板之后的新建立零件使用方便
- 缺点:旧零件不好用,需要手动输入
二、宏与方程式结合的方式
基于宏命令和方程式图号分离的两种方法,取其所长,将添加方程式步骤加入了宏命令里面,结合做成了一个含有方程式的宏命令
- 使用过该宏命令的零件,图名和图号自动和零件名称关联,改名后,自动更新
- 使用过该宏命令的零件,可以存为零件模板,后续使用该模板建立的零件,就不需要每次先点击该宏命令按钮了。
1.宏代码
Dim swApp As Object
Sub main()
'用字符串来临时存放代码
Dim s As String
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swEqnMgr As SldWorks.EquationMgr
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swEqnMgr = swModel.GetEquationMgr
Set CurCFG = swModel.GetActiveConfiguration()
ConfName = CurCFG.Name
'建立两个属性(代号代码和名称代码)
blnretval = swModel.AddCustomInfo3(ConfName, "代号代码", swCustomInfoText, frmPartID)
blnretval = swModel.AddCustomInfo3(ConfName, "名称代码", swCustomInfoText, frmPartID)
'为代号代码属性赋值
s = "part.Extension.CustomPropertyManager("""").Add3(""代号"", swCustomInfoText, Left(part.GetTitle, InStrRev(part.GetTitle, "" "") - 1), 1)"
dummy = swModel.Extension.CustomPropertyManager(swModel.ConfigurationManager.ActiveConfiguration.Name).Set("代号代码", s)
'为名称代码属性赋值
s = "part.Extension.CustomPropertyManager("""").Add3(""名称"", swCustomInfoText,Mid(part.GetPathName, InStrRev(part.GetPathName, "" "") + 1, InStrRev(part.GetPathName, ""."") - InStrRev(part.GetPathName, "" "") - 1), 1)"
dummy = swModel.Extension.CustomPropertyManager(swModel.ConfigurationManager.ActiveConfiguration.Name).Set("名称代码", s)
'将代号代码和名称代码属性添加到全局变量A和B
swEqnMgr.Add2 0, ("""A"" = ""代号代码"""), False
swEqnMgr.Add2 0, ("""B"" = ""名称代码"""), False
End Sub
2.使用方法
- 用默认零件模板新建一个零件
- 在工具->宏->新建,建立一个新的宏命令,命名为图号分离part.swp,将上面的代码复制替换进去
- 点击保存后关掉编辑宏窗口,在零件的命令栏上空白处右键,点击自定义->命令->宏->新建宏按钮(拖动的方式放到上面空白处),添加刚刚保存的宏文件,点击确定。即可在命令栏上新增一个宏按钮。
- 保存刚刚建立的零件,名称改为图号+空格+图名的命名方式,例如10000 零件
- 点击刚才做好的图号分离按钮,点击红绿按钮刷新,即可看见已经添加好的方程式和在自定义属性里面做好的图号分离,分别填在了名称和代号当中。
7.对于上面这个文件,我们可以另存为零件模板的格式,以后建立的新零件就不用再次点击宏按钮,可以直接使用啦。
8.将刚才模板的路径添加进文件位置里面,下次新建零件的时候,就能以该模板新建零件了
9.对于装配体也是一样的操作,只不过宏代码有所改变,使用下面一段代码即可。
Dim swApp As Object
Sub main()
'用字符串来临时存放代码
Dim s As String
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swEqnMgr As SldWorks.EquationMgr
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swEqnMgr = swModel.GetEquationMgr
Set CurCFG = swModel.GetActiveConfiguration()
ConfName = CurCFG.Name
'建立两个属性(代号代码和名称代码)
blnretval = swModel.AddCustomInfo3(ConfName, "代号代码", swCustomInfoText, frmPartID)
blnretval = swModel.AddCustomInfo3(ConfName, "名称代码", swCustomInfoText, frmPartID)
'为代号代码属性赋值
s = "assembly.Extension.CustomPropertyManager("""").Add3(""代号"", swCustomInfoText, Left(assembly.GetTitle, InStrRev(assembly.GetTitle, "" "") - 1), 1)"
dummy = swModel.Extension.CustomPropertyManager(swModel.ConfigurationManager.ActiveConfiguration.Name).Set("代号代码", s)
'为名称代码属性赋值
s = "assembly.Extension.CustomPropertyManager("""").Add3(""名称"", swCustomInfoText,Mid(assembly.GetPathName, InStrRev(assembly.GetPathName, "" "") + 1, InStrRev(assembly.GetPathName, ""."") - InStrRev(assembly.GetPathName, "" "") - 1), 1)"
dummy = swModel.Extension.CustomPropertyManager(swModel.ConfigurationManager.ActiveConfiguration.Name).Set("名称代码", s)
'将代号代码和名称代码属性添加到全局变量A和B
swEqnMgr.Add2 0, ("""A"" = ""代号代码"""), False
swEqnMgr.Add2 0, ("""B"" = ""名称代码"""), False
End Sub