NX Lab

Dùng Undo Mark: để một lần Ctrl+Z hoàn tác toàn bộ thay đổi của script

#Python#Undo2 lượt xem

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

    Câu hỏi ·

    Người dùng chạy script xong thấy sai sẽ muốn Ctrl+Z một lần là về trạng thái cũ. Undo mark làm được điều đó, đồng thời giúp script tự hoàn tác khi gặp lỗi giữa chừng.

    Dùng Undo Mark: để một lần Ctrl+Z hoàn tác… Dùng Undo Mark: để một lần Ctrl+Z hoàn tác…

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

    1. Đặt mốc. session.SetUndoMark(MarkVisibility.Visible, tên) trả về UndoMarkId.
    2. Thực hiện thay đổi. Tạo/sửa các đối tượng như bình thường.
    3. Bắt lỗi. Trong except, gọi session.UndoToMark(mark, tên) để trả về trạng thái trước.
    4. Dọn mốc. Khi thành công không cần xóa; khi dùng mốc tạm hãy DeleteUndoMark.
    5. Mốc ẩn. MarkVisibility.Invisible dùng cho mốc nội bộ không hiện trong danh sách Undo.

    Code tham khảo (Python)

    import NXOpen
    
    TEN_MOC = "Script tao hinh"
    
    def lam_viec(part):
        # ví dụ: tạo hai điểm; thay bằng thao tác thật của bạn
        p1 = part.Points.CreatePoint(NXOpen.Point3d(0, 0, 0))
        p2 = part.Points.CreatePoint(NXOpen.Point3d(10, 0, 0))
        return [p1, p2]
    
    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
    
        mark = session.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, TEN_MOC)
        try:
            doi_tuong = lam_viec(part)
            lw.WriteLine("Đã tạo %d đối tượng" % len(doi_tuong))
        except Exception as ex:
            lw.WriteLine("Lỗi, hoàn tác: " + str(ex))
            session.UndoToMark(mark, TEN_MOC)
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • SetUndoMark nhận mức hiển thị và tên; tên cần khớp khi gọi UndoToMark.
    • UndoToMark đưa mô hình về đúng thời điểm đặt mốc, bao gồm cả các feature đã commit.
    • Một mốc Visible xuất hiện trong danh sách Undo List để người dùng tự chọn.

    Lỗi thường gặp

    • Một số thao tác (lưu file, đóng part) không hoàn tác được bằng Undo.
    • Đặt quá nhiều mốc trong vòng lặp lớn làm tốn bộ nhớ; chỉ đặt một mốc cho cả script.

    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.