NX Lab

Đổi Reference Set hàng loạt cho component: chuyển sang MODEL hoặc BODY để nhẹ assembly

#Python#Assembly#Reference Set1 lượt xem

  1. Quản trị viênQuản trị· 0 điểm

    Câu hỏi ·

    Assembly nặng thường vì mọi component đều hiện toàn bộ hình học. Đổi reference set sang tập chỉ gồm thân (BODY) hay một tập nhẹ khác giúp giảm tải đáng kể.

    Đổi Reference Set hàng loạt cho component Đổi Reference Set hàng loạt cho component

    Các bước thực hiện

    1. Chọn component. Theo tên hoặc theo loại part.
    2. Chọn reference set. Tên phải tồn tại trong part của component.
    3. Gọi ReplaceReferenceSet. Từng component hoặc ReplaceReferenceSetInOwners cho danh sách.
    4. Xử lý lỗi. Bỏ qua component không có tập đó.
    5. Báo cáo. Số đổi được và số bỏ qua.

    Code tham khảo (Python)

    import NXOpen
    
    def tat_ca_la(root):
        la, ngan_xep = [], list(root.GetChildren())
        while ngan_xep:
            c = ngan_xep.pop()
            con = c.GetChildren()
            if con:
                ngan_xep.extend(con)
            else:
                la.append(c)
        return la
    
    def doi_reference_set(part, danh_sach, ten_moi):
        da_doi, bo_qua = [], []
        for c in danh_sach:
            if c.ReferenceSet == ten_moi:
                continue
            try:
                part.ComponentAssembly.ReplaceReferenceSet(c, ten_moi)
                da_doi.append(c)
            except NXOpen.NXException as ex:
                bo_qua.append((c.DisplayName, ex.Message))
        return da_doi, bo_qua
    
    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:
            return
        session.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Doi reference set")
        la = tat_ca_la(root)
        da_doi, bo_qua = doi_reference_set(part, la, "BODY")
        lw.WriteLine("Đổi %d / %d component sang reference set BODY" % (len(da_doi), len(la)))
        for ten, msg in bo_qua:
            lw.WriteLine("  Bỏ qua %s: %s" % (ten, msg))
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • Tên reference set là chuỗi, phải khớp chính xác (kể cả chữ hoa/thường) với tên trong part của component.
    • Component đã đúng reference set thì bỏ qua, tránh thao tác thừa.
    • Khi không có tập BODY, NX báo lỗi; bắt từng component để kết quả báo cáo đầy đủ.

    Lỗi thường gặp

    • Reference set Empty làm component biến mất khỏi hiển thị nhưng vẫn nằm trong cây; đừng nhầm với xóa.
    • Thay đổi reference set ảnh hưởng đo đạc và khối lượng của assembly; cân nhắc trước khi tính toán.

    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.