网友C#2010开发UG7.0心得3(旋转坐标系与球)

C#2010开发UG7.0心得3(旋转坐标系与球)

上节的开头提到了长方体与圆柱与圆锥的区别,即它没有轴线的说法,它的长宽高永远的沿着当前坐标系的X、Y、Z轴方法。那如果我们想要一个长方体的长度方向是与X轴成一角度(比如60度),宽高也与之对应的发生变化(这是肯定的,因为长宽高三方向永远是互相垂直的)时候呢?我们需要旋转坐标系,选转的角度与类型还有旋转的次数要根据具体情况决定。就上面的简单例子:想要一个长方体的长度方向是与X轴成60度,宽高也与之对应的发生变化。我们只需要将全局坐标系绕Z轴从X正半轴向Y正半轴转60度即可。代码如下:

workPart.WCS.Rotate(NXOpen.WCS.Axis.ZAxis,60.0);

20131120173402

没错,就是这么简单的一个Rotate命令,第一个参数是一个枚举类型,便是旋转的方式,第二个是一个doub型,表示旋转的角度。这样再绘制长方体,其长宽高方向就是旋转后的坐标轴方向了。但事情到这里还没完,一个很有意思的事件发生了:我们看设置长方体参数的代码

BlkFeatureBuilder.SetOriginAndLengths(origin, Length, Width, Height);

第一个参数是一个point3d类型的,我们可以使用其三个坐标值来为其赋值,剩下的长宽高属性为string。有意思的是这个point3d类型的点。我们转完坐标后,长宽高的方向跟着转了,但这个point3d类型的点坐标却没有转!!!也就是你在为这个point3d类型的点赋值时,其坐标值仍然是在绝对坐标系下的值!!!现在我也不理解NXOPEN为什么会这样,解决方法就是将旋转后的坐标系中的点坐标自己变换到绝对坐标下,这个如果大家学过张量分析课程应该很容易实现,一个旋转矩阵的问题而已。不会矩阵也没关系,利用几何知识也可以。这个例子的解决代码如下:

afterX = originalX * System.Math.Cos(化弧度(60)) + originalY * System.Math.Sin(化弧度(60));
afterY = originalX * System.Math.Sin(化弧度(60)) – originalY * System.Math.Cos(化弧度(60));

这样得到的afterX和afterY就是绝对坐标系下的坐标值,也就是我们为origin赋值所要用到的值。代码中的化弧度是我自己写的一个方法,将角度转化为弧度,因为在.NET的System.Math中,所以函数操作的对象都是弧度,如这里用到的Cos、Sin等,代码简单写下吧:

public double 化弧度(double Degree)
{
return Degree * System.Math.PI / 180.0;
}

这段代码不解释了,学过初中数学的就都能明白。
对了,旋转坐标系之后还有重新转回来,简单的话再反方向转个相同度数就可以了,复杂的话,比如转了好多次,可以自己写个方法,使坐标系与绝对坐标系对正。代码见下:

public void ResumeWCS()
{
Point3d origin = new Point3d(0.0, 0.0, 0.0);
Matrix3x3 matrix;
matrix.Xx = 1.0;
matrix.Xy = 0.0;
matrix.Xz = 0.0;
matrix.Yx = 0.0;
matrix.Yy = 1.0;
matrix.Yz = 0.0;
matrix.Zx = 0.0;
matrix.Zy = 0.0;
matrix.Zz = 1.0;
workPart.WCS.SetOriginAndMatrix(origin, matrix);
}

长方体也可以控制方向了,圆柱、圆锥也说完了,基本体就结束了。还有一个球,这个没什么新意,是最简单的,就是一个 point3d类型的原点和一个double型的直径。还是把代码贴出来吧:

NXOpen.Features.Sphere nullFeatures_Sphere = null;
NXOpen.Features.SphereBuilder sphereBuilder1;
sphereBuilder1 = workPart.Features.CreateSphereBuilder(nullFeatures_Sphere);

sphereBuilder1.Diameter.RightHandSide = “20”;
Point3d basepoint = new Point3d(10.0, 10.0, 10.0);
Point point1= workPart.Points.CreatePoint(basepoint);
sphereBuilder1.CenterPoint = point1;

NXObject nXObject1;
nXObject1 = sphereBuilder1.Commit();
sphereBuilder1.Destroy();
到现在为止,所以的基本体就创建完毕了。下面介绍的会是求和求差的特征操作。下节见。

UG转CAD最好的方法技巧

网友C#2010开发UG7.0心得5(实例之阵列)

64位系统下VS2010二次开发NX7.0

未经允许不得转载:NX1847安装方法|UG12.0安装方法|ug12.0安装教程|ug12.0安装视频|ug12.0软件下载 » 网友C#2010开发UG7.0心得3(旋转坐标系与球)

赞 (0) 打赏

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