Mes questions
Vous n'avez posé aucune question.
Gagnez des points en posant votre question !
Mes contributions
Vous n'avez répondu à aucune question.
Vous pouvez gagner des points en répondant à des questions !

Code VBA pour changement de reference lors de l'ouverture d'un fichier .SLDPRT

FC
407
Vues

Bonjour,

Dans un fichier .SLDPRT (n°1), j'utilise la fonction combiner avec une reference externe (fichier n°(2) .SLDPRT également),  afin d'obtenir directement par retrait, la forme finale souhaitée.

Le fichier n°1 étant une base standard et le fichier n°2 ayant une géométrie variable.

Lors d'une nouvelle variante, j'ouvre le fichier n°1 en cliquant sur l'onglet "Références..." et ainsi je remplace le fichier n°2 par un fichier n°3 avec nouvelle géométrie.

J'ai actuellement une macro qui me permet de selectionner les 3D à ouvrir, mais y a t'il un moyen pour ouvrir ce type de fichier automatiquement tout en donnant la main à l'utilisateur afin qu'il puisse selectionner la pièce de remplacement?

Merci d'avance pour votre aide.

 

 

Il y a 19 jours
Moules et matrices, SOLIDWORKS
d.roger
Meilleure réponse

Bonjour,

C'est bricolé vite fait mais essaye avec la macro jointe pour voir si cela te convient.

Cordialement,

combiner.swp

Il y a 12 jours
Yves.T

Bonjour,

Pouvez vous mettre des fichiers exemple pour que l'on puisse vous aider?

Cordialement.

Il y a 19 jours

Bonjour Yves.T,

je ne peux pas joindre les pièces d'origines pour des raisons de confidentialité, mais j'ai mis 3 pièces simples en exemples pour expliquer le principe.

Pièce 1 construite avec combinaison de Pièce 2 ou 3 suivant le choix de la réference à l'ouverture.

Merci.

Il y a 18 jours
sbadenis

Pour moi le seul moyen de remplacer une pièce insérer dans une pièce est bien de passer par remplacer les référence avant d'ouvrir ce fichier.

Il y a 18 jours
d.roger

Bonjour,

Dans la macro jointe le premier fichier à sélectionner est le fichier père et le deuxième est le fichier à soustraire. Attention aux noms des corps dans tes fichiers, cela devrait fonctionner avec tes fichiers en exemple.

Cordialement,

Il y a 18 jours

Bonjour d.roger et merci du temps consacré à essayer de trouver une solution.

je viens d'essayer la macro, celle-ci ouvre bien le fichier père, mais lors de la seconde selection, le fichier à soustraire s'ouvre dans l'arborescence sans remplacer celui déja en place!

Petite precision concernant le nom des corps à soustraires, ils seront différent à chaque fois. (P1, P2, P3....)

Cordialement.

Il y a 18 jours
d.roger

Bonjour,

Version 2 de la macro ....

Cordialement,

Il y a 7 jours

@d.roger,

Super, la Macro version 2 marche avec les pièces données pour exemple.

Par contre si je la lance avec un autre fichier ayant une arborescence differente (voir image en pièce jointe, la macro s'execute sans réaliser la fonction combiner.

Dans cet exemple, la pièce M2031 à bien été remplacée par la pièce M2032, mais pas soustrait au corps principale.

Est-ce que cela peut venir du fait qu'il y ait d'autres opérations de construction aprés la fonction combiner?(ici une révolution et un congé)

Merci.

 

Il y a 17 jours
d.roger

Oui cela vient du fait que le type d'usinage effectué sur les pièces est différent, cela vient des lignes :

boolstatus = Part.Extension.SelectByID2("Révolution1", "SOLIDBODY", 0, 0, 0, False, 1, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("<" & NewName & ">-<Révolution1>", "SOLIDBODY", 0, 0, 0, True, 2, Nothing, 0)

Ou les noms des corps sélectionnés sont Révolution1, pour corriger ça il faut analyser l'arbre de création et récupérer les noms des corps, je n'ai pas le temps de le faire pour le moment mais si tu veux le faire tu dois pouvoir t'aider des lignes :

Set Feature = Part.FirstFeature
Dim Piece As String
While Not Feature Is Nothing
 FeatureName = Feature.Name
 If Feature.GetTypeName2 = "Stock" Then
    Piece = FeatureName
 End If
 Set Feature = Feature.GetNextFeature()
Wend

pour le faire.

Cordialement,

Il y a 17 jours

Ok!

 je vais essayé de regarder ça, mais je ne suis pas du tout à l'aise avec les codes VBA! 

Il y a une forte probabilité que je sollicite à nouveau ton aide pour corriger la macro dès que tu auras de la disponibilité!

Encore merci et bon week end!

 

 

Il y a 17 jours

Rebonjour à tous!

j'ai essayé d'adapter la macro de d.roger, mais la fonction "combiner" ne s'execute toujours pas:

'Recherche dans le feature manager de la pièce à soustraire (j'ai mis du temps à comprendre d'ou venait le nom "Stock": faire CTRL G dans la fenêtre d'execution pour faire apparaître la liste des noms et type de chacune des features!)

Set Feature = Part.FirstFeature
        Dim Piece1 As String
        While Not Feature Is Nothing
        FeatureName = Feature.Name
         If Feature.GetTypeName2 = "Stock" Then
         Piece1 = FeatureName
         End If
        Set Feature = Feature.GetNextFeature()
        Wend

 

'selection du corps principal
    boolstatus = Part.Extension.SelectByID2("Enlèv. mat.-Extru.3", "SOLIDBODY", 0, 0, 0, False, 1, Nothing, 0) 

'selection de la part à soustraire
    boolstatus = Part.Extension.SelectByID2(Piece1, "BODYFEATURE", 0, 0, 0, True, 2, Nothing, 0) 

'Combiner les corps
    Set myFeature = Part.FeatureManager.InsertCombineFeature(15902, Nothing, Nothing)

Les 2 pièces sont bien selectionnées, mais la dernière ligne qui devrait réaliser la soustraction des corps reste inactive.!?!

Il faudrait que je puisse selectionner les coprs volumiques de la pièce à soustraire mais sans prendre celui du corps principal, j'ai essayé avec "SolidBodyFolder"...mais ça ne fonctionne pas non plus!

Je suis sur qu'il n'y a pas grand chose, mais mes connaissances en VBA ne sont pas suffisantes pour résoudre ce point bloquant.

Si quelqu'un peu m'orienter sur une solution éventuelle !?!

Merci.

Il y a 14 jours