Dear francan,
I have an example that can help you understanding the transformation command in Femap (output, coord...) Take a look at it and try to modify it to obtain what you need. I will drop it here, may be someone else will need it
(j'en vois pas souvent des français sur ce forum, ça veut dire que Femap devient de plus en plus connu en France)
Regards,
'Macro Transform CBUSH Force Output
'Useful when displaying arrows for CBUSH forces
'FEMAP does not properly orient CBUSH output => transform CBUSH output to CSys0 for example
Sub Main
Dim App As femap.model
Set App = feFemap()
App.feAppMessage(FCM_ERROR,"Macro Transform CBUSH Force Output")
Dim osSet As femap.Set
Dim os As femap.OutputSet, ov As femap.Output
Dim cs As femap.CSys, delCSSet As femap.Set
Dim el As femap.Elem, elSet As femap.Set, BUSHset As femap.Set, pr As femap.Prop
Dim l1 As Long, d1 As Double, vec1(2) As Double
Dim var1 As Variant, var2 As Variant, var3 As Variant
Dim elID As Variant, csID As Long
Dim orientID() As Long, elNode0() As Double
Dim outX As Variant, outY As Variant, outZ As Variant, momentFlag As Boolean
Set osSet = App.feSet
Set os = App.feOutputSet
Set ov = App.feOutput
Set cs = App.feCSys
Set delCSSet = App.feSet
Set el = App.feElem
Set elSet = App.feSet
Set BUSHset = App.feSet
Set pr = App.feProp
'0) user input
If osSet.SelectMultiID(FT_OUT_CASE,1,"Select OutputSets") = FE_CANCEL Then End
BUSHset.AddRule(FET_L_SPRING,FGD_ELEM_BYTYPE)
If BUSHset.Count = 0 Then End
If elSet.Select(FT_ELEM,True,"Select elements (selection will be filtered for CBUSH)") = FE_CANCEL Then End
elSet.RemoveNotCommon(BUSHset.ID)
If elSet.Count = 0 Then End
If cs.SelectID("Specify transformation CSys") = FE_CANCEL Then End
csID = cs.ID
'1) retrieve CBUSH output Csys
os.Get(osSet.First)
Set ov = os.Vector(3774)
ov.GetOutputListAtSet(elSet.ID,Null,outX)
ReDim orientID(elSet.Count-1)
ReDim elNode0(elSet.Count-1,2) : l1=0
While el.NextInSet(elSet.ID)
pr.Get(el.propID)
'keep node0 coords (useful if transformation CSys is not rectangular)
App.feCoordOnNode(el.Node(0),var1)
elNode0(l1,0) = var1(0) : elNode0(l1,1) = var1(1) : elNode0(l1,2) = var1(2)
If pr.flag(0) = True Then 'coincident nodes => orient with CSys in property
orientID(l1) = pr.refCS
Else
'NB: nodes should not be coincident (NASTRAN fatal)
App.feCoordOnNode(el.Node(1),var2)
cs.Put(cs.NextEmptyID)
If el.orient(0) <> 0 Or el.orient(1) <> 0 Or el.orient(2) <> 0 Then 'orient wih vector
vec1(0) = var1(0)+el.orient(0) : vec1(1) = var1(1)+el.orient(1) : vec1(2) = var1(2)+el.orient(2) 'in CSys 0 in FEMAP
cs.XYPoints(var1,var2,vec1)
ElseIf el.orientID <> 0 Then 'orient wih node
App.feCoordOnNode(el.orientID,var3)
cs.XYPoints(var1,var2,var3)
End If
cs.Put(cs.ID)
orientID(l1) = cs.ID : delCSSet.Add(cs.ID)
End If
l1 = l1+1
Wend
'2) transform output
elSet.GetArray(l1,elID)
os.Reset : osSet.Reset
While os.NextInSet(osSet.ID)
MOMENTLOOP:
Set ov = Null
Set ov = App.feOutput
Set ov = os.Vector(3774-momentFlag*3)
ov.GetOutputListAtSet(elSet.ID,Null,outX)
Set ov = Null
Set ov = App.feOutput
Set ov = os.Vector(3775-momentFlag*3)
ov.GetOutputListAtSet(elSet.ID,Null,outY)
Set ov = Null
Set ov = App.feOutput
Set ov = os.Vector(3776-momentFlag*3)
ov.GetOutputListAtSet(elSet.ID,Null,outZ)
ReDim var1(2) As Double
For i = 0 To UBound(elID)
vec1(0) = outX(i) : vec1(1) = outY(i) : vec1(2) = outZ(i)
var1(0) = elNode0(i,0) : var1(1) = elNode0(i,1) : var1(2) = elNode0(i,2)
App.feVectorTransform(orientID(i),var1,vec1,csID,var2)
outX(i) = var2(0) : outY(i) = var2(1) : outZ(i) = var2(2)
Next i
Set ov = Null
Set ov = App.feOutput
ov.InitScalarAtElem(os.ID,9003774-momentFlag*3,"Macro Transf to CSys" & CStr(csID) & " - Bush X " & IIf(momentFlag=False,"Force","Moment"),FOT_FORCE,False)
ov.PutScalarAtElem(UBound(elID)+1,elID,outX)
ov.Put(ov.ID)
Set ov = Null
Set ov = App.feOutput
ov.InitScalarAtElem(os.ID,9003775-momentFlag*3,"Macro Transf to CSys" & CStr(csID) & " - Bush Y "& IIf(momentFlag=False,"Force","Moment"),FOT_FORCE,False)
ov.PutScalarAtElem(UBound(elID)+1,elID,outY)
ov.Put(ov.ID)
Set ov = Null
Set ov = App.feOutput
ov.InitScalarAtElem(os.ID,9003776-momentFlag*3,"Macro Transf to CSys" & CStr(csID) & " - Bush Z "& IIf(momentFlag=False,"Force","Moment"),FOT_FORCE,False)
ov.PutScalarAtElem(UBound(elID)+1,elID,outZ)
ov.Put(ov.ID)
If momentFlag = False Then
momentFlag=True
GoTo MOMENTLOOP:
Else
momentFlag=False
End If
Wend
App.feAppMessage(FCM_ERROR,"Macro is done")
End Sub