| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
 | SOLIDWORKS Electrical 3D Schulung, ein Seminar am 26.06.2025
|
Autor
|
Thema: Vorschaubild per VB/API als separates BMP speichern (3495 mal gelesen)
|
Herrmann Mitglied
 
 Beiträge: 302 Registriert: 13.03.2002
|
erstellt am: 14. Jan. 2003 17:35 <-- editieren / zitieren --> Unities abgeben:         
|
Klaus Greim Mitglied CAD-Administrator
 
 Beiträge: 178 Registriert: 10.05.2000 SWX 2013 SP 5.0 Windows 7 Prof. Intel Xenon CPU W3520 12 GB RAM
|
erstellt am: 15. Jan. 2003 08:22 <-- editieren / zitieren --> Unities abgeben:          Nur für Herrmann
|
Oberparleiter Mitglied Konstrukteur
  
 Beiträge: 706 Registriert: 06.06.2000
|
erstellt am: 15. Jan. 2003 08:47 <-- editieren / zitieren --> Unities abgeben:          Nur für Herrmann
Hallo Herrmann Der Befehl den du suchst heißt "retval = ModelDoc2.SaveBMP ( filenameIn, widthIn, heightIn )" "filenameIn" ist der Pfad mit Dateiname "widthIn" und "heightIn" sind die Pixelgrösse des Bildes Hier noch ein Codesnipsel: retUrsprung = modeldoc.GetUserPreferenceToggle(6) ' Prüfen ob der Ursprung ein- oder ausgeblendet ist If retUrsprung = True Then modeldoc.ViewDispOrigins 'wenn ja Ursprung ausblenden retFarbverlauf = swApp.GetUserPreferenceToggle(68) ' Prüfen ob der Farbverlauf AN oder AUS ist If retFarbverlauf = True Then swApp.SetUserPreferenceToggle 68, False 'wenn ja dann auschalten modeldoc.EditRebuild 'Neuaufbau damit die Änderung in den Optionen wirksam werden ' Savebmp Schattiert modeldoc.ViewDisplayShaded ' Ansicht Schattiert einblenden retSaveBMP = modeldoc.SaveBMP(BmpDateiPfad, "300", "300") 'Bitmap speichern ' SaveBmp nur Linien modeldoc.ViewDisplayHiddenremoved ' Ansicht Linien einblenden retSave1BMP = modeldoc.SaveBMP(BmpDateiETPfad, "300", "300") 'Bitmap speichern ------------------ Soo Long Frank O. [Diese Nachricht wurde von Oberparleiter am 15. Januar 2003 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Herrmann Mitglied
 
 Beiträge: 302 Registriert: 13.03.2002
|
erstellt am: 15. Jan. 2003 09:11 <-- editieren / zitieren --> Unities abgeben:         
|
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...

 Beiträge: 2675 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ ab 2024 (privat): Onshape und anderes
|
erstellt am: 28. Apr. 2008 13:41 <-- editieren / zitieren --> Unities abgeben:          Nur für Herrmann
Nach langer Zeit aufgewärmt: Ich suche so was ähnliches- ich hätte gerne die Vorschau in meiner Form dargestellt (ähnlich wie Stefan in seinem Tool "Pac4SWX"). Aber irgendwie klappt das bei mir nicht. Bei Stefans Beispiel "Vorschaubild in VB anzeigen" bekomme ich immer einen Fehler: "Laufzeitfehler '429': Objekterstellung durch ActiveX-Komponente nicht möglich" an der Stelle ... If BmpSaver.extractBitMap2File(sldFilename, tmpFilename) Then ...Mit dem Beispielmakro aus der Hilfe "SldWorks_GetPreviewBitmap.swp" bekomme ich den Fehler "Laufzeitfehler '5': Ungültiger Prozeduraufruf oder ungültiges Argument" Mach ich was falsch oder ist meine Maschine (64bit) zu blöd? ------------------ Klaus www.al-ko.com | mein Gästebuch | privat... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)

 Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 28. Apr. 2008 13:51 <-- editieren / zitieren --> Unities abgeben:          Nur für Herrmann
