Application des références de contraintes sous VBA

Bonjour à tous,

Dans le cadre d'un projet, je suis amené à automatiser au plus possible la réalisation de l'assemblage de nos produits sous Solidworks.

L'idée est de partir de notre fichier Excel qui contient le nom et le chemin d'accès des composants à assembler.

J'ai créé une première macro qui extrait ces 2 colonnes pour les ajouter sur un fichier Excel vierge (qui me sert de "logiciel" pour les utilisateur du programme)

Une fois ces informations ajoutées, un clique ouvre Solidworks et ajoute chacune des pièces de la liste dans un nouveau fichier assemblage.

Jusqu'ici tout va bien !

Souhaitant optimiser l'assemblage comme je l'expliquais, j'ai ajouté à chacun des composants des références de contraintes pour qu'ils se "reconnaissent" entre eux et s'assemblent de la manière souhaitée. Cependant, lorsque j'execute mon programme, les pièces sont simplement ouvertes les unes sur les autres... J'ai essayé de faire la manipulation de manière manuelle en enregistrant la macro, mais dans le fichier obtenu, j'ai l'impression que que le clic sur "smartmates" ou que le "alt"+glissé, ne sont pas reconnu.

Avez-vous une idée du code que je pourrais utiliser pour parvenir à faire cela ?

Je vous remercie par avance,

Anthony M. 

Bonjour Anthony;

Il existe un exemple de macro (VB) pour ajouter une piéce dans un assemblage est de la contraindre, à adapter....

->http://help.solidworks.com/2020/English/api/sldworksapi/Add_Component_and_Mate_Example_VB.htm?verRedirect=1

(Attention, cette macro nécessite un module de classe)

sinon la ligne vb pour ajouter des contraintes est commentée ici:

http://help.solidworks.com/2016/English/api/sldworksapi/SOLIDWORKS.Interop.sldworks~SOLIDWORKS.Interop.sldworks.IAssemblyDoc~AddMate5.html

Cordialement.

1 « J'aime »

Bonjour et merci pour cette réponse.

En utilisant cette méthode il devient possible d'ajouter des contraintes enter les pièces en s'appuyant sur des références comme des axes et des plans.

Mon idée initiale était d'attribuer à chaque composant une "référence de contrainte" et d'utiliser ces dernières dans l'assemblage de manière automatique.

Est-ce possible ?

Bonjour,

Pour ma part, je n'ai rien trouvé permettant de faire cela dans les API.

Cordialement,

Bonjour,

Merci pour votre message, je vais donc chercher d'autres solutions.

Cordialement,

J'ai fait quelque chose de similaire

j'ai ajouter des systèmes de coordonnées à mes pièces

puis j'ai utilisé l'API addmate

 

    Piece1 = SelecNomSCPiece1 + "@" + SelecNomPiece1 + "@" + Assemblage
    Piece2 = SelecNomSCPiece2 + "@" + SelecNomPiece2 + "@" + Assemblage
    
    'Ajout de la contrainte
    swModel.Extension.SelectByID2 Piece1, "COORDSYS", 0, 0, 0, True, 0, Nothing, 0
    swModel.Extension.SelectByID2 Piece2, "COORDSYS", 0, 0, 0, True, 0, Nothing, 0
    swModel.AddMate5 20, -1, False, 0, 0, 0, 0, 0, 0, 0, 0, False, False, 0, longstatus
    Part.ClearSelection2 True
    Part.EditRebuild3

Bonjour gdm,

Merci pour cette réponse. 

Si je comprends bien, ce programme n'utilise pas les smartmates mais il consiste à définir pour chaque pièce différents systèmes de coordonnées aux endroits de liaisons puis il vient faire coincider ces systèmes les uns avec les autres pour réaliser l'assemblage. Est-ce bien cela ?

Je suppose que cette fonction utilise les contraintes magnétiques:

https://www.youtube.com/watch?v=IZCqdfRWyqs

a.mastromauro

tout a fait, plus simple à gérer, inconvéniant il faut préparer les systèmes de coordonnées

 

 

D'accord merci, je vais modifier toutes mes pièces pour les rendre compatibles avec cette méthode.

En revanche, si je comprends bien, réaliser un assemblage de cette manière bloque tous mouvements relatifs des pièces ?