我正在寻找一个宏,它将在运行时将该位置的文件转换为.stp文件,我遇到了下面的内容。我如何操纵它来抓取文件夹中的下一个文件并继续下一个文件并转换它们直到所有文件都已转换。
Dim swApp As Object
昏暗的部分作为对象
Dim FilePath As String
Dim sFilePath As String
昏暗的PathSize一样长
Dim PathNoExtention As String
Dim NewFilePath As String
Dim FileLocation As String
Dim sPath As String
昏昏欲睡
Dim bRebuild As Boolean
Dim bRet As Boolean
Dim sRev As String
昏暗的错误
昏暗的nWarnings长
子主()
设置swApp = Application.SldWorks
设置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”)
结束子
如果您不使用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;
}
}
}
}