NX Lab

Tạo cung tròn và đường tròn: theo tâm-bán kính và theo ba điểm

#Python#Hình học1 lượt xem

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

    Câu hỏi ·

    NX tạo cung tròn theo nhiều cách. Hai cách thông dụng nhất là tâm và bán kính cùng góc đầu cuối, hoặc đi qua ba điểm. Đường tròn là cung có góc quét 360 độ.

    Tạo cung tròn và đường tròn Tạo cung tròn và đường tròn

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

    1. Cung theo tâm. CreateArc(tâm, trục X, trục Y, bán kính, góc đầu, góc cuối) với góc tính bằng radian.
    2. Đường tròn. Đặt góc đầu 0 và góc cuối 2π.
    3. Cung theo ba điểm. CreateArc(điểm đầu, điểm giữa, điểm cuối, đảo nghiệm, cờ).
    4. Đổi độ sang radian. math.radians để dễ nhập góc.
    5. Kiểm tra bán kính. Arc.Radius và Arc.CenterPoint.

    Code tham khảo (Python)

    import math
    import NXOpen
    
    def tao_cung(part, tam, ban_kinh, goc_dau_do, goc_cuoi_do):
        return part.Curves.CreateArc(
            NXOpen.Point3d(*tam),
            NXOpen.Vector3d(1, 0, 0), NXOpen.Vector3d(0, 1, 0),   # trục X, Y của mặt phẳng cung
            ban_kinh, math.radians(goc_dau_do), math.radians(goc_cuoi_do))
    
    def tao_duong_tron(part, tam, ban_kinh):
        return tao_cung(part, tam, ban_kinh, 0.0, 360.0)
    
    def tao_cung_3_diem(part, p1, p2, p3):
        # Python trả về tuple (arc, startAndEndGotFlipped) vì tham số cuối là tham số ra
        arc, _flipped = part.Curves.CreateArc(
            NXOpen.Point3d(*p1), NXOpen.Point3d(*p2), NXOpen.Point3d(*p3), False)
        return arc
    
    def main():
        session = NXOpen.Session.GetSession()
        lw = session.ListingWindow
        lw.Open()
        part = session.Parts.Work
        if part is None:
            return
        c1 = tao_duong_tron(part, (0, 0, 0), 25.0)
        c2 = tao_cung(part, (80, 0, 0), 20.0, 30.0, 150.0)
        c3 = tao_cung_3_diem(part, (0, 60, 0), (15, 75, 0), (40, 60, 0))
        for ten, c in (("Tròn", c1), ("Cung tâm", c2), ("Cung 3 điểm", c3)):
            lw.WriteLine("%s: R=%.2f, tâm=(%.1f, %.1f)" % (ten, c.Radius, c.CenterPoint.X, c.CenterPoint.Y))
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • Góc trong NX Open tính bằng radian; chuyển bằng math.radians.
    • Hai vectơ đơn vị xác định mặt phẳng chứa cung; đổi chúng để vẽ trên mặt phẳng khác XY.
    • Hàm ba điểm có tham số ra nên Python trả về tuple hai phần tử, cần giải nén.

    Lỗi thường gặp

    • Ba điểm thẳng hàng không tạo được cung và NX báo lỗi.
    • Nhập góc bằng độ mà quên đổi sang radian: cung sẽ lệch hoàn toàn.

    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.