Get PNG Preview Bitmap and Stream for Configuration Example (C#)
This example shows how to
get the name of the stream and the PNG preview bitmap for a configuration in a part or assembly.
NOTE: To get the name of the stream and a preview bitmap of the sheet
active when the drawing was last saved, use ISwDMDocument10::GetPreviewBitmap and
ISwDMDocument10::PreviewStreamName. To get the name of the streams and
the preview bitmaps for all sheets in a drawing, use
ISwDMSheet2::GetPreviewPNGBitmap and ISwDMSheet2::PreviewPNGStreamName.
//---------------------------------------------------------------------------
// Preconditions:
// 1. Read the SolidWorks Document Manager API Getting Started
//
topic
and ensure that the required DLLs
are registered.
// 2. Copy and paste this module into a C# console application
// in Microsoft
Visual Studio.
// 3. Ensure that the specified document exists
// (or point to another
document).
// 4. Add the SolidWorks.Interop.swdocumentmgr.dll reference
// to the
project:
// a. Right-click the solution in Solution Explorer.
// b. Select Add Reference.
// c. Click the Browse tab.
// d. Load:
// <SolidWorks_install_dir>\api\redist\SolidWorks.Interop.swdocumentmgr.dll
// 5. Add the following references to the project: System.Drawing.dll,
// stdole.dll, Microsoft.VisualBasic.Compatibility.VB6.dll.
// 6. Substitute <your_license_code> with your SolidWorks
// Document Manager license key.
// 7. Compile and run this program in Debug mode.
//
// Postconditions: Inspect the Output Window and the code to see
// how the API is used.
//--------------------------------------------------------------------------
using
System;
using
System.Diagnostics;
using
System.Collections.Generic;
using
System.Text;
using
SolidWorks.Interop.swdocumentmgr;
using
Microsoft.VisualBasic.Compatibility.VB6;
using
stdole;
using
System.Drawing;
class
Program
{
static
void Main(string[]
args)
{
// Substitute the path and name of
your file for the following path and file name
const
string
sDocFileName = "C:\\Program Files\\SolidWorks
Corp\\SolidWorks\\samples\\tutorial\\multibody\\multi_inter.sldprt";
//Specify document
const
string
sExtractDir = "c:\\temp\\";
SwDMClassFactory
swClassFact = default(SwDMClassFactory);
SwDMApplication
swDocMgr = default(SwDMApplication);
SwDMDocument
swDoc = default(SwDMDocument);
SwDMConfigurationMgr
swCfgMgr = default(SwDMConfigurationMgr);
string[]
vCfgNameArr = null;
SwDMConfiguration7
swCfg = default(SwDMConfiguration7);
IPictureDisp
pPreview = default(IPictureDisp);
SwDmDocumentType
nDocType = 0;
SwDmDocumentOpenError
nRetVal = 0;
SwDmPreviewError
nRetVal2 = 0;
Image
image = default(Image);
// Determine type of SolidWorks
file based on file extension
if
(sDocFileName.EndsWith("sldprt"))
{
nDocType =
SwDmDocumentType.swDmDocumentPart;
}
else
if (sDocFileName.EndsWith("sldasm"))
{
nDocType =
SwDmDocumentType.swDmDocumentAssembly;
}
else
if (sDocFileName.EndsWith("slddrw"))
{
nDocType =
SwDmDocumentType.swDmDocumentDrawing;
}
else
{
// Not a SolidWorks file
nDocType =
SwDmDocumentType.swDmDocumentUnknown;
// So cannot open
return;
}
// Because drawing documents do not
have configurations,
//
only continue running the macro if the document
//
is a part or assembly document
if
((nDocType != SwDmDocumentType.swDmDocumentDrawing))
{
swClassFact =
new
SwDMClassFactory();
swDocMgr = swClassFact.GetApplication("<your_license_code>");
//Specify license key
swDoc = (SwDMDocument)swDocMgr.GetDocument(sDocFileName,
nDocType, false,
out nRetVal);
Debug.Assert(SwDmDocumentOpenError.swDmDocumentOpenErrorNone
== nRetVal);
swCfgMgr = swDoc.ConfigurationManager;
Debug.Print("File
= " + swDoc.FullName);
Debug.Print("
Active configuration name = " +
swCfgMgr.GetActiveConfigurationName());
vCfgNameArr = (string[])swCfgMgr.GetConfigurationNames();
foreach
(string
vCfgName in
vCfgNameArr) {
swCfg = (SwDMConfiguration7)swCfgMgr.GetConfigurationByName(vCfgName);
//
SwDMConfiguration7.GetPreviewPNGBitmap throws an unmanaged COM exception
//
for out-of-process C# console applications.
//
Try the following code in VSTA macros and SolidWorks add-ins only.
//pPreview
= (IPictureDisp)swCfg.GetPreviewPNGBitmap(out nRetVal2);
//image
= Support.IPictureDispToImage(pPreview);
//image.Save(sExtractDir
+ vCfgName + ".PNG");
Debug.Print("
" + vCfgName);
Debug.Print("
PNG preview stream = " + swCfg.PreviewPNGStreamName);
Debug.Print("
");
}
swDoc.CloseDoc();
}
}
}