NX Lab

Suppress, Unsuppress và xóa feature bằng UpdateManager: sửa cây feature an toàn

#Python#Feature1 lượt xem

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

    Câu hỏi ·

    Tắt tạm một feature (suppress) để so sánh mô hình hay xóa hẳn một feature đều làm qua code được. Xóa phải đi qua UpdateManager để NX xử lý các feature phụ thuộc.

    Suppress, Unsuppress và xóa feature bằng… Suppress, Unsuppress và xóa feature bằng…

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

    1. Tìm feature theo tên. Duyệt part.Features so sánh GetFeatureName.
    2. Suppress. part.Features.SuppressFeatures([f]) rồi cập nhật.
    3. Unsuppress. part.Features.UnsuppressFeatures([f]).
    4. Xóa feature. session.UpdateManager.AddToDeleteList(f) và DoUpdate(mark).
    5. Kiểm tra kết quả. Đọc lại cây để chắc chắn.

    Code tham khảo (Python)

    import NXOpen
    
    def tim_feature(part, ten):
        for f in part.Features:
            if f.GetFeatureName() == ten:
                return f
        return None
    
    def suppress(part, f):
        part.Features.SuppressFeatures([f])
    
    def unsuppress(part, f):
        part.Features.UnsuppressFeatures([f])
    
    def xoa_feature(session, f):
        """Xóa feature (kèm các feature con phụ thuộc do NX tự xử lý)."""
        mark = session.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Xoa feature")
        session.UpdateManager.AddToDeleteList(f)
        loi = session.UpdateManager.DoUpdate(mark)
        session.DeleteUndoMark(mark, "Xoa feature")
        return loi
    
    def main():
        session = NXOpen.Session.GetSession()
        lw = session.ListingWindow
        lw.Open()
        part = session.Parts.Work
        if part is None:
            return
        ten_can_tim = "BLOCK(1)"             # đổi thành tên feature có trong part của bạn
        f = tim_feature(part, ten_can_tim)
        if f is None:
            lw.WriteLine("Không thấy feature: " + ten_can_tim)
            for x in part.Features:
                lw.WriteLine("  - " + x.GetFeatureName())
            return
        session.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Suppress thu")
        suppress(part, f)
        lw.WriteLine("Đã suppress: %s (Suppressed=%s)" % (f.GetFeatureName(), f.Suppressed))
        unsuppress(part, f)
        lw.WriteLine("Đã bỏ suppress: %s (Suppressed=%s)" % (f.GetFeatureName(), f.Suppressed))
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • SuppressFeatures và UnsuppressFeatures nhận danh sách, nên tắt nhiều feature trong một lần gọi.
    • AddToDeleteList chỉ đánh dấu; thay đổi chỉ có hiệu lực sau DoUpdate.
    • DoUpdate trả về mã lỗi; giá trị khác 0 nghĩa là cập nhật gặp vấn đề.

    Lỗi thường gặp

    • Xóa feature cha sẽ kéo theo mất hoặc lỗi feature con; liệt kê GetChildren() trước khi xóa.
    • Tên feature (như BLOCK(1)) phụ thuộc thứ tự tạo và ngôn ngữ; để chắc chắn hãy lọc theo FeatureType.

    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.