Vba suppr Cotes bancales esquisse

Bonjour
je cherche a supprimer les cotes bancales en vba d’une pièce

si on copie une fonction d’une pièce à une autre il perd les contraintes de l’esquisse et je ne sais pas comment supprimer ces contraintes

je suis partit de cet exemple mais je ne trouve pas comment identifier les contraintes ou cotes a problème

Sub main()
'Sélectionner une esquisse
'

    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swSelMgr As SldWorks.SelectionMgr
    Dim swFeat As SldWorks.Feature
    Dim swSketch As SldWorks.Sketch
    Dim vSketchSeg As Variant
    Dim vConstraint As Variant
    Dim i As Long
    Dim j As Long
    Dim bRet As Boolean

    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swSelMgr = swModel.SelectionManager
    Set swFeat = swSelMgr.GetSelectedObject6(1, -1)
    Set swSketch = swFeat.GetSpecificFeature2

    Debug.Print "Sketch = " & swFeat.Name
    Debug.Print ""
    Debug.Print "  SketchConstraintStatus  fully constrained = " & swSketch.GetConstrainedStatus
    Debug.Print ""
    

    ' Put sketch into edit mode to get access
    ' to constraint information for each segment
    ' in the sketch
    swModel.EditSketch

    vSketchSeg = swSketch.GetSketchSegments
    For i = 0 To UBound(vSketchSeg)
        vConstraint = vSketchSeg(i).GetConstraints
        For j = 0 To UBound(vConstraint)
            Debug.Print "  SketchSegConstraint[" & i & "] = " & vConstraint(j)
        Next j
    Next i

    ' Exit edit mode and do not rebuild the model
    swModel.InsertSketch2 True

End Sub

Bonjour,
Il faudrait ajouter du code en se basant sur celui de cette exemple: Get Types of Entities Attached to Selected Annotation Example (VBA) - 2022 - SOLIDWORKS API Help
Juste remplacer si vous êtes sur 2022 le vAttEntTypeArr = swAnn.GetAttachedEntityTypes2 par vAttEntTypeArr = swAnn.GetAttachedEntityTypes.
Si dans le résultat du debug print Type of attached entity(" & i & ") as defined in swSelectType_e = " & vAttEntTypeArr(i) il y a la valeur sswSelectType_e = 0 ça indique qu’il y a une des attaches de la cote qui est rompue.
De ce que j’ai testé, ne fonctionne pas sur des cotes de diamètre qui n’auraient qu’une ligne d’attache.

1 « J'aime »

Bonjour;
Voici ma macro pour la suppression des cotes bancales;
Fonctionne sous Solidworks 2022 (même si quelques variables mériteraient d’êtres mises à jour…).

Dim swApp           As SldWorks.SldWorks
Dim swModel         As ModelDoc2
Dim swDraw          As DrawingDoc
Dim swSheet         As Sheet
Dim swView          As View
Dim boolstatus      As Boolean
Dim swAnn           As Annotation
Dim swDispDim       As DisplayDimension
Dim vSheetNames     As Variant
    
Sub main()
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    
    If swModel.GetType <> SwConst.swDocumentTypes_e.swDocDRAWING Then Exit Sub
    Set swDraw = swModel
    
    swModel.ClearSelection2 (True)
    vSheetNames = swDraw.GetSheetNames
    For i = 0 To UBound(vSheetNames)
        swDraw.ActivateSheet vSheetNames(i)
        Set swSheet = swDraw.Sheet(vSheetNames(i))
        Set swView = swDraw.GetFirstView        ' This is the drawing template
        Do While Not swView Is Nothing
            Set swAnn = swView.GetFirstAnnotation3
            Do While Not swAnn Is Nothing
                If swAnn.IsDangling Then
                    boolstatus = swAnn.Select3(True, Nothing)
                End If
                Set swAnn = swAnn.GetNext3
            Loop
            Set swView = swView.GetNextView
        Loop
        boolstatus = swModel.DeleteSelection(True)
        swModel.ClearSelection2 (True)
    Next i
    swModel.ClearSelection2 (True)
    
End Sub

Cordialement.

1 « J'aime »

je ne comprends pas bien vos réponses avec ma question
ma question c’est comment supprimer les cotes et contraintes bancales d’une pièce, d’une esquisse

lors de la copie d’une fonction d’une pièce à l’autre des contraintes et cotes sont perdues et je voudrais les supprimer

je ne veux pas sélectionner une par une les contraintes , il n’y a pas d’annotation dans ma pièce et ce n’est pas non plus un plan

En fournissant un exemple, une capture d’écran avant après copie et ensuite du résultat nettoyé, se serait peut-être plus clair?
Si les personnes répondent à côté c’est peut-être pas suffisamment clair pour eux.
Dans tout les cas cela ne parait pas très simple.

Bonjour;
@Bob_2000 effectivement ma réponse ne correspond pas du tout à votre demande, la macro fournie n’est utilisable que sur la cotation dans les Mise en plan. Désolé.


Cordialement.

Bonjour,
Sauf erreur de ma part, l’exemple de l’API est sur un part. Une cote est considérée comme une annotation par SW

1 « J'aime »

Bonjour,

voici des captures d’écran


CAPTURE 000336

La macro de Cyril.f bloque à la ligne Set swAnn = swSelObj.GetAnnotation erreur 91
que je sois dans l’esquisse ou en la sélectionnant c’est pareil

Bonjour,
Il faut sélectionner la cote dans l’esquisse et non l’esquisse en elle-même.
Dans la capture d’écran par contre ça semble être les points qui sont en erreur et non les cotes donc pas la même demande.

1 « J'aime »

si quelqu’un a une autre idée
je ne comprends pas bien l’intérêt de la macro de Cyril.f qui remplace la touche suppr mais en plus long

Bonjour,

Le code que j’ai mis en exemple ne fait pas de suppression.
Possibilité de partager votre fichier? Comme expliqué de prime abord ce ne sont pas les cotes qui sont en défaut.

voici un exemple
le but de la macro doit être de supprimer toutes les cotes et contraintes bancales
Pièce1.SLDPRT (130,2 Ko)

Fichier futur, je suis en 2022.
Sinon de base mon premier exemple fonctionne sur les cotes bancales (dans l’exemple faut sélectionner la cote en question à la main, faut juste automatiser pour ce cas).
Pour les contraintes bancales, je n’ai rien vu dans l’aide de l’API pour le moment. Le code du premier post permet d’indiquer que l’esquisse n’est pas totalement contrainte mais ne relève pas la contrainte en erreur.
Peut-être chercher du côté du status des contraintes (pas eu le temps de regarder pour le moment)

1 « J'aime »