NX Lab

Thêm hàng loạt component thành lưới: lắp 12 bu lông theo hàng và cột

#Python#Assembly1 lượt xem

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

    Câu hỏi ·

    Khi cần đặt nhiều bản sao cùng loại chi tiết (bu lông, đệm, chốt) theo lưới, vòng lặp AddComponent đơn giản và dễ hiểu hơn nhiều so với tạo pattern.

    Thêm hàng loạt component thành lưới Thêm hàng loạt component thành lưới

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

    1. Định nghĩa lưới. Số cột, số hàng, bước hai trục, điểm gốc.
    2. Đặt tên duy nhất. BU_LONG_01, BU_LONG_02...
    3. Gọi AddComponent trong vòng lặp. Mỗi lần một vị trí.
    4. Gom kết quả. Danh sách component.
    5. Bắt lỗi từng phần tử. Không để một lỗi dừng cả lưới.

    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 them_luoi(part, duong_dan, so_cot, so_hang, buoc_x, buoc_y, goc=(0.0, 0.0, 0.0), tien_to="BU_LONG"):
        ket_qua, loi = [], []
        stt = 1
        for i in range(so_cot):
            for j in range(so_hang):
                ten = "%s_%02d" % (tien_to, stt)
                p = NXOpen.Point3d(goc[0] + i * buoc_x, goc[1] + j * buoc_y, goc[2])
                try:
                    comp, st = part.ComponentAssembly.AddComponent(duong_dan, "Entire Part", ten, p, ma_tran_don_vi(), 1)
                    st.Dispose()
                    ket_qua.append(comp)
                except NXOpen.NXException as ex:
                    loi.append("%s: %s" % (ten, ex.Message))
                stt += 1
        return ket_qua, loi
    
    def main():
        session = NXOpen.Session.GetSession()
        lw = session.ListingWindow
        lw.Open()
        part = session.Parts.Work
        if part is None:
            return
        session.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Luoi bu long")
        ok, loi = them_luoi(part, "D:/Du_an/chi_tiet/bu_long_m8.prt", so_cot=4, so_hang=3, buoc_x=40.0, buoc_y=30.0)
        lw.WriteLine("Đã thêm %d component, lỗi %d" % (len(ok), len(loi)))
        for l in loi:
            lw.WriteLine("  LỖI " + l)
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • Hai vòng for sinh 4×3 = 12 vị trí; thay so_cot, so_hang để đổi quy mô.
    • Tên component có số thứ tự hai chữ số giúp sắp xếp đúng trong cây.
    • Thêm nhiều bản cùng part chỉ nạp file một lần; các lần sau dùng lại bản trong bộ nhớ.

    Lỗi thường gặp

    • Thêm hàng trăm component trong một lệnh làm cây assembly chậm hẳn; cân nhắc ComponentPattern khi số lượng lớn.
    • Kiểm tra va chạm sau khi đặt: lưới không biết vị trí lỗ thật trên chi tiết.

    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.