Bonjour à toutes et tous,
Ce post pour partager quelques macros réalisées à l’aide -notamment- de ce forum et de solliciter vos conseils.
Pour le contexte : nous cherchons en ce moment à automatiser certains de nos procédures d’export avec Solidworks (2017) pour simplifier la sous-traitance.
Nous travaillons sur des projets qui sont fréquemment édités et sous traités régulièrement par des personnes qui ne sont pas forcément les dessinateurs, d’où le besoin d’avoir des fichiers fiables.
Nous sommes « chanceux », nous pouvons sous-traiter à l’aide de fichiers volumiques (sldpart et step), ce qui simplifie grandement le travail.
Nos fichiers solidworks sont des modèles multicorps (principalement des ensembles mécanosoudés simples).
Chaque pièce multicorps est désignée par une lettre dans chaque projet. (A.sldpart, B.sldpart, etc.)
Chaque corps de chaque pièce est désignée par un nom de type A1, A2, etc. dans les propriétés de liste des pièces soudées.
Nous utilisons aussi la liste des pièces soudées pour stocker d’autre informations pour chaque corps (nombre et diam de percages, sous traités ou non, désignation pour nomenclatures, etc.)
Pour la sous traitance nous avons besoin d’extraire des fichiers volumiques correspondants aux corps A1, A2, …, nommés tels que : A1.sldpart. (note : la gestion des quantités de commandes est faite via notre ERP et la nomenclature).
Ne trouvant pas de moyens simple d’invoquer la fonction « enregistrer les corps » dans solidworks en nommant automatiquement en fonction de propriétés de la liste de pièces soudées, nous avons décidé de développer une macro dans ce but. (permettant au passage de filtrer les exports selon d’autres paramètres).
En pièce jointe de ce post vous trouverez donc 2 macros qui permettent :
- La première, exporte tous des corps en fonction de propriétés de la liste des pièces soudées :
- Dans un fichier pièce, balayer tous éléments de premier niveau dans la liste des pièces soudées (+/ = tous les corps différents)
- Pour chaque élément de la liste de pièce soudée : créer une entrée dans 2 tableaux différents : dans le premier écrire les propriétés personnalisées du corps (dans notre cas ID, laser, P, …) ET écrire dans un second tableau le corps correspondant.
- A la fin de cette boucle, les corps peuvent être filtrés, et sont ensuite enregistré dans C :Temp sous la forme A1.sldprt A2.sldpart etc.
- La seconde, écris le nombre et le diamètre de chaque perçage dans une propriété de chaque corps :
- Dans un fichier pièce, balayer tous éléments de premier niveau dans la liste des pièces soudées (+/ = tous les corps différents)
- Pour chaque élément de la liste de pièce soudée, lancer sur le corps concerné une macro de recherche de percages (issue de : https://forum.solidworks.com/thread/201408)
- Ecrire le résultat dans la propriété « p ».
Après avoir passé pas mal de temps a fouiner sur différents forums, je n’ai pas trouvé de telles macros, j’espère donc qu’elles pourront servir a certaines personnes.
Plusieurs remarques :
- - Première « expérience » en macro solidworks pour moi donc c’est codé avec les pieds. Ces macros proviennent généralement d’un assemblage de morceaux de codes glanées sur le net, ce n’est donc ni optimisé ni fiable je pense, mais ca fonctionne.
- - Ca marche chez moi et sur 3 autres postes en 2017 avec les précautions suivantes : lancer depuis l’éditeur de macro en se plaçant dans le main (ie. clic sur main), avoir un répertoire C:/temp existant.
Si certains et certaines d’entre vous ont un peu de temps a m’accorder je suis preneur d’aide sur 3 points :
- Je m’intéresse à la génération automatique de dxf (pour des toles planes et pour des plèces a déplier), dans le même cas que précédemment (nommage etc.). J’ai bien trouvé la méthode swPart.ExportToDWG2, mais je n’arrive pas à l’apppliquer sur un corps (ibody2), mais seulement sur une pièce complète. Je ne vois qu’une option (peu esthétique : supprimer tous les corps sauf un, exporter la « pièce qui ne contient qu’un corps», passer au corps suivant, etc). Preneur de conseils si vous en avez.
- D’un point de vue plus large : j’ai l’impression que ma logique est pas si mauvaise pour les 2 premières macros : voyez vous une autre méthode (plus simple) pour arriver a ce but ?
- Si certains ou certaines se sentent de nettoyer le code pour que ca puisse (mieux) resservir a d’autres surtout n’hésitez pas !
Merci pour vos retours,
Q
qc-save_bodies_according_to_id-v0.1.swp