
Tạo phôi (blank) từ hộp bao + lượng dư bằng Block feature để dùng làm WORKPIECE trong CAM
#Python#Phôi#CAM1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
WORKPIECE trong CAM cần một body phôi. Tính hộp bao của chi tiết, cộng lượng dư mỗi phía rồi tạo khối hộp ở đúng vị trí là cách nhanh để có phôi chuẩn cho mọi chi tiết.
Tạo phôi (blank) từ hộp bao + lượng dư…Các bước thực hiện
- Tính hộp bao. Min, max theo ba trục.
- Cộng lượng dư. Dư mỗi phía theo từng trục.
- Tạo khối. BlockFeatureBuilder với gốc là góc nhỏ nhất.
- Đổi tên và layer. Phôi ở layer riêng và tên PHOI.
- Ẩn phôi. Để không che chi tiết.
Code tham khảo (Python)
import NXOpen 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 (min(xs), min(ys), min(zs)), (max(xs), max(ys), max(zs)) def tao_phoi(part, body, du=(2.0, 2.0, 2.0, 2.0, 2.0, 1.0), layer_phoi=10): """du = (xmin, xmax, ymin, ymax, zmin, zmax) lượng dư mỗi phía.""" lo, hi = hop_bao(body) goc = (lo[0] - du[0], lo[1] - du[2], lo[2] - du[4]) dai = (hi[0] + du[1]) - goc[0] rong = (hi[1] + du[3]) - goc[1] cao = (hi[2] + du[5]) - goc[2] b = part.Features.CreateBlockFeatureBuilder(NXOpen.Features.Feature.Null) try: b.Type = NXOpen.Features.BlockFeatureBuilder.Types.OriginAndEdgeLengths b.SetOriginAndLengths(NXOpen.Point3d(*goc), str(dai), str(rong), str(cao)) feat = b.CommitFeature() finally: b.Destroy() phoi = feat.GetBodies()[0] phoi.SetName("PHOI") phoi.Layer = layer_phoi return phoi, (dai, rong, cao) def main(): session = NXOpen.Session.GetSession() lw = session.ListingWindow lw.Open() part = session.Parts.Work solids = [b for b in part.Bodies if b.IsSolidBody and b.Name != "PHOI"] if part else [] if not solids: lw.WriteLine("Không có body chi tiết") return session.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Tao phoi") phoi, kich = tao_phoi(part, solids[0]) lw.WriteLine("Đã tạo phôi %.1f x %.1f x %.1f (layer %d)" % (kich[0], kich[1], kich[2], phoi.Layer)) session.DisplayManager.BlankObjects([phoi]) if __name__ == "__main__": main()Giải thích code
- Lượng dư riêng cho từng phía (sáu số) cho phép dư lớn ở mặt gá, nhỏ ở mặt còn lại.
feat.GetBodies()lấy body sinh ra từ feature để đổi tên và layer.- Ẩn phôi bằng
BlankObjectsđể màn hình chỉ còn chi tiết, nhưng vẫn dùng được cho WORKPIECE.
Lỗi thường gặp
- Hộp bao theo đỉnh cạnh có thể thiếu phần cung tròn lồi; thêm dư an toàn nếu chi tiết có cung lớn.
- Mô hình xoay nghiêng cho phôi thừa lớn; xoay chi tiết về hệ tọa độ gia công trướ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.