
Sao chép component trong cùng assembly bằng CopyComponents và đổi tên bản sao
#Python#Assembly1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Khi cần thêm nhiều bản cùng loại ở nhánh khác, sao chép component có sẵn nhanh hơn việc thêm lại từ file và giữ nguyên reference set, vị trí tương đối.
Sao chép component trong cùng assembly…Các bước thực hiện
- Tìm component nguồn. Theo tên.
- Gọi CopyComponents. Truyền danh sách component, nhận danh sách bản sao.
- Đổi tên bản sao. Dùng SetName hoặc đặt thuộc tính tên instance.
- Dịch chuyển bản sao. MoveComponent để tránh trùng vị trí.
- Kiểm tra. In danh sách bản sao.
Code tham khảo (Python)
import NXOpen def ma_tran_don_vi(): m = NXOpen.Matrix3x3() m.Xx, m.Xy, m.Xz = 1.0, 0.0, 0.0 m.Yx, m.Yy, m.Yz = 0.0, 1.0, 0.0 m.Zx, m.Zy, m.Zz = 0.0, 0.0, 1.0 return m def tim(root, ten): ngan_xep = list(root.GetChildren()) while ngan_xep: c = ngan_xep.pop() if c.DisplayName == ten: return c ngan_xep.extend(c.GetChildren()) return None def nhan_ban(part, nguon, so_ban, buoc_x): asm = part.ComponentAssembly ket_qua = [] for i in range(so_ban): ban_sao = asm.CopyComponents([nguon])[0] asm.MoveComponent(ban_sao, NXOpen.Vector3d((i + 1) * buoc_x, 0.0, 0.0), ma_tran_don_vi()) ket_qua.append(ban_sao) return ket_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 nguon = tim(root, "BU_LONG_01") if nguon is None: lw.WriteLine("Không thấy component nguồn") return session.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Nhan ban") ban = nhan_ban(part, nguon, so_ban=3, buoc_x=25.0) for b in ban: lw.WriteLine("Bản sao: " + b.DisplayName) if __name__ == "__main__": main()Giải thích code
CopyComponentsnhận danh sách và trả về danh sách bản sao theo cùng thứ tự.- Mỗi bản sao được dịch thêm
buoc_xso với bản trước bằng vị trí(i + 1) * buoc_x. - Bản sao dùng chung part với bản gốc nên không tăng dung lượng file.
Lỗi thường gặp
- Bản sao sinh ra ở cùng vị trí với nguồn; nếu quên dịch chuyển, các bản chồng lên nhau.
- Component có ràng buộc: bản sao có thể không giữ nguyên ràng buộc; kiểm tra lại sau khi sao ché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.