Bonjour,
Sur la fiche UserForm1, il y a un bouton [Effacer] qui supprime l’esquisse 3D et le repère associé au cube. A condition qu’il s’agisse des deux dernières fonctions de l’arbre, donc que rien ne soit ajouté après création du cube.
Quant à récupérer le nom d’une esquisse, la méthode « Name » fait partie de la classe « ISketch » de l’API (« swSketch.Name », cf. ligne 377).
Mais si vous avez une variable pointant sur l’esquisse, comme par exemple à la ligne 363 (« Set swSketch = swModel.SketchManager.ActiveSketch »), la méthode « Select4() » permet la sélection sans avoir à rechercher son nom, par exemple :
« ok = swSketch.Select4(False, Nothing) »
Membres sans doute hérités, ils ne sont pas documentés dans l’aide de la classe « ISketch », mais le sont dans d’autres…
Bonjour @m.blt
Merci une fois de plus pour ton retour.
Je n’avais pas percuté pour le bouton EFFACER effectivement.
Je vais regarder cela de plus prêt pour voir à quel moment ça agit par rapport aux renseignement des variables que j’ai ajouté … et pour enrichir ma pauvreté intellectuelle en VBA .
D’ailleurs, en VBA j’ai bricolé cela ce matin…
Un macro qui récupère le nom de la derniere fonction afin de la supprimer.
Comme il y a une esquisse 3D et un trièdre, je double les lignes de commande pour supprimer les 2 fonctions.
Je sais, c’est archaïque
Il y a surement moyen de faire plus simple j’imagine …
Option Explicit
Dim swApp As SldWorks.SldWorks
Dim swDoc As SldWorks.ModelDoc2
Dim swAssembly As SldWorks.AssemblyDoc
Dim swFeatureName As SldWorks.Feature
Sub SuppressionDeuxDernieresFonctions()
Set swApp = Application.SldWorks
Set swDoc = swApp.ActiveDoc
' Vérifie que le document SW est ouvert
If swDoc Is Nothing Then
MsgBox "Aucun document Solidworks ouvert"
Exit Sub
End If
Set swAssembly = swDoc
'''Première passe pour supprimer le trièdre
'Attribution nom dernière fonction
Set swFeatureName = swDoc.Extension.GetLastFeatureAdded
'Vérifie la selection de la fonction
If swFeatureName Is Nothing Then
MsgBox "Sélection fonction impossible"
swDoc.ClearSelection2 True
Exit Sub
End If
'Selection du nom
swFeatureName.Select True
'Suppression de la fonction
swDoc.EditDelete
'''Deuxième passe pour supprimer l'esquisse 3D
'Attribution nom dernière fonction
Set swFeatureName = swDoc.Extension.GetLastFeatureAdded
'Vérifie la selection de la fonction
If swFeatureName Is Nothing Then
MsgBox "Selection fonction Impossible"
swDoc.ClearSelection2 True
Exit Sub
End If
'Selection du nom
swFeatureName.Select True
'Suppression de la fonction
swDoc.EditDelete
End Sub
j’ai une petite question concernant la définition du tracé de la boite.
J’ai quelques cas ou elle ne se cale pas totalement au max de ce qui devrait être. Notamment sur des pièces rondes comportant des congés :
A quel endroit du code puis-je intervenir afin d’obtenir une bonne tangence ?
En tous cas, la macro fonctionne super bien.
J’y ai apporté mes arrangements et des fonctions en plus et c’est TOP.
Merci beaucoup pour l’aide apportée.
Bonjour,
Difficile de se prononcer sur l’origine du problème que vous soulevez. Quelques remarques:
Quelle est l’importance de l’erreur, comparée aux dimensions générales de l’assemblage (en mm par exemple) ?.
Dans la mesure où le défaut observé nécessite un zoom important, l’affichage est peut-être en cause…
C’est la méthode « GetExtremePoint() » qui détermine la limite extérieure pour chaque pièce. Il s’agit d’un calcul numérique interne aux API de SolidWorks. Est-il rigoureux ? Comme tout calcul numérique, il utilise un critère de qualité pour valider sa recherche, critère inconnu de l’utilisateur.
Sur ce point, commentaire de l’aide SolidWorks à propos de la fonction « GetBodyBox » qui utilise apparemment la méthode « GetExtremePoint » : IMPORTANT : Les valeurs renvoyées sont approximatives et ne doivent pas être utilisées à des fins de comparaison ou de calcul. De plus, la boîte englobante peut varier après la reconstruction du modèle.
Les contours des « nuages » visibles sur les copies d’écran semblent basés sur des splines. Serait-ce l’origine du pb ?
Les seuls calculs à l’intérieur de la macro sont des changements de repères qui utilisent les fonctions vectorielles et matricielles de l’API. Je ne vois pas comment ils peuvent générer le défaut.
Pour conclure: je ne suis pas en mesure d’identifier l’origine du souci. Pouvez-vous partager l’exemple qui pose problème ? Même dégradé, ou par message privé…
Alors l’erreur est variable suivant les assemblages et pièces.
Cela va de 0.5 à 1.5mm.
Dans mon cas cela n’est pas forcément important, car je récupère mes valeurs au cm.
Ma question était surtout dans le but de mieux comprendre le code et d’éventuellement corriger celà si c’était réalisable. Donc rien d’impératif.
Je mets tout de même l’assemblage + pieces avec Esquisse 3D + Syteme coordonnées générés par la macro si vous voulez regarder.
Super travail @m.blt , comme toujours.
Et moi qui pensais ne jamais à avoir à me servir des « BoundingBox » jusqu’à présent…je tombe sur un client disons…Tatillon.
Ta Macro tombe donc à point nommé. Merci
Bonjour @Maclane , et merci pour le compliment…
Attention toutefois au problème de précision soulevé par @MLG dans son dernier message.
J’ai constaté l’anomalie, mais je n’ai pas réussi à identifier si c’est SW ou la macro qui est en cause.
Bonjour;
C’est un problème récurent avec les splines, Solidworks ne prend en compte que les points et non la courbe elle-même par conséquent je pense que la fonction « GetExtremePoint() » fait la même chose (comme son nom l’indique d’ailleurs).
De mon coté, je me suis permis de modifier ta macro en ajoutant les propriétés dur le documents avec une option pour les inscrire (ou non) dans toutes les configurations.
En revanche je suis en train de chercher comment ajouter de la cotation sur l’esquisse 3D.
Je n’ai pas encore regardé la notion associée au bouton « Effacer » mais je pense qu’en renommant les fonctions « Esquisse3D » et « Système de Coordonnées » de manière plus explicite (du type « BoundingBox_3D » et « BoundingBox_XYZ »), ce sera plus simple de les effacer, voir de supprimer dans la foulée toutes les fonctions (reliquats) avec les même Noms (+compteur).
Bonjour à tous,
la différence est vraiment minime mais est présente effectivement.
Ayant des documents cotés à la main et certains utilisant cette macro, on se retrouvait avec des données de sortie différentes, d’où mon interrogation…
Et pour les splines, on évite de travailler avec afin de ne pas avoir ce genre de soucis.