NX Lab

Đọc cây feature của part: tên, kiểu, trạng thái suppress, cha và con của từng feature

#Python#Feature1 lượt xem

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

    Câu hỏi ·

    Muốn sửa mô hình bằng code thì trước hết phải đọc được cây feature. Bài này duyệt toàn bộ feature, in kiểu, thời điểm tạo, trạng thái suppress và các feature cha-con.

    Đọc cây feature của part Đọc cây feature của part

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

    1. Duyệt part.Features. Mỗi phần tử là một Feature, theo thứ tự timestamp.
    2. Đọc định danh. GetFeatureName(), FeatureType và Timestamp.
    3. Đọc trạng thái. Suppressed cho biết feature đang bị suppress.
    4. Đọc quan hệ. GetParents() và GetChildren().
    5. Báo lỗi feature. GetFeatureErrorMessages() để phát hiện feature hỏng.

    Code tham khảo (Python)

    import NXOpen
    
    def mo_ta_feature(f):
        cha = [p.GetFeatureName() for p in f.GetParents()]
        con = [c.GetFeatureName() for c in f.GetChildren()]
        loi = list(f.GetFeatureErrorMessages())
        return {
            "ten": f.GetFeatureName(),
            "kieu": f.FeatureType,
            "thoi_diem": f.Timestamp,
            "suppress": f.Suppressed,
            "cha": cha,
            "con": con,
            "loi": loi,
        }
    
    def main():
        session = NXOpen.Session.GetSession()
        lw = session.ListingWindow
        lw.Open()
        part = session.Parts.Work
        if part is None:
            lw.WriteLine("Chưa có part")
            return
        ds = [mo_ta_feature(f) for f in part.Features]
        lw.WriteLine("Part %s có %d feature" % (part.Leaf, len(ds)))
        lw.WriteLine("%-4s %-28s %-22s %-8s" % ("TS", "Tên", "Kiểu", "Suppress"))
        for d in ds:
            lw.WriteLine("%-4d %-28s %-22s %-8s" % (d["thoi_diem"], d["ten"][:28], d["kieu"][:22], d["suppress"]))
            if d["cha"]:
                lw.WriteLine("       cha: " + ", ".join(d["cha"]))
            if d["con"]:
                lw.WriteLine("       con: " + ", ".join(d["con"]))
            for m in d["loi"]:
                lw.WriteLine("       LỖI: " + m)
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • f.FeatureType là chuỗi kiểu như BLOCK, EXTRUDE, SKETCH, nên rất tiện để lọc theo loại.
    • Timestamp là số thứ tự trong cây; feature có timestamp nhỏ được tạo trước.
    • GetParents() cho biết feature nào phải tồn tại trước; xóa cha sẽ ảnh hưởng con.

    Lỗi thường gặp

    • Cây có hàng nghìn feature làm bảng rất dài; thêm bộ lọc theo FeatureType.
    • Một số feature nội bộ (IsInternal) không hiển thị trong Part Navigator; bỏ qua khi báo cáo cho người dùng.

    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.