Macro : enregistrement de corps selon propriétés de la liste des pièces soudées (+comptage de percage + dépliés)

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 :
  1. 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)
  2. 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.
  3. 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 :
  1. 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)
  2. 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)
  3. 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 :

  1. 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.
  2. 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 ?
  3. 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
1 « J'aime »

Et la seconde macro, pas réussi à la joindre au premier post.

Bonne journée,
Q


qc-append_holes_count_to_p_customproperty-v0.1.swp
1 « J'aime »

Bonjour,

personnellement pour l'export de dxf avec plusieurs tôles planes ou avec pliages dans la même pièce j'utilise la fonction enregistrer sous dxf (ou dwg), SW repère toutes les tôles ou dépliés et tu as l'option d'export "fichiers séparés" qui donc te créera automatiquement un fichier découpe par pièce. Si tu ne veux pas toutes les pièces il suffit de décocher le corps à exporter non désiré.

Cela fonctionne bien par contre je n'ai pas les compétences pour modifier la numérotation imposée par SW.

Bonne journée

Vincent

Salut,

Merci pour la réponse rapide.

Effectivement j'ai repéré cette technique. Le hic c'est que solidworks récupère (si je ne m'abuse) le nom de la dernière Feature qui affecte le corps (dans le cas d'un corps en tolerie c'est souvent "Etat déplié xx") là ou moi je voudrais lui faire lire A1 ou A2.

Du coup ca me donne du grain a moudre pour mon autre question sur la méthodo : peut être qu'une piste plus simple serait de renommer les features en fonction de la liste des pièces soudées avant de lancer les fonctions "sauvegarder" et "exporter" en automatique.

Bon après midi,
Q

Rebonjour,

je viens d'essayer oui c'est ce qu'il faut faire modifier un par un le nom des dépliés dans la liste des pièces soudées.

Ensuite enregistrer sous dxf / fichiers séparés.

Bonne fin de journée

Vincent

Bonjour 

Solidworks recupère le nom de  la dernière fonction de l'arbre de constructions du corps que vous souhaiter enregistrer.

Je pense qu Il faut renommer la fonction dépliée dans votre cas

 

cdlt

Bonjour,

J'ai peut-être mal compris la demande mais pourquoi ne pas lister les états dépliés, les sélectionner un par un pour les enregistrer en dxf après avoir récupéré le nom du corps auquel il se rattache ?

Cordialement,

Bonjour,

Par macro, 2 solutions se présentent :

1°) Solution sans renommer les états dépliés :
    - Lister les états dépliés.
    - Pour chaque état déplié :
        - Lister les corps afin de récupérer le nom de celui qui lui est rattaché.
        - Définir le nom du fichier DXF suivant le nom du corps trouvé.
        - Exporter en DXF cet état déplié sous le nom ainsi défini.
        - Boucler sur l'état déplié suivant.
        - Et ainsi de suite jusqu'au dernier état déplié.
    
2°) Solution en renommant les états dépliés :
    - Lister les états dépliés.
    - Pour chaque état déplié :
        - Lister les corps afin de récupérer le nom de celui qui lui est rattaché.
        - Renommer l'état déplié suivant le nom du corps trouvé.
        - Boucler sur l'état déplié suivant.
        - Et ainsi de suite jusqu'au dernier état déplié...
    - Exporter en DXF et en fichiers séparés le modèle complet.

La différence sera surtout visible sur le nom du fichier de sortie, pour la solution 1 cela peut être "Nom du corps.dxf" alors que pour la solution 2 ce sera "Nom du corps - Nom de la pièce.dxf".

Cordialement,

Bonjour,

Merci pour vos retours.

J'ose : avez vous des morceaux de codes qui vont dans le sens de la proposition de d.roger?

Mon coeur balance entre les 2... D'un côté le nom ne necessite pas de post pro, de l'autre l'input utilisateur permet de voir ce qui est exporté et de choisir différents fichiers de projections avec l'interface habituelle.

Bonne fin de journée,
Q

 

Bonjour à tous,

Vieux sujet ...

Mais la proposition n°1 de @d.roger correspond parfaitement à ce que je recherche.

Le problème c'est que je ne comprend pas les macros, en fait je comprend la structure des "phrases" mais le vocabulaire !

Si quelqu'un à ses heures perdu pouvais ébaucher un bout de code pour me permettre d'avancé, ce serait super sympa !

Merci par avance.