
Duyệt cây assembly đệ quy: in cấu trúc thụt lề với tên component và file part
#Python#Assembly1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Mọi script làm việc với lắp ráp đều bắt đầu bằng việc đi qua cây component. Bài này viết hàm đệ quy duyệt từ RootComponent, in cây thụt lề, và đánh dấu component chưa nạp.
Duyệt cây assembly đệ quyCác bước thực hiện
- Lấy root. part.ComponentAssembly.RootComponent (None nếu part không có component).
- Duyệt con. component.GetChildren() trả về danh sách con trực tiếp.
- Đọc thông tin. DisplayName, ReferenceSet, Prototype (part gốc).
- Đệ quy. Gọi lại hàm với mỗi con, tăng mức thụt lề.
- Đánh dấu chưa nạp. Prototype là None nếu part chưa được nạp.
Code tham khảo (Python)
import NXOpen def in_cay(comp, lw, muc=0, gioi_han=12): if muc > gioi_han: lw.WriteLine(" " * muc + "... (quá sâu, dừng)") return 0 proto = comp.Prototype ten_file = proto.Leaf if proto is not None else "(CHƯA NẠP)" tr = " [suppress]" if comp.IsSuppressed else "" lw.WriteLine("%s%s <%s> RS=%s%s" % (" " * muc, comp.DisplayName, ten_file, comp.ReferenceSet, tr)) dem = 1 for con in comp.GetChildren(): dem += in_cay(con, lw, muc + 1, gioi_han) return dem def main(): session = NXOpen.Session.GetSession() lw = session.ListingWindow lw.Open() part = session.Parts.Display if part is None: lw.WriteLine("Chưa có part") return root = part.ComponentAssembly.RootComponent if root is None: lw.WriteLine("Part %s không phải assembly (không có component)" % part.Leaf) return tong = in_cay(root, lw) lw.WriteLine("Tổng số component (kể cả gốc): %d" % tong) if __name__ == "__main__": main()Giải thích code
RootComponentlà nút gốc đại diện cho chính assembly; các con của nó là component cấp 1.comp.Prototypetrả vềPartthật của component; nếu part chưa nạp thì giá trị làNone.- Giới hạn độ sâu bảo vệ script khỏi cây quá sâu hoặc lỗi tham chiếu vòng.
Lỗi thường gặp
- Assembly lớn có hàng nghìn component: in toàn bộ sẽ rất lâu; thêm bộ lọc theo tên.
- Dùng
Parts.Display(assembly cấp cao nhất) thay vìParts.Workđể lấy gốc cây đúng.
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.