Конвертировать все файлы Solidworks в папке в файл макроса шагов - PullRequest
0 голосов
/ 08 декабря 2018

Я искал и искал макрос, который при запуске преобразует файлы в этом месте в файлы .stp, и я наткнулся на ниже.Как я могу манипулировать им, чтобы получить следующий файл в папке и продолжить следующие файлы и конвертировать их, пока все файлы не будут конвертированы.

Dim swApp               As Object

Dim Part As Object

Dim FilePath As String

Dim sFilePath As String

Dim PathSize As Long

DimPathNoExtention As String

Dim NewFilePath As String

Dim FileLocation As String

Dim sPath As String

Dim i As Long

DimbRebuild As Boolean

Dim bRet As Boolean

Dim sRev As String

Dim nErrors As Long

Dim nWarnings As Long

Submain ()

Set swApp = Application.SldWorks

Set Part = swApp.ActiveDoc

FilePath = Part.GetPathName

PathSize = Strings.Len (FilePath)

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

sRev = Part.CustomInfo ("re") 'Изменить имя свойства конфигурации здесь

FileLocation = "C:"

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

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

End Sub

1 Ответ

0 голосов
/ 17 апреля 2019

Вы можете сделать это несколькими различными способами, если вы не используете макрос VB6.Если вы используете макрос .NET (Visual Basic или C #), они поддерживают библиотеки .NET, что делает этот процесс довольно простым.Я создал следующее консольное приложение в C #.Вы можете создать то же самое, что и макрос .NET в SolidWorks.Важно добавить в приведенный вами пример оператор 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;
            }
        }
    }
}
...