
Bố trí chốt đẩy (ejector pin) theo lưới trên mặt phẳng và loại bỏ vị trí gần biên hoặc gần lỗ
#Python#Khuôn#Hình học1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Chốt đẩy đặt đều trên mặt đáy sản phẩm nhưng phải tránh sát biên và sát lỗ. Hàm sinh lưới điểm rồi lọc theo khoảng cách tối thiểu tới biên và các lỗ, cho danh sách vị trí hợp lệ.
Bố trí chốt đẩy (ejector pin) theo lưới…Các bước thực hiện
- Định nghĩa vùng. Hình chữ nhật đáy sản phẩm.
- Sinh lưới. Bước theo hai trục.
- Lọc theo biên. Cách biên tối thiểu.
- Lọc theo lỗ. Cách tâm lỗ lớn hơn bán kính cộng khoảng an toàn.
- Tạo điểm trong NX. CreatePoint cho từng vị trí đạt.
Code tham khảo (Python)
import math import NXOpen def sinh_luoi(x0, y0, x1, y1, buoc): xs, x = [], x0 while x <= x1 + 1e-9: xs.append(x) x += buoc ys, y = [], y0 while y <= y1 + 1e-9: ys.append(y) y += buoc return [(x, y) for x in xs for y in ys] def loc_vi_tri(diem, vung, cach_bien, lo): """vung = (x0, y0, x1, y1); lo = [(x, y, ban_kinh)]; trả danh sách vị trí hợp lệ.""" x0, y0, x1, y1 = vung kq = [] for (x, y) in diem: if x - x0 < cach_bien or x1 - x < cach_bien or y - y0 < cach_bien or y1 - y < cach_bien: continue if any(math.hypot(x - lx, y - ly) < lr + cach_bien for lx, ly, lr in lo): continue kq.append((x, y)) return kq def main(): session = NXOpen.Session.GetSession() lw = session.ListingWindow lw.Open() part = session.Parts.Work if part is None: return vung = (0.0, 0.0, 120.0, 80.0) lo = [(30.0, 40.0, 6.0), (90.0, 40.0, 6.0)] # lỗ: x, y, bán kính luoi = sinh_luoi(10.0, 10.0, 110.0, 70.0, 20.0) hop_le = loc_vi_tri(luoi, vung, cach_bien=8.0, lo=lo) lw.WriteLine("Lưới %d điểm, hợp lệ %d điểm" % (len(luoi), len(hop_le))) session.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Chot day") for i, (x, y) in enumerate(hop_le, 1): p = part.Points.CreatePoint(NXOpen.Point3d(x, y, 0.0)) p.SetName("CHOT_DAY_%02d" % i) lw.WriteLine("Đã tạo %d điểm chốt đẩy (đặt tên CHOT_DAY_xx)" % len(hop_le)) if __name__ == "__main__": main()Giải thích code
- Vòng
whiledùng+ 1e-9để tránh bỏ sót điểm cuối do sai số số thực. - Mỗi điểm hợp lệ được đặt tên
CHOT_DAY_xx, thuận lợi để các script sau tìm lại và tạo chốt thật. - Tách hàm lọc (thuần Python) khỏi phần tạo điểm trong NX nên test được ngoài NX.
Lỗi thường gặp
- Vị trí chốt đẩy thật phải xét thêm gân, lực đẩy, rãnh làm mát; script chỉ gợi ý phân bố đều.
- Lưới theo đáy chữ nhật không phù hợp với đáy cong hay có bậc; cần lấy hình dạng thật của mặt.
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.