Récupérer l'image d'aperçu dans PDM

Bonjour,

Je souhaiterais trouver un moyen de trouver l’emplacement ou le moyen d’utiliser l’image d’aperçu d’une pièce ou d’un assemblage qui est affiché dans l’onglet PDM dans SolidWorks.

Cela permettrait de ne pas avoir à générer de nouveau ces images pour une utilisation ultérieure (dans la documentation par exemple), mais permettrait d’avoir directement une image à disposition.

Si quelqu’un a une idée, merci d’avance !

1 « J'aime »

Bonjour,

L’image doit être celle encapsulé dans le fichier Solidworks. C’est celle qui se génère lors de l’enregistrement. A priori impossible à récupérer maintenant (depuis que Solidworks crypte les fichiers .sldprt .sldasm et .slddrw).

Par contre je n’ai pas cette vue 3D dans mon EPDM 2022 Sp3.0. C’est une nouveauté ou c’est un paramètre que je n’arrive pas à trouver ??

2 « J'aime »

Bonjour,
Normalement c’est visible et a toujours existé si ma mémoire est bonne.
Il se peut que ce soit masqué, car les 3 éléments visibles (arbo PDM, Vue Iso et info du coffre) sont redimensionnables.

Bonjour @Cyril.f
Bien vu : les traits étaient superposés…

Merci

2 « J'aime »

Bonjour,
J’ai recherché donc par macro on peut récupérer l’image de preview. Ci-dessous le bout de code à lancer depuis Excel:

Sub TestExportBitmap()
Dim sFilename As String
Dim file15 As IEdmFile17
Dim folder              As IEdmFolder6
Dim vault               As EdmVault5

Dim Image As stdole.IPictureDisp

Set vault = New EdmVault5

vault.LoginAuto "<Nom de coffre>", 0

sFilename = "xxx" 'Renseigner le chemin d'accès au fichier
Set file15 = vault.GetFileFromPath(sFilename, folder)
Set Image = file15.GetThumbnail2(file15.CurrentVersion)

stdole.SavePicture Image, "C:\PDF\Test.BMP"
End Sub

EDIT: Ce bout de code est très basique, en fonction du besoin je peux l’agrémenter de fonctionnalités. Tel que codé ça ne récupère l’image que d’un fichier prédéfini et dans sa version chargée en local.

4 « J'aime »

Merci, c’est parfait ainsi !

Merci pour le partage @Cyril.f !
De mon coté j’ai un petit problème concernant ton morceau de code… que je n’arrive pas à résoudre et je voulais savoir si tu avais un problème similaire ou pas du tout…

J’essaye actuellement de récupérer les aperçus de pièces d’un ensemble via une nomenclature exporter depuis PDM vers Excel avec une colonne contenant les « ID » de chaque fichier.
Et lorsque j’exécute le code, j’ai une erreur sur certain fichier à la ligne ‹ Set Image =… › :

et lorsque j’essaye de récupérer via une macro depuis SolidWorks l’aperçu de ces même pièces, j’ai également une erreur :

aurais tu une idée d’où pourrais provenir le problème ?

Bonjour,
Possible que le fichier ne soit pas en cache local.
Je n’utilise pas cette macro donc faudrait le code complet pour tester et voir où peut se situer le problème.

1 « J'aime »

Pas bête pour le fait qu’elle ne soit pas en cache local… il faut que je regarde comment les charger en local avant de récupérer l’image pour tester !

Voila le détail du code en question :slight_smile:
Juste pour donner quelques explications cela met l’image d’aperçu du fichier dans un commentaire d’une cellule Excel (Colonne F) en fonction de l’ID de chaque fichier (Colonne B) !
Il suffit juste de modifier le nom du coffre PDM et le chemin de fichier pour l’image et ça fonctionne :wink:

et voila ma structure de fichier Excel depuis laquelle je lance la macro :

Sub TestExportBitmap()
Dim sFilename As String
Dim file15 As IEdmFile17
Dim vault As EdmVault5
Dim Image As stdole.IPictureDisp

Set vault = New EdmVault5

vault.LoginAuto "NOM_COFFRE", 0
CheminImg = CHEMIN_IMAGE

For i = 2 To Cells(1, 1).End(xlDown).Row

On Error Resume Next
        
        Set file15 = vault.GetObject(EdmObject_File, Range("B" & i).Value)
        Set Image = file15.GetThumbnail2(file15.CurrentVersion)

        stdole.SavePicture Image, CheminImg

        If Dir(CheminImg) <> "" Then

            If Not Range("F" & i).Comment Is Nothing Then Range("F" & i).Comment.Delete

            Range("F" & i).AddComment
                With Range("F" & i).Comment.Shape
                    .Fill.UserPicture CheminImg
                    .Width = 300
                    .Height = 250
                End With

        End If
        
    Kill CheminImg
    Set Image = Nothing
    
On Error GoTo 0
    Next

End Sub

le résultat :

On voit qu’il manque des commentaires sur certaines pièces et donc l’aperçu…

1 « J'aime »

Bonjour,
Il faut utiliser la méthode BatchGet de vault.CreateUtility, perso j’ai utilisé ce bout de code:

Sub PDMBatch()
Set PDMBatchGetUtil = vault.CreateUtility(EdmUtil_BatchGet)
PDMSelItems(0).mlDocID = File.ID
PDMSelItems(1).mlProjID = Folder.ID
PDMBatchGetUtil.AddSelectionEx vault, File.ID, Folder.ID, iNbVers
PDMBatchGetUtil.CreateTree 0, EdmGetCmdFlags.Egcf_AsBuilt
PDMBatchGetUtil.CreateTree 0, EdmGetCmdFlags.Egcf_SkipExisting
PDMBatchGetUtil.GetFiles 0
End Sub

Avec iNbVers = numéro de version du fichier à obtenir.
Le AsBuilt récupère le fichier tel qu’enregistrer dans le coffre (liens de versions) et la seconde option SkipExisting permet de ne pas charger les fichiers déjà en local (j’ai fait ça car j’avais tout le coffre en scan donc plus rapide).
A voir s’il vous faut aussi une fonction de vidage de cache entre deux obtentions, ce code fonctionne:

Sub ClearCache()
Set ClearLocalCache = vault.CreateUtility(EdmUtil_ClearLocalCache)
ClearLocalCache.AddFolder (cCoffre)
ClearLocalCache.CommitClear
End Sub

cCoffre = Nom de votre coffre PDM

1 « J'aime »

Bon j’ai testé et ça ne change rien … impossible d’avoir l’image sur certaines pièces :confused: Pourtant j’ai bien vérifié, j’ai bien les fichiers en question en local.
Je ne vois pas d’où provient le problème !

Bonjour @yves-marie.freyssinet

Si tu as accès au serveur d’archive (donc bidouille réservé à un admin) tu peux toujours aller chercher les images que tu cherches.
Les preview sont dans les répertoires qui stockent les version des fichiers.
En pratique cela semble être du jpg renommé en .img (histoire d’être pénible à ouvrir);

Nb :

  1. la logique de stockage sur le serveur d’archive est bizarre : il faut avoir la ref du fichier (l’ID) mais en hexadécimal (sinon c’est pas rigolo) et les fichiers sont classé dans 16 réperoires.
    tous les fichiers ayant la même terminaison d’ID sont dans le même répertoire.Dans l’image ci dessus l’ID en hexadécimal du fichier fini par 4 donc le répertoire est classé dans le répertoire finissant par 4.
  2. le nom des fichier images est encore plus bizarre : c’est peut être bien un n° chrono et il y a peut être une table sql qui fait le lien entre le nom du fichier/sa version et le fichier de preview. Il faut farfouiller dans les tables sql pour la trouver je pense.
1 « J'aime »

Merci pour la piste @froussel ! Mais je n’ai malheureusement pas accès au serveur d’archives… :confused:
Mais ça reste bon à savoir que les images se trouvent la ! ça aidera peut-être quelqu’un d’autres :slight_smile:

Bonjour,
Je viens de tester et j’ai effectivement le même problème sur certains fichiers. Pas encore trouvé d’où ça vient (pour l’instant la seule chose que je vois c’est que le fichier où ça plante est converti dans la version 2023 ce qui n’est pas le cas du fichier de test sur lequel je pointais lorsque j’ai proposé le code). Pas plus d’idées que ça pour le moment.
Edit: @froussel , bien vu, j’ai tellement l’habitude que les fichiers Thumbs n’ait rien à voir avec des fichiers images je ne m’y suis jamais attardé. Pour la numérotation oui ça doit être pour un lien avec la base SQL, par contre avec les dates d’enregistrement des fichiers on peut s’en sortir (pas vérifié dans le cas des fichiers convertis en remplacement de version si l’image était regénérée).

Du coup je me réponds à moi-même, je pense avoir trouvé. Je viens de regarder dans le dossier du fichier qui me retourne l’erreur et je n’ai pas d’image correspondant à la date d’enregistrement du fichier.
Donc le coffre semble lui s’en sortir mais via les API ça ne fonctionne pas.

1 « J'aime »

Merci pour l’investigation :slight_smile:
Bon bah je crois que ça restera un mystère dans ce cas … J’aurais bien voulu avoir plus d’explication du pourquoi du comment dans l’aide de l’API PDM mais il n’y a rien !