NX Lab

Bo tròn cạnh (Edge Blend) hàng loạt: chọn cạnh theo điều kiện và bo cùng bán kính

#Python#Edge Blend1 lượt xem

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

    Câu hỏi ·

    Bo tròn mọi cạnh trên một mặt hay mọi cạnh dài hơn ngưỡng là yêu cầu rất thường gặp. Việc khó là chọn tập cạnh bằng code, rồi đưa vào collector của EdgeBlendBuilder.

    Bo tròn cạnh (Edge Blend) hàng loạt Bo tròn cạnh (Edge Blend) hàng loạt

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

    1. Lấy cạnh của body. body.GetEdges().
    2. Lọc theo điều kiện. Ví dụ cạnh thẳng dài hơn 20 mm.
    3. Tạo collector. Rule EdgeDumb từ danh sách cạnh.
    4. Tạo builder. CreateEdgeBlendBuilder rồi AddChainset(collector, bán kính).
    5. Commit. CommitFeature.

    Code tham khảo (Python)

    import NXOpen
    
    def do_dai_canh(e):
        a, b = e.GetVertices()                       # (điểm đầu, điểm cuối) trả về dạng tuple
        return ((a.X - b.X) ** 2 + (a.Y - b.Y) ** 2 + (a.Z - b.Z) ** 2) ** 0.5
    
    def canh_thang_dai(body, nguong):
        ket_qua = []
        for e in body.GetEdges():
            if e.SolidEdgeType == NXOpen.Edge.EdgeType.Linear and do_dai_canh(e) >= nguong:
                ket_qua.append(e)
        return ket_qua
    
    def bo_tron(part, canh, ban_kinh):
        b = part.Features.CreateEdgeBlendBuilder(NXOpen.Features.Feature.Null)
        try:
            thu_vien = part.ScCollectors.CreateCollector()
            thu_vien.ReplaceRules([part.ScRuleFactory.CreateRuleEdgeDumb(canh)], False)
            b.AddChainset(thu_vien, str(ban_kinh))
            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]
        if not solids:
            lw.WriteLine("Không có khối đặc")
            return
        canh = canh_thang_dai(solids[0], 20.0)
        lw.WriteLine("Chọn được %d cạnh" % len(canh))
        if canh:
            session.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Bo tron")
            f = bo_tron(part, canh, 3.0)
            lw.WriteLine("Đã bo R3: " + f.GetFeatureName())
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • e.SolidEdgeType phân loại cạnh (thẳng, cung, spline...), giúp lọc bằng code.
    • GetVertices() có tham số ra, Python trả về tuple hai điểm.
    • AddChainset(collector, "3") bo bán kính 3 cho toàn bộ tập cạnh trong collector.

    Lỗi thường gặp

    • Bán kính lớn hơn khoảng hở của mặt kế bên làm NX báo lỗi blend; thử giảm bán kính.
    • Cạnh không cùng tiếp tuyến bị bo chung có thể tạo kết quả xấu ở góc; chia thành nhiều bước nếu cầ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.