Question :
Comment créer une coupe via l'interface COM ?
Réponse :
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
Définir 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 surface de coupe 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 :
' supprimer d'abord toutes les sections
iSecs.PrepareModification
iSecs.DeleteObjects (« Tout »)
iSecs.FinishModification
' définir la section sur le solide
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 = "section solide"
plansec = PlanGlobalEnPositiveX
sec.ShowValuesInIsolines = False
sec.Type = SectionOnSolidSectionLine
sec.ObjectList = "1"
iSecs.PréparerModification
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 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 = "section de surface"
Plansec = PlanGlobalEnPositiveX
sec.ShowValuesInIsolines = True
sec.Type = SectionViaSurfacePlane
sec.ObjectList = "1"
s.Vector.X = 0
sec.Vector.Y = 0
sec.Vector.Z = 1
iSecs.PréparerModification
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 » :
' obtenir des résultats
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.