UG NX二次开发(C#)-外部模式-批量删除某些图层中的体对象和曲线对象
Posted GimiGimmy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UG NX二次开发(C#)-外部模式-批量删除某些图层中的体对象和曲线对象相关的知识,希望对你有一定的参考价值。
1、前言
在 UG NX中,有时需要批量删除某文件夹下多个.prt文件中固定一些图层中的体对象和曲线对象,这时如果采用手动逐个打开模型,并选择针对的图层删除,即耗时也容易遗漏,因此采用外部模式来处理比较方便。本文介绍批量删除某些图层中的体对象和曲线对象。
2、获取所有文件和图层标识
2.1 解析图层标识
Console.WriteLine("========开始执行删除程序\\n");
#region 解析图层
string[] argsSplit = args[2].Split(',');
List<int> layers = new List<int>();
foreach(var sp in argsSplit)
if(sp.Contains("~"))
string[] spsplit = sp.Split('~');
for(int i=int.Parse( spsplit[0]);i<=int.Parse(spsplit[1]);i++)
layers.Add(i);
else
layers.Add(int.Parse(sp));
#endregion
2.2 获取所有.prt文件地址
string path = args[0];
Console.WriteLine("========文件目录为" + args[0] + "\\n");
DirectoryInfo root = new DirectoryInfo(path);
GetAllFiles(root);
static void GetAllFiles(DirectoryInfo root)
//获取当前程序所在的文件路径
string topPath = root.FullName;//上上级目录
StreamWriter sw = null;
try
//创建输出流,将得到文件名子目录名保存到txt中
getDirectory(sw, topPath, 2);
catch (IOException e)
Console.WriteLine(e.Message);
/// <summary>
/// 获得指定路径下所有文件名
/// </summary>
/// <param name="sw">文件写入流</param>
/// <param name="path">文件写入流</param>
/// <param name="indent">输出时的缩进量</param>
public static void getFileName(StreamWriter sw, string path, int indent)
DirectoryInfo root = new DirectoryInfo(path);
foreach (FileInfo f in root.GetFiles())
allFileList.Add(f.FullName);
/// <summary>
/// 获得指定路径下所有子目录名
/// </summary>
/// <param name="sw">文件写入流</param>
/// <param name="path">文件夹路径</param>
/// <param name="indent">输出时的缩进量</param>
public static void getDirectory(StreamWriter sw, string path, int indent)
getFileName(sw, path, indent);
DirectoryInfo root = new DirectoryInfo(path);
foreach (DirectoryInfo d in root.GetDirectories())
getDirectory(sw, d.FullName, indent + 2);
3 执行循环删除图层中的体对象和曲线对象
Console.WriteLine("========执行循环删除\\n");
#region 针对目录下的每一个.prt
foreach (var fl in allFileList)
if (fl.Contains(".prt"))
Console.WriteLine("========删除文件" + fl + "\\n");
Console.WriteLine("========打开模型文件\\n");
#region 打开.prt文件
Tag partTag = Tag.Null;
NXOpen.UF.UFPart.LoadStatus partLoadStatus;
uFPart.Open(fl, out partTag, out partLoadStatus);
workPart = theSession.Parts.Work;
#endregion
Console.WriteLine("========获取1~10的体\\n");
#region 获取所有的体和曲线
BodyCollection bodyCollection = workPart.Bodies;
List<Body> bodiesList = new List<Body>();
Body[] bodies = bodyCollection.ToArray();
TaggedObject[] taggedObjects = new TaggedObject[0];
foreach (var bd in bodies)
if (layers.Contains(bd.Layer))
Array.Resize(ref taggedObjects, taggedObjects.Length + 1);
taggedObjects[taggedObjects.Length - 1] = bd;
bodiesList.Add(bd);
Console.WriteLine("========获取1~10的曲线\\n");
CurveCollection curveCollection = workPart.Curves;
Curve[] curves = curveCollection.ToArray();
foreach (var cv in curves)
if (layers.Contains(cv.Layer))
Array.Resize(ref taggedObjects, taggedObjects.Length + 1);
taggedObjects[taggedObjects.Length - 1] = cv;
#endregion
Console.WriteLine("========删除1~10的体和曲线\\n");
#region 删除对象
DeleteObjects(taggedObjects);
#endregion
Console.WriteLine("========保存并关闭文件\\n");
#region 保存并关闭
uFModl.Update();
Tag[] tags;
int count;
int[] errorList;
uFPart.SaveAll(out count, out tags, out errorList);
uFPart.CloseAll();
#endregion
#endregion
4、测试用例
我们在一个文件夹中建立两个模型,第一个模型为:
曲线在61层,正方体在21层,长方体在1层(工作层)。
第二个模型:
球在工作层,长方体在21层,曲线在61层。
我们选择删除21~61层的体对象和曲线对象
5、编译完成外部exe
生成外部程序exe,并在批处理文件中输入:
D:\\TrainPart\\DeleteObjectsByLayers 21,61
执行批处理文件,能删除这两个模型61层和21中曲线和体对象。
对于第二个模型,其删除后为:
完整的代码见:https://download.csdn.net/download/yang19861007/86727167?spm=1001.2014.3001.5503
以上是关于UG NX二次开发(C#)-外部模式-批量删除某些图层中的体对象和曲线对象的主要内容,如果未能解决你的问题,请参考以下文章