NX Lab

Lưu, Lưu thành (SaveAs) và lưu toàn bộ assembly bằng NX Open

#Python#Part2 lượt xem

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

    Câu hỏi ·

    Lưu file nghe đơn giản nhưng có nhiều biến thể: lưu tại chỗ, lưu sang tên, lưu cả component con. Bài này gói chúng thành các hàm an toàn có kiểm tra trạng thái.

    Lưu, Lưu thành (SaveAs) và lưu toàn bộ… Lưu, Lưu thành (SaveAs) và lưu toàn bộ…

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

    1. Lưu tại chỗ. part.Save(SaveComponents.TrueValue, CloseAfterSave.FalseValue).
    2. Lưu thành. part.SaveAs(duong_dan_moi) tạo file mới và Work Part trỏ sang file đó.
    3. Lưu mọi part đã sửa. session.Parts.SaveAll() trả về cờ anyPartsModified và trạng thái.
    4. Đọc kết quả. PartSaveStatus.NumberUnsavedParts cho biết còn part nào chưa lưu.
    5. Xử lý lỗi. Bắt NXException, in tên file gây lỗi.

    Code tham khảo (Python)

    import os
    import NXOpen
    
    def luu(part):
        """Lưu part và các component đã sửa. Trả về số part chưa lưu được."""
        status = part.Save(NXOpen.BasePart.SaveComponents.TrueValue,
                           NXOpen.BasePart.CloseAfterSave.FalseValue)
        try:
            return status.NumberUnsavedParts
        finally:
            status.Dispose()
    
    def luu_thanh(part, thu_muc, ten_moi):
        os.makedirs(thu_muc, exist_ok=True)
        dich = thu_muc.rstrip("/") + "/" + ten_moi + ".prt"
        status = part.SaveAs(dich)
        status.Dispose()
        return dich
    
    def main():
        session = NXOpen.Session.GetSession()
        lw = session.ListingWindow
        lw.Open()
        part = session.Parts.Work
        if part is None:
            lw.WriteLine("Chưa có part")
            return
        try:
            chua_luu = luu(part)
            lw.WriteLine("Lưu xong, số part chưa lưu được: %d" % chua_luu)
            file_moi = luu_thanh(part, "D:/Du_an/ban_sao", part.Leaf + "_v2")
            lw.WriteLine("Đã lưu thành: " + file_moi)
        except NXOpen.NXException as ex:
            lw.WriteLine("Lỗi khi lưu: " + ex.Message)
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • SaveComponents.TrueValue lưu luôn các component con đã sửa; dùng FalseValue nếu chỉ muốn lưu part này.
    • SaveAs làm part hiện tại đổi tên; muốn giữ nguyên file gốc hãy SaveAs trước khi chỉnh sửa.
    • PartSaveStatus cũng phải Dispose().

    Lỗi thường gặp

    • SaveAs sang thư mục không tồn tại hoặc không có quyền ghi gây NXException; tạo thư mục trước.
    • Trong Teamcenter dùng quy trình lưu riêng (Save in Teamcenter), không dùng SaveAs ra đường dẫn đĩa.

    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.