NX Lab

Sửa giá trị Expression bằng code: Edit, EditWithUnits và cập nhật mô hình

#Python#Expression1 lượt xem

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

    Câu hỏi ·

    Đổi một kích thước trong expression rồi để NX tự cập nhật mô hình là cốt lõi của thiết kế tham số tự động. Bài này sửa expression theo tên, có kiểm tra tồn tại và cập nhật lại.

    Sửa giá trị Expression bằng code Sửa giá trị Expression bằng code

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

    1. Tìm expression. part.Expressions.FindObject(tên) trả về Expression, lỗi nếu không có.
    2. Đọc giá trị cũ. RightHandSide và Value.
    3. Sửa giá trị. part.Expressions.Edit(exp, "giá trị mới").
    4. Cập nhật mô hình. session.UpdateManager.DoUpdate(mark).
    5. Hoàn tác khi lỗi. UndoToMark nếu cập nhật thất bại.

    Code tham khảo (Python)

    import NXOpen
    
    def sua_expression(session, part, ten, gia_tri_moi):
        """Trả về (thanh_cong, thong_bao)."""
        try:
            exp = part.Expressions.FindObject(ten)
        except NXOpen.NXException:
            return False, "Không có expression '%s'" % ten
        cu = exp.RightHandSide
        mark = session.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Sua " + ten)
        try:
            part.Expressions.Edit(exp, str(gia_tri_moi))
            loi = session.UpdateManager.DoUpdate(mark)
            if loi != 0:
                raise RuntimeError("DoUpdate trả về mã lỗi %d" % loi)
            return True, "%s: %s -> %s" % (ten, cu, exp.RightHandSide)
        except Exception as ex:
            session.UndoToMark(mark, "Sua " + ten)
            return False, "Hoàn tác vì lỗi: %s" % ex
    
    def main():
        session = NXOpen.Session.GetSession()
        lw = session.ListingWindow
        lw.Open()
        part = session.Parts.Work
        if part is None:
            return
        ok, tb = sua_expression(session, part, "p5", 42.5)   # đổi 'p5' thành tên expression trong part của bạn
        lw.WriteLine(("OK: " if ok else "LỖI: ") + tb)
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • FindObject ném NXException nếu tên không tồn tại, vì vậy bọc trong try.
    • Edit chỉ đổi công thức; mô hình chỉ cập nhật sau DoUpdate.
    • Đặt Undo Mark trước khi sửa để lỗi giữa chừng không để lại mô hình hỏng.

    Lỗi thường gặp

    • Expression do feature tạo ra (kiểu p123) bị khóa trong một số trường hợp; kiểm tra IsRightHandSideLockedFromEdit.
    • Giá trị không hợp lệ (chia cho 0, vòng tham chiếu) làm DoUpdate lỗi; luôn có đường hoàn tác.

    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.