NX Lab

Đọc và ghi giá trị các block thông dụng: Integer, Double, String, Toggle, Enumeration

#Python#Block UI Styler1 lượt xem

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

    Câu hỏi ·

    Mỗi loại block có kiểu dữ liệu giá trị khác nhau. Bài này gom các thuộc tính đọc/ghi thường dùng và viết hàm chung lấy toàn bộ giá trị hộp thoại thành một dict.

    Đọc và ghi giá trị các block thông dụng Đọc và ghi giá trị các block thông dụng

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

    1. Integer và Double. Thuộc tính Value; Double còn có MinimumValue, MaximumValue.
    2. String. Thuộc tính Value kiểu chuỗi.
    3. Toggle. Thuộc tính Value kiểu bool.
    4. Enumeration. ValueAsString hoặc Value (chỉ số).
    5. Gom vào dict. Hàm chung dựa trên Object Name.

    Code tham khảo (Python)

    import NXOpen
    import NXOpen.BlockStyler
    
    def doc_gia_tri(hop_thoai, cac_block):
        """cac_block: danh sách (Object Name, kiểu) với kiểu thuộc: 'int', 'double', 'string', 'toggle', 'enum'."""
        kq = {}
        goc = hop_thoai.TopBlock
        for ten, kieu in cac_block:
            b = goc.FindBlock(ten)
            if kieu in ("int", "double", "string", "toggle"):
                kq[ten] = b.Value
            elif kieu == "enum":
                kq[ten] = b.ValueAsString
            else:
                raise ValueError("Kiểu block không hỗ trợ: " + kieu)
        return kq
    
    def ghi_gia_tri(hop_thoai, mac_dinh):
        goc = hop_thoai.TopBlock
        for ten, gia_tri in mac_dinh.items():
            b = goc.FindBlock(ten)
            if isinstance(gia_tri, bool):
                b.Value = gia_tri
            elif isinstance(gia_tri, (int, float, str)):
                b.Value = gia_tri
            else:
                raise ValueError("Không biết cách ghi giá trị cho " + ten)
    
    MAC_DINH = {"integer0": 4, "double0": 12.5, "string0": "Chi tiet moi", "toggle0": True}
    BLOCK = [("integer0", "int"), ("double0", "double"), ("string0", "string"), ("toggle0", "toggle")]
    
    def vi_du_su_dung(hop_thoai):
        ghi_gia_tri(hop_thoai, MAC_DINH)
        return doc_gia_tri(hop_thoai, BLOCK)
    

    Giải thích code

    • Đây là các hàm tiện ích để chép vào lớp hộp thoại ở bài trước, thay cho việc gọi từng block.
    • isinstance(gia_tri, bool) phải kiểm tra trước vì bool là lớp con của int trong Python.
    • ValueAsString của Enumeration trả về nhãn đang chọn; hữu ích hơn chỉ số khi lưu cấu hình.

    Lỗi thường gặp

    • Tên block phân biệt hoa thường và phải khớp Object Name trong file .dlx.
    • Ghi giá trị ngoài khoảng MinimumValue/MaximumValue của DoubleBlock bị NX từ chối hoặc cắt về giới hạ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.