NX Lab

Liệt kê Expression (biểu thức tham số) của part ra bảng: tên, giá trị, công thức

#Python#Expression1 lượt xem

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

    Câu hỏi ·

    Expression là trái tim của mô hình tham số. Liệt kê chúng ra bảng giúp kiểm tra, so sánh giữa các phiên bản và là bước đầu để sửa hàng loạt.

    Liệt kê Expression (biểu thức tham số) của… Liệt kê Expression (biểu thức tham số) của…

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

    1. Lấy tập expression. part.Expressions là collection duyệt được.
    2. Đọc từng thuộc tính. Name, Value, RightHandSide, Units.
    3. Phân loại. Lọc theo loại Number, String, Point hoặc theo tiền tố tên.
    4. Ẩn expression hệ thống. Bỏ qua các tên p123 do NX tự sinh.
    5. Xuất bảng. In căn lề hoặc ghi CSV.

    Code tham khảo (Python)

    import re
    import NXOpen
    
    def danh_sach_expression(part, bo_qua_he_thong=True):
        ket_qua = []
        for e in part.Expressions:
            if bo_qua_he_thong and re.match(r"^p\d+$", e.Name):
                continue
            ket_qua.append({
                "ten": e.Name,
                "gia_tri": e.Value if e.Type == "Number" else "",
                "cong_thuc": e.RightHandSide,
                "kieu": e.Type,
                "don_vi": e.Units.Name if e.Units is not None else "",
            })
        return sorted(ket_qua, key=lambda x: x["ten"].lower())
    
    def main():
        session = NXOpen.Session.GetSession()
        lw = session.ListingWindow
        lw.Open()
        part = session.Parts.Work
        if part is None:
            lw.WriteLine("Chưa có part")
            return
        lw.WriteLine("%-22s %-12s %-6s %s" % ("Tên", "Giá trị", "Đơn vị", "Công thức"))
        for d in danh_sach_expression(part):
            lw.WriteLine("%-22s %-12s %-6s %s" % (d["ten"], d["gia_tri"], d["don_vi"], d["cong_thuc"]))
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • e.RightHandSide là chuỗi công thức như người dùng nhập (ví dụ width*2).
    • e.Value chỉ có nghĩa với expression dạng số (e.Type == "Number").
    • Lọc bằng regex ^p\d+ (chữ p theo sau là chữ số) bỏ các biến nội bộ của feature (p0, p1, p2...).

    Lỗi thường gặp

    • Expression có thể không có đơn vị (Units là None), luôn kiểm tra trước khi đọc .Name.
    • Tên expression phân biệt chữ hoa/thường khi tìm bằng FindObject; chuẩn hóa tên khi so sánh.

    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.