
Gộp, trừ, giao hai body bằng BooleanBuilder (Unite / Subtract / Intersect)
#Python#Boolean2 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Sau khi có nhiều body, cần gộp hoặc cắt chúng. BooleanBuilder nhận body đích và danh sách body công cụ, kèm tùy chọn giữ lại body gốc hay không.
Gộp, trừ, giao hai body bằng…Các bước thực hiện
- Chọn target. builder.Target = body đích.
- Thêm tool. builder.Tools.Add([body công cụ]).
- Đặt phép toán. builder.Operation = BooleanType.Unite / Subtract / Intersect.
- Tùy chọn giữ body. RetainTarget, RetainTool.
- Commit. CommitFeature rồi Destroy.
Code tham khảo (Python)
import NXOpen BOOL = NXOpen.GeometricUtilities.BooleanOperation.BooleanType def boolean(part, target, tools, phep=BOOL.Unite, giu_tool=False): b = part.Features.CreateBooleanBuilderUsingCollector(NXOpen.Features.Feature.Null) try: b.Operation = phep b.Target = target b.RetainTarget = False b.RetainTool = giu_tool b.Tolerance = 0.01 thu_vien = part.ScCollectors.CreateCollector() thu_vien.ReplaceRules([part.ScRuleFactory.CreateRuleBodyDumb(tools)], False) b.ToolBodyCollector = thu_vien return b.CommitFeature() finally: b.Destroy() 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] lw.WriteLine("Có %d body đặc" % len(solids)) if len(solids) < 2: lw.WriteLine("Cần ít nhất hai body (xem bài trước để tạo)") return session.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Boolean") f = boolean(part, solids[0], solids[1:], BOOL.Unite) lw.WriteLine("Đã gộp: " + f.GetFeatureName()) if __name__ == "__main__": main()Giải thích code
CreateBooleanBuilderUsingCollectordùng collector cho tool body, là cách mà NX hiện đại ghi trong journal.RetainTool = Truegiữ body công cụ nguyên vẹn, hữu ích khi dùng nó cắt nhiều chỗ.Tolerancemặc định thường đủ; tăng nhẹ khi hai body chạm nhau sát mép.
Lỗi thường gặp
- Hai body không giao hoặc không chạm nhau thì Unite báo lỗi hoặc không tạo được.
- Phép Subtract phụ thuộc thứ tự: đổi target và tool sẽ cho kết quả khác hẳ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.