一个会的不多的人

一个会的不多的人

大家好,今天要介绍的是和打包相关的API,之前讲过一篇文章是关于打包时候的注意事项,这里就不再介绍了,有需要的家人可以访问前一个文章:

C# Solidworks二次开发:Pack and Go打包时需要注意的地方,纯干货(可以节省大量查找资料时间)-CSDN博客

下面介绍相关API:

(1)第一个为AddExternalDocument,这个API的含义为将非solidworks文件添加到打包或是移动中,下面是官方的具体解释:

C# Solidworks二次开发:Pack And Go相关API详解(第二讲)-LMLPHP

其输入参数值只有一个为要添加到打包和移动的非solidworks文件的路径和文件名的数组,返回值为bool类型,成功为true,失败为false。

下面是官方使用的例子:

This example shows how to add SOLIDWORKS, render reference, and non-SOLIDWORKS files to Pack and Go. This example also shows how to remove a non-SOLIDWORKS file from Pack and Go.

//-------------------------------------------
// Preconditions:
// 1. Verify that the specified assembly exists.
// 2. Create c:\PackAndGo.
// 3. Open the Immediate window.
//
// Postconditions:
// 1. Gets the names of SOLIDWORKS, render reference, and
//    non-SOLIDWORKS files for Pack and Go.
// 2. Gets the the name of non-SOLIDWORKS file to remove.
// 3. Packs up SOLIDWORKS, render reference, and
//    non-SOLIDWORKS files and copies them to c:\PackAndGo.
// 4. Examine c:\PackAndGo and the Immediate window.
//-------------------------------------------

using SolidWorks.Interop.sldworks;
using SolidWorks.Interop.swconst;
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;

namespace AddExternalDocumentsPackAndGo.csproj
{
    
partial class SolidWorksMacro
    {
        
public void Main()
        {
            ModelDoc2 swModel =
default(ModelDoc2);
            ModelDocExtension swModelDocExt =
default(ModelDocExtension);
            PackAndGo swPackAndGo =
default(PackAndGo);
            
string openFile = null;
            
int namesCount = 0;
            
int errors = 0;
            
int warnings = 0;
            
bool status = false;
            
int i = 0;
            
object[] renderReferences = null;
            
string myPath = null;
            
object statuses = null;

            
// Open assembly document
            openFile = "C:\\Users\\Public\\Documents\\SOLIDWORKS\\SOLIDWORKS 2018\\samples\\tutorial\\EDraw\\claw\\claw-mechanism.sldasm";
            swModel = (ModelDoc2)swApp.OpenDoc6(openFile, (
int)swDocumentTypes_e.swDocASSEMBLY, (int)swOpenDocOptions_e.swOpenDocOptions_Silent, "", ref errors, ref warnings);
            swModelDocExt = (ModelDocExtension)swModel.Extension;

            
// Get Pack and Go object
            Debug.Print("Pack and Go");
            swPackAndGo = (PackAndGo)swModelDocExt.GetPackAndGo();

            
// Get number of documents in assembly
            namesCount = swPackAndGo.GetDocumentNamesCount();

            
// 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("  Add SOLIDWORKS files' paths and filenames: ");
            
if ((pgFileNames != null))
            {
                
for (i = 0; i <= pgFileNames.GetUpperBound(0); i++)
                {
                    
Debug.Print("    The path and filename is: " + pgFileNames[i]);
                }
            }

            
// Set document paths and names for Pack and Go
            status = swPackAndGo.SetDocumentSaveToNames(pgFileNames);

            
// Get the render stock references in this assembly
            // and print them to the Immediate window
            Debug.Print(" ");
            renderReferences = (
object[])swModelDocExt.GetRenderStockReferences();
            
Debug.Print("  Add render references:");
            
for (i = 0; i <= renderReferences.GetUpperBound(0); i++)
            {
                
Debug.Print("    The path and filename is: " + renderReferences[i]);
            }

            
// Add render stock files to Pack and Go
            status = swPackAndGo.AddExternalDocuments(renderReferences);

            
// Add other non-SOLIDWORKS files to Pack and Go
            object[] otherFiles = new object[2];
            
string otherFile = "C:\\Users\\Public\\Documents\\SOLIDWORKS\\SOLIDWORKS 2018\\samples\\tutorial\\edraw\\claw\\claw-mechanism.easm";
            otherFiles[0] = (
object)otherFile;
            otherFile =
"C:\\Users\\Public\\Documents\\SOLIDWORKS\\SOLIDWORKS 2018\\samples\\tutorial\\edraw\\claw\\claw-mechanism.emodel_debugonly.xml";
            otherFiles[1] = (
object)otherFile;

            
Debug.Print(" ");
            
Debug.Print("  Add non-SOLIDWORKS files:");
            
for (i = 0; i <= otherFiles.GetUpperBound(0); i++)
            {
                
Debug.Print("    The path and filename is: " + otherFiles[i]);
            }

            
// Add non-SOLIDWORKS file to Pack and Go
            status = swPackAndGo.AddExternalDocuments(ObjectArrayToBStrWrapperArray(otherFiles));

            
// Remove one of the non-SOLIDWORKS files from Pack and Go
            object[] delOtherFiles = new object[1];
            delOtherFiles[0] = (
object)otherFiles[0];

            
Debug.Print(" ");
            
Debug.Print("  Remove non-SOLIDWORKS file:");
            
Debug.Print("    The path and filename is: " + delOtherFiles[0]);

            status = swPackAndGo.RemoveExternalDocuments(ObjectArrayToBStrWrapperArray(delOtherFiles));

            
// Override path where to save documents
            myPath = "c:\\PackAndGo\\";
            status = swPackAndGo.SetSaveToName(
true, myPath);

            
// Pack and Go both SOLIDWORKS and non-SOLIDWORKS files
            statuses = swModelDocExt.SavePackAndGo(swPackAndGo);
        }

        
public BStrWrapper[] ObjectArrayToBStrWrapperArray(object[] SwObjects)
        {
            
int arraySize;
            arraySize = SwObjects.GetUpperBound(0);
            
BStrWrapper[] dispwrap = new BStrWrapper[arraySize + 1];
            
int arrayIndex;

            
for (arrayIndex = 0; arrayIndex < arraySize + 1; arrayIndex++)
            {
                dispwrap[arrayIndex] =
new BStrWrapper((string)(SwObjects[arrayIndex]));
            }

            
return dispwrap;

        }

        
/// <summary>
        /// The SldWorks swApp variable is pre-assigned for you.
        /// </summary>

        public SldWorks swApp;

    }
}

(2)第二个为GetDocumentNames,这个API的含义为获取打包和移动所有文件的名称,下面是官方的具体解释:

C# Solidworks二次开发:Pack And Go相关API详解(第二讲)-LMLPHP其输入参数值只有一个为要添加到打包和移动的非solidworks文件的路径和文件名的数组,返回值为bool类型,成功为true,失败为false。和上面的一致。

(3)第三个为GetDocumentSaveToNames,这个API的含义为获取保存模型文档的路径和模型名,下面是官方的具体解释:

C# Solidworks二次开发:Pack And Go相关API详解(第二讲)-LMLPHP输入参数有两个,分别为:

PathNameList
包含保存模型文档的路径和文件名的字符串数组(参见备注)
DocumentStatusList
包含swPackAndGoDocumentStatus_e中定义的文档类型的数组

其对应的类型有三个:

本篇文章要介绍的API就是这些,我们下篇文章再见。

04-14 06:17