我正在四处寻找并查找一个宏,该宏将在运行时将位置中的文件转换为.stp文件,而我遇到了以下问题。我如何操纵它以获取文件夹中的下一个文件并继续下一个文件并将其转换,直到所有文件都已转换。
Dim swApp As Object
将零件设为对象
将FilePath设置为字符串
将sFilePath设置为字符串
将PathSize设置为长
将PathNoExtention设置为字符串
将NewFilePath设置为字符串
将FileLocation设置为字符串
将sPath设置为字符串
我尽可能地昏昏欲睡
将bRebuild设为布尔值
将bRet设置为布尔值
将sRev转换为字符串
将nError错误尽可能远
将nWarnings尽可能长地
Sub main()
设置swApp = Application.SldWorks
设置部件= 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”)
结束子
答案 0 :(得分:0)
如果您不使用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;
}
}
}
}