将文件夹中的所有 Solidworks 文件转换为步骤文件宏

Convert all Solidworks files in folder to step files macro

我四处搜索并寻找一个宏,当 运行 它将该位置的文件转换为 .stp 文件时,我遇到了以下内容。我如何操作它以获取文件夹中的下一个文件并继续下一个文件并转换它们直到所有文件都已转换。

Dim swApp               As Object

将零件变暗为对象

将文件路径变暗为字符串

将 sFilePath 变暗为字符串

将 PathSize 设置为 Long

将 PathNoExtention 变暗为字符串

将 NewFilePath 变暗为字符串

将文件位置变暗为字符串

将 sPath 变暗为字符串

调暗我一样长

将 bRebuild 变暗为布尔值

将 bRet 变暗为布尔值

将 sRev 调暗为字符串

尽可能长地减少 nErrors

将 nWarnings 设置为 Long

子主函数()

设置 swApp = Application.SldWorks

设置部分 = swApp.ActiveDoc

文件路径 = Part.GetPathName

PathSize = Strings.Len(文件路径)

sPath = Left(Part.GetPathName, InStrRev(Part.GetPathName, "\"))

sRev = Part.CustomInfo("re") '在此处更改配置 属性 名称

文件位置 = "C:"

PathNoExtension = Strings.Left(FilePath, PathSize - 7)

Part.SaveAs (PathNoExtension & "rev" & sRev & ".step")

结束子

如果您不使用 VB6 宏,则可以通过几种不同的方式执行此操作。如果您使用 .NET 宏(Visual Basic 或 C#),它们支持 .NET 库,这使得这个过程非常简单。我在 C# 中创建了以下控制台应用程序。您可以在 SolidWorks 中创建与 .NET 宏相同的东西。要添加到您提供的示例中的重要内容是 foreach 语句,它将遍历目录中的所有文件,并且仅对 SolidWorks 零件或装配体执行转换。

using SolidWorks.Interop.sldworks;
using System;
using System.IO;

namespace CreateStepFiles
{
    class Program
    {
        static SldWorks swApp;

        static void Main(string[] args)
        {
            string directoryName = GetDirectoryName();

            if (!GetSolidWorks())
            {
                return;
            }

            int i = 0;

            foreach (string fileName in Directory.GetFiles(directoryName))
            {
                if (Path.GetExtension(fileName).ToLower() == ".sldprt")
                {
                    CreateStepFile(fileName, 1);
                    i += 1;
                }
                else if (Path.GetExtension(fileName).ToLower() == ".sldasm")
                {
                    CreateStepFile(fileName, 2);
                    i += 1;
                }
            }

            Console.WriteLine("Finished converting {0} files", i);

        }

        static void CreateStepFile(string fileName, int docType)
        {
            int errors = 0;
            int warnings = 0;

            ModelDoc2 swModel = swApp.OpenDoc6(fileName, docType, 1, "", ref errors, ref warnings);

            string stepFile = Path.Combine(Path.GetDirectoryName(fileName), Path.GetFileNameWithoutExtension(fileName), ".STEP");

            swModel.Extension.SaveAs(stepFile, 0, 1, null, ref errors, ref warnings);

            Console.WriteLine("Created STEP file: " + stepFile);;

            swApp.CloseDoc(fileName);
        }

        static string GetDirectoryName()
        {
            Console.WriteLine("Directory to Converty");
            string s = Console.ReadLine();

            if (Directory.Exists(s))
            {
                return s;
            }

            Console.WriteLine("Directory does not exists, try again");
            return GetDirectoryName();
        }

        static bool GetSolidWorks()
        {
            try
            {
                swApp = (SldWorks)Activator.CreateInstance(Type.GetTypeFromProgID("SldWorks.Application"));

                if (swApp == null)
                {
                    throw new NullReferenceException(nameof(swApp));
                }

                if (!swApp.Visible)
                {
                    swApp.Visible = true;
                }

                Console.WriteLine("SolidWorks Loaded");
                return true;
            }
            catch (Exception)
            {
                Console.WriteLine("Could not launch SolidWorks");
                return false;
            }
        }
    }
}