Une coupe est généralement un élément (une barre, par exemple) et est créée comme telle. Il est nécessaire de disposer d'une interface avec les objets concernés. Il s'agit d'IModelData pour les barres et d'ISections pour les coupes. Cette interface se trouve dans IModel3 :
Sub test_section()
' get interface from the opened model and lock the licence/program
Dim iModel As RFEM5.IModel3
Set iModel = GetObject(, "RFEM5.Model")
iModel.GetApplication.LockLicense
On Error GoTo E
Dim iSecs As RFEM5.ISections
Set iSecs = iModel.GetSections()
Toutes les coupes créées précédemment sont d'abord supprimées, puis deux coupes sont créées.
La première coupe doit être solide avec une aire de section visible (voir la Figure 01). Les données sont entrées de la même manière que dans RFEM. Une fois le type « SectionOnSectionalArea » sélectionné, les points d'angle de la coupe sont définis à l'aide de la commande « EdgePoint » et le paramètre « Vector » définit sa direction :
' first delete all sections
iSecs.PrepareModification
iSecs.DeleteObjects ("All")
iSecs.FinishModification
' set section on solid
Dim sec As RFEM5.Section
sec.EdgePointA.X = 2
sec.EdgePointA.Y = 5
sec.EdgePointA.Z = 0
sec.EdgePointB.X = 2
sec.EdgePointB.Y = 8
sec.EdgePointB.Z = 0
sec.no = 1
sec.Name = "solid section"
sec.Plane = GlobalPlaneInPositiveX
sec.ShowValuesInIsolines = False
sec.Type = SectionOnSolidSectionLine
sec.ObjectList = "1"
iSecs.PrepareModification
iSecs.SetSection sec
iSecs.FinishModification
La nouvelle coupe est finalement transférée dans un bloc Prepare-/FinishModification. La seconde coupe créée doit être une coupe de surface (voir la Figure 02). Pour ce faire, le type « SectionViaSurfacePlane » doit être utilisé. Outre le vecteur de direction, vous devez sélectionner le plan d'affichage des résultats de la coupe de surface. Dans l'exemple ci-dessous, le plan xy est sélectionné en définissant « GlobalPlaneInPositiveX » :
' set section on surface
sec.EdgePointA.X = 2
sec.EdgePointA.Y = 0
sec.EdgePointA.Z = 0
sec.EdgePointB.X = 2
sec.EdgePointB.Y = 3
sec.EdgePointB.Z = 0
sec.no = 2
sec.Name = "surface section"
sec.Plane = GlobalPlaneInPositiveX
sec.ShowValuesInIsolines = True
sec.Type = SectionViaSurfacePlane
sec.ObjectList = "1"
sec.Vector.X = 0
sec.Vector.Y = 0
sec.Vector.Z = 1
iSecs.PrepareModification
iSecs.SetSection sec
iSecs.FinishModification
Il est également possible d'obtenir les résultats à l'aide de la méthode « GetResultsInSection » de l'interface « IResults2 ». Il faut ensuite obtenir les efforts tranchants sur la coupe de surface. La distribution des efforts internes est définie sur « Continue dans les surfaces » dans « ContinuousDistributionWithinObjects » :
' get results
Dim iCalc As ICalculation2
Set iCalc = iModel.GetCalculation
Dim iRes As IResults2
Set iRes = iCalc.GetResultsInFeNodes(LoadCaseType, 1)
Dim secRes() As RFEM5.SectionResult
secRes = iRes.GetResultsInSection(2, AtNo,
ShearForceVy,ContinuousDistributionWithinObjects, False)
La macro Excel et le fichier de test associés sont disponibles au téléchargement ci-dessous.