Problem, das Schiebungsspannung verursacht

Hallo,

Ich habe ein Makro, das Teile einfügt und Constraints erstellt, es funktioniert super, wenn ich Schiebeconstraints mit einem beidseitigen parallelen Regler erstellen möchte, aber nicht mit einem runden Schieberegler. Wenn ich es von Hand mache, ist es kein Problem, daher habe ich, um zu sehen, woher das Problem kommt, ein vereinfachtes Modell mit einem runden Schieberegler, einer parallelen und zwei entsprechenden Schieberbedingungen, die von Hand erstellt wurden, erstellt.

Wenn ich eine neue Einschränkung mit der zuvor von Hand erstellten neu erstellen möchte, funktioniert alles einwandfrei, aber nicht, wenn ich es von Grund auf neu erstelle.

Nach Untersuchung scheint das WideMateFeatureData-Objekt, das zur Erstellung einer neuen Einschränkung verwendet wird, standardmäßig nur 2 Flächen zu akzeptieren (wenn es mit createMateData(11) erstellt wird) und " weigert sich " seine Änderung mit einer einseitigen Folie.

Umgekehrt, wenn er von Hand mit einer einseitigen Folie hergestellt wird, " weigert sie", sich in eine zweiseitige Folie umzuwandeln.
Weißt du, wie man das WidthMateFeatureData-Objekt dazu bringt, einen runden Schieberegler von Grund auf zu akzeptieren? (TabSelection-Attribut von Größe 1)
Oder ein Trick, um mit einem runden Regler eine Breitenbeschränkung zu erstellen?

Genauer gesagt, hier ein Teil meines kommentierten Codes

'swCircularMateData : objet WidthMateFeatureData d’une contrainte glissière avec un coulisseau rond (créée à la main)
'swOldMateData : objet WidthMateFeatureData d’une contrainte glissière avec un coulisseau à deux faces parallèles (créée à la main)

Set swTestMateData = swCircularMateData 'récupère l'objet WidthMateFeatureData créé à la main
swAssembly.CreateMate swTestMateData 'crée la contrainte sans problème

Set swTestMateData = swAssembly.CreateMateData(11) 'crée un objet WidthMateFeatureData vide
'Recopie l'intégralité des attributs de l'objet
swTestMateData.ConstraintType = swCircularMateData.ConstraintType
swTestMateData.DistanceFromEnd = swCircularMateData.DistanceFromEnd
swTestMateData.FlipDimension = swCircularMateData.FlipDimension
swTestMateData.PercentDistanceFromEnd = swCircularMateData.PercentDistanceFromEnd
swTestMateData.TabSelection = swCircularMateData.TabSelection
swTestMateData.WidthSelection = swCircularMateData.WidthSelection

swAssembly.CreateMate swTestMateData 'la contrainte ne se crée pas
vTest = swTestMateData.TabSelection 'en inspectant l'attribut TabSelection, il s'avère être vide

swTestMateData.TabSelection = swParalleleMateData.TabSelection 'recopie l'attribut TabSelection de la contrainte avec le coulisseau parallele
swAssembly.CreateMate swTestMateData 'crée la contrainte sans problème

Hallo @Léo_RHODES1 und willkommen in diesem Forum...

Tatsächlich weigert sich die Funktion " CreateMate " hartnäckig, eine " Slide "-Einschränkung mit einem Schieberegler mit nur einer zylindrischen Fläche zu erstellen.
Wenn es eine Lösung gibt, ist sie gut verborgen... :joy:

Andererseits erfüllt die Funktion " AddMate5 ", die als veraltet erklärt wird, weil sie älter ist.

Der untenstehende Code funktioniert an meinem einfachen Beispiel.

Option Explicit
    
' Génération d'une contrainte d'assemblage de type glissière, entre deux faces planes d'une pièce
' et une face cylindrique d'une autre.
' La fonction de l'API utilisée est AddMate5, obsolète, mais qui a le mérite de fonctionner...
    
    Dim swApp As SldWorks.SldWorks
    Dim swModel As ModelDoc2
    Dim swAssemb As AssemblyDoc
    Dim swSelMgr As SelectionMgr

Sub Main()
    
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swAssemb = swModel
    Set swSelMgr = swModel.SelectionManager

    ' Sélection des faces dans l'ordre: 2 plans parallèles d'une pièce, un cylindre d'une autre
    Dim faceWidth(1) As Face2
    Dim faceTab(0) As Face2
    
    Set faceWidth(0) = swSelMgr.GetSelectedObject6(1, -1)
    Set faceWidth(1) = swSelMgr.GetSelectedObject6(2, -1)
    Set faceTab(0) = swSelMgr.GetSelectedObject6(3, -1)
    
    ' Application des Marks exigés par AddMate5
    swModel.ClearSelection2 True
    Dim swSelData As SldWorks.SelectData
    Set swSelData = swSelMgr.CreateSelectData
    
    swSelData.Mark = 1
    faceWidth(0).Select4 True, swSelData
    faceWidth(1).Select4 True, swSelData
    swSelData.Mark = 16
    faceTab(0).Select4 True, swSelData

    ' Création de la contrainte
    Dim swMate As SldWorks.Mate2
    Dim errorStatus As Long
    
    ' Le paramètre 0 après swMateWIDTH correspond à l'option "Centré"
    Set swMate = swAssemb.AddMate5(swMateWIDTH, 0, False, 0, 0, 0, 0, 0, 0, 0, 0, False, False, 0, errorStatus)

    If swMate Is Nothing Then
        MsgBox "Erreur AddMate5. Code : " & errorStatus, vbCritical
    Else
        MsgBox "Contrainte créée avec AddMate5."
        swModel.ClearSelection2 True
    End If
End Sub

Danke für die Antwort! Ich nehme die Änderungen am Montagmorgen vor und halte Sie über das Ergebnis auf dem Laufenden!