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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM