在UG二次开发过程中,通过宏录制的代码往往具有局限性,在进行参数的替换时,通常会遇到同时选择多个面的情况:此时需要我们修改代码为列表的形式进行参数的传递,接下来以抽取面特征为例进行说明:
1、抽取面特征时,往往需要同时抽取多个面,宏录制代码如下:(这里是需要修改的地方(需注释掉),就是把录制的面转化为参数)
NXOpen.Features.SweepAlongGuide sweepAlongGuide1 = (NXOpen.Features.SweepAlongGuide)workPart.Features.FindObject("SWEEP(137)");
NXOpen.Face face1 = (NXOpen.Face)sweepAlongGuide1.FindObject("FACE 484230 {(343.5987985229091,139.5023457675732,-0.0000000000001) REVOLVED(5)}");
NXOpen.FaceBossPocketFacesRule faceBossPocketFacesRule1;
faceBossPocketFacesRule1 = workPart.ScRuleFactory.CreateRuleFaceBossPocket(face1, true);
2、原来是单个面的操作,用参数替换时需要替换为多个面的操作,那就把所有的面都输进去,用foreach来完成:
NXOpen.Face[] faces1 = new NXOpen.Face[0];//作为初始数组
foreach (var fc in faces)
{
Array.Resize(ref faces1, faces1.Length + 1);//动态修改数组
faces1[faces1.Length - 1] = fc;
}
3、将定义好的faces数组替换源录制代码
//原来的录制代码
//NXOpen.FaceBossPocketFacesRule faceBossPocketFacesRule1;
//faceBossPocketFacesRule1 = workPart.ScRuleFactory.CreateRuleFaceBossPocket(faces1, true);
//用faces1数组替换的代码
//public static void ExtractPlane(Face[] faces)//形参定义
NXOpen.FaceDumbRule faceDumbRule;
faceDumbRule = workPart.ScRuleFactory.CreateRuleFaceDumb(faces1);
4、以上(1、2、3)为修改的宏录制代码,修改完成后进行实参的定义,并调用函数。
Face[] faces = new Face[0];
//获得选择的面对象,都是TaggedObject类型,要将TaggedObject转化为Face类型,才能调用函数。
TaggedObject[] taggedObjects = face_select0.GetSelectedObjects();
foreach (var to in taggedObjects)
{
Array.Resize(ref faces, faces.Length + 1);
faces[faces.Length - 1] = (Face)to;
}
ExtractPlane(faces);