NX Lab

Thuộc tính dạng mảng (nhiều giá trị cùng tiêu đề): ghi chú xử lý nhiệt, danh sách công đoạn

#Python#Attribute1 lượt xem

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

    Câu hỏi ·

    Một số thông tin có nhiều giá trị: danh sách công đoạn gia công, các tiêu chuẩn áp dụng. Thuộc tính mảng của NX dùng chung một tiêu đề với nhiều chỉ số 0, 1, 2...

    Thuộc tính dạng mảng (nhiều giá trị cùng… Thuộc tính dạng mảng (nhiều giá trị cùng…

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

    1. Ghi từng phần tử. SetUserAttribute(title, i, giá trị, option) với i từ 0.
    2. Đọc kích thước mảng. GetUserAttributeSize(title, kiểu).
    3. Đọc từng phần tử. GetUserAttributeAsString(title, kiểu, i).
    4. Thay thế toàn bộ. Xóa thuộc tính rồi ghi lại.
    5. Nối thêm. Ghi tại chỉ số = kích thước hiện tại.

    Code tham khảo (Python)

    import NXOpen
    
    KIEU = NXOpen.NXObject.AttributeType
    NGAY = NXOpen.Update.Option.Now
    
    def ghi_mang(doi_tuong, tieu_de, danh_sach):
        if doi_tuong.HasUserAttribute(tieu_de, KIEU.String, 0):
            doi_tuong.DeleteUserAttribute(KIEU.String, tieu_de, True, NGAY)
        for i, gia_tri in enumerate(danh_sach):
            doi_tuong.SetUserAttribute(tieu_de, i, str(gia_tri), NGAY)
    
    def doc_mang(doi_tuong, tieu_de):
        if not doi_tuong.HasUserAttribute(tieu_de, KIEU.String, 0):
            return []
        n = doi_tuong.GetUserAttributeSize(tieu_de, KIEU.String)
        return [doi_tuong.GetUserAttributeAsString(tieu_de, KIEU.String, i) for i in range(n)]
    
    def them_vao_mang(doi_tuong, tieu_de, gia_tri):
        n = doi_tuong.GetUserAttributeSize(tieu_de, KIEU.String) if doi_tuong.HasUserAttribute(tieu_de, KIEU.String, 0) else 0
        doi_tuong.SetUserAttribute(tieu_de, n, str(gia_tri), NGAY)
    
    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, "Thuoc tinh mang")
        ghi_mang(part, "CONG_DOAN", ["Cat phoi", "Phay mat", "Khoan lo", "Nhiet luyen", "Mai tinh"])
        them_vao_mang(part, "CONG_DOAN", "Kiem tra cuoi")
        for i, ten in enumerate(doc_mang(part, "CONG_DOAN"), 1):
            lw.WriteLine("Công đoạn %d: %s" % (i, ten))
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • Phần tử mảng đánh chỉ số từ 0; -1 chỉ dùng cho thuộc tính không phải mảng.
    • Xóa mảng cũ trước khi ghi giúp tránh còn sót phần tử cũ khi danh sách mới ngắn hơn.
    • GetUserAttributeSize trả số phần tử hiện có.

    Lỗi thường gặp

    • Trộn thuộc tính đơn và mảng cùng tiêu đề gây hành vi khó đoán; dùng tiêu đề riêng cho mảng.
    • Phần tử mảng chỉ hỗ trợ cùng một kiểu dữ liệu.

    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.