
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
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…Các bước thực hiện
- Lấy Selection. NXOpen.UI.GetUI().SelectionManager.
- Gọi SelectObjects. Truyền lời nhắc, tiêu đề, phạm vi chọn, cờ feature, cờ giữ highlight.
- Giải nén kết quả. Python trả về tuple (Response, danh sách đối tượng).
- Kiểm tra phản hồi. Response.Ok / ObjectSelected là có chọn, Cancel là hủy.
- 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
SelectObjectscó tham số ra là mảng đối tượng nên Python trả về(Response, objects).SelectionScope.WorkPartchỉ cho chọn trong Work Part; dùngAnyInAssemblyđể chọn cả component.- Kiểm tra
IsBatchvì 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ý
Cancellàm script tiếp tục với danh sách rỗng và báo lỗi khó hiểu. includeFeatures = Truetrả 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.