solidworks模型自定义属性的批量处理的宏代码.docx
- 文档编号:26304783
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:15
- 大小:18.04KB
solidworks模型自定义属性的批量处理的宏代码.docx
《solidworks模型自定义属性的批量处理的宏代码.docx》由会员分享,可在线阅读,更多相关《solidworks模型自定义属性的批量处理的宏代码.docx(15页珍藏版)》请在冰豆网上搜索。
solidworks模型自定义属性的批量处理的宏代码
AttributeVB_Name="利用子件处理属性1"
'利用子件进行自定义属性的批量处理的VBA代码
'比较完善的第一版完成时间2012.11.05,作者:
张中锋
'适用于深圳东风有限公司solidworks老模型属性更改满足金蝶公司PLM系统要求实例
'测试通过环境:
2012.11.05windowsXPSP3;solidworks2010SP02(32bit)
'''''''''''''''''''''''''''''''''''''''''''''''''
'版本更新日志
'1.02012.10.29①对属性中,存在空白情况处理时数据异常进行修复;②对于已经存在的自定义属性值,保护其值不被处理
'已知的bug记录
PublicswModel2AsSldWorks.ModelDoc2
PublicPARTNAME_Value_tempAsString
PublicMATERIAL_Value2_tempAsString
PublicswAppAsSldWorks.SldWorks
Submain()
DimswModelAsSldWorks.ModelDoc2
DimswModelDocExtAsSldWorks.ModelDocExtension
DimswSelMgrAsSldWorks.SelectionMgr
DimswBOMAnnotationAsSldWorks.BomTableAnnotation
DimswBOMFeatureAsSldWorks.BomFeature
DimswBomTableAsVariant
DimboolstatusAsBoolean
DimBomTypeAsLong
DimConfigurationAsString
DimTemplateNameAsString
Dimi,j,n,kAsInteger
DimswBOM_nameAsString
DimcomponentAsComponent2
Dimvalue_tempAsInteger
Dimtime_startAsString
Dimtxt_pathAsString
SetswApp=Application.SldWorks
SetswModel=swApp.ActiveDoc
txt_path=swModel.GetPathName()&".csv"
Opentxt_pathForOutputSharedAs#400
Print#400,"图样代号";",";"零件名称";",";"零件材料";Chr(10);
Configuration=swModel.GetActiveConfiguration().Name
IfswModel.GetType=1Then
SetswModel2=swApp.ActiveDoc
CallCustominfo_change(Configuration)
ElseIfswModel.GetType=2Then
value_temp=swModel.ResolveAllLightWeightComponents(False)'轻化取消到还原状态
DimComponentsAsVariant
DimSingleComponentAsVariant
DimswComponentAsSldWorks.Component2
Components=swModel.GetComponents(False)'获取整个装配体的组成部件(零件或者装配体)
ForEachSingleComponentInComponents'遍历
SetswComponent=SingleComponent
IfNotswComponentIsNothingThen
IfswComponent.GetModelDoc()IsNothingThen'判断子件对象模型是否存在;轻化状态下
获取不到,为空
Debug.Print"没有通过"
Else
DimxAsInteger
Do'此循环实现处理当前模型和子件属性
IfNotswComponentIsNothingAndx<99Then'一个很原始的方法强制使用当前的模型
SetswModel2=swModel
x=100
Else
SetswModel2=swComponent.GetModelDoc()'取得子件对象模型
x=101
EndIf
CallCustominfo_change(swModel2.GetActiveConfiguration().Name)
LoopUntilx=101
EndIf
Else
Debug.Print"不能获取到子件"
EndIf
Next
Else
MsgBox"不是零件或者装配体模型"
EndIf
swModel.Save'保存文件
Close#400
MsgBox"属性转换完毕"
EndSub
PrivateFunctionCustominfo_change(ByValvConfigNameAsString)'处理模型的属性
DimvConfigNameArrAsVariant
DimvCustInfoNameArrAsVariant
DimvCustInfoNameAsVariant
DimvCustInfoName2AsVariant
DimvCustInfoNameArr2AsVariant
DimvCustInfoName2_tempAsString
DimvCustInfoName_tempAsString
Dima()AsString
Dimb()AsString
Dimm,nAsInteger
vCustInfoNameArr=swModel2.GetCustomInfoNames2(vConfigName)
vCustInfoNameArr2=swModel2.GetCustomInfoNames
m=0
IfNotIsEmpty(vCustInfoNameArr2)Then'取得自定义属性表的属性数据
ForEachvCustInfoName2InvCustInfoNameArr2
vCustInfoName2_temp=CStr(vCustInfoName2)
IfvCustInfoName2_temp=""Then'处理属性表中的空白数据行
m=m-1
ReDimPreservea(1,m)
ExitFor
EndIf
vCustInfoName_temp_value2=swModel2.CustomInfo(vCustInfoName2)
ReDimPreservea(1,m)
a(0,m)=Trim(vCustInfoName2_temp)
a(1,m)=Trim(vCustInfoName_temp_value2)
m=m+1
ReDimPreservea(1,m)
Next
EndIf
n=0
IfNotIsEmpty(vCustInfoNameArr)Then'取
得配置特定属性表的属性数据
ForEachvCustInfoNameInvCustInfoNameArr
vCustInfoName_temp=CStr(vCustInfoName)
IfvCustInfoName_temp=""Then'处理属性表中的空白数据行
n=n-1
ReDimPreserveb(1,n)
ExitFor
EndIf
vCustInfoName_temp_value=swModel2.CustomInfo2(vConfigName,vCustInfoName)
ReDimPreserveb(1,n)
b(0,n)=Trim(vCustInfoName_temp)
b(1,n)=Trim(vCustInfoName_temp_value)
n=n+1
ReDimPreserveb(1,n)
Next
EndIf
Dims,tAsInteger
Ifm>0Then'当数组a中有数据时
Fors=0ToUBound(a,2)'循环取出a中存储的每一条数据
Ifa(0,s)<>""Anda(1,s)<>""Then'当数据有效时
CallOldCustominfo_Value(a(0,s),a(1,s),"PARTNAME")
ElseIfa(0,s)=""Then'当数据无效时(此情况只会是取得最后一条数据时)
ExitFor
EndIf
Nexts
IfPARTNAME_Value_temp=""Then'在a中没有获取到合适的数据
Ifn>0Then
Fort=0ToUBound(b,2)'循环取出b中存储的每一条数据
Ifb(0,t)<>""Andb(1,t)<>""Then'当数据有效时
CallOldCustominfo_Value(b(0,t),b(1,t),"PARTNAME")
ElseIfb(0,t)=""Then'当数据无效时(此情况只会是取得最后一条数据时)
ExitFor
EndIf
Nextt
EndIf
EndIf
EndIf
Ifm>0Then
Fors=0ToUBound(a,2)
Ifa(0,s)<>""Anda(1,s)<>""Then
CallOldCustominfo_Value(a(0,s),a(1,s),"MATERIAL")
ElseIfa(0,s)=""Then
ExitFor
EndIf
Nexts
IfMATERIAL_Value2_temp=""Then
Ifn>0Then
Fort=0ToUBound(b,2)
Ifb(0,t)<>""Andb(1,t)<>""Then
CallOldCustominfo_Value(b(0,t),b(1,t),"MATERIAL")
ElseIfb(0,t)=""Then
ExitFor
EndIf
Nextt
EndIf
EndIf
EndIf
DimDRAWNO_valueAsString
DimPARTNAME_valueAsString
DimMATERIAL_valueAsString
PARTNAME_value=Trim(PARTNAME_Value_temp)
MATERIAL_value=Trim(MATERIAL_Value2_temp)
'使用模型的绝对路径获取文件图号,比使用标题更安全
DimDRAWNO_value1,DRAWNO_value2,DRAWNO_value13AsString
DimDRAWNO_value_NAsInteger
DRAWNO_value1=swModel2.GetPathName
DRAWNO_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)
IfNotIsEmpty(vCustInfoNameArr2)Then
ForEachvCustInfoName2InvCustInfoNameArr2'删除自定义属性
bRet=swModel2.DeleteCustomInfo(vCustInfoName2)
Next
EndIf
swModel2.AddCustomInfo3"","DRAWNO",swCustomInfoText,DRAWNO_value'写入图样代号DRAWNO
swModel2.AddCustomInfo3"","PARTNAME",swCustomInfoText,PARTNAME_value'写入零件名称PARTNAME
Callnew_unit
IfTrim(Left(DRAWNO_value,1))<>"Q"AndTrim(Left(DRAWNO_value,2))<>"GB"Then'检查标准件
swModel2.AddCustomInfo3"","MATERIAL",swCustomInfoText,MATERIAL_value'写入零件材料MATERIAL
Callnew_Material
Weight_value=Show_mass(swModel2.GetPathName)'获取零件重量的数值
swModel2.AddCustomInfo3"","Weight",swCustomInfoText,Format(Weight_value,"0.0")'写入零件重量Weight,使用1位小数"
swModel2.AddCustomInfo3"","SPEC",swCustomInfoText,""
swModel2.AddCustomInfo3"","REMARK",swCustomInfoText,""
EndIf
Print#400,DRAWNO_value;",";PARTNAME_value;",";MATERIAL_value;Chr(10);
PARTNAME_Value_temp=""
MATERIAL_Value2_temp=""
EndFunction
PrivateFunctionnew_unit()'更改单位
DimboolstatusAsBoolean
boolstatus=swModel2.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitSystem,0,swUnitSystem_e.swUnitSystem_Custom)
boolstatus=swModel2.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitsLinearFractionDenominator,0,0)
boolstatus=swModel2.Extension.SetUserPreferenceToggle(swUserPreferenceToggle_e.swUnitsLinearFeetAndInchesFormat,0,False)
boolstatus=swModel2.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitsDualLinearFractionDenominator,0,0)
boolstatus=swModel2.Extension.SetUserPreferenceToggle(swUserPreferenceToggle_e.swUnitsDualLinearFeetAndInchesFormat,0,False)
boolstatus=swModel2.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitsMassPropDecimalPlaces,0,1)
boolstatus=swModel2.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitsMassPropMass,0,swUnitsMassPropMass_e.swUnitsMassPropMass_Kilograms)
EndFunction
PrivateFunctionnew_Material()'更改材质
DimmatDbsAsVariant
DimswPartAsObject
DimMaterialDatabaseAsString
DimMATERIAL_value_tempAsString
DimrevalAsBoolean
'判断当前的模型文件类型
IfswModel2.GetType()=1Then'swModel_filename_value值为1时,打开零件模型
matDbs=swApp.GetMaterialDatabas
es
SetswPart=swModel2
MaterialDatabase=matDbs(0)
MATERIAL_value_temp=swPart.GetMaterialPropertyName2(Configuration_Name,MaterialDatabase)'获取模型树中的材质值
IfMATERIAL_value_temp=""Then'如果没有指定材质,材质默认为普通碳钢
reval=swModel2.SetMaterialPropertyName2(Configuration_Name,MaterialDatabase,"普通碳钢")
swModel2.ClearSelection2True
EndIf
EndIf
EndFunction
PrivateFunctionOldCustominfo_Value(ByValtemp11AsString,ByValtemp22AsString,ByValtemp23)AsString'处理旧自定义属性及值
OldCustominfo_Value=""
IfTrim(temp22)<>""AndLeft(Trim(temp22),1)<>Chr(34)Then
Iftemp23="PARTNAME"Then'如果调用的参数为PARTNAME,需要处理的变量为PARTNAME_value_temp,赋相关值
Iftemp11="PARTNAME"AndLeft(Trim(temp22),1)<>"名"AndLeft(Trim(temp22),1)<>"D"AndLeft(Trim(temp22),1)<>"零"Then
PARTNAME_Value_temp=Trim(temp22)
OldCustominfo_Value=PARTNAME_Value_temp
ElseIftemp11="图样名称"Ortemp11="零件名称"Ortemp11="名称"Then
IfLeft(Trim(temp22),1)<>"D"AndLeft(Trim(temp22),1)<>"零"AndLeft(Trim(temp22),1)<>"装"AndLeft(Trim(temp22),1)<>"名"Then
PARTNAME_Value_temp=Trim(temp22)
OldCustominfo_Value=PARTNAME_Value
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- solidworks 模型 自定义 属性 批量 处理 代码