UG中有一个命令叫做“实例几何体”,这个命令下,你可以对几何体进行平移、镜像、旋转等复制操作。我这里之所以特意说明是复制操作,就是为了引出今天要说的这个Builder——GeomcopyBuilder。
这个GeomcopyBuilder就是UG中的实例集合体的工厂类。今天详细来说明的是怎样实现圆形阵列,如果大家用UG作图时要用到圆形阵列的话,肯定会觉得他的阵列很不习惯,先说实例特征里那个圆形阵列,只能阵列特征而不能阵列实体,且需要输入角度,有时候我们只是需要360度内均布阵列,这就会比较麻烦,还有就是对实体根本就用不了这个实例特征来阵列。那么实体阵列就需要实例几何体中的旋转了,一看,更麻烦,还是角度,距离,副本数。至少要输入两个参数。这里大家可以自己写一个圆形阵列的函数来减少一个参数,自动360度内均布阵列。下面还是先直接上代码,再来解释,然后接着上节说的,获取阵列后新实体的JournalIdentifier。
int totalNumber = 8;//由用户在界面输入,界面内容以后说,这里先暂时定为常量。
Feature nullFeature = null;
GeomcopyBuilder geomcopyBuilder1;
geomcopyBuilder1 = workPart.Features.CreateGeomcopyBuilder(nullFeature);
geomcopyBuilder1.Type = NXOpen.Features.GeomcopyBuilder.TransformTypes.Rotation;
geomcopyBuilder1.RotateAngle.RightHandSide = (360/totalNumber).ToString();
geomcopyBuilder1.NumberOfCopies.RightHandSide = (totalNumber-1).ToString();
Body body1 = (Body)workPart.Bodies.FindObject(target);
geomcopyBuilder1.GeometryToInstance.Add(body1);
DatumAxis datumAxis1 = (DatumAxis)workPart.Datums.FindObject(“DATUM_CSYS(0) Z axis”);
Direction direction1;
direction1 = workPart.Directions.CreateDirection(datumAxis1, Sense.Forward, NXOpen.SmartObject.UpdateOption.WithinModeling);
Point nullPoint = null;
Axis axis1;
axis1 = workPart.Axes.CreateAxis(nullPoint, direction1, NXOpen.SmartObject.UpdateOption.WithinModeling);
geomcopyBuilder1.RotationAxis = axis1;
geomcopyBuilder1.CommitFeature();
geomcopyBuilder1.Destroy();
这个Builder的Type属性是一个枚举,分别决定了其行为,NXOpen.Features.GeomcopyBuilder.TransformTypes.Rotation即为旋转了。旋转需要定义的就是一个旋转角度,和副本数量,分别由其RotateAngle和NumberOfCopies来设定,string类型。当然360度内均布阵列的话,旋转角度就是360/totalNumber,副本数就是totalNumber-1了。同布尔操作一样,我们将一个Body类型参数通过GeometryToInstance的Add()方法将自身加入到实例几何体的选择集中。旋转操作还需要一个旋转轴,这个轴类对象的建立之前也在圆锥里详细说过,这里不再细说,将创建的Axis对象赋给Builder的RotationAxi属性,然后Commit()和Destroy()。
这些步骤都老生长谈了,唯一有意思的是这个JournalIdentifier的获取。因为创建出来了好多实体,所以肯定是一个string数组来接受,怎样呢?这个Builder经过CommitFeature().JournalIdentifier后返回的是这样的一个string“Geometry Instance(n)”,n是创建的顺序号,这个JournalIdentifier包含着totalNumber-1个Body的JournalIdentifier。没个Body的JournalIdentifier是这样的形式
Geometry Instance(n:1A:1A)
Geometry Instance(n:1A:2A)
Geometry Instance(n:1A:3A)
Geometry Instance(n:1A:4A)
……
这个是我从Journal里看后总结出来的,原因不名。所以只能通过下面的代码来为没个Body的JournalIdentifier赋值。
string[] idens = new string[(totalNumber – 1)];
string iden = geomcopyBuilder1.CommitFeature().JournalIdentifier;
for (int i = 0; i < iden.Length; i++)
{
idens[i] = iden.Replace(“)”, “:1A:” + (i+1).ToString() + “A)”);
}
这样就得到了所有复制得到的几何体的JournalIdentifier,也就能通过FindObject来得到这些Body了。好了,今天到此结束。
未经允许不得转载:NX1847安装方法|UG12.0安装方法|ug12.0安装教程|ug12.0安装视频|ug12.0软件下载 » 网友C#2010开发UG7.0心得5(实例之阵列)