UG中CSYS的坐标系与WCS坐标系有啥区别呀?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UG中CSYS的坐标系与WCS坐标系有啥区别呀?相关的知识,希望对你有一定的参考价值。

参考技术A ACS:: Absolute Coordinate System 绝对坐标系,每个零件一bai生成du就固zhi定的,零件的自有属性,NX系统内核生成。不可移动和编辑WCS: : Work Coordinate System 工作坐dao标系,或者叫做绝对坐标系的相对坐标系。很多时候在工作中需要变换坐标系,比如在圆周上取点,或者在某个区域内打孔,这个时候你工作的操作面可能相对于绝对坐标系有旋转和平移。这个时候就可以引入工作坐标系便于坐标数值上方便控制建模,从而方便操作,也减少变换矩阵的系统开销CSYS: Coordinate System。坐标系,这是一个NX对象类型,和Datum Plane, Axis, Point累似,是一个没有体线面的特征。由3个正交的轴和一个点构成,分别代表XYZ, 原点。NX现有的CSYS我印象中一般都是笛卡尔坐标,不支持极坐标,自然坐标等等实际意义不大的坐标系。CSYS的意义是可以随便被引用构建WCS或者其他的对象所用,比如你要做Bounding Box或者分析一个碰撞体碰撞接触面,这个时候都会面临一个沿什么样的坐标系方向的问题,沿什么方向包络,沿什么接触面/空间范围碰撞。

UG二次开发NXOpen-Python 点坐标的转换

NXOpen-python 点坐标的转换

  UG中有各种坐标系,比如说绝对坐标系、WCS、草图坐标系等等,当我们在UG软件中画草图时,我们输入的坐标是草图坐标,这没有什么问题,但当我们需要通过代码画草图时,问题就来了,例如,我们要在草图中画一个圆心坐标(10,10)的圆,在UG软件中,我们可以直接输入(10,10),但当我们通过代码完成这一动作时,如果还把圆心坐标设为(10,10)那就大错特错,因为NXOpen中的Point3d是以绝对坐标系构造的,如果我们要在代码中完成圆的创建,就要把圆心坐标转换为绝对坐标系中的坐标:

 

 

 

 

 

  通过journal也可以看出,绝对坐标系中的圆心坐标为(20.0,0.0,14.142),与我们输入的坐标(10,10)相差甚远,那么怎样转换呢?NXOpen-Python中的NXOpen.UF对uf_mtx.h中的函数进行了包装,对于上述问题,我们需要用到UFMtx4函数,NXOpen-Python将这些函数包装在class NXOpen.UF.Mtx4类中

import NXOpen
import NXOpen.UF

theSession: NXOpen.Session = NXOpen.Session.GetSession()
theUfSession: NXOpen.UF.UFSession = NXOpen.UF.UFSession.GetUFSession()
workPart: NXOpen.Part = theSession.Parts.Work
lw: NXOpen.ListingWindow = theSession.ListingWindow
lw.Open()
mtx4: NXOpen.UF.Mtx4 = theUfSession.Mtx4
mtx3: NXOpen.UF.Mtx3 = theUfSession.Mtx3

sketch: NXOpen.Sketch = list(workPart.Sketches)[
    0]  # 实际编程时在创建草图时就可以直接获取该草图对象,不用像这样
lw.WriteLine(str(sketch.Origin))
lw.WriteLine(str(sketch.Orientation.Element))
matrix_sketch = mtx4.Initialize(
    1.0,
    [sketch.Origin.X, sketch.Origin.Y, sketch.Origin.Z],
    mtx3.Transpose([sketch.Orientation.Element.Xx, sketch.Orientation.Element.Xy,
                    sketch.Orientation.Element.Xz, sketch.Orientation.Element.Yx,
                    sketch.Orientation.Element.Yy, sketch.Orientation.Element.Yz,
                    sketch.Orientation.Element.Zx, sketch.Orientation.Element.Zy,
                    sketch.Orientation.Element.Zz]))
lw.WriteLine(\'草图坐标(10,10)对应的绝对坐标系中坐标为\' + str(mtx4.Vec3Multiply([10.0, 10.0, 0.0],
                                                               matrix_sketch)))

输出信息如下:

[X=20,Y=0,Z=0]
[Xx=-0,Xy=0.70710678118654757,Xz=0.70710678118654757,Yx=0,Yy=-0.70710678118654757,Yz=0.70710678118654757,Zx=1,Zy=0,Zz=0]
草图坐标(10,10)对应的绝对坐标系中坐标为[20.0, 0.0, 14.142135623730951]

可以看出,坐标与journal中一致。

如果坐标系只涉及旋转,不涉及平移,则Mtx3就能处理,如果坐标系原点也发生了改变,则需要借助Mtx4

 

以上是关于UG中CSYS的坐标系与WCS坐标系有啥区别呀?的主要内容,如果未能解决你的问题,请参考以下文章

NX二次开发-获取坐标系信息UF_CSYS_ask_csys_info

UG NX8.5坐标系 输出坐标里的“参考”:绝对-工作部件 绝对对-显示部件 WCS 各指啥意思?麻烦说明白些

NX二次开发-移动WCS坐标系

UFUN函数 UF_CSYS函数 UF_MTX函数(如何创建坐标系);

ug8.0为啥我把坐标移动时之前那个图也跟着坐标移动的

ug8.0怎么显示坐标系?