2015-10-18 2 views
1

Je développe une macro C# VSTA pour notre département de fabrication. J'utilise SldWorks.GetPreviewBitMapFile pour enregistrer un aperçu bitmap du modèle sélectionné et afficher dans le picturebox comme indiqué ci-dessous:GetPreviewBitmapFile Enregistrer le bitmap d'aperçu avec des couleurs étranges (SolidWorks)

enter image description here

Le code semble bien et exécuter bien, sauf pour les couleurs étranges:

bool status = swApp.GetPreviewBitmapFile(filepath, configuration, "D:\\preview.bmp"); 
      pictureBox1.ImageLocation = "D:\\Preview.bmp"; 
      pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; 
      pictureBox1.Refresh(); 

Quelqu'un at-il eu un problème similaire et quel est le remède?

+0

Avez-vous essayé d'enregistrer l'image avec GetPreviewBitmap? var h = swApp.GetPreviewBitmap ("Part11.SLDPRT", "Default"); Bitmap iconBitmap = Bitmap.FromHicon (h.handle); iconBitmap.Save ("Part11.bmp"); –

+0

Va essayer ça. –

+0

Impossible d'utiliser var. J'utilise C# 2.0 –

Répondre

2

Voici un exemple de code de travail:

//to compare output 
iSwApp.GetPreviewBitmapFile(@"c:\Path\Part1.SLDPRT", "Default", @"c:\Path\Part1_0.bmp"); 

object com = iSwApp.GetPreviewBitmap(@"c:\Path\Part1.SLDPRT", "Default"); 
stdole.StdPicture pic = com as stdole.StdPicture; 
Bitmap bmp = Bitmap.FromHbitmap((IntPtr)pic.Handle); 
bmp.Save(@"c:\Path\Part1_1.bmp"); 

Il y a quelques notes sur GetPreviewBitmap de l'API SW:

  • Actuellement, seules les applications en cours (qui est, des macros ou des compléments) peut utiliser cette méthode; les applications hors processus (c'est-à-dire les exécutables) obtiendront une erreur d'automatisation car l'interface IPictureDisp ne peut pas être placée entre les limites de processus. C'est un comportement de Microsoft par conception. Consultez la base de connaissances Microsoft pour plus de détails.
  • Cette méthode n'est pas prise en charge dans les macros ou les applications hors processus dans SolidWorks x64.

J'ai été capable de le faire fonctionner dans SolidWorks x64 uniquement dans le complément .NET et dans les macros VBA. Dites-moi si vous avez besoin d'un exemple de complément.

+0

Le code ne fonctionne pas dans la macro .NET. Le 'GetPreviewBitmap' renvoie un null. Je cours SW15 sur un Win X64. –

+0

Oui, il est mentionné dans ma réponse "Cette méthode n'est pas prise en charge dans les macros ou les applications hors processus dans SolidWorks x64". Je l'ai fait fonctionner en complément. Avez-vous envisagé de mettre à jour vos macros à l'extension SW? Je n'ai pas trouvé d'autre moyen d'avoir un aperçu sauf SWDocumetManager, mais c'est une histoire différente et je ne suis pas sûr si vous avez une clé de série pour cela. –

+0

J'ai envoyé un e-mail au support de l'API. Ils ont dit que c'était un bug hautement prioritaire et qu'ils travaillaient dessus. Ils ont suggéré que j'utilise le ModelDoc2.SaveBMP à la place. Merci pour votre @Vladyslav. Je vais cocher votre réponse. –

1

Une mise à jour pour SW2016. La fonction GetPreviewBitmapFile fonctionne pour un programme de console Csharp hors processus. Cependant, les couleurs du bitmap généré sont très étranges. Il s'avère que la seule solution valide est d'utiliser la fonction SaveBmp.