NX Lab

Đọc hiểu một journal Python do NX ghi: cấu trúc 5 phần và cách dọn gọn

#Journal#Python5 lượt xem

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

    Câu hỏi ·

    Journal do NX ghi ra là cách học NX Open nhanh nhất, nhưng file thô thường dài và khó đọc. Bài này chỉ ra 5 phần luôn có trong journal Python và cách tách lấy phần lõi để dùng lại.

    Đọc hiểu một journal Python do NX ghi Đọc hiểu một journal Python do NX ghi

    Chuẩn bị

    • Bật ghi journal: tab Developer (hoặc menu Tools > Journal) > Record, chọn ngôn ngữ Python.
    • Làm một thao tác nhỏ (ví dụ vẽ một khối hộp) rồi bấm Stop.

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

    1. Mở file journal. Dùng Edit hoặc mở bằng trình soạn thảo bất kỳ; file có đuôi .py.
    2. Nhận diện phần đầu. Các dòng import, khai báo hàm main và lệnh lấy Session.
    3. Tìm khối builder. Mỗi thao tác tạo/sửa đối tượng đi qua một builder: Create...Builder, gán thuộc tính, Commit, Destroy.
    4. Xóa phần thừa. Bỏ các dòng markId, UndoMark, cài đặt hiển thị không liên quan.
    5. Bọc thành hàm. Gom phần lõi vào hàm có tham số để gọi lại nhiều lần.

    Code tham khảo (Python)

    # Bộ khung journal sau khi đã dọn gọn
    import NXOpen
    
    def tao_khoi_hop(chieu_dai, chieu_rong, chieu_cao):
        session = NXOpen.Session.GetSession()          # (1) lấy Session
        work_part = session.Parts.Work                 # (2) chi tiết đang làm việc
        mark = session.SetUndoMark(
            NXOpen.Session.MarkVisibility.Visible, "Tao khoi hop")   # (3) mốc hoàn tác
    
        builder = work_part.Features.CreateBlockFeatureBuilder(NXOpen.Features.Feature.Null)
        try:
            builder.Type = NXOpen.Features.BlockFeatureBuilder.Types.OriginAndEdgeLengths
            builder.SetOriginAndLengths(                # (4) tham số hình học
                NXOpen.Point3d(0.0, 0.0, 0.0),
                str(chieu_dai), str(chieu_rong), str(chieu_cao))
            feature = builder.CommitFeature()           # (5) tạo feature
        finally:
            builder.Destroy()                           # luôn hủy builder
        return feature
    
    if __name__ == "__main__":
        f = tao_khoi_hop(100, 50, 20)
        NXOpen.Session.GetSession().ListingWindow.Open()
        NXOpen.Session.GetSession().ListingWindow.WriteLine("Đã tạo: " + f.GetFeatureName())
    

    Giải thích code

    • Session.GetSession() là cửa vào duy nhất; mọi đối tượng khác đều đi ra từ đây.
    • SetUndoMark cho phép người dùng Ctrl+Z toàn bộ thao tác của script chỉ bằng một lần.
    • CommitFeature() trả về Feature; còn Commit() trả về NXObject (dùng khi không cần kiểu Feature).
    • Destroy() đặt trong finally để builder luôn được giải phóng kể cả khi lỗi.

    Lỗi thường gặp

    • Chạy journal khi chưa có Work Part: session.Parts.Work là None, dòng tiếp theo sẽ báo AttributeError.
    • Giữ nguyên tên biến kiểu block1, point1 khi đưa vào dự án thật sẽ rất khó bảo trì; đặt tên theo ý nghĩa.
    • Đừng xóa lệnh Destroy() khi dọn journal: builder rò rỉ làm NX chậm dần.

    Mở rộng

    Bài tập: ghi journal tạo một lỗ (Hole) rồi tự tách thành hàm tao_lo(x, y, duong_kinh).

    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.