NX Lab

Select Object block: lấy mặt hoặc cạnh người dùng chọn trong hộp thoại và đặt bộ lọc

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

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

    Câu hỏi ·

    Block Select Object cho người dùng chọn hình học ngay trong hộp thoại, giống các lệnh gốc của NX. Từ code lấy danh sách đã chọn và có thể đặt bộ lọc kiểu đối tượng.

    Select Object block Select Object block

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

    1. Thêm block Select Object. Đặt Object Name là select_mat.
    2. Đặt bộ lọc. SetSelectionFilter(action, danh sách MaskTriple).
    3. Lấy đối tượng chọn. GetSelectedObjects() trả về danh sách TaggedObject.
    4. Xử lý trong OK. Đọc danh sách, thực hiện thao tác.
    5. Xóa chọn. SetSelectedObjects([]) khi cần.

    Code tham khảo (Python)

    import NXOpen
    import NXOpen.BlockStyler
    
    UF_SOLID_TYPE = 70
    SUBTYPE_FACE = 3
    
    class HopThoaiChonMat:
        def __init__(self, duong_dan_dlx):
            self.session = NXOpen.Session.GetSession()
            self.ui = NXOpen.UI.GetUI()
            self.hop_thoai = self.ui.CreateDialog(duong_dan_dlx)
            self.hop_thoai.AddInitializeHandler(self.khoi_tao)
            self.hop_thoai.AddOkHandler(self.dong_y)
    
        def khoi_tao(self):
            self.chon = self.hop_thoai.TopBlock.FindBlock("select_mat")
            mask = [NXOpen.Selection.MaskTriple(UF_SOLID_TYPE, SUBTYPE_FACE, 0)]
            self.chon.SetSelectionFilter(NXOpen.Selection.SelectionAction.ClearAndEnableSpecific, mask)
    
        def dong_y(self):
            lw = self.session.ListingWindow
            lw.Open()
            cac_mat = list(self.chon.GetSelectedObjects())
            lw.WriteLine("Đã chọn %d mặt:" % len(cac_mat))
            for f in cac_mat:
                lw.WriteLine("  loại mặt: %s" % f.SolidFaceType)
            return 0
    
        def hien_thi(self):
            try:
                return self.hop_thoai.Show()
            finally:
                self.hop_thoai.Dispose()
    

    Giải thích code

    • SetSelectionFilter thuộc block Select Object và dùng cùng kiểu MaskTriple với SelectObjects.
    • GetSelectedObjects trả về TaggedObject; trong Python dùng được ngay thuộc tính của Face, Edge...
    • GetLastSelectedObjects chỉ cho đối tượng vừa thêm, tiện khi xử lý trong update callback.

    Lỗi thường gặp

    • Chọn trong hộp thoại bị ảnh hưởng bởi 'Selection Scope' của block; kiểm tra thuộc tính phạm vi trong .dlx.
    • Đối tượng chọn sẽ không còn hợp lệ sau khi hộp thoại đóng nếu mô hình bị cập nhật; xử lý ngay trong callback.

    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.