ArnaudG
Mechanical
- Dec 5, 2019
- 25
Hi, so here's the thing : I wrote a code that is supposed to give me the inertia (and it does get the inertia object) of a body and then retrieve the center of gravity and inertia matrix values. I followed the help and as I said I can get the inertia object. However in my code, I'm unable to use GetInertiMatrix and GetCOGPosition nor use GetCOG on a measurable (which I'm able to get as well).
When I use these methods, I don't see the arguments proposed in the visual basic editor and I have an error when launching the macro : Function marked as restricted or uses a type not supported in Visual Basic
The code seems to works as VBscript or CATscript but what is more annoying is that I found on this forum someone doing the same thing (here : apparently the same way and it works for him and not me (and I tried his code and it works fine).
So here's my code which gives an error :
And now here's his code simplifid to the minimum I require and which works fine :
I read again and again and compared and I can't find my error(s) so a little help to point the maybe obvious would be appreciated. I may directly use his code but god that's so frustrating to not understand where I'm wrong !
When I use these methods, I don't see the arguments proposed in the visual basic editor and I have an error when launching the macro : Function marked as restricted or uses a type not supported in Visual Basic
The code seems to works as VBscript or CATscript but what is more annoying is that I found on this forum someone doing the same thing (here : apparently the same way and it works for him and not me (and I tried his code and it works fine).
So here's my code which gives an error :
Code:
Option Explicit
Sub GetBodyInertia()
Dim objdoc As Document
On Error Resume Next
Set objdoc = CATIA.ActiveDocument
Dim oPart As Part
Dim oBody As Body
Dim refBody As Reference
Dim oSPAWorkbench
Dim oInertias As Inertias
Dim oInertia As Inertia
Dim oMeasure As Measurable
Set oPart = objdoc.MainBody
Set refBody = oPart.CreateReferenceFromObject(oBody)
Set oSPAWorkbench = objdoc.GetWorkbench("SPAWorkbench")
Set oInertias = oSPAWorkbench.Inertias
Set oMeasure = oSPAWorkbench.GetMeasurable(refBody)
If oInertias.Count = 0 Then
Set oInertia = oInertias.Add(oBody)
Else
Set oInertia = oInertias.Item(1)
End If
Dim cogArr(2)
Dim Matrix(8)
oInertia.GetInertiaMatrix Matrix
oMeasure.GetCOG cogArr
End Sub
And now here's his code simplifid to the minimum I require and which works fine :
Code:
' written by evereux
Option Explicit
Sub CATMain()
On Error Resume Next
Dim partDoc As Object
Set partDoc = CATIA.ActiveDocument.Part
Dim docname As String
docname = partDoc.Name
Dim objSPAWkb
Set objSPAWkb = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench")
Dim i As Integer
Dim bodyNumber As Integer
bodyNumber = partDoc.Bodies.Count
Dim body1 As Body
Set body1 = partDoc.Bodies.Item(1)
Dim namebody As String
namebody = body1.Name
Dim objRef As Object
Dim objMeasurable
Set objRef = partDoc.CreateReferenceFromObject(body1)
Set objMeasurable = objSPAWkb.GetMeasurable(objRef)
Dim TheInertiasList As Inertias
Set TheInertiasList = objSPAWkb.Inertias
Dim NewInertia
Set NewInertia = TheInertiasList.Add(body1)
Dim Matrix(8)
NewInertia.GetInertiaMatrix Matrix
Dim bodyArea
bodyArea = objMeasurable.Area
bodyArea = bodyArea * 1550
Dim bodyArea2 As Integer
bodyArea2 = bodyArea / 2
Dim objCOG(2)
objMeasurable.GetCOG objCOG
End Sub
I read again and again and compared and I can't find my error(s) so a little help to point the maybe obvious would be appreciated. I may directly use his code but god that's so frustrating to not understand where I'm wrong !