solidworks模型自定义属性的批量处理的宏代码
SolidWorks宏编程的基础知识与技巧

SolidWorks宏编程的基础知识与技巧SolidWorks是一款广泛应用于工程设计和制造的计算机辅助设计软件。
宏编程是SolidWorks中的一项强大功能,通过使用宏,可以自动化设计过程,提高工作效率,并且可以根据用户的特定需求进行定制开发。
本文将介绍SolidWorks宏编程的基础知识与技巧,帮助初学者快速入门。
1. 什么是SolidWorks宏编程?SolidWorks宏是一系列的命令和操作,可以通过VBA(Visual Basic for Applications)编写,用于自动化SolidWorks软件的功能。
宏可以运行在SolidWorks环境中,并且可以与CAD模型进行交互,实现设计自动化和定制开发。
2. 如何创建宏?在SolidWorks中,可以使用宏记录器来记录用户的操作并生成相应的宏代码。
打开SolidWorks软件,选择“工具”菜单下的“宏”选项,然后点击“记录”按钮开始录制宏。
当完成相关操作后,点击“结束录制”按钮,系统将自动生成相应的宏代码。
3. 如何编辑宏代码?通过VBA编辑器可以对宏代码进行编辑和修改。
打开SolidWorks软件,在宏编辑器中,可以查看和修改宏的代码。
VBA编辑器提供了丰富的功能和语法提示,可轻松编写和修改宏代码。
4. SolidWorks宏编程的基本语法宏编程主要使用VBA语言,以下是一些常用的基本语法:- 变量:使用“Dim”关键字来声明变量,例如:Dim i As Integer- 循环结构:使用“For...Next”和“Do...Loop”来实现循环功能- 条件判断:使用“If...Then...Else”和“Select...Case”来进行条件判断- 函数和过程:使用“Function”和“Sub”来定义函数和过程- 对象操作:使用“Set”关键字来引用和操作SolidWorks中的对象5. SolidWorks宏编程的常用应用- 批量操作:通过编写宏来批量执行某项操作,如批量导出图纸或模型数据等。
利用子件进行solidworks模型自定义属性的批量处理

Dim time_start As String
Dim txt_path As String
Set swApp = Application.SldWorks
Dim TemplateName As String
Dim i, j, n, k As Integer
Dim swBOM_name As String
Dim component As Component2
For Each SingleComponent In Components '遍历
Set swComponent = SingleComponent
End If
Call Custominfo_change(swModel2.GetActiveConfiguration().Name)
Dim b() As String
Dim m, n As Integer
'已知的bug记录
Public swModel2 As SldWorks.ModelDoc2
Public PARTNAME_Value_temp As String
Public MATERIAL_Value2_temp As String
m = m - 1
ReDim Preserve a(1, m)
Exit For
End If
vCustInfoName_temp_value2 = swModel2.CustomInfo(vCustInfoName2)
Dim Components As Variant
Dim SingleComponent As Variant
关于SolidWorks的自定义属性

书山有路勤为径;学海无涯苦作舟
关于SolidWorks的自定义属性
关于SolidWorks的“自定义属性”
定义自定义属性的目的,主要是在工程图中自动插入信息,您可以将图
纸格式中的注释文字链接到自定义属性。
在工程图的标题栏、明细表中都可以调用。
调用(或链接)的方法为:
用:$PRP:\\\\\”自定义属性名称\\\\\”格式调用零件文件中的自定义属性值,如:$PRP:\\\\\”代号\\\\\”;
用:$PRPSHEET:\\\\\”自定义属性名称\\\\\”格式调用工程图文件中的自定义属性值,如:$PRPSHEET:\\\\\”数量\\\\\”;
用:$PRP:\\\\\”系统属性\\\\\”格式调用零件文件中的系统属性值,如:$PRP:\\\\\”SW-图纸比例\\\\\”。
可用的系统属性参见SolidWorks帮助主题中的:链接注释到文件属性。
适当地定义好自定义属性并按上述方法链接,标题栏和明细表中的项目
内容,如代号、名称、数量、重量等就可以自动调用了。
专注下一代成长,为了孩子。
solidworks模型自定义属性的批量处理的宏代码

