NX Lab

Đọc và đặt WCS (hệ tọa độ làm việc): gốc, hướng và lưu thành Csys

#Python#WCS1 lượt xem

  1. Quản trị viênQuản trị· 0 điểm

    Câu hỏi ·

    WCS quyết định nhiều thao tác: mặt phẳng vẽ mặc định, hướng nhập vectơ. Script nên đọc WCS trước khi làm việc và trả lại nguyên trạng sau khi xong.

    Đọc và đặt WCS (hệ tọa độ làm việc) Đọc và đặt WCS (hệ tọa độ làm việc)

    Các bước thực hiện

    1. Đọc gốc WCS. part.WCS.Origin cho Point3d.
    2. Lưu trạng thái. Lưu gốc và hướng cũ để khôi phục sau.
    3. Đặt WCS mới. SetOriginAndMatrix(origin, matrix).
    4. Quay WCS. Rotate quanh trục theo góc radian.
    5. Khôi phục. Đưa WCS về giá trị cũ trong finally.

    Code tham khảo (Python)

    import math
    import NXOpen
    
    def luu_wcs(part):
        wcs = part.WCS
        return wcs.Origin, wcs.CoordinateSystem.Orientation.Element
    
    def khoi_phuc_wcs(part, goc, huong):
        part.WCS.SetOriginAndMatrix(goc, huong)
    
    def dat_wcs_tai(part, x, y, z):
        huong = part.WCS.CoordinateSystem.Orientation.Element
        part.WCS.SetOriginAndMatrix(NXOpen.Point3d(x, y, z), huong)
    
    def main():
        session = NXOpen.Session.GetSession()
        lw = session.ListingWindow
        lw.Open()
        part = session.Parts.Work
        if part is None:
            return
        goc, huong = luu_wcs(part)
        lw.WriteLine("WCS cũ: (%.2f, %.2f, %.2f)" % (goc.X, goc.Y, goc.Z))
        try:
            dat_wcs_tai(part, 50.0, 25.0, 0.0)
            o = part.WCS.Origin
            lw.WriteLine("WCS mới: (%.2f, %.2f, %.2f)" % (o.X, o.Y, o.Z))
            # Quay WCS 90 độ quanh trục Z: dùng trục của hệ tọa độ tuyệt đối
            truc_z = part.Axes.CreateAxis(NXOpen.Point3d(0, 0, 0), NXOpen.Vector3d(0, 0, 1),
                                          NXOpen.SmartObject.UpdateOption.WithinModeling)
            part.WCS.Rotate(truc_z, math.radians(90.0))
        finally:
            khoi_phuc_wcs(part, goc, huong)
            lw.WriteLine("Đã khôi phục WCS")
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • WCS.CoordinateSystem.Orientation.Element là Matrix3x3 hiện hành của WCS.
    • Khôi phục trong finally đảm bảo người dùng không bị đổi WCS ngoài ý muốn.
    • Rotate nhận một Axis và góc radian.

    Lỗi thường gặp

    • Trục tạo bằng Axes.CreateAxis là đối tượng thông minh nằm trong part; không dùng thì có thể xóa.
    • WCS không lưu trong undo của vài thao tác; luôn tự lưu và trả lại.

    Code mang tính tham khảo, viết cho NX 12 trở lên (Python journal). Tên menu và một số lớp có thể khác theo phiên bản NX; hãy chạy thử trên bản sao của chi tiết trước khi dùng cho dữ liệu thật.

    Điểm: 0

Trả lời

Đăng nhập để tham gia thảo luận.