NX Lab

Cho người dùng chọn đối tượng trên màn hình bằng Selection.SelectObjects

#Python#Chọn đối tượng1 lượt xem

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

    Câu hỏi ·

    Script tương tác cần người dùng chỉ vào đối tượng cần xử lý. Selection.SelectObjects hiện hộp thoại chọn chuẩn của NX và trả về danh sách đối tượng đã chọn cùng mã phản hồi.

    Cho người dùng chọn đối tượng trên màn… Cho người dùng chọn đối tượng trên màn…

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

    1. Lấy Selection. NXOpen.UI.GetUI().SelectionManager.
    2. Gọi SelectObjects. Truyền lời nhắc, tiêu đề, phạm vi chọn, cờ feature, cờ giữ highlight.
    3. Giải nén kết quả. Python trả về tuple (Response, danh sách đối tượng).
    4. Kiểm tra phản hồi. Response.Ok / ObjectSelected là có chọn, Cancel là hủy.
    5. Xử lý đối tượng. In kiểu và tên từng đối tượng.

    Code tham khảo (Python)

    import NXOpen
    
    def chon_doi_tuong(thong_diep="Chọn đối tượng cần xử lý", tieu_de="NX Lab"):
        ui = NXOpen.UI.GetUI()
        sel = ui.SelectionManager
        phan_hoi, ds = sel.SelectObjects(
            thong_diep, tieu_de,
            NXOpen.Selection.SelectionScope.WorkPart,
            False,      # includeFeatures: chọn hình học, không chọn feature
            False)      # keepHighlighted
        if phan_hoi in (NXOpen.Selection.Response.Cancel, NXOpen.Selection.Response.Back):
            return []
        return list(ds)
    
    def main():
        session = NXOpen.Session.GetSession()
        lw = session.ListingWindow
        lw.Open()
        if session.IsBatch:
            lw.WriteLine("Script này cần giao diện NX")
            return
        ds = chon_doi_tuong()
        if not ds:
            lw.WriteLine("Người dùng không chọn gì")
            return
        lw.WriteLine("Đã chọn %d đối tượng:" % len(ds))
        for o in ds:
            lw.WriteLine("  %-20s %s" % (o.GetType().Name, o.Name or o.JournalIdentifier))
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • SelectObjects có tham số ra là mảng đối tượng nên Python trả về (Response, objects).
    • SelectionScope.WorkPart chỉ cho chọn trong Work Part; dùng AnyInAssembly để chọn cả component.
    • Kiểm tra IsBatch vì hộp thoại chọn không dùng được khi chạy nền.

    Lỗi thường gặp

    • Không xử lý Cancel làm script tiếp tục với danh sách rỗng và báo lỗi khó hiểu.
    • includeFeatures = True trả về feature thay vì hình học; hãy chọn đúng cho mục đí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.