NX Lab

Tạo vỏ mỏng (Shell) bằng ShellBuilder: bỏ mặt trên và đặt độ dày thành

#Python#Shell1 lượt xem

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

    Câu hỏi ·

    Vỏ hộp, nắp, thân bình đều bắt đầu từ khối đặc rồi khoét ruột bằng Shell. Bài này bỏ mặt trên và đặt độ dày thành 2 mm.

    Tạo vỏ mỏng (Shell) bằng ShellBuilder Tạo vỏ mỏng (Shell) bằng ShellBuilder

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

    1. Tìm mặt cần bỏ. Mặt phẳng ở cao nhất.
    2. Tạo collector mặt. Rule FaceDumb từ danh sách mặt.
    3. Tạo ShellBuilder. CreateShellBuilder rồi gán Body, RemovedFacesCollector.
    4. Đặt độ dày. SetDefaultThickness("2").
    5. Commit. CommitFeature.

    Code tham khảo (Python)

    import NXOpen
    
    def mat_cao_nhat(body):
        """Mặt phẳng có các đỉnh cao nhất."""
        tot, z_best = None, -1e18
        for f in body.GetFaces():
            if f.SolidFaceType != NXOpen.Face.FaceType.Planar:
                continue
            zs = [v.Z for e in f.GetEdges() for v in e.GetVertices()]
            if zs and min(zs) > z_best:
                z_best, tot = min(zs), f
        return tot
    
    def tao_vo(part, body, mat_bo, day):
        b = part.Features.CreateShellBuilder(NXOpen.Features.Feature.Null)
        try:
            thu_vien = part.ScCollectors.CreateCollector()
            thu_vien.ReplaceRules([part.ScRuleFactory.CreateRuleFaceDumb([mat_bo])], False)
            b.RemovedFacesCollector = thu_vien
            b.Body = body
            b.SetDefaultThickness(str(day))
            return b.CommitFeature()
        finally:
            b.Destroy()
    
    def main():
        session = NXOpen.Session.GetSession()
        lw = session.ListingWindow
        lw.Open()
        part = session.Parts.Work
        solids = [x for x in part.Bodies if x.IsSolidBody]
        if not solids:
            lw.WriteLine("Không có khối đặc")
            return
        mat = mat_cao_nhat(solids[0])
        if mat is None:
            lw.WriteLine("Không tìm được mặt phẳng để bỏ")
            return
        session.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Shell")
        f = tao_vo(part, solids[0], mat, 2.0)
        lw.WriteLine("Đã tạo vỏ: " + f.GetFeatureName())
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • Mặt 'cao nhất' được xác định bằng giá trị Z nhỏ nhất của các đỉnh trên mặt; mặt trên của hộp thỏa điều kiện.
    • RemovedFacesCollector chứa mặt bị bỏ đi để lộ phần rỗng.
    • SetDefaultThickness nhận chuỗi; có thể truyền tên expression.

    Lỗi thường gặp

    • Độ dày lớn hơn một nửa kích thước nhỏ nhất của khối khiến vỏ tự cắt nhau.
    • Khối có bo tròn nhỏ hơn độ dày thành sẽ khó tạo vỏ; bo sau khi shell hoặc dùng bán kính lớn 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.