
Giới hạn kiểu đối tượng được chọn bằng MaskTriple: chỉ cho chọn mặt, cạnh hoặc body
#Python#Chọn đối tượng2 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Cho người dùng chọn tự do dễ nhầm. Bộ lọc MaskTriple (type, subtype, solid-body subtype) hạn chế chỉ chọn mặt phẳng, cạnh hay body, giúp script chạy đúng ý.
Giới hạn kiểu đối tượng được chọn bằng…Các bước thực hiện
- Hiểu MaskTriple. Ba số nguyên: type, subtype, solid body subtype (0 là mọi giá trị).
- Tra mã loại. UF_solid_type = 70, subtype UF_solid_body_subtype = 0; UF_solid_edge_subtype = 2 ; face = 3.
- Tạo mảng mask. Danh sách MaskTriple.
- Gọi SelectObjects 8 tham số. Thêm SelectionAction và mảng mask.
- Kiểm tra kết quả. Chỉ nhận đối tượng thuộc loại đã lọc.
Code tham khảo (Python)
import NXOpen UF_SOLID_TYPE = 70 SUBTYPE_BODY = 0 SUBTYPE_FACE = 3 SUBTYPE_EDGE = 2 def chon_mat(thong_diep="Chọn các mặt"): sel = NXOpen.UI.GetUI().SelectionManager mask = [NXOpen.Selection.MaskTriple(UF_SOLID_TYPE, SUBTYPE_FACE, 0)] phan_hoi, ds = sel.SelectObjects( thong_diep, "Chọn mặt", NXOpen.Selection.SelectionScope.WorkPart, NXOpen.Selection.SelectionAction.ClearAndEnableSpecific, False, False, mask) return [] if phan_hoi == NXOpen.Selection.Response.Cancel else list(ds) def chon_canh(thong_diep="Chọn các cạnh"): sel = NXOpen.UI.GetUI().SelectionManager mask = [NXOpen.Selection.MaskTriple(UF_SOLID_TYPE, SUBTYPE_EDGE, 0)] phan_hoi, ds = sel.SelectObjects( thong_diep, "Chọn cạnh", NXOpen.Selection.SelectionScope.WorkPart, NXOpen.Selection.SelectionAction.ClearAndEnableSpecific, False, False, mask) return [] if phan_hoi == NXOpen.Selection.Response.Cancel else list(ds) def main(): session = NXOpen.Session.GetSession() lw = session.ListingWindow lw.Open() mat = chon_mat() lw.WriteLine("Đã chọn %d mặt" % len(mat)) for f in mat: lw.WriteLine(" mặt loại %s" % f.SolidFaceType) if __name__ == "__main__": main()Giải thích code
- Các mã type/subtype lấy từ tài liệu
uf_object_types.h; ví dụ trên dùng giá trị phổ biến, hãy đối chiếu với bản NX của bạn. ClearAndEnableSpecificxóa bộ lọc cũ rồi chỉ bật loại đã nêu.- Kết quả là danh sách đối tượng NXOpen đã đúng kiểu (
Face,Edge...), dùng ngay các thuộc tính nhưSolidFaceType.
Lỗi thường gặp
- Mã subtype sai làm không đối tượng nào chọn được; thử bằng cách đọc
UFObj.AskTypeAndSubtypecủa một mặt đã chọn thủ công. - Bộ lọc áp dụng cho lần chọn này; sau khi xong NX trả về bộ lọc mặc đị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.