
Tìm component theo mẫu tên (regex) và theo thuộc tính: bộ lọc dùng chung cho mọi script
#Python#Assembly#Tìm kiếm1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Mọi script lắp ráp đều cần chọn đúng nhóm component: toàn bộ bu lông, mọi chi tiết thuộc cụm A. Một bộ lọc dùng chung với regex và hàm điều kiện giúp tái sử dụng ở khắp nơi.
Tìm component theo mẫu tên (regex) và theo…Các bước thực hiện
- Viết hàm duyệt chung. Sinh (generator) mọi component.
- Lọc theo tên. Biểu thức chính quy không phân biệt hoa thường.
- Lọc theo điều kiện. Hàm tùy ý nhận component.
- Kết hợp nhiều bộ lọc. Dùng all() hoặc any().
- Trả về danh sách. Sẵn sàng cho thao tác hàng loạt.
Code tham khảo (Python)
import re import NXOpen def duyet(root): ngan_xep = list(root.GetChildren()) while ngan_xep: c = ngan_xep.pop() yield c ngan_xep.extend(c.GetChildren()) def tim(root, mau_ten=None, dieu_kien=None, ke_ca_suppress=True): rx = re.compile(mau_ten, re.IGNORECASE) if mau_ten else None kq = [] for c in duyet(root): if not ke_ca_suppress and c.IsSuppressed: continue if rx and not rx.search(c.DisplayName): continue if dieu_kien and not dieu_kien(c): continue kq.append(c) return kq def la_chi_tiet_don(c): return len(c.GetChildren()) == 0 and c.Prototype is not None def main(): session = NXOpen.Session.GetSession() lw = session.ListingWindow lw.Open() part = session.Parts.Display root = part.ComponentAssembly.RootComponent if part else None if root is None: return nhom = { "Bu lông/vít": tim(root, r"bolt|screw|bu_?long|vit", la_chi_tiet_don), "Đệm": tim(root, r"washer|dem", la_chi_tiet_don), "Đang bị tắt": tim(root, dieu_kien=lambda c: c.IsSuppressed), "Chưa nạp": tim(root, dieu_kien=lambda c: c.Prototype is None), } for ten, ds in nhom.items(): lw.WriteLine("%-14s : %d" % (ten, len(ds))) if __name__ == "__main__": main()Giải thích code
- Hàm
duyetlà generator nên không tạo danh sách trung gian khổng lồ. timnhận mẫu tên và hàm điều kiện độc lập, kết hợp tùy ý.- Bộ lọc
la_chi_tiet_donloại các assembly con, chỉ giữ chi tiết đơn.
Lỗi thường gặp
- Mẫu như
demkhớp cả chữ 'dem' trong tên khác; chỉnh mẫu chặt hơn (ví dụ^dem_). - Tên hiển thị của component có thể kèm hậu tố instance; chuẩn hóa trước khi so khớp.
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.