507x
001352
27.04.2020

[FR] FAQ 004409 | Comment créer une coupe via l'interface COM ?

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.