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
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 »