
Nhận dạng lỗ tròn: tìm cạnh tròn khép kín, tính đường kính và tọa độ tâm
#Python#Hình học#Lỗ1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Lập danh sách lỗ của chi tiết (đường kính, vị trí) là bước đầu của kiểm tra bản vẽ và lập chương trình khoan. Một vòng tròn khép kín có chu vi bằng pi lần đường kính nên chỉ cần độ dài cạnh.
Nhận dạng lỗ tròn: tìm cạnh tròn khép kín…Các bước thực hiện
- Chọn cạnh tròn. SolidEdgeType là Circular.
- Tính đường kính. Độ dài cạnh chia cho pi, nếu cạnh khép kín.
- Tính tâm. Dùng Measure hoặc trung bình các đỉnh cung.
- Gom các cạnh cùng đường kính. Dùng dict theo đường kính làm tròn.
- In danh sách. Đường kính, số lượng, tọa độ.
Code tham khảo (Python)
import math from collections import defaultdict import NXOpen def la_duong_tron_kin(e, dung_sai=1e-4): a, b = e.GetVertices() return abs(a.X - b.X) + abs(a.Y - b.Y) + abs(a.Z - b.Z) < dung_sai def tim_lo(body): lo = [] for e in body.GetEdges(): if e.SolidEdgeType != NXOpen.Edge.EdgeType.Circular: continue if not la_duong_tron_kin(e): continue duong_kinh = e.GetLength() / math.pi # chu vi = pi * D a, _ = e.GetVertices() lo.append((round(duong_kinh, 3), (a.X, a.Y, a.Z))) return lo def main(): session = NXOpen.Session.GetSession() lw = session.ListingWindow lw.Open() part = session.Parts.Work if part is None: return nhom = defaultdict(list) for b in part.Bodies: if b.IsSolidBody: for d, p in tim_lo(b): nhom[d].append(p) lw.WriteLine("%-12s %-6s" % ("Đường kính", "Số cạnh tròn")) for d in sorted(nhom): lw.WriteLine("Ø%-11.3f %-6d" % (d, len(nhom[d]))) lw.WriteLine("Lưu ý: mỗi lỗ thông có hai cạnh tròn (hai đầu), lỗ bậc có nhiều hơn.") if __name__ == "__main__": main()Giải thích code
- Cạnh tròn khép kín có hai đỉnh trùng nhau;
la_duong_tron_kinkiểm tra điều đó. - Phép chia chu vi cho
pichỉ đúng với vòng tròn đầy đủ, còn cung tròn thì không. - Vị trí in ra là một điểm trên vòng tròn, không phải tâm; muốn tâm cần thêm tính toán (bài sau).
Lỗi thường gặp
- Lỗ thông có hai cạnh tròn nên số đếm gấp đôi số lỗ thật.
- Mặt trụ ngoài (trục) cũng có cạnh tròn; phân biệt lỗ và trục bằng chiều pháp tuyến mặt trụ (bài nâng cao).
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.