此宏演示了 2 种查找与装配体坐标系相关的组件重心 (COG, Center Of Gravity) 的方法。
宏将计算所选组件的COG。
方法一、变换坐标
IModelDocExtension::GetMassProperties2方法允许计算模型中的质量属性数据。
在组件的模型级别上计算时,需要使用变换将坐标转换为装配体空间,以实现所需的结果。
Dim swApp As SldWorks.SldWorks
Sub main()
Set swApp = Application.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swSelMgr As SldWorks.SelectionMgr
Set swModel = swApp.ActiveDoc
Set swSelMgr = swModel.SelectionManager
Dim swComp As SldWorks.Component2
'获取装配体中的选定零部件。
Set swComp = swSelMgr.GetSelectedObjectsComponent3(1, -1)
Dim swCompModel As SldWorks.ModelDoc2
'获取此组件的模型文档(ModelDoc2类型)。
Set swCompModel = swComp.GetModelDoc2
Const ACCURACY_DEFAULT As Integer = 1
Dim status As swMassPropertiesStatus_e
Dim vMassPrps As Variant
'GetMassProperties2返回值为一个12位的数组
vMassPrps = swCompModel.Extension.GetMassProperties2(ACCURACY_DEFAULT, status, False)
'[ CenterOfMassX, CenterOfMassY, CenterOfMassZ, Volume, SurfaceArea, Mass, MomXX, MomYY, MomZZ, MomXY, MomZX, MomYZ ]
'[ 质心X, 质心Y, 质心Z, 体积, 表面积, 质量, 惯性矩XX, 惯性矩YY, 惯性矩ZZ, 惯性矩XY, 惯性矩ZX, 惯性矩YZ ]
Dim dCog(2) As Double
dCog(0) = vMassPrps(0): dCog(1) = vMassPrps(1): dCog(2) = vMassPrps(2)
Dim swMathUtils As SldWorks.MathUtility
Set swMathUtils = swApp.GetMathUtility
Dim swMathPt As SldWorks.MathPoint
'使用重心的坐标创建一个数学点
Set swMathPt = swMathUtils.CreatePoint(dCog)
'将数学点乘以数学变换;点被旋转、缩放,然后被平移到装配体空间。
Set swMathPt = swMathPt.MultiplyTransform(swComp.Transform2)
Dim vCog As Variant
'获取描述此数学点的 x,y,z 坐标数组。
vCog = swMathPt.ArrayData
Debug.Print "COG: " & vCog(0) & "; " & vCog(1) & "; " & vCog(2)
End Sub
方法二、使用IMassProperty接口
IMassProperty 接口模拟 SOLIDWORKS 中“质量属性”功能的功能。
质量属性弹窗
与界面中等效项(Center of mass)类似,可以为计算范围分配主体(包括组件主体)。
与以前的方法相比,这种方法的主要优点之一是可以计算轻化(lightweight)部件的COG。
Dim swApp As SldWorks.SldWorks
Sub main()
Set swApp = Application.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swSelMgr As SldWorks.SelectionMgr
Set swModel = swApp.ActiveDoc
Set swSelMgr = swModel.SelectionManager
Dim swComp As SldWorks.Component2
'获取装配体中的选定零部件。
Set swComp = swSelMgr.GetSelectedObjectsComponent3(1, -1)
Dim swMassPrps As SldWorks.MassProperty
'创建质量属性对象。
Set swMassPrps = swModel.Extension.CreateMassProperty()
Dim vCompBodies As Variant
'获取此组件中的实体。
vCompBodies = swComp.GetBodies3(swBodyType_e.swSolidBody, Empty)
'在计算此模型的质量属性时,仅使用指定的实体。
If False <> swMassPrps.AddBodies(vCompBodies) Then
Dim vCog As Variant
vCog = swMassPrps.CenterOfMass
Debug.Print "COG: " & vCog(0) & "; " & vCog(1) & "; " & vCog(2)
Else
Err.Raise vbError, "", "指定用于计算质量属性的实体失败,Failed to add bodies for calculation"
End If
End Sub
文章翻译自https://www.codestack.net/
仅供学习使用。
武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks ,Hyperworks, Protel,CAXA,OpenWorks LandMark,MATLAB,Enovia,Winchill,TeamCenter,MathCAD,Ansys, Abaqus,ls-dyna, Fluent, MSC,Bentley,License,UG,ug,catia,Dassault Systèmes,AutoDesk,Altair,autocad,PTC,SolidWorks,Ansys,Siemens PLM Software,Paradigm,Mathworks,Borland,AVEVA,ESRI,hP,Solibri,Progman,Leica,Cadence,IBM,SIMULIA,Citrix,Sybase,Schlumberger,MSC Products...