
Tính hộp bao (bounding box) của body từ đỉnh cạnh: chiều dài, rộng, cao của phôi
#Python#Hình học#Phôi1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Biết kích thước hộp bao của chi tiết là biết cần phôi cỡ nào. Có thể lấy nhanh bằng cách duyệt đỉnh của mọi cạnh và lấy min, max theo ba trục.
Tính hộp bao (bounding box) của body từ…Các bước thực hiện
- Duyệt cạnh. body.GetEdges().
- Lấy đỉnh. edge.GetVertices() trả về hai điểm.
- Tính min, max. Theo ba trục X, Y, Z.
- Thêm lượng dư. Cộng dư gia công cho mỗi phía.
- Làm tròn kích thước phôi. Làm tròn lên bội số của 5 mm.
Code tham khảo (Python)
import math import NXOpen def hop_bao(body): xs, ys, zs = [], [], [] for e in body.GetEdges(): a, b = e.GetVertices() for p in (a, b): xs.append(p.X); ys.append(p.Y); zs.append(p.Z) return (min(xs), min(ys), min(zs)), (max(xs), max(ys), max(zs)) def kich_thuoc_phoi(lo, hi, du_moi_phia=2.0, buoc=5.0): kich = [hi[i] - lo[i] + 2 * du_moi_phia for i in range(3)] return [math.ceil(k / buoc) * buoc for k in kich] def main(): session = NXOpen.Session.GetSession() lw = session.ListingWindow lw.Open() part = session.Parts.Work if part is None: return for b in part.Bodies: if not b.IsSolidBody: continue lo, hi = hop_bao(b) dai, rong, cao = [hi[i] - lo[i] for i in range(3)] lw.WriteLine("Body %s" % b.JournalIdentifier) lw.WriteLine(" Hộp bao : %.2f x %.2f x %.2f" % (dai, rong, cao)) lw.WriteLine(" Phôi đề xuất (dư 2/phía, làm tròn 5): %.0f x %.0f x %.0f" % tuple(kich_thuoc_phoi(lo, hi))) if __name__ == "__main__": main()Giải thích code
- Đỉnh của mọi cạnh nằm trên biên của khối nên min/max đỉnh chính là hộp bao song song trục.
- Mặt trụ lồi ngoài đỉnh có thể làm hộp bao nhỏ hơn thực tế; chi tiết có cung tròn lớn cần xử lý thêm.
math.ceil(k / buoc) * buoclàm tròn lên bội số củabuoc.
Lỗi thường gặp
- Cạnh tròn khép kín có hai đỉnh trùng nhau, và hộp bao có thể thiếu phần cung giữa; dùng thêm điểm giữa cung nếu cần chính xác.
- Hộp bao theo trục tuyệt đối; chi tiết xoay nghiêng cho phôi thừa lớn.
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.