NX Lab

Extrude trừ vật liệu: khoét hốc chữ nhật trên khối bằng Boolean Subtract

#Python#Extrude1 lượt xem

  1. Quản trị viênQuản trị· 0 điểm

    Câu hỏi ·

    Khoét hốc là một thay đổi nhỏ so với đùn tạo khối: chỉ cần đặt kiểu Boolean là Subtract và chỉ định body đích. Bài này khoét hốc sâu 8 mm trên mặt trên khối vừa tạo.

    Extrude trừ vật liệu Extrude trừ vật liệu

    Các bước thực hiện

    1. Tìm body đích. Lấy body đầu tiên của part.
    2. Vẽ biên dạng hốc. Hình chữ nhật nhỏ hơn mặt trên, đặt ở độ cao mặt trên.
    3. Đặt hướng đùn. Hướng xuống -Z để cắt vào khối.
    4. Đặt Boolean Subtract. BooleanType.Subtract và Target = body.
    5. Commit. CommitFeature.

    Code tham khảo (Python)

    import NXOpen
    
    def hinh_chu_nhat(part, x, y, rong, cao, z):
        pts = [(x, y), (x + rong, y), (x + rong, y + cao), (x, y + cao)]
        return [part.Curves.CreateLine(NXOpen.Point3d(*pts[i], z), NXOpen.Point3d(*pts[(i + 1) % 4], z))
                for i in range(4)]
    
    def khoet_hoc(part, body, x, y, rong, cao, z_mat_tren, do_sau):
        duong = hinh_chu_nhat(part, x, y, rong, cao, z_mat_tren)
        builder = part.Features.CreateExtrudeBuilder(NXOpen.Features.Feature.Null)
        try:
            section = part.Sections.CreateSection(0.0095, 0.01, 0.5)
            builder.Section = section
            rule = part.ScRuleFactory.CreateRuleCurveDumb(duong)
            section.AddToSection([rule], duong[0], NXOpen.NXObject.Null, NXOpen.NXObject.Null,
                                 NXOpen.Point3d(0, 0, 0), NXOpen.Section.Mode.Create, False)
            builder.Direction = part.Directions.CreateDirection(
                NXOpen.Point3d(0, 0, z_mat_tren), NXOpen.Vector3d(0, 0, -1),
                NXOpen.SmartObject.UpdateOption.WithinModeling)
            builder.Limits.StartExtend.Value.RightHandSide = "0"
            builder.Limits.EndExtend.Value.RightHandSide = str(do_sau)
            builder.BooleanOperation.Type = NXOpen.GeometricUtilities.BooleanOperation.BooleanType.Subtract
            builder.BooleanOperation.SetTargetBodies([body])
            return builder.CommitFeature()
        finally:
            builder.Destroy()
    
    def main():
        session = NXOpen.Session.GetSession()
        lw = session.ListingWindow
        lw.Open()
        part = session.Parts.Work
        bodies = [b for b in part.Bodies if b.IsSolidBody]
        if not bodies:
            lw.WriteLine("Cần có một khối đặc trong part (xem bài trước)")
            return
        session.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Khoet hoc")
        f = khoet_hoc(part, bodies[0], 10.0, 8.0, 40.0, 14.0, 15.0, 8.0)
        lw.WriteLine("Đã khoét hốc: " + f.GetFeatureName())
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • SetTargetBodies([body]) chỉ định body bị cắt khi Boolean không phải Create.
    • NXOpen.Point3d(*pts[i], z) giải nén tuple rồi thêm tọa độ Z; cú pháp này cần Python 3.5 trở lên.
    • Độ cao z_mat_tren phải bằng độ cao mặt trên của khối thì hốc mới cắt đúng.

    Lỗi thường gặp

    • Nếu hướng đùn ngược, feature sẽ không cắt vào khối và cho kết quả rỗng hoặc lỗi.
    • Hốc tràn ra ngoài khối làm cắt mất cạnh; luôn kiểm tra kích thước nhỏ hơn mặt trê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.