Insertion de forces sur surface d'une pièce dans un assemblage

J’ai créé une macro pour insérer automatiquement des forces à partir d’un jeu de sélection de surface dans une pièce.
Dans certains cas, j’ai besoin de faire la même chose mais dans le contexte d’un assemblage. Les jeux de sélection sont toujours dans une des pièces de l’assemblage. La commande fonctionne mais aucune surface n’est sélectionnée…

Je vous mets le code utilisé pour info:

Public Sub CreateForce200(swSelSet As SldWorks.SelectionSet)
    Dim swApp As Object
    Set swApp = Application.SldWorks
    
    Dim COSMOSWORKSObj As Object
    Dim CWAddinCallBackObj As Object
    
    Set CWAddinCallBackObj = swApp.GetAddInObject("CosmosWorks.CosmosWorks")
    Set COSMOSWORKSObj = CWAddinCallBackObj.CosmosWorks

    Dim ActiveDocObj As Object
    Dim StudyManagerObj As Object
    Dim LoadsAndRestraintsManagerObj As Object
    Dim ErrorCodeObj As Long
    Dim ContactManagerObj As Object
    Set ActiveDocObj = COSMOSWORKSObj.ActiveDoc()
    Set StudyManagerObj = ActiveDocObj.StudyManager()
    Dim StudyObj As Object
    Set StudyObj = StudyManagerObj.GetStudy(0)
    Set LoadsAndRestraintsManagerObj = StudyObj.LoadsAndRestraintsManager()

    Dim vSelItems As Variant
    Dim vSelItemTypes As Variant
    Dim swSelItem As SldWorks.SelectionSetItem
    Dim swFace As SldWorks.Face2
    Dim j As Integer
    Dim errors As Long
    

    vSelItems = swSelSet.GetSelectionSetItems
    vSelItemTypes = swSelSet.GetSelectionSetItemTypes

    Debug.Print "Nom du jeu de Selection: " & swSelSet.GetName
    
    'Contrôle pièce activée
    'Dim swPart As SldWorks.PartDoc
    'Set swPart = swApp.ActivateDoc3(nameCarte2, True, swRebuildOnActivation_e.swUserDecision, errors)
    

    Dim DispArray As Variant
    Dim cnt As Long
    cnt = UBound(vSelItems)
    Dim myArray()
    ReDim Preserve myArray(cnt)

    For j = 0 To cnt
        Set swSelItem = vSelItems(j)
        If vSelItemTypes(j) = swSelectType_e.swSelFACES Then
            Set myArray(j) = swSelItem.GetCorrespondingItem
        End If
    Next
    DispArray = myArray

    Dim CWForceObj As Object
    Dim DistanceValues As Variant
    Dim ForceValues As Variant
    Dim ComponentValues As Variant
    Dim data(6) As Double
    data(0) = 1: data(1) = 1: data(2) = 1: data(3) = 1: data(4) = 1: data(5) = 1
    ComponentValues = data

    Set CWForceObj = LoadsAndRestraintsManagerObj.AddForce3(1, 0, -1, 0, 0, 0, (DistanceValues), (ForceValues), 0, False, 0, 0, 0, 1, (ComponentValues), False, False, (DispArray), Nothing, False, ErrorCodeObj)

    StudyObj.ShowOrHideForce = False

    Set StudyManagerObj = Nothing
    Set ActiveDocObj = Nothing
    Set CWAddinCallBackObj = Nothing
    Set COSMOSWORKSObj = Nothing
End Sub

Bonjour @fgauvreau ,

Ma conclusion sur l’origine de ce refus de créer un effort : les adresses des objets renvoyés par les « Item » de l’ensemble de sélection ne pointent sur les faces de la sélection. Il semble nécessaire de faire appel à la méthode « GetCorrespondingItem » de l’item pour obtenir la bonne adresse.

Je me permets d’ajouter que le nombre et la variété des paramètres de la fonction « AddEffort3 » n’aide pas à l’exploration…

Je propose une solution fonctionnelle dans la macro jointe, dans laquelle je me suis efforcé d’utiliser des variables typées de CW, plutôt que des types « objet », en ajoutant la bibliothèque « Solidworks Simulation 20XX type library » à la liste des références.
Les paramètres de l’effort sont un peu différents de ceux de votre proposition initiale (effort avec référence de direction), mais la macro fonctionne et peut servir de base de comparaison pour tenter d’identifier des dysfonctionnements.

La macro utilise utilise deux approches de sélection des objets, soit avec les fonctions classiques du SelectionManager du modèle, soit avec les « Item » de l’ensemble de sélection.

Malheureusement, aucune ne donne de résultat si l’ensemble de sélection appartient à une pièce. Sa sélection ne donne pas le même comportement que lorsqu’il appartient à l’assemblage. Bien qu’identifiées, les entités ne sont pas conformes (?) et la fonction « AddEffort3 » renvoie un code d’erreur.

Macro en pièce jointe, ainsi que le document d’assemblage utilisé pour mes tests (SW2022). L’ensemble de sélection comporte 3 faces planes.

Chute.zip (537,0 Ko)
CWCreationEffort.swp (71,5 Ko)

2 « J'aime »