Hallo Klaus, jupps, das gibt es mittlerweile seit der 2008 nicht mehr, dieses BMPSaver kam aus der sdm.dll, die seit der 2008 nicht mehr ausgelifert wird. Mittlerweile kann man den "SolidWorks Document Manager" dafür nutzen, ich bin auch gerade dabei das PAC4SWX darauf umzubauen. Die ganzen Beschreibungen dazu findest du auch in der API Hilfe. da gibt es auch ein Beispiel in der API Hilfe namens "Get PNG Preview Bitmap and Stream for Configuration Example (VB)", das funktioniert mit der BMPPreviewbitmap im Prinzip genauso. Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Stefans SolidWorks Blog Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...

 Beiträge: 2675 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ ab 2024 (privat): Onshape und anderes
|
erstellt am: 28. Apr. 2008 14:04 <-- editieren / zitieren --> Unities abgeben:          Nur für Herrmann
Das ist natürlich jetzt blöd, da ich noch bis auf weiteres mit der 2007 arbeite ... gibts die Funktion da auch schon? Die Vorschau von deinem Pac4SWX funktioniert übrigens. Ach ja: die Fehler treten auch auf anderen Maschinen auf, egal ob 32 oder 64bit ------------------ Klaus www.al-ko.com | mein Gästebuch | privat... [Diese Nachricht wurde von KMassler am 28. Apr. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)

 Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 28. Apr. 2008 14:35 <-- editieren / zitieren --> Unities abgeben:          Nur für Herrmann
Hallo Klaus, ja, den SwDocumentMgr.dll (diesen Document manager) gibt es schon geraume Zeit, offiziell inkl. Dokumentation aber erst seit der 2007, wenn ich mich nicht irre. Damit kann man ein paar nette machen, ohne gleich SolidWorks zur Hand haben zu müssen, z.B. auch an die Dateieigenschaften (konfigurationsspezifisch) rankommen oder Referenzen umbiegen. Diese DLL wird mit der Installation von SolidWorks in C:\Programme\Gemeinsame Dateien\SolidWorks Shared installiert, man darf die aber auch selbst mit seiner Applikation verteilen. Dass die Vorschau in PAC4SWX nicht funktioniert bemerkst du nur, wenn auf dem Rechner noch nie eine 2007 oder älter installiert war, da die sdm.dll erst seit der 2008 nicht mehr mit ausgeliefert wird. Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Stefans SolidWorks Blog Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...

 Beiträge: 2675 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ ab 2024 (privat): Onshape und anderes
