NX Lab

Đọc toàn bộ thuộc tính của một đối tượng thành dict và hiển thị theo kiểu dữ liệu

#Python#Attribute1 lượt xem

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

    Câu hỏi ·

    Hầu hết script kiểm tra cần đọc hết thuộc tính của part rồi mới quyết định. Hàm đọc chung trả về dict tên -> giá trị Python đã đúng kiểu, dễ so sánh và ghi báo cáo.

    Đọc toàn bộ thuộc tính của một đối tượng… Đọc toàn bộ thuộc tính của một đối tượng…

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

    1. Gọi GetUserAttributes. Trả về mảng AttributeInformation.
    2. Chuyển theo kiểu. Integer, Real, Boolean, Time, String, Reference.
    3. Gom thành dict. Khóa là Title.
    4. Bỏ thuộc tính kế thừa. Tùy chọn lọc Inherited.
    5. In có thứ tự. Sắp xếp theo tên.

    Code tham khảo (Python)

    import NXOpen
    
    KIEU = NXOpen.NXObject.AttributeType
    
    def gia_tri(a):
        if a.Type == KIEU.Integer:
            return a.IntegerValue
        if a.Type == KIEU.Real:
            return a.RealValue
        if a.Type == KIEU.Boolean:
            return a.BooleanValue
        if a.Type == KIEU.Time:
            return a.TimeValue
        if a.Type == KIEU.Reference:
            return a.ReferenceValue
        return a.StringValue
    
    def doc_thuoc_tinh(doi_tuong, bo_ke_thua=False):
        kq = {}
        for a in doi_tuong.GetUserAttributes():
            if bo_ke_thua and a.Inherited:
                continue
            kq[a.Title] = gia_tri(a)
        return kq
    
    def main():
        session = NXOpen.Session.GetSession()
        lw = session.ListingWindow
        lw.Open()
        part = session.Parts.Work
        if part is None:
            return
        tt = doc_thuoc_tinh(part)
        lw.WriteLine("Part %s có %d thuộc tính" % (part.Leaf, len(tt)))
        for ten in sorted(tt):
            lw.WriteLine("  %-24s %-14s %r" % (ten, type(tt[ten]).__name__, tt[ten]))
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • Một lần gọi GetUserAttributes() nhanh hơn gọi HasUserAttribute/Get... cho từng tên.
    • a.Inherited đúng với thuộc tính kế thừa từ đối tượng cha (ví dụ từ part gốc sang occurrence).
    • %r in giá trị dạng biểu diễn Python, giúp phân biệt '5' với 5.

    Lỗi thường gặp

    • Thuộc tính mảng trả về nhiều phần tử cùng Title; hàm trên giữ phần tử cuối. Xử lý mảng riêng ở bài sau.
    • Thuộc tính chưa có giá trị chỉ xuất hiện khi gọi bản GetUserAttributes(True).

    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.