Attribute VB_Name = "利用子件处理属性1"'利用子件进行自定义属性的批量处理的VBA代码'比较完善的第一版完成时间2012.11.05,作者:张中锋'适用于深圳东风有限公司solidworks老模型属性更改满足金蝶公司PLM系统要求实例'测试通过环境:2012.11.05 windows XP SP3 ;solidworks 2010 SP02(32bit)'''''''''''''''' '''''''''''''''' '''''''''''''''' ''版本更新日志'1.0 2012.10.29 ①对属性中,存在空白情况处理时数据异常进行修复;②对于已经存在的自定义属性值,保护其值不被处理'已知的bug记录Public swModel2 As SldWorks.ModelDoc2Public PARTNAME_Value_temp As StringPublic MATERIAL_Value2_temp As StringPublic swApp As SldWorks.SldWorksSub main()Dim swModel As SldWorks.ModelDoc2Dim swModelDocExt As SldWorks.ModelDocExtensionDim swSelMgr As SldWorks.SelectionMgrDim swBOMAnnotation As SldWorks.BomTableAnnotationDim swBOMFeature As SldWorks.BomFeatureDim swBomTable As VariantDim boolstatus As BooleanDim BomType As LongDim Configuration As StringDim TemplateName As StringDim i, j, n, k As IntegerDim swBOM_name As StringDim component As Component2Dim value_temp As IntegerDim time_start As StringDim txt_path As StringSet swApp = Application.SldWorksSet swModel = swApp.ActiveDoctxt_path = swModel.GetPathName() & " .csv"Open txt_path For Output Shared As #400Print #400, "图样代号"; ","; "零件名称"; ","; "零件材料"; Chr(10);Configuration = swModel.GetActiveConfiguration().NameIf swModel.GetType = 1 ThenSet swModel2 = swApp.ActiveDocCall Custominfo_change(Configuration)ElseIf swModel.GetType = 2 Thenvalue_temp = swModel.ResolveAllLightWeightComponents(False) '轻化取消到还原状态Dim Components As VariantDim SingleComponent As VariantDim swComponent As ponent2Components = swModel.GetComponents(False) '获取整个装配体的组成部件(零件或者装配体)For Each SingleComponent In Components '遍历Set swComponent = SingleComponentIf Not swComponent Is Nothing ThenIf swComponent.GetModelDoc() Is Nothing Then '判断子件对象模型是否存在;轻化状态下获取不到,为空Debug.Print "没有通过"ElseDim x As IntegerDo '此循环实现处理当前模型和子件属性If Not swComponent Is Nothing And x < 99 Then '一个很原始的方法强制使用当前的模型Set swModel2 = swModelx = 100ElseSet swModel2 = swComponent.GetModelDoc() '取得子件对象模型x = 101End IfCall Custominfo_change(swModel2.GetActiveConfiguration().Name)Loop Until x = 101End IfElseDebug.Print " 不能获取到子件"End IfNextElseMsgBox "不是零件或者装配体模型"End IfswModel.Save '保存文件Close #400MsgBox "属性转换完毕"End SubPrivate Function Custominfo_change(ByVal vConfigName As String)'处理模型的属性Dim vConfigNameArr As VariantDim vCustInfoNameArr As VariantDim vCustInfoName As VariantDim vCustInfoName2 As VariantDim vCustInfoNameArr2 As VariantDim vCustInfoName2_temp As StringDim vCustInfoName_temp As StringDim a() As StringDim b() As StringDim m, n As IntegervCustInfoNameArr = swModel2.GetCustomInfoNames2(vConfigName)vCustInfoNameArr2 = swModel2.GetCustomInfoNamesm = 0If Not IsEmpty(vCustInfoNameArr2) Then '取得自定义属性表的属性数据For Each vCustInfoName2 In vCustInfoNameArr2vCustInfoName2_temp = CStr(vCustInfoName2)If vCustInfoName2_temp = "" Then '处理属性表中的空白数据行m = m - 1ReDim Preserve a(1, m)Exit ForEnd IfvCustInfoName_temp_value2 = swModel2.CustomInfo(vCustInfoName2)ReDim Preserve a(1, m)a(0, m) = Trim(vCustInfoName2_temp)a(1, m) = Trim(vCustInfoName_temp_value2)m = m + 1ReDim Preserve a(1, m)NextEnd Ifn = 0If Not IsEmpty(vCustInfoNameArr) Then '取得配置特定属性表的属性数据For Each vCustInfoName In vCustInfoNameArrvCustInfoName_temp = CStr(vCustInfoName)If vCustInfoName_temp = "" Then '处理属性表中的空白数据行n = n - 1ReDim Preserve b(1, n)Exit ForEnd IfvCustInfoName_temp_value = swModel2.CustomInfo2(vConfigName, vCustInfoName)ReDim Preserve b(1, n)b(0, n) = Trim(vCustInfoName_temp)b(1, n) = Trim(vCustInfoName_temp_value)n = n + 1ReDim Preserve b(1, n)NextEnd IfDim s, t As IntegerIf m > 0 Then '当数组a中有数据时For s = 0 To UBound(a, 2) '循环取出a中存储的每一条数据If a(0, s) <> "" And a(1, s) <> "" Then '当数据有效时Call OldCustominfo_Value(a(0, s), a(1, s), "PARTNAME")ElseIf a(0, s) = "" Then '当数据无效时(此情况只会是取得最后一条数据时)Exit ForEnd IfNext sIf PARTNAME_Value_temp = "" Then '在a中没有获取到合适的数据If n > 0 ThenFor t = 0 To UBound(b, 2) '循环取出b中存储的每一条数据If b(0, t) <> "" And b(1, t) <> "" Then '当数据有效时Call OldCustominfo_Value(b(0, t), b(1, t), "PARTNAME")ElseIf b(0, t) = "" Then '当数据无效时(此情况只会是取得最后一条数据时)Exit ForEnd IfNext tEnd IfEnd IfEnd IfIf m > 0 ThenFor s = 0 To UBound(a, 2)If a(0, s) <> "" And a(1, s) <> "" ThenCall OldCustominfo_Value(a(0, s), a(1, s), "MATERIAL")ElseIf a(0, s) = "" ThenExit ForEnd IfNext sIf MATERIAL_Value2_temp = "" ThenIf n > 0 ThenFor t = 0 To UBound(b, 2)If b(0, t) <> "" And b(1, t) <> "" ThenCall OldCustominfo_Value(b(0, t), b(1, t), "MATERIAL")ElseIf b(0, t) = "" ThenExit ForEnd IfNext tEnd IfEnd IfEnd IfDim DRAWNO_value As StringDim PARTNAME_value As StringDim MATERIAL_value As StringPARTNAME_value = Trim(PARTNAME_Value_temp)MATERIAL_value = Trim(MATERIAL_Value2_temp)'使用模型的绝对路径获取文件图号,比使用标题更安全Dim DRAWNO_value1, DRAWNO_value2, DRAWNO_value13 As StringDim DRAWNO_value_N As IntegerDRAWNO_value1 = swModel2.GetPathNameDRAWNO_value2 = StrReverse(DRAWNO_value1)DRAWNO_value_N = InStr(1, DRAWNO_value2, "\")DRAWNO_value3 = Mid(DRAWNO_value2, 8, DRAWNO_value_N - 8)DRAWNO_value = StrReverse(DRAWNO_value3)If Not IsEmpty(vCustInfoNameArr2) ThenFor Each vCustInfoName2 In vCustInfoNameArr2 '删除自定义属性bRet = swModel2.DeleteCustomInfo(vCustInfoName2)NextEnd IfswModel2.AddCustomInfo3 "", "DRAWNO", swCustomInfoText, DRAWNO_value '写入图样代号DRAWNOswModel2.AddCustomInfo3 "", "PARTNAME", swCustomInfoText, PARTNAME_value '写入零件名称PARTNAMECall new_unitIf Trim(Left(DRAWNO_value, 1)) <> "Q" And Trim(Left(DRAWNO_value, 2)) <> "GB" Then '检查标准件swModel2.AddCustomInfo3 "", "MATERIAL", swCustomInfoText,MATERIAL_value '写入零件材料MATERIALCall new_MaterialWeight_value = Show_mass(swModel2.GetPathName) '获取零件重量的数值swModel2.AddCustomInfo3 "", "Weight", swCustomInfoText,Format(Weight_value, "0.0") '写入零件重量Weight,使用1位小数"swModel2.AddCustomInfo3 "", "SPEC", swCustomInfoText, ""swModel2.AddCustomInfo3 "", "REMARK", swCustomInfoText, ""End IfPrint #400, DRAWNO_value; ","; PARTNAME_value; ",";MATERIAL_value; Chr(10);PARTNAME_Value_temp = ""MATERIAL_Value2_temp = ""End FunctionPrivate Function new_unit() '更改单位Dim boolstatus As Booleanboolstatus =swModel2.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitSystem, 0, swUnitSystem_e.swUnitSystem_Custom)boolstatus =swModel2.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUni tsLinearFractionDenominator, 0, 0)boolstatus =swModel2.Extension.SetUserPreferenceToggle(swUserPreferenceToggle_e.swUnitsLinea rFeetAndInchesFormat, 0, False)boolstatus =swModel2.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUni tsDualLinearFractionDenominator, 0, 0)boolstatus =swModel2.Extension.SetUserPreferenceToggle(swUserPreferenceToggle_e.swUnitsDualL inearFeetAndInchesFormat, 0, False)boolstatus =swModel2.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUni tsMassPropDecimalPlaces, 0, 1)boolstatus =swModel2.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUni tsMassPropMass, 0, swUnitsMassPropMass_e.swUnitsMassPropMass_Kilograms)End FunctionPrivate Function new_Material() '更改材质Dim matDbs As VariantDim swPart As ObjectDim MaterialDatabase As StringDim MATERIAL_value_temp As StringDim reval As Boolean'判断当前的模型文件类型If swModel2.GetType() = 1 Then 'swModel_filename_value 值为1时,打开零件模型matDbs = swApp.GetMaterialDatabasesSet swPart = swModel2MaterialDatabase = matDbs(0)MATERIAL_value_temp = swPart.GetMaterialPropertyName2(Configuration_Name, MaterialDatabase) '获取模型树中的材质值If MATERIAL_value_temp = "" Then '如果没有指定材质,材质默认为普通碳钢reval = swModel2.SetMaterialPropertyName2(Configuration_Name, MaterialDatabase,"普通碳钢")swModel2.ClearSelection2 TrueEnd IfEnd IfEnd FunctionPrivate Function OldCustominfo_Value(ByVal temp11 As String, ByVal temp22 As String,ByVal temp23) As String '处理旧自定义属性及值OldCustominfo_Value = ""If Trim(temp22) <> "" And Left(Trim(temp22), 1) <> Chr(34) ThenIf temp23 = "PARTNAME" Then '如果调用的参数为PARTNAME,需要处理的变量为 PARTNAME_value_temp,赋相关值If temp11 = "PARTNAME" And Left(Trim(temp22), 1) <> "名" And Left(Trim(temp22), 1) <> "D" And Left(Trim(temp22), 1) <> "零" ThenPARTNAME_Value_temp = Trim(temp22)OldCustominfo_Value = PARTNAME_Value_tempElseIf temp11 = "图样名称" Or temp11 = "零件名称" Or temp11 = "名称" ThenIf Left(Trim(temp22), 1) <> "D" And Left(Trim(temp22), 1) <> "零" And Left(Trim(temp22), 1) <> "装" And Left(Trim(temp22), 1) <> "名" ThenPARTNAME_Value_temp = Trim(temp22)OldCustominfo_Value = PARTNAME_Value_tempElseOldCustominfo_Value = ""End IfElseOldCustominfo_Value = ""End IfElseIf temp23 = "MATERIAL" Then '如果调用的参数为MATERIAL,要处理的变量为 MATERIAL_value_temp,赋相关值If temp11 = "MATERIAL" And Left(Trim(temp22), 1) <> "材" And Left(Trim(temp22), 1) <> "D" And Left(Trim(temp22), 1) <> "零" ThenMATERIAL_Value2_temp = Trim(temp22)OldCustominfo_Value = MATERIAL_Value2_tempElseIf temp11 = "材料名称" Or temp11 = "零件材料" Or temp11 = "材料" Thentemp33 = Left(Trim(temp22), 1)If temp33 = "钢" Or temp33 = "4" Or temp33 = "1" Or temp33 = "2" Or temp33 = "Q" Or temp33 = "总" Or temp33 = "部" Or temp33 = "橡" _Or temp33 = "尼" Or temp33 = "组" Or temp33 = "圆" Or temp33 = "方" Or temp33 = "焊" Or temp33 = "装" Or temp33 = "合" Or temp33 = "高" _Or temp33 = "角" Or temp33 = "扁" Or temp33 = "热" Or temp33 = "冷" Or temp33 = "外" Or temp33 = "分" Or temp23 = "有" ThenMATERIAL_Value2_temp = value_G(Trim(temp22))OldCustominfo_Value = MATERIAL_Value2_tempElseOldCustominfo_Value = ""End IfElseOldCustominfo_Value = ""End IfEnd IfElseOldCustominfo_Value = ""End IfEnd FunctionPrivate Function value_G(ByVal value_G_in As String) As String '处理零件材料的值中的国标号Dim value_G_temp As StringDim value_G_out As StringDim G_nomber As Integervalue_G_temp = Trim(value_G_in) '删除变量中开头和结尾的空白字符G_nomber = InStr(value_G_temp, "G") '查找字符“G”的第一次出现的位置If G_nomber > 1 Then '如果获得“G”value_G_out = Left(value_G_temp, G_nomber - 1) '获得字符“G”之前的字符串If value_G_out = "" Thenvalue_G = "" '返回一个空值,没有取得值"Elsevalue_G = value_G_outEnd IfElse '没有字符“G”value_G = value_G_tempEnd IfEnd FunctionPrivate Function Show_mass(ByVal DRAWNO_value11 As String) As String '获取质量的数值Dim DRAWNO_value12, DRAWNO_value113 As StringDim DRAWNO_value1_N As IntegerDRAWNO_value12 = StrReverse(DRAWNO_value11)DRAWNO_value1_N = InStr(1, DRAWNO_value12, "\")DRAWNO_value13 = Mid(DRAWNO_value12, 1, DRAWNO_value1_N)DRAWNO_value1 = StrReverse(DRAWNO_value13)Show_mass = Chr(34) & "SW-Mass@" & DRAWNO_value1 + Chr(34)End Function。
solidworks代名称分离宏命令属性自定义或配置特定中

s o l i d w o r k s代名称分离宏命令属性自定义或配置特定中The pony was revised in January 2021S o l i d W o r k s2014基于宏实现快速"图号名称"分离1.两类代码代码1(内容添加至“自定义下”)DimswAppAsObjectDimPartAsObjectDimSelMgrAsObjectDimboolstatusAsBooleanDimlongstatusAsLong,longwarningsAsLongDimFeatureAsObjectDimaAsIntegerDimbAsStringDimmAsStringDimeAsStringDimkAsStringDimtAsStringDimcAsStringDimjAsIntegerDimstrmatAsStringDimtempvalueAsStringSubmain()'linksolidworksSetswApp=Application.SldWorksSetPart=swApp.ActiveDocSetSelMgr=Part.SelectionManager=1'设定变量c=()'零件名strmat=Chr(34)+Trim("SW-Material"+"@")+c+Chr(34)blnretval=Part.DeleteCustomInfo2("","图样代号")blnretval=Part.DeleteCustomInfo2("","图样名称")blnretval=Part.DeleteCustomInfo2("","材料")a=InStr(c,"")-1'重点:分隔标识符,这里是一个空格,也可用其他符号区分Ifa>0Thenk=Left(c,a)t=Left(LTrim(e),3)Ift="GBT"Thene="GB/T"+Mid(k,4)Elsee=kEndIfb=Mid(c,a+2)t=Right(c,7)Ift=".SLDPRT"Ort=".SLDASM"Ort=".sldprt"Ort=".sldasm"Then j=Len(b)-7'消除后缀(区分大小写,即含4种)Elsej=Len(b)EndIfm=Left(b,j)EndIfblnretval=Part.AddCustomInfo3("","图样代号",swCustomInfoText,e)'代号blnretval=Part.AddCustomInfo3("","图样名称",swCustomInfoText,m)'名称blnretval=Part.AddCustomInfo3("","表面处理",swCustomInfoText,"") EndSub代码2(内容添加至“配置特定”下)'定义swDimaAsIntegerDimbAsStringDimmAsStringDimeAsStringDimkAsStringDimtAsStringDimcAsStringDimjAsIntegerDimstrmatAsStringDimtempvalueAsStringDimPartAsObjectDimswAppAsSldWorks.SldWorks DimswModelDocAsSldWorks.ModelDoc2 DimswConfigAsSldWorks.Configuration DimCustPropMgrAsSldWorks.CustomPropertyManager DimswModelAsSldWorks.ModelDoc2Submain()SetswApp=Application.SldWorksSetswModelDoc=swApp.ActiveDocSetswConfig=SetswModel=swApp.ActiveDocSetCustPropMgr='配置特定延伸'设定变量c=()'零件名strmat=Chr(34)+Trim("SW-Material"+"@")+c+Chr(34)a=InStr(c,"")-1'重点:分隔标识符,这里是一个空格,也可换成其他符号Ifa>0Thenk=Left(c,a)t=Left(LTrim(e),3)Ift="GBT"Thene="GB/T"+Mid(k,4)Elsee=kEndIfb=Mid(c,a+2)t=Right(c,7)Ift=".SLDPRT"Ort=".SLDASM"Ort=".sldprt"Ort=".sldasm"Thenj=Len(b)-7'消除后缀(区分大小写,即含4种)Elsej=Len(b)EndIfm=Left(b,j)EndIf'删除栏CustPropMgr.Delete("图样代号")CustPropMgr.Delete("图样名称")CustPropMgr.Delete("材料")'新增CustPropMgr.Add2"图样代号",swCustomInfoText,e CustPropMgr.Add2"图样名称",swCustomInfoText,m CustPropMgr.Add2"数量",swCustomInfoText,"" CustPropMgr.Add2"材料",swCustomInfoText,strmat CustPropMgr.Add2"单重",swCustomInfoText,"" CustPropMgr.Add2"总重",swCustomInfoText,"" CustPropMgr.Add2"备注",swCustomInfoText,"" EndSub特别说明:在虚拟件中添加属性时,名称会自动加上从属装配体,非虚拟件则不会(此问题急需高人指点)2.操作步骤(以上述代码1为例)一、宏代码1新建宏代码:工具——宏——新建在文件名中输入:图号分离.swp;点击保存,进入宏编辑界面;1.2认识宏编辑界面:1、工程信息2、编程区域3、做一个写代码前的准备工作,把2区域的内容Ctrl+A全选删除。
SOLIDWORKS如何快速批量添加零件属性

SOLIDWORKS如何快速批量添加零件属性
最近有客户反应,公司有一个项目零件模型属性里面要添加一些属性,但是按照SOLIDWORKS的常规操作手法要打开每个模型,在零件属性里面一个一个添加,问有没有什么工具可以批量添加零件属性的。
其实在SolidWorks里面是有这样的工具可以快速批量添加属性的。
这个工具就是SOLIDWORKS自带的SOLIDWORKS Task Scheduler,这个工具可以做的工作很多,比如批量转换文件、批量打印、生成工程图、更新自定义属性…
今天我们主要看一下如何快速更新自定义属性。
我们先打开一个模型可以看到里面是没有属性的。
首先,我们通过开始菜单找到SOLIDWORKS工具
打开SOLIDWORKS Task Scheduler 找到更新自定义属性。
看到可以添加文件(可以选择多个模型)或者添加文件夹(要添加属性的模型放到一个文件夹),我们以添加文件夹为例,选择文件之后看到表里已经出现文件夹位置了,接下来设置一下时间,然后点击下一步:可以选择SOLIDWORKS默认的属性或者自己填写,填写完成后点击完成。
接下来我们就可以看到,出现了这样一个任务,我们等着电脑自动处理完成就好了。
我们再次打开软件的时候就会发现属性已经更新了。
Solidworks模型文件的自定义属性设置--宏

Solidworks模型⽂件的⾃定义属性设置--宏SolidWorks API是SolidWorks的OLE应⽤程序开发接⼝,⽤户可以利⽤它并通过⽀持OLE编程的开发⼯具,如Visual Basici、VBA(Excel,Access)、C、VC、C++等对SolidWorks进⾏⼆次开发,建⽴适合⽤户需要的、专⽤的SolidWorks 功能模块。
本⽂通过介绍“⾃定义属性”这个程序的开发和使⽤过程,来简单地说明⼀下SolidWorks API的应⽤,希望起到抛砖引⽟的作⽤。
⼀、问题的提出⼤多数⼯程图纸的标题栏中应该包括⼀些基本的设计信息,如零件名称、零件代号、材料以及设计⼈员和设计⽇期等⽅⾯的信息,其中,零件的名称、代号、材料、数量、重量、⼀些重要的后处理要求等信息还应该出现在装配图的材料明细表(BOM)中。
这些内容如果在⼯程图中⼀⼀进⾏编写和修改,其⼯作量是很⼤的,并且这种处理⽅法也不利于保证设计信息的⼀致性,对模型⽂件(零件或装配体⽂件)和图纸⽂件的管理来讲是脱节的。
SolidWorks是⼀个全相关的三维机械设计软件,模型⽂件中的设计数据,如尺⼨、注释、⽂件属性等内容与⼯程图相关,因此,我们在处理上述⼯程图标题栏和材料明细表中的设计数据时,应该将这些内容保存在模型⽂件中,并且⾃动显⽰在⼯程图相应的位置上。
当需要对⼯程图中的内容进⾏修改时,直接修改模型⽂件中的相应数据即可实现。
这样的处理⽅法不仅保证了设计信息的⼀致性,⽽且可以⼤⼤提⾼设计效率。
根据这个设想,我们将这些设计信息进⾏了归纳,并将它们作为模型⽂件的⾃定义属性保存在模型⽂件指定配置的属性(在SolidWorks中,选择菜单“⽂件/属性”,单击“指定配置”标签,如图1所⽰)中,针对模型⽂件指定配置的这些属性可以⾃动带⼊到⼯程图的标题栏和材料明细表。
图1 指定模型当前配的属性图1中⾃定义属性的含义和解释如下表:含义代号说明零件代号PartID零件代号是零件的标识,在整个企业中是唯⼀的零件名称⽆采⽤模型名称,即保存模型⽂件的⽂件名称,这样⼯程图的⽂件名可以⾃动默认为模型的⽂件名称材料Material零件的材料,对装配图是可选项后处理Description零件的后处理情况,对装配图是可选项设计⼈员Designed By图纸设计⼈员姓名设计⽇期Designed Date图纸完成⽇期采⽤这样的⽅法处理以后,需要在⼯程图格式⽂件的相应位置建⽴包含这些变量的注释⽂本即可。
现有零件装配体批量加自定义属性

•一、打开属性标签编制程序有多种方法可以启动属性标签编制程序:(1)启动SolidWorks 2013,选择【任务窗格】>【SolidWorks资源】中的【属性标签编制程序】,如图1所示。
(2)点击Windows【开...一、打开属性标签编制程序有多种方法可以启动属性标签编制程序:(1)启动SolidWorks 2013,选择【任务窗格】>【SolidWorks资源】中的【属性标签编制程序】,如图1所示。
(2)点击Windows【开始】菜单>【所有程序】>【SolidWorks 2013】>【SolidWorks工具】>【属性选项卡编制器】。
(3)如果在【工具】>【选项】>【系统选项】>【文件位置】显示下项的文件夹【自定义属性文件】中的路径下无自定义属性标签模板存在时,也可以在打开SolidWorks文件时点击SolidWorks任务窗格的自定义属性选项卡上的【现在生成】,如图2所示。
图1 任务窗格中的属性标签编制程序图2 任务窗格中的自定义属性图3 属性标签编制程序属性标签编制程序打开后的界面如图3所示。
可以为零件、装配体、工程图和焊件创建自定义属性界面。
本文以创建一个零件属性标签模板为例,来介绍属性标签编制程序的使用方法。
读者可以根据需要创建装配体和工程图以及焊件的属性标签模板。
二、属性标签编制程序属性标签编制程序主要界面由三部分组成。
如图4所示:图4 属性标签编制程序各个窗格左窗格1为控件调色板,包含组框、文本框、列举等控件单元;中央窗格2,可以将组框拖动至中央窗格,将单元拖动至中央窗格内的组框中,有一金色边界围绕活动单元,该单元的属性出现在右窗格中,可以对设置其属性;右窗格3,可以设置组框和其它单元的属性,默认打开时可以设置属性标签模板的页面层次属性,指定正在生成的属性标签模板的类型(零件、装配体、或工程图),并可生成一显示在标签顶部的信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Attribute VB_Name = "利用子件处理属性1"'利用子件进行自定义属性的批量处理的VBA代码'比较完善的第一版完成时间2012.11.05,作者:张中锋'适用于深圳东风有限公司solidworks老模型属性更改满足金蝶公司PLM系统要求实例'测试通过环境:2012.11.05 windows XP SP3 ;solidworks 2010 SP02(32bit)'''''''''''''''' '''''''''''''''' '''''''''''''''' ''版本更新日志'1.0 2012.10.29 ①对属性中,存在空白情况处理时数据异常进行修复;②对于已经存在的自定义属性值,保护其值不被处理'已知的bug记录Public swModel2 As SldWorks.ModelDoc2Public PARTNAME_Value_temp As StringPublic MATERIAL_Value2_temp As StringPublic swApp As SldWorks.SldWorksSub main()Dim swModel As SldWorks.ModelDoc2Dim swModelDocExt As SldWorks.ModelDocExtensionDim swSelMgr As SldWorks.SelectionMgrDim swBOMAnnotation As SldWorks.BomTableAnnotationDim swBOMFeature As SldWorks.BomFeatureDim swBomTable As VariantDim boolstatus As BooleanDim BomType As LongDim Configuration As StringDim TemplateName As StringDim i, j, n, k As IntegerDim swBOM_name As StringDim component As Component2Dim value_temp As IntegerDim time_start As StringDim txt_path As StringSet swApp = Application.SldWorksSet swModel = swApp.ActiveDoctxt_path = swModel.GetPathName() & " .csv"Open txt_path For Output Shared As #400Print #400, "图样代号"; ","; "零件名称"; ","; "零件材料"; Chr(10);Configuration = swModel.GetActiveConfiguration().NameIf swModel.GetType = 1 ThenSet swModel2 = swApp.ActiveDocCall Custominfo_change(Configuration)ElseIf swModel.GetType = 2 Thenvalue_temp = swModel.ResolveAllLightWeightComponents(False) '轻化取消到还原状态Dim Components As VariantDim SingleComponent As VariantDim swComponent As ponent2Components = swModel.GetComponents(False) '获取整个装配体的组成部件(零件或者装配体)For Each SingleComponent In Components '遍历Set swComponent = SingleComponentIf Not swComponent Is Nothing ThenIf swComponent.GetModelDoc() Is Nothing Then '判断子件对象模型是否存在;轻化状态下获取不到,为空Debug.Print "没有通过"ElseDim x As IntegerDo '此循环实现处理当前模型和子件属性If Not swComponent Is Nothing And x < 99 Then '一个很原始的方法强制使用当前的模型Set swModel2 = swModelx = 100ElseSet swModel2 = swComponent.GetModelDoc() '取得子件对象模型x = 101End IfCall Custominfo_change(swModel2.GetActiveConfiguration().Name)Loop Until x = 101End IfElseDebug.Print " 不能获取到子件"End IfNextElseMsgBox "不是零件或者装配体模型"End IfswModel.Save '保存文件Close #400MsgBox "属性转换完毕"End SubPrivate Function Custominfo_change(ByVal vConfigName As String)'处理模型的属性Dim vConfigNameArr As VariantDim vCustInfoNameArr As VariantDim vCustInfoName As VariantDim vCustInfoName2 As VariantDim vCustInfoNameArr2 As VariantDim vCustInfoName2_temp As StringDim vCustInfoName_temp As StringDim a() As StringDim b() As StringDim m, n As IntegervCustInfoNameArr = swModel2.GetCustomInfoNames2(vConfigName)vCustInfoNameArr2 = swModel2.GetCustomInfoNamesm = 0If Not IsEmpty(vCustInfoNameArr2) Then '取得自定义属性表的属性数据For Each vCustInfoName2 In vCustInfoNameArr2vCustInfoName2_temp = CStr(vCustInfoName2)If vCustInfoName2_temp = "" Then '处理属性表中的空白数据行m = m - 1ReDim Preserve a(1, m)Exit ForEnd IfvCustInfoName_temp_value2 = swModel2.CustomInfo(vCustInfoName2)ReDim Preserve a(1, m)a(0, m) = Trim(vCustInfoName2_temp)a(1, m) = Trim(vCustInfoName_temp_value2)m = m + 1ReDim Preserve a(1, m)NextEnd Ifn = 0If Not IsEmpty(vCustInfoNameArr) Then '取得配置特定属性表的属性数据For Each vCustInfoName In vCustInfoNameArrvCustInfoName_temp = CStr(vCustInfoName)If vCustInfoName_temp = "" Then '处理属性表中的空白数据行n = n - 1ReDim Preserve b(1, n)Exit ForEnd IfvCustInfoName_temp_value = swModel2.CustomInfo2(vConfigName, vCustInfoName)ReDim Preserve b(1, n)b(0, n) = Trim(vCustInfoName_temp)b(1, n) = Trim(vCustInfoName_temp_value)n = n + 1ReDim Preserve b(1, n)NextEnd IfDim s, t As IntegerIf m > 0 Then '当数组a中有数据时For s = 0 To UBound(a, 2) '循环取出a中存储的每一条数据If a(0, s) <> "" And a(1, s) <> "" Then '当数据有效时Call OldCustominfo_Value(a(0, s), a(1, s), "PARTNAME")ElseIf a(0, s) = "" Then '当数据无效时(此情况只会是取得最后一条数据时)Exit ForEnd IfNext sIf PARTNAME_Value_temp = "" Then '在a中没有获取到合适的数据If n > 0 ThenFor t = 0 To UBound(b, 2) '循环取出b中存储的每一条数据If b(0, t) <> "" And b(1, t) <> "" Then '当数据有效时Call OldCustominfo_Value(b(0, t), b(1, t), "PARTNAME")ElseIf b(0, t) = "" Then '当数据无效时(此情况只会是取得最后一条数据时)Exit ForEnd IfNext tEnd IfEnd IfEnd IfIf m > 0 ThenFor s = 0 To UBound(a, 2)If a(0, s) <> "" And a(1, s) <> "" ThenCall OldCustominfo_Value(a(0, s), a(1, s), "MATERIAL")ElseIf a(0, s) = "" ThenExit ForEnd IfNext sIf MATERIAL_Value2_temp = "" ThenIf n > 0 ThenFor t = 0 To UBound(b, 2)If b(0, t) <> "" And b(1, t) <> "" ThenCall OldCustominfo_Value(b(0, t), b(1, t), "MATERIAL")ElseIf b(0, t) = "" ThenExit ForEnd IfNext tEnd IfEnd IfEnd IfDim DRAWNO_value As StringDim PARTNAME_value As StringDim MATERIAL_value As StringPARTNAME_value = Trim(PARTNAME_Value_temp)MATERIAL_value = Trim(MATERIAL_Value2_temp)'使用模型的绝对路径获取文件图号,比使用标题更安全Dim DRAWNO_value1, DRAWNO_value2, DRAWNO_value13 As StringDim DRAWNO_value_N As IntegerDRAWNO_value1 = swModel2.GetPathNameDRAWNO_value2 = StrReverse(DRAWNO_value1)DRAWNO_value_N = InStr(1, DRAWNO_value2, "\")DRAWNO_value3 = Mid(DRAWNO_value2, 8, DRAWNO_value_N - 8)DRAWNO_value = StrReverse(DRAWNO_value3)If Not IsEmpty(vCustInfoNameArr2) ThenFor Each vCustInfoName2 In vCustInfoNameArr2 '删除自定义属性bRet = swModel2.DeleteCustomInfo(vCustInfoName2)NextEnd IfswModel2.AddCustomInfo3 "", "DRAWNO", swCustomInfoText, DRAWNO_value '写入图样代号DRAWNOswModel2.AddCustomInfo3 "", "PARTNAME", swCustomInfoText, PARTNAME_value '写入零件名称PARTNAMECall new_unitIf Trim(Left(DRAWNO_value, 1)) <> "Q" And Trim(Left(DRAWNO_value, 2)) <> "GB" Then '检查标准件swModel2.AddCustomInfo3 "", "MATERIAL", swCustomInfoText,MATERIAL_value '写入零件材料MATERIALCall new_MaterialWeight_value = Show_mass(swModel2.GetPathName) '获取零件重量的数值swModel2.AddCustomInfo3 "", "Weight", swCustomInfoText,Format(Weight_value, "0.0") '写入零件重量Weight,使用1位小数"swModel2.AddCustomInfo3 "", "SPEC", swCustomInfoText, ""swModel2.AddCustomInfo3 "", "REMARK", swCustomInfoText, ""End IfPrint #400, DRAWNO_value; ","; PARTNAME_value; ",";MATERIAL_value; Chr(10);PARTNAME_Value_temp = ""MATERIAL_Value2_temp = ""End FunctionPrivate Function new_unit() '更改单位Dim boolstatus As Booleanboolstatus =swModel2.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitSystem, 0, swUnitSystem_e.swUnitSystem_Custom)boolstatus =swModel2.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUni tsLinearFractionDenominator, 0, 0)boolstatus =swModel2.Extension.SetUserPreferenceToggle(swUserPreferenceToggle_e.swUnitsLinea rFeetAndInchesFormat, 0, False)boolstatus =swModel2.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUni tsDualLinearFractionDenominator, 0, 0)boolstatus =swModel2.Extension.SetUserPreferenceToggle(swUserPreferenceToggle_e.swUnitsDualL inearFeetAndInchesFormat, 0, False)boolstatus =swModel2.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUni tsMassPropDecimalPlaces, 0, 1)boolstatus =swModel2.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUni tsMassPropMass, 0, swUnitsMassPropMass_e.swUnitsMassPropMass_Kilograms)End FunctionPrivate Function new_Material() '更改材质Dim matDbs As VariantDim swPart As ObjectDim MaterialDatabase As StringDim MATERIAL_value_temp As StringDim reval As Boolean'判断当前的模型文件类型If swModel2.GetType() = 1 Then 'swModel_filename_value 值为1时,打开零件模型matDbs = swApp.GetMaterialDatabasesSet swPart = swModel2MaterialDatabase = matDbs(0)MATERIAL_value_temp = swPart.GetMaterialPropertyName2(Configuration_Name, MaterialDatabase) '获取模型树中的材质值If MATERIAL_value_temp = "" Then '如果没有指定材质,材质默认为普通碳钢reval = swModel2.SetMaterialPropertyName2(Configuration_Name, MaterialDatabase,"普通碳钢")swModel2.ClearSelection2 TrueEnd IfEnd IfEnd FunctionPrivate Function OldCustominfo_Value(ByVal temp11 As String, ByVal temp22 As String,ByVal temp23) As String '处理旧自定义属性及值OldCustominfo_Value = ""If Trim(temp22) <> "" And Left(Trim(temp22), 1) <> Chr(34) ThenIf temp23 = "PARTNAME" Then '如果调用的参数为PARTNAME,需要处理的变量为 PARTNAME_value_temp,赋相关值If temp11 = "PARTNAME" And Left(Trim(temp22), 1) <> "名" And Left(Trim(temp22), 1) <> "D" And Left(Trim(temp22), 1) <> "零" ThenPARTNAME_Value_temp = Trim(temp22)OldCustominfo_Value = PARTNAME_Value_tempElseIf temp11 = "图样名称" Or temp11 = "零件名称" Or temp11 = "名称" ThenIf Left(Trim(temp22), 1) <> "D" And Left(Trim(temp22), 1) <> "零" And Left(Trim(temp22), 1) <> "装" And Left(Trim(temp22), 1) <> "名" ThenPARTNAME_Value_temp = Trim(temp22)OldCustominfo_Value = PARTNAME_Value_tempElseOldCustominfo_Value = ""End IfElseOldCustominfo_Value = ""End IfElseIf temp23 = "MATERIAL" Then '如果调用的参数为MATERIAL,要处理的变量为 MATERIAL_value_temp,赋相关值If temp11 = "MATERIAL" And Left(Trim(temp22), 1) <> "材" And Left(Trim(temp22), 1) <> "D" And Left(Trim(temp22), 1) <> "零" ThenMATERIAL_Value2_temp = Trim(temp22)OldCustominfo_Value = MATERIAL_Value2_tempElseIf temp11 = "材料名称" Or temp11 = "零件材料" Or temp11 = "材料" Thentemp33 = Left(Trim(temp22), 1)If temp33 = "钢" Or temp33 = "4" Or temp33 = "1" Or temp33 = "2" Or temp33 = "Q" Or temp33 = "总" Or temp33 = "部" Or temp33 = "橡" _Or temp33 = "尼" Or temp33 = "组" Or temp33 = "圆" Or temp33 = "方" Or temp33 = "焊" Or temp33 = "装" Or temp33 = "合" Or temp33 = "高" _Or temp33 = "角" Or temp33 = "扁" Or temp33 = "热" Or temp33 = "冷" Or temp33 = "外" Or temp33 = "分" Or temp23 = "有" ThenMATERIAL_Value2_temp = value_G(Trim(temp22))OldCustominfo_Value = MATERIAL_Value2_tempElseOldCustominfo_Value = ""End IfElseOldCustominfo_Value = ""End IfEnd IfElseOldCustominfo_Value = ""End IfEnd FunctionPrivate Function value_G(ByVal value_G_in As String) As String '处理零件材料的值中的国标号Dim value_G_temp As StringDim value_G_out As StringDim G_nomber As Integervalue_G_temp = Trim(value_G_in) '删除变量中开头和结尾的空白字符G_nomber = InStr(value_G_temp, "G") '查找字符“G”的第一次出现的位置If G_nomber > 1 Then '如果获得“G”value_G_out = Left(value_G_temp, G_nomber - 1) '获得字符“G”之前的字符串If value_G_out = "" Thenvalue_G = "" '返回一个空值,没有取得值"Elsevalue_G = value_G_outEnd IfElse '没有字符“G”value_G = value_G_tempEnd IfEnd FunctionPrivate Function Show_mass(ByVal DRAWNO_value11 As String) As String '获取质量的数值Dim DRAWNO_value12, DRAWNO_value113 As StringDim DRAWNO_value1_N As IntegerDRAWNO_value12 = StrReverse(DRAWNO_value11)DRAWNO_value1_N = InStr(1, DRAWNO_value12, "\")DRAWNO_value13 = Mid(DRAWNO_value12, 1, DRAWNO_value1_N)DRAWNO_value1 = StrReverse(DRAWNO_value13)Show_mass = Chr(34) & "SW-Mass@" & DRAWNO_value1 + Chr(34)End Function。