| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
Autor
|
Thema: API - Preview (2101 mal gelesen)
|
GuentherA Mitglied Selbsständig Maschinenbau/Robotik
Beiträge: 8 Registriert: 30.07.2014
|
erstellt am: 30. Jul. 2014 20:27 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen! Habe da ein lästiges Problem mit dem viel disskutierten Thema "Preview eines Modells über die SW Document Manager API". Mein Code funktioniert prinzipiell, allerdings kommt bei einigen Bauteilen die Rückmeldung "No preview data stored in document(swDmPreviewErrorNoPreview). Aussagekräftig wäre die Fehlermeldung ja ABER: ich habe noch keine möglichkeit gefunden, dies zu aktualisieren . Weder ein rebuild, noch speichern hilft mir da weiter.... Code:
Public Function GetPreview(ModDoc As sldworks.ModelDoc2) As String ' Substitute the path and name of your file for the following path and file name Dim Pfad As String = ModDoc.GetPathName Dim sDocFileName As String = Pfad '"C:\Program Files\SolidWorks Corp\SolidWorks\samples\tutorial\multibody\multi_inter.sldprt" 'Specify document Dim sExtractDir As String = IO.Path.GetTempPath() Dim swClassFact As SwDMClassFactory Dim swDocMgr As SwDMApplication Dim swDoc As SwDMDocument Dim swCfgMgr As SwDMConfigurationMgr Dim vCfgNameArr As Object Dim vCfgName As Object Dim swCfg As ISwDMConfiguration7 'SwDMConfiguration7 Dim pPreview As IPictureDisp Dim nDocType As Long Dim nRetVal As Long Dim image As Drawing.Image Dim std As stdole.IPictureDisp Try If InStr(LCase(sDocFileName), "sldprt") > 0 Then nDocType = SwDmDocumentType.swDmDocumentPart ElseIf InStr(LCase(sDocFileName), "sldasm") > 0 Then nDocType = SwDmDocumentType.swDmDocumentAssembly ElseIf InStr(LCase(sDocFileName), "slddrw") > 0 Then nDocType = SwDmDocumentType.swDmDocumentDrawing Else nDocType = SwDmDocumentType.swDmDocumentUnknown Exit Function End If If (nDocType <> SwDmDocumentType.swDmDocumentDrawing) Then swClassFact = CreateObject("SwDocumentMgr.SwDMClassFactory") swDocMgr = swClassFact.GetApplication("xxxxxxxx") 'Specify license key swDoc = swDocMgr.GetDocument(sDocFileName, nDocType, True, nRetVal) ': Debug.Assert(SwDmDocumentOpenError.swDmDocumentOpenErrorNone = nRetVal) swDoc.Save() swCfgMgr = swDoc.ConfigurationManager Debug.Print("File = " & swDoc.FullName) Debug.Print(" Active configuration name = " & swCfgMgr.GetActiveConfigurationName) vCfgNameArr = swCfgMgr.GetConfigurationNames For Each vCfgName In vCfgNameArr swCfg = swCfgMgr.GetConfigurationByName(vCfgName) pPreview = swCfg.GetPreviewPNGBitmap(nRetVal) 'swDmPreviewErrorNone 0 = Success 'swDmPreviewErrorFileOpen 1 = Failed to open the document 'swDmPreviewErrorNoPreview 2 = No preview data stored in document 'swDmPreviewErrorMakeBmpFail 4 = Failed to make the bitmap If nRetVal = 2 Then 'Versuch den Fehler zu korrigieren End If If nRetVal = 0 Then image = PictConverter.AxHostConverter.PictureDispToImage(pPreview) image.Save(sExtractDir & vCfgName & ".PNG") GetPreview = sExtractDir & vCfgName & ".PNG" End If Next End If Catch ex As Exception MsgBox(ex.Message) End Try End Function
Ich hoffe auf Eure Vorschläge :-) Danke für Eure Unterstützung, Günther [Diese Nachricht wurde von GuentherA am 30. Jul. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1358 Registriert: 24.07.2002 AutoCAD ACA 2019 Solidworks 2021 Sp5.1 Enterprise PDM 2021 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell T3620 Intel Core i7-7700K 16 GB Arbeitsspeicher 2x Dell Ultrasharp U2415 Dell M4800
|
erstellt am: 30. Jul. 2014 21:57 <-- editieren / zitieren --> Unities abgeben: Nur für GuentherA
|
GuentherA Mitglied Selbsständig Maschinenbau/Robotik
Beiträge: 8 Registriert: 30.07.2014
|
erstellt am: 30. Jul. 2014 22:24 <-- editieren / zitieren --> Unities abgeben:
Hi Carsten, DANKE für den Hinweis!!! Sowas muss mir ja passieren! Naja, wie auch immer, Danke - Mir wär das nicht aufgefallen! So, zurück zum Problem: Im Anhang ist ein Bauteil bei dem der besagte Fehler auftritt. Detail am Rande: Auch im Explorer wird die Miniaturansicht nicht dargestellt. Danke und LG Günther Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2570 Registriert: 02.10.2006 Firma: SW 2023-4.0 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2022-5.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 31. Jul. 2014 00:47 <-- editieren / zitieren --> Unities abgeben: Nur für GuentherA
Zitat: Original erstellt von GuentherA:
Detail am Rande: Auch im Explorer wird die Miniaturansicht nicht dargestellt.
Hallo Guenther, und herzlich Willkommen hier im Forum. Wenn ich dein Bauteil in SW2014 lade und lokal speichere, bekomme ich ein Miniaturbild im Explorer. Was ist den dein eigentliches Ziel mit deinem Makro? Möchtest du ein Miniaturbild speichern? Wenn ja, warum speicherst du nicht direkt als PNG bzw. TIF? Wenn es dich interessiert, findest du passenden Code in meinem Makro hier. http://ww3.cad.de/foren/ubb/Forum2/HTML/023775.shtml Grüße, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MWN Mitglied Dipl.-Ing.
Beiträge: 492 Registriert: 14.02.2007
|
erstellt am: 31. Jul. 2014 08:27 <-- editieren / zitieren --> Unities abgeben: Nur für GuentherA
Guten Morgen Günther, hast du schon einmal probiert, das Teil per Speichern unter in z.B. ein temporäres Verzeichnis zu speichern und dann wieder per Speichern unter das Ausgangsteil zu überschreiben (alternativ ginge auch, das Teil auf Explorer - Ebene in das Ausgangsverzeichnis zurück zu kopieren)? Das funktioniert allerdings mit dem Documentmanager nicht, du bräuchtest dafür (zumindest temporär und nur in diesem Fehlerfall) ein SWX. Soweit mir bekannt, erzeugt SWX das preview - image beim Speichern unter. Wenn dort etwas schief läuft, fehlt dir das Bild nachher. Grüße und HTH Tobias ------------------ Besucht mich doch mal in meiner Tischlerei "...Kommunikation ist nur so gut wie ihr Ergebnis..." - frei nach Richard Bandler / John Grinder "...Wenn du das tust, was du schon immer tust, wirst du auch nur das erhalten, was du schon immer erhalten hast..." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GuentherA Mitglied Selbsständig Maschinenbau/Robotik
Beiträge: 8 Registriert: 30.07.2014
|
erstellt am: 31. Jul. 2014 09:39 <-- editieren / zitieren --> Unities abgeben:
Hallo Andi, hallo Tobias, @Andi: Ja das ist mir auch aufgefallen, dass sobald das File normal in SWX gespeichert wird, ist die Preview ok. Aber eben nur wenn ich's manuell speicher. Folgender Einsatz für das Ganze: Ich lese über ein AddIn alle Komponenten einer Baugruppe zur Erstellung von Stücklisten und Vergabe von Dokumentnummern aus. Sollten während des Auslesens Informationen von bestimmten Bauteilen fehlen, so blendet sich ein Formular ein, welches die fehlenden Infos abfragt. Damit man in dem Formular auch weiß um welches Bauteil es geht, wird ein Preview Bild des Bauteils angezeigt. Das funktioniert wie gesagt auch eigentlich recht gut. Außer halt bei ein paar Teile. Wenn ich so drüber nachdenke waren das aber alles Bauteile, die in SWX nur importiert wurden, also aus STP beispielsweise. Könnte ein Grund sein, aber nicht die Lösung... @Tobias: Das funktioniert bei mir desshalb nicht, weil ich ja mitten in dem Auslesevorgang der Baugruppe bin. Keine Ahnung wie das den Ablauf beeinflußt, wenn da jetzt BG-Komponenten aufeinmal überschrieben werden (wenn überhaupt möglich).
LG Günther Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|