1. 程式人生 > 其它 >UG二次開發NXOpen-Python(七) 點座標的轉換

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