NX Lab

Duyệt Body: đếm mặt, cạnh theo loại (phẳng, trụ, nón, cầu) và in thống kê

#Python#Hình học#Body1 lượt xem

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

    Câu hỏi ·

    Thống kê hình học là bước đầu của rất nhiều bài toán nhận dạng đặc trưng. Bài này đếm số mặt và cạnh của body theo từng loại để biết chi tiết thiên về dạng nào.

    Duyệt Body: đếm mặt, cạnh theo loại… Duyệt Body: đếm mặt, cạnh theo loại…

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

    1. Lấy body. Các body đặc của part.
    2. Duyệt mặt. body.GetFaces() và face.SolidFaceType.
    3. Duyệt cạnh. body.GetEdges() và edge.SolidEdgeType.
    4. Đếm bằng Counter. collections.Counter cho gọn.
    5. In bảng. Sắp xếp giảm dần theo số lượng.

    Code tham khảo (Python)

    from collections import Counter
    import NXOpen
    
    def thong_ke(body):
        mat = Counter(str(f.SolidFaceType) for f in body.GetFaces())
        canh = Counter(str(e.SolidEdgeType) for e in body.GetEdges())
        return mat, canh
    
    def in_bang(lw, tieu_de, counter):
        lw.WriteLine("-- " + tieu_de + " --")
        for loai, n in counter.most_common():
            lw.WriteLine("  %-24s %5d" % (loai, n))
    
    def main():
        session = NXOpen.Session.GetSession()
        lw = session.ListingWindow
        lw.Open()
        part = session.Parts.Work
        if part is None:
            return
        for b in part.Bodies:
            if not b.IsSolidBody:
                continue
            mat, canh = thong_ke(b)
            lw.WriteLine("=== Body %s: %d mặt, %d cạnh ===" % (b.JournalIdentifier, sum(mat.values()), sum(canh.values())))
            in_bang(lw, "Mặt theo loại", mat)
            in_bang(lw, "Cạnh theo loại", canh)
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • Face.SolidFaceType trả về enum FaceType (Planar, Cylindrical, Conical, Spherical, ...).
    • Counter.most_common() sắp xếp loại nhiều nhất lên đầu.
    • b.JournalIdentifier là tên nhận diện body trong journal, hữu ích khi in báo cáo.

    Lỗi thường gặp

    • Body có hàng chục nghìn mặt (mô hình quét) chạy chậm; chỉ thống kê khi cần.
    • Sheet body không có thể tích; dùng IsSolidBody để phân biệt.

    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.