
Xóa component khỏi assembly: RemoveComponent và dọn component chưa nạp được
#Python#Assembly1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Dọn assembly trước khi giao hàng thường bao gồm xóa component phụ, component thử nghiệm hay component thiếu file. RemoveComponent làm việc đó, nhưng cần kiểm tra điều kiện trước khi xóa.
Xóa component khỏi assemblyCác bước thực hiện
- Thu thập component. Duyệt cây, chọn component theo điều kiện.
- Xác định điều kiện xóa. Tên có tiền tố TEST_ hoặc part chưa nạp.
- Xác nhận. Hiện danh sách và hỏi người dùng.
- Gọi RemoveComponent. Cho từng component trong danh sách.
- Báo cáo. Số đã xóa và số lỗi.
Code tham khảo (Python)
import NXOpen def tat_ca_component(root): kq, ngan_xep = [], list(root.GetChildren()) while ngan_xep: c = ngan_xep.pop() kq.append(c) ngan_xep.extend(c.GetChildren()) return kq def can_xoa(c): return c.DisplayName.upper().startswith("TEST_") or c.Prototype is None def main(): session = NXOpen.Session.GetSession() lw = session.ListingWindow lw.Open() part = session.Parts.Work root = part.ComponentAssembly.RootComponent if part else None if root is None: lw.WriteLine("Không phải assembly") return ung_vien = [c for c in tat_ca_component(root) if can_xoa(c)] if not ung_vien: lw.WriteLine("Không có component nào cần xóa") return lw.WriteLine("Sẽ xóa %d component:" % len(ung_vien)) for c in ung_vien: lw.WriteLine(" - " + c.DisplayName) if not session.IsBatch: kq = NXOpen.UI.GetUI().NXMessageBox.Show( "Xác nhận", NXOpen.NXMessageBox.DialogType.Question, "Xóa %d component trên?" % len(ung_vien)) if kq != 1: lw.WriteLine("Đã hủy") return session.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Xoa component") da_xoa, loi = 0, 0 for c in ung_vien: try: part.ComponentAssembly.RemoveComponent(c) da_xoa += 1 except NXOpen.NXException: loi += 1 lw.WriteLine("Đã xóa %d, lỗi %d" % (da_xoa, loi)) if __name__ == "__main__": main()Giải thích code
- Xóa component con của một assembly con bị xóa trước có thể làm component sau không còn hợp lệ, nên bắt lỗi từng cái.
- Hộp thoại xác nhận chỉ hiện khi không chạy nền, tránh script treo chờ người.
RemoveComponentchỉ gỡ component khỏi assembly, không xóa file part trên đĩa.
Lỗi thường gặp
- Xóa component bị fix hoặc đang được tham chiếu bởi ràng buộc có thể ném lỗi hoặc làm ràng buộc khác mất tác dụng.
- Component có
PrototypelàNonechưa chắc là lỗi; có thể chỉ chưa nạp. Xác nhận với người dùng trước.
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.