Pack and Go an Assembly (C#)
This example shows how to get the names of the path and files of an assembly
document, add a prefix and suffix to the names, and save the files to a different path using the Pack and Go
interface.
//--------------------------------------------------------------------------
// Preconditions:
// 1. Specified assembly exists.
// 2. The folder, c:\temp, exists.
// 3. Open the Immediate window.
// 4. Run the macro.
//
// Postconditions:
// 1. Prints names of the current path and
filenames
// of the assembly documents to Immediate window.
// 2. Prints names of the default path and filenames to which to
// save assembly documents to the Immediate window.
// 3. Specifies the Pack and Go destination folder.
// 4. Specifies that all files get saved to the root directory of the
// Pack and Go destination folder.
// 5. Adds prefix and suffix to user-named filenames.
// 6. Prints names of user-specified path and user-named filenames to
// Immediate window.
// 7. Creates user-named files in user-specified path using Pack and Go.
// 8. Examine c:\temp to verify.
//---------------------------------------------------------------------------
using
SolidWorks.Interop.sldworks;
using
SolidWorks.Interop.swconst;
using System;
using System.Diagnostics;
using
System.Runtime.InteropServices;
namespace
PackAndGoCSharp.csproj
{
partial
class
SolidWorksMacro
{
public
void Main()
{
ModelDoc2 swModelDoc = default(ModelDoc2);
ModelDocExtension swModelDocExt = default(ModelDocExtension);
PackAndGo swPackAndGo = default(PackAndGo);
string openFile
= null;
bool status =
false;
int warnings =
0;
int errors = 0;
int i = 0;
int namesCount
= 0;
string myPath =
null;
int[] statuses
= null;
// Open assembly
openFile =
"C:\\Users\\Public\\Documents\\SOLIDWORKS\\SOLIDWORKS 2018\\samples\\tutorial\\advdrawings\\handle.sldasm";
swModelDoc = (ModelDoc2)swApp.OpenDoc6(openFile, (int)swDocumentTypes_e.swDocASSEMBLY,
(int)swOpenDocOptions_e.swOpenDocOptions_Silent,
"",
ref errors,
ref warnings);
swModelDocExt = (ModelDocExtension)swModelDoc.Extension;
// Get Pack and Go
object
Debug.Print("Pack
and Go");
swPackAndGo = (PackAndGo)swModelDocExt.GetPackAndGo();
// Get number of documents in assembly
namesCount = swPackAndGo.GetDocumentNamesCount();
Debug.Print(" Number
of model documents: " + namesCount);
// Include any drawings, SOLIDWORKS Simulation results, and SOLIDWORKS Toolbox
components
swPackAndGo.IncludeDrawings
= true;
Debug.Print("
Include drawings: " + swPackAndGo.IncludeDrawings);
swPackAndGo.IncludeSimulationResults
= true;
Debug.Print("
Include SOLIDWORKS Simulation results: " + swPackAndGo.IncludeSimulationResults);
swPackAndGo.IncludeToolboxComponents
= true;
Debug.Print("
Include SOLIDWORKS Toolbox components: " + swPackAndGo.IncludeToolboxComponents);
// Get current paths and filenames of the
assembly's documents
object
fileNames;
object[]
pgFileNames = new
object[namesCount - 1];
status = swPackAndGo.GetDocumentNames(out
fileNames);
pgFileNames = (object[])fileNames;
Debug.Print("");
Debug.Print(" Current
path and filenames: ");
if ((pgFileNames
!= null))
{
for (i = 0;
i <= pgFileNames.GetUpperBound(0); i++)
{
Debug.Print(" The
path and filename is: " + pgFileNames[i]);
}
}
// Get current save-to paths and
filenames of the assembly's documents
object
pgFileStatus;
status = swPackAndGo.GetDocumentSaveToNames(out
fileNames, out pgFileStatus);
pgFileNames = (object[])fileNames;
Debug.Print("");
Debug.Print(" Current
default save-to filenames: ");
if ((pgFileNames
!= null))
{
for (i = 0;
i <= pgFileNames.GetUpperBound(0); i++)
{
Debug.Print("
The path and filename is: " + pgFileNames[i]);
}
}
//
Set folder where to save the files
myPath =
"C:\\temp\\";
status =
swPackAndGo.SetSaveToName(true,
myPath);
// Flatten the Pack
and Go folder structure; save all files to the root directory
swPackAndGo.FlattenToSingleFolder
= true;
// Add a prefix and suffix to the
filenames
swPackAndGo.AddPrefix =
"SW_";
swPackAndGo.AddSuffix = "_PackAndGo";
// Verify document paths and filenames
after adding prefix and suffix
object
getFileNames;
object
getDocumentStatus;
string[]
pgGetFileNames = new
string[namesCount - 1];
status = swPackAndGo.GetDocumentSaveToNames(out
getFileNames, out
getDocumentStatus);
pgGetFileNames = (string[])getFileNames;
Debug.Print("");
Debug.Print(" My
Pack and Go path and filenames after adding prefix and suffix: ");
for (i = 0; i
<= namesCount - 1; i++)
{
Debug.Print(" My
path and filename is: " + pgGetFileNames[i]);
}
// Pack and Go
statuses = (int[])swModelDocExt.SavePackAndGo(swPackAndGo);
}
///
<summary>
///
The SldWorks swApp variable is pre-assigned for you.
///
</summary>
public
SldWorks swApp;
}
}