|
erstellt am: 29. Apr. 2008 12:08 <-- editieren / zitieren --> Unities abgeben:          Nur für Herrmann
Die SwDocumentMgr.DLL kann ich nicht finden, weder bei installierter SWX 2007 noch bei SWX 2008. Ich habe das mal mit GetPreviewBitmap und vb.net versucht, komme aber nicht zum Ziel. Code: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'SWX connecten: If Not ConnectToSW(swApp) Then End mybitmap = swApp.GetPreviewBitmap(SWXFile, "Standard") If mybitmap Is Nothing Then MsgBox("Nothing") End End If ' sonst scheint alles zu klappen. ' Aber wie bringe ich jetzt die Bitmap in meine PicturBox pbPreview? ' Hier brauche ich nicht das System.drawing.bitmap, ' sondern ein System.drawing.Image pbPreview.Image = ??? 'Das CType führt auch zu nix: pbPreview.Image = CType(mybitmap, Image) End Sub
Oder fehlt mir noch was, um das zugewiesese Image auch darzustellen? Müsste doch sofort kommen?Grübel grübel ... [Edit] Vergesst das erst mal..man sollte die Bemerkungen in der API-Hilfe manchmal doch lesen: "NOTE: Currently, only in-process applications (that is, macros or add-ins) can use this method; out-of-process applications (that is, executables) will get an automation error because the IPictureDisp interface cannot be marshalled across process boundaries. This is a Microsoft behaviour by design. See the Microsoft Knowledge Base for details." Also komme ich hier mit meiner externen Anwendung nciht weiter. Ganz abgesehen davon, dass das Bitmap als stdole.StdPicture deklariert werden müsste. Mist. [/Edit] ------------------ Klaus www.al-ko.com | mein Gästebuch | privat... [Diese Nachricht wurde von KMassler am 29. Apr. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...

 Beiträge: 2675 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ ab 2024 (privat): Onshape und anderes
|
erstellt am: 29. Apr. 2008 13:24 <-- editieren / zitieren --> Unities abgeben:          Nur für Herrmann
ich schon wieder. Jetzt habe ich die SwDocumentMgr.DLL gefunden, die wurde bei uns allerdings nicht mit installiert, ich vermute, die gehört zu PDMWorks o.ä. Ich habe die in mein Projekt eingebunden und versuche, darüber die Preview zu bekommen: mybitmap = SwDocumentMgr.SwDMDocument.GetPreviewBitmap(IntError) bekomme aber den Fehler "Verweis auf einen nicht freigegebenen Member erfordert einen Objektverweis." Wie soll ich denn das noch einbinden? Ich habe einen Verweis auf SwDocumentMgr gesetzt und SwDocumentMgr per Imports reingeholt. SwDMDocument wird im Objekt-Browser als "Public class" angezeigt, sollte also verwendbar sein. Was mache ich wie immer falsch?
------------------ Klaus www.al-ko.com | mein Gästebuch | privat... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...

 Beiträge: 2675 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ ab 2024 (privat): Onshape und anderes
|
erstellt am: 29. Apr. 2008 16:15 <-- editieren / zitieren --> Unities abgeben:          Nur für Herrmann
Auch auf die Gefahr hin, dass ich nerve  ... Jetzt habe ich das ganze nochmal mit der Solidworks_ExtractBitmap.DLL von Stefans Seite (ganz unten) probiert. Und siehe da: Mit VB6 klappt das!!! Damit könnte ich jetzt schön alle meine alten Programme verschönern.
Code: Private Sub Form_Load() Dim retval As Long Const SolidWorksFilename = "c:\sw-work\preview.sldprt" Const BitmapFilename = "c:\temp\temp.bmp" Dim mySWXExtractBitmap As SldWorks_ExtractBitmap.SldWorks_ExtractBitmap Set mySWXExtractBitmap = New SldWorks_ExtractBitmap.SldWorks_ExtractBitmap retval = mySWXExtractBitmap.ExtractBitmap(SolidWorksFilename, BitmapFilename, _ 200, 200) pbPreview.Picture = LoadPicture(BitmapFilename) End Sub
Nur mit VB.Net 2008 Express klappt das nicht. Ich habe den Code von VB6 praktisch 1:1 in VB.Net übernommen und natürlich den Verweis auf die DLL gesetzt. Aber da bekomme ich immer den Fehler 'Eine Ausnahme (erste Chance) des Typs "System.Runtime.InteropServices.COMException" ist in SWX-PreviewBitmap.exe aufgetreten' Was ist jetzt daran falsch:
Code: Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim retval As Long Const SolidWorksFilename = "c:\sw-work\preview.sldprt" Const BitmapFilename = "c:\temp\temp.bmp" Dim mySWXExtractBitmap As SldWorks_ExtractBitmap.SldWorks_ExtractBitmap 'Bei dieser New-Anweisung tritt offenbar der Fehler auf: mySWXExtractBitmap = New SldWorks_ExtractBitmap.SldWorks_ExtractBitmap retval = mySWXExtractBitmap.ExtractBitmap(SolidWorksFilename, BitmapFilename, _ 200, 200) Debug.Print(retval) pbPreview.Image = Image.FromFile(BitmapFilename) End Sub End Class
------------------ Klaus www.al-ko.com | mein Gästebuch | privat... [Diese Nachricht wurde von KMassler am 29. Apr. 2008 editiert.] [Diese Nachricht wurde von KMassler am 29. Apr. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |