Haal de voorbeeldafbeelding op in PDM

Hallo

Ik wil graag een manier vinden om de locatie te vinden of een manier om de voorbeeldafbeelding van een onderdeel of assemblage te gebruiken die wordt weergegeven op het tabblad PDM in SolidWorks.

Dit zou het mogelijk maken om deze afbeeldingen niet opnieuw te hoeven genereren voor later gebruik (bijvoorbeeld in de documentatie), maar zou ervoor zorgen dat een afbeelding direct beschikbaar is.

Als iemand een idee heeft, bij voorbaat dank!

1 like

Hallo

De afbeelding moet de afbeelding zijn die is ingekapseld in het Solidworks-bestand. Dit is degene die wordt gegenereerd tijdens de registratie. A priori onmogelijk om nu te herstellen (aangezien Solidworks de .sldprt-, .sldasm- en .slddrw-bestanden versleutelt).

Aan de andere kant heb ik deze 3D-weergave niet in mijn EPDM 2022 Sp3.0. Is het een nieuwigheid of is het een parameter die ik niet kan vinden ??

2 likes

Hallo
Normaal gesproken is het zichtbaar en heeft het altijd bestaan als ik me goed herinner.
Het kan verborgen zijn, omdat de 3 zichtbare elementen (arbo PDM, ISO-weergave en kofferbakinfo) kunnen worden verkleind.

Welkom @Cyril_f
Goed gedaan: de functies werden over elkaar heen gelegd...

Bedankt

2 likes

Hallo
Ik heb gezocht, dus door macro kunnen we de voorbeeldafbeelding herstellen. Hieronder vindt u het codefragment dat vanuit Excel moet worden uitgevoerd:

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: Dit stukje code is erg basic, afhankelijk van de behoefte kan ik het verfraaien met functies. Zoals gecodeerd, haalt het de afbeelding alleen op uit een vooraf gedefinieerd bestand en in de lokaal geladen versie.

4 likes

Bedankt, het is perfect zo!

Bedankt voor het delen van @Cyril_f !
Van mijn kant heb ik een klein probleempje met je stukje code... die ik niet lijk op te lossen en ik wilde weten of je een soortgelijk probleem had of helemaal niet...

Ik probeer momenteel de onderdeelvoorbeelden van een set op te halen via een stuklijst die is geëxporteerd van PDM naar Excel met een kolom met de " ID's " van elk bestand.
En als ik de code uitvoer, krijg ik een foutmelding op een bestand op de regel ' Set Image =...  ›:

en als ik via een macro van SolidWorks de preview van deze zelfde onderdelen probeer op te halen, krijg ik ook een foutmelding:

Heb je een idee waar het probleem vandaan zou kunnen komen?

Hallo
Het bestand is mogelijk niet lokaal in de cache opgeslagen.
Ik gebruik deze macro niet, dus ik zou de volledige code nodig hebben om te testen en te zien waar het probleem kan zijn.

1 like

Niet dom voor het feit dat het niet in de lokale cache is... Ik moet kijken hoe ik ze lokaal kan laden voordat ik de afbeelding te testen!

Hier is het detail van de code in kwestie :slight_smile:
Om wat uitleg te geven, dit plaatst de voorbeeldafbeelding van het bestand in een opmerking van een Excel-cel (kolom F) op basis van de ID van elk bestand (kolom B)!
Verander gewoon de naam van de PDM-kluis en het bestandspad voor de afbeelding en het werkt :wink:

en hier is mijn Excel-bestandsstructuur van waaruit ik de macro start:

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

Het resultaat:

We kunnen zien dat er op sommige onderdelen geen opmerkingen zijn en daarom is de preview...

1 like

Hallo
U moet de BatchGet-methode van de kluis gebruiken. CreateUtility, persoonlijk heb ik dit stukje code gebruikt:

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

Met iNbVers = versienummer van het te verkrijgen bestand.
De AsBuilt haalt het bestand op zoals opgeslagen in de kluis (versiekoppelingen) en de tweede optie SkipExisting stelt u in staat om de bestanden niet al lokaal te laden (ik deed dit omdat ik de hele kluis in scan had, dus sneller).
Om te zien of je ook een cache-flush-functie nodig hebt tussen twee gets, werkt deze code:

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

cVault = Naam van uw PDM-kluis

1 like

Nou, ik heb getest en het verandert niets ... onmogelijk om het beeld op sommige delen :confused: te hebben Maar ik heb het goed gecontroleerd, ik heb de bestanden in kwestie lokaal.
Ik zie niet waar het probleem vandaan komt!

Hallo @yves-marie.freyssinet

Als je toegang hebt tot de archiefserver (dus hack voorbehouden aan een admin) kun je altijd de afbeeldingen gaan halen die je zoekt.
Voorvertoningen bevinden zich in de mappen waarin de versies van de bestanden worden opgeslagen.
In de praktijk lijkt het jpg hernoemd te zijn naar .img (gewoon om pijnlijk te zijn om te openen);

Let op:

  1. de opslaglogica op de archiefserver is raar: je moet de bestandsref (de ID) maar in hexadecimaal hebben (anders is het niet grappig) en de bestanden zijn geclassificeerd in 16 mappen.
    alle bestanden met dezelfde ID die eindigen bevinden zich in dezelfde map. In de bovenstaande afbeelding eindigt de hexadecimale ID van het bestand op 4, dus de map wordt geclassificeerd in de map die eindigt op 4.
  2. De naam van de afbeeldingsbestanden is nog vreemder: het kan een chrononummer zijn en er kan een SQL-tabel zijn die de link legt tussen de naam van het bestand/de versie ervan en het voorbeeldbestand. Je moet door de sql-tabellen snuffelen om het te vinden denk ik.
1 like

Bedankt voor de @froussel track! Maar helaas heb ik geen toegang tot de archiefserver... :confused:
Maar het is toch goed om te weten dat de beelden er zijn! Misschien helpt het iemand anders :slight_smile:

Hallo
Ik heb net getest en ik heb eigenlijk hetzelfde probleem op sommige bestanden. Ik heb nog niet gevonden waar het vandaan komt (voorlopig is het enige wat ik zie dat het bestand waarin het crasht wordt geconverteerd naar de 2023-versie, wat niet het geval is met het testbestand waar ik naar verwees toen ik de code voorstelde). Niet meer ideeën dan dat voorlopig.
Edit: @froussel , goed gezien, ik ben zo gewend aan Thumbs-bestanden die niets te maken hebben met afbeeldingsbestanden dat ik er nooit bij heb stilgestaan. Voor de nummering ja het moet zijn voor een koppeling met de SQL-database, aan de andere kant met de registratiedata van de bestanden kunnen we ermee wegkomen (niet gecontroleerd in het geval van bestanden die zijn geconverteerd naar versievervanging als de afbeelding is geregenereerd).

Dus ik antwoord mezelf, ik denk dat ik het gevonden heb. Ik heb net gekeken in de bestandsmap die de fout retourneert en ik heb geen afbeelding die overeenkomt met de datum waarop het bestand is opgeslagen.
De kluis lijkt het dus goed te doen, maar via de API's werkt het niet.

1 like

Bedankt voor het onderzoek :slight_smile:
Nou, ik denk dat het in dit geval een mysterie zal blijven... Ik had graag meer uitleg gehad over het waarom en hoe in de PDM API helpen, maar er is niets!