
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
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…Các bước thực hiện
- Lấy body. Các body đặc của part.
- Duyệt mặt. body.GetFaces() và face.SolidFaceType.
- Duyệt cạnh. body.GetEdges() và edge.SolidEdgeType.
- Đếm bằng Counter. collections.Counter cho gọn.
- 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.SolidFaceTypetrả về enumFaceType(Planar, Cylindrical, Conical, Spherical, ...).Counter.most_common()sắp xếp loại nhiều nhất lên đầu.b.JournalIdentifierlà 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.