
C#: duyệt body, đếm mặt cạnh và in báo cáo — dịch từ bản Python sang C#
#C##NX Open#Hình học1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Cùng một bài toán thống kê hình học như bài Python, nhưng viết bằng C# để thấy rõ khác biệt: kiểu tường minh, tham số ra bằng từ khóa out, và danh sách kiểu mạnh.
C#: duyệt body, đếm mặt cạnh và in báo cáo…Các bước thực hiện
- Duyệt body. foreach (Body b in work.Bodies).
- Lọc body đặc. if (!b.IsSolidBody) continue;
- Đếm theo loại mặt. Dictionary<Face.FaceType, int>.
- Tham số ra. e.GetVertices(out Point3d a, out Point3d b).
- In báo cáo. lw.WriteLine với chuỗi định dạng.
Code tham khảo (C#)
using System; using System.Collections.Generic; using NXOpen; public class ThongKeHinhHoc { public static void Main(string[] args) { Session session = Session.GetSession(); ListingWindow lw = session.ListingWindow; lw.Open(); Part work = session.Parts.Work; if (work == null) { lw.WriteLine("Chưa có Work Part"); return; } foreach (Body b in work.Bodies) { if (!b.IsSolidBody) continue; var matTheoLoai = new Dictionary<Face.FaceType, int>(); foreach (Face f in b.GetFaces()) { int n; matTheoLoai.TryGetValue(f.SolidFaceType, out n); matTheoLoai[f.SolidFaceType] = n + 1; } double tongChieuDaiCanh = 0.0; foreach (Edge e in b.GetEdges()) { tongChieuDaiCanh += e.GetLength(); } lw.WriteLine("Body " + b.JournalIdentifier); foreach (KeyValuePair<Face.FaceType, int> kv in matTheoLoai) { lw.WriteLine(" " + kv.Key + ": " + kv.Value); } lw.WriteLine(" Tổng chiều dài cạnh: " + tongChieuDaiCanh.ToString("F2") + " mm"); } } public static int GetUnloadOption(string dummy) { return (int)Session.LibraryUnloadOption.Immediately; } }Giải thích code
- Trong C#, hàm có tham số ra dùng
out; Python thì trả về tuple. Ví dụGetVerticestrả hai điểm theo cách này. Dictionary<Face.FaceType, int>cho bảng đếm kiểu mạnh; trình dịch bắt lỗi nếu bạn dùng sai kiểu khóa.ToString("F2")làm tròn hai chữ số thập phân.
Lỗi thường gặp
- Kiểu
Face.FaceTypelà enum lồng trongFace; viết đầy đủ tên để trình dịch nhận ra. - Quên
using System.Collections.Genericgây lỗi biên dịch vớiDictionary.
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.