
Mô hình tham số hóa bằng expression: tạo khối hộp có ba kích thước điều khiển được
#Python#Tham số#Expression1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Mô hình tham số tốt đổi kích thước bằng cách sửa một con số. Cách dựng đúng: tạo expression trước, rồi cho feature tham chiếu tên expression thay vì số cố định.
Mô hình tham số hóa bằng expressionCác bước thực hiện
- Tạo expression kích thước. dai, rong, cao kèm đơn vị mm.
- Dựng feature tham chiếu tên. Truyền chuỗi tên expression vào SetOriginAndLengths.
- Sửa expression. Edit rồi cập nhật mô hình.
- Kiểm tra hộp bao mới. Đo lại kích thước.
- Khôi phục. Đặt lại kích thước ban đầu.
Code tham khảo (Python)
import NXOpen def tao_expression(part, ten, gia_tri): mm = part.UnitCollection.FindObject("MilliMeter") return part.Expressions.CreateWithUnits("%s = %g" % (ten, gia_tri), mm) def tao_khoi_tham_so(part): tao_expression(part, "dai", 100.0) tao_expression(part, "rong", 60.0) tao_expression(part, "cao", 25.0) b = part.Features.CreateBlockFeatureBuilder(NXOpen.Features.Feature.Null) try: b.Type = NXOpen.Features.BlockFeatureBuilder.Types.OriginAndEdgeLengths b.SetOriginAndLengths(NXOpen.Point3d(0, 0, 0), "dai", "rong", "cao") # tên expression, không phải số return b.CommitFeature() finally: b.Destroy() def hop_bao(body): xs, ys, zs = [], [], [] for e in body.GetEdges(): for p in e.GetVertices(): xs.append(p.X); ys.append(p.Y); zs.append(p.Z) return max(xs) - min(xs), max(ys) - min(ys), max(zs) - min(zs) def sua_kich_thuoc(session, part, ten, gia_tri): mark = session.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Sua " + ten) part.Expressions.Edit(part.Expressions.FindObject(ten), str(gia_tri)) loi = session.UpdateManager.DoUpdate(mark) session.DeleteUndoMark(mark, "Sua " + ten) return loi def main(): session = NXOpen.Session.GetSession() lw = session.ListingWindow lw.Open() part = session.Parts.Work if part is None: return session.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Khoi tham so") tao_khoi_tham_so(part) body = [b for b in part.Bodies if b.IsSolidBody][-1] lw.WriteLine("Ban đầu : %.1f x %.1f x %.1f" % hop_bao(body)) sua_kich_thuoc(session, part, "dai", 150) sua_kich_thuoc(session, part, "cao", 40) lw.WriteLine("Sau khi sửa: %.1f x %.1f x %.1f" % hop_bao(body)) if __name__ == "__main__": main()Giải thích code
- Truyền chuỗi
"dai"thay vì"100"biến độ dài của khối thành tham chiếu tới expression. - Sau
Edit+DoUpdate, khối tự thay đổi kích thước; không phải tạo lại feature. - Đọc hộp bao trước và sau để xác nhận mô hình đã cập nhật thật.
Lỗi thường gặp
- Tạo expression trùng tên báo lỗi; kiểm tra
FindObjecttrước hoặc dùng tên có tiền tố duy nhất. - Tên expression không được chứa ký tự đặc biệt hay dấu cách; dùng chữ không dấu và gạch dưới.
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.