Krachten op het oppervlak van een onderdeel in een assemblage plaatsen

Ik heb een macro gemaakt om automatisch krachten van een oppervlakteselectieset in een onderdeel in te voegen.
In sommige gevallen moet ik hetzelfde doen, maar dan in de context van een montage. De selectiesets zitten altijd in een van de onderdelen van het geheel. Het commando werkt, maar er is geen oppervlak geselecteerd...

Ik zal de code die voor info wordt gebruikt:

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

Hallo @fgauvreau ,

Mijn conclusie over de oorsprong van deze weigering om een inspanning te leveren: de adressen van de objecten die door de " Items " van de selectieset worden teruggestuurd, verwijzen niet naar de vlakken van de selectie. Het lijkt noodzakelijk om de " GetCorrespondingItem " -methode van het item te gebruiken om het juiste adres te krijgen.

Ik zou hieraan willen toevoegen dat het aantal en de verscheidenheid aan parameters van de functie " AddEffort3 " niet helpt bij het verkennen...

Ik stel een werkende oplossing voor in de bijgevoegde macro, waarin ik heb geprobeerd CW-getypeerde variabelen te gebruiken, in plaats van "object " -typen, door de " Solidworks Simulation 20XX type library " toe te voegen aan de lijst met referenties.
De parameters van de inspanning zijn een beetje anders dan die van uw oorspronkelijke voorstel (inspanning met richtingsreferentie), maar de macro werkt en kan worden gebruikt als vergelijkingsbasis om te proberen storingen te identificeren.

De macro gebruikt twee benaderingen voor het selecteren van objecten, ofwel met de klassieke functies van de SelectionManager van het model of met de " Items " van de selectieset.

Helaas zal geen van hen werken als de selectieset bij een kamer hoort. De selectie ervan geeft niet hetzelfde gedrag als wanneer het tot de assemblage behoort. Hoewel de entiteiten zijn geïdentificeerd, zijn ze niet compatibel (?) en de functie " AddEffort3 " retourneert een foutcode.

Macro-bijlage, evenals het montagedocument dat ik heb gebruikt voor mijn tests (SW2022). De selectieset heeft 3 platte vlakken.

Chute.zip (537.0 KB)
CWCreationEffort.swp (71.5 kB)

2 likes