
Sửa giá trị Expression bằng code: Edit, EditWithUnits và cập nhật mô hình
#Python#Expression1 lượt xem
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 codeCác bước thực hiện
- Tìm expression. part.Expressions.FindObject(tên) trả về Expression, lỗi nếu không có.
- Đọc giá trị cũ. RightHandSide và Value.
- Sửa giá trị. part.Expressions.Edit(exp, "giá trị mới").
- Cập nhật mô hình. session.UpdateManager.DoUpdate(mark).
- 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
FindObjectnémNXExceptionnếu tên không tồn tại, vì vậy bọc trongtry.Editchỉ đổi công thức; mô hình chỉ cập nhật sauDoUpdate.- Đặ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 traIsRightHandSideLockedFromEdit. - Giá trị không hợp lệ (chia cho 0, vòng tham chiếu) làm
DoUpdatelỗ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.