NX Lab

Tạo Expression mới có đơn vị: số, chuỗi, logic và công thức tham chiếu expression khác

#Python#Expression1 lượt xem

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

    Câu hỏi ·

    Mô hình tham số tốt dùng expression đặt tên rõ ràng thay vì số cố định trong feature. Script có thể tạo sẵn bộ expression chuẩn cho mọi chi tiết mới.

    Tạo Expression mới có đơn vị Tạo Expression mới có đơn vị

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

    1. Chuẩn bị đơn vị. part.UnitCollection.FindObject("MilliMeter") hoặc "Degrees".
    2. Tạo số có đơn vị. part.Expressions.CreateWithUnits("tên = giá trị", unit).
    3. Tạo chuỗi và logic. CreateExpression("String", ...) và "Boolean".
    4. Tạo công thức. Tham chiếu expression khác: "dien_tich = dai * rong".
    5. Kiểm tra. Đọc lại Value và RightHandSide.

    Code tham khảo (Python)

    import NXOpen
    
    def tao_bo_expression(part):
        mm = part.UnitCollection.FindObject("MilliMeter")
        do = part.UnitCollection.FindObject("Degrees")
        kq = {}
        kq["dai"] = part.Expressions.CreateWithUnits("dai = 120", mm)
        kq["rong"] = part.Expressions.CreateWithUnits("rong = 80", mm)
        kq["goc_vat"] = part.Expressions.CreateWithUnits("goc_vat = 45", do)
        kq["dien_tich"] = part.Expressions.CreateWithUnits("dien_tich = dai * rong",
                                                           part.UnitCollection.FindObject("SquareMilliMeter"))
        kq["vat_lieu"] = part.Expressions.CreateExpression("String", "vat_lieu = \"S45C\"")
        kq["co_ren"] = part.Expressions.CreateExpression("Boolean", "co_ren = true")
        return kq
    
    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, "Tao expression")
        try:
            kq = tao_bo_expression(part)
        except NXOpen.NXException as ex:
            lw.WriteLine("Không tạo được (có thể tên đã tồn tại): " + ex.Message)
            return
        for ten, e in kq.items():
            lw.WriteLine("%-10s [%s] = %s" % (ten, e.Type, e.RightHandSide))
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • CreateWithUnits tạo expression số có đơn vị; tên đơn vị phải khớp tên trong UnitCollection.
    • CreateExpression(kiểu, chuỗi) dùng cho kiểu String, Boolean, Integer, Number.
    • Công thức tham chiếu được expression khác, nên dien_tich tự cập nhật khi đổi dai hoặc rong.

    Lỗi thường gặp

    • Tên expression trùng tên đã có gây NXException; kiểm tra bằng FindObject trước.
    • Tên đơn vị ở bản NX tiếng Việt vẫn là tên tiếng Anh nội bộ; đừng dịch.

    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.