如何提取SOLIDWORKS装配体组件的重心?操作指南

此宏演示了 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/

仅供学习使用。

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空