In my program, I wish to get the mass of a particular instance of a component in an assembly. Originally, I got the components PartDoc and then used IPartDoc::GetBodies2 and then MassProperty::AddBodies followed by MassProperties::Mass to get the mass. The problem with this is that the bodies that are added do not account for assembly level features of the component whereas IComponent2::GetBodies3 does. From the remarks on IComponent2::GetBody in the API Help:
"This method is different from the IPartDoc::Body method in that it recognizes assembly-level features and returns that information based on the component instance. IPartDoc::Body never recognizes assembly-level features because the feature information is kept with the assembly, not propagated down to the part file."
Even though this is for IComponent::GetBody, I assume the same applies for IComponent:GetBodies3??? The problem is when the bodies are added using IComponent:GetBodies3, the mass of MassProperty returns 0 every time even though they have the same array of bodies.
.
.
.
BodyArr = swComp.GetBodies3(swSolidBody, "")
BodyArr2 = swPart.GetBodies2(swSolidBody, True)
For k = 0 To UBound(BodyArr)
Debug.Print "Body Name: " & BodyArr(k).Name
Next k
For l = 0 To UBound(BodyArr2)
Debug.Print "Body2 Name: " & BodyArr2(l).Name
Next l
Bool = swMass.AddBodies(BodyArr)
Debug.Print "BodyArr Mass: " & swMass.Mass
Bool = swMass.AddBodies(BodyArr2)
Debug.Print "BodyArr2 Mass: " & swMass.Mass
.
.
.
Returns:
Body Name: Boss-Extrude1
Body2 Name: Boss-Extrude1
BodyArr Mass: 0
BodyArr2 Mass: 353.78
Any ideas on why this is happening??
Any help is appreciated.
Thanks,
Patrick
SolidworksApi macros