To run the sample you must have a part document open that contains a solid.
Public Sub GetPartMassPropsWithoutDirtying()
' Set a reference to the part document.
' This assumes a part document is active.
Dim oPartDoc As PartDocument
Set oPartDoc = ThisApplication.ActiveDocument
' Set a reference to the mass properties object.
Dim oMassProps As MassProperties
Set oMassProps = oPartDoc.ComponentDefinition.MassProperties
'Check if mass property results are already available
'at a high accuracy level or better. If so, simply
'print out the results, else, set a flag to not cache
'the results in the document.
If oMassProps.AvailableAccuracy <> k_High And _
oMassProps.AvailableAccuracy <> k_VeryHigh Then
' Set the accuracy to high.
oMassProps.Accuracy = k_High
'Set CacheResultsOnCompute property to False
'so that results are not saved with the document
'and hence the document is not 'dirtied'.
oMassProps.CacheResultsOnCompute = False
End If
' Display the mass properties of the part.
Debug.Print "Area: " & oMassProps.Area
Debug.Print "Center of Mass: " & _
oMassProps.CenterOfMass.X & ", " & _
oMassProps.CenterOfMass.Y & ", " & _
oMassProps.CenterOfMass.Z
Debug.Print "Mass: " & oMassProps.Mass
Dim adPrincipalMoments(1 To 3) As Double
Call oMassProps.PrincipalMomentsOfInertia(adPrincipalMoments(1), _
adPrincipalMoments(2), _
adPrincipalMoments(3))
Debug.Print "Principal Moments of Inertia: " & _
adPrincipalMoments(1) & ", " & _
adPrincipalMoments(2) & ", " & _
adPrincipalMoments(3)
Dim adRadiusOfGyration(1 To 3) As Double
Call oMassProps.RadiusOfGyration(adRadiusOfGyration(1), _
adRadiusOfGyration(2), _
adRadiusOfGyration(3))
Debug.Print "Radius of Gyration: " & _
adRadiusOfGyration(1) & ", " & _
adRadiusOfGyration(2) & ", " & _
adRadiusOfGyration(3)
Debug.Print "Volume: " & oMassProps.Volume
Dim Ixx As Double
Dim Iyy As Double
Dim Izz As Double
Dim Ixy As Double
Dim Iyz As Double
Dim Ixz As Double
Call oMassProps.XYZMomentsOfInertia(Ixx, Iyy, Izz, Ixy, Iyz, Ixz)
Debug.Print "Moments: "
Debug.Print " Ixx: " & Ixx
Debug.Print " Iyy: " & Iyy
Debug.Print " Izz: " & Izz
Debug.Print " Ixy: " & Ixy
Debug.Print " Iyz: " & Iyz
Debug.Print " Ixz: " & Ixz
End Sub