NX Lab

Vát mép (Chamfer) theo khoảng cách đối xứng cho tập cạnh ở mặt trên khối

#Python#Chamfer2 lượt xem

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

    Câu hỏi ·

    Vát mép các cạnh quanh mặt trên là việc lặp lại hàng ngày. Bài này chọn mọi cạnh nằm ở độ cao Z lớn nhất của khối rồi vát đối xứng cùng một khoảng cách.

    Vát mép (Chamfer) theo khoảng cách đối… Vát mép (Chamfer) theo khoảng cách đối…

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

    1. Lấy cạnh của body. body.GetEdges() trả về mọi cạnh.
    2. Lọc cạnh ở mặt trên. Cạnh có cả hai đỉnh cùng độ cao Z lớn nhất.
    3. Tạo collector. Rule EdgeDumb đưa các cạnh vào ScCollector.
    4. Đặt thông số vát. Method = EdgesAlongFaces, Option = SymmetricOffsets, FirstOffset = khoảng cách.
    5. Commit. CommitFeature rồi Destroy.

    Code tham khảo (Python)

    import NXOpen
    
    def dinh_canh(e):
        a, b = e.GetVertices()           # tham số ra -> Python trả về tuple hai điểm
        return a, b
    
    def canh_mat_tren(body, dung_sai=1e-6):
        canh = body.GetEdges()
        z_max = max(max(dinh_canh(e)[0].Z, dinh_canh(e)[1].Z) for e in canh)
        ket_qua = []
        for e in canh:
            a, b = dinh_canh(e)
            if abs(a.Z - z_max) < dung_sai and abs(b.Z - z_max) < dung_sai:
                ket_qua.append(e)
        return ket_qua
    
    def vat_mep(part, canh, khoang_cach):
        b = part.Features.CreateChamferBuilder(NXOpen.Features.Feature.Null)
        try:
            thu_vien = part.ScCollectors.CreateCollector()
            thu_vien.ReplaceRules([part.ScRuleFactory.CreateRuleEdgeDumb(canh)], False)
            b.SmartCollector = thu_vien
            b.Method = NXOpen.Features.ChamferBuilder.OffsetMethod.EdgesAlongFaces
            b.Option = NXOpen.Features.ChamferBuilder.ChamferOption.SymmetricOffsets
            b.FirstOffset = str(khoang_cach)
            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 part else []
        if not solids:
            lw.WriteLine("Không có khối đặc trong part")
            return
        canh = canh_mat_tren(solids[0])
        lw.WriteLine("Cạnh ở mặt trên: %d" % len(canh))
        if canh:
            session.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Vat mep")
            f = vat_mep(part, canh, 1.5)
            lw.WriteLine("Đã vát C1.5: " + f.GetFeatureName())
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • Điều kiện lọc dùng hai đỉnh cùng độ cao Z lớn nhất nên chỉ chọn cạnh nằm ngang trên cùng.
    • OffsetMethod.EdgesAlongFaces vát theo mặt kế cạnh; ChamferOption.SymmetricOffsets vát hai phía bằng nhau.
    • FirstOffset là chuỗi nên truyền được tên expression, ví dụ "vat_mep".

    Lỗi thường gặp

    • Khoảng vát lớn hơn kích thước cạnh gây lỗi hình học; hãy đặt nhỏ hơn nửa độ dày vật liệu.
    • GetVertices cho tọa độ tuyệt đối của part; với component trong assembly cần đổi hệ tọa độ.

    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.