
Điền khung tên bản vẽ tự động: tạo ghi chú từ thuộc tính mã, vật liệu, tỉ lệ, người vẽ
#Python#Drafting#Attribute1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Điền khung tên bằng tay dễ sai và tốn thời gian. Script đọc thuộc tính của part rồi tạo các ghi chú ở đúng vị trí của khung tên, đảm bảo số liệu luôn khớp với mô hình.
Điền khung tên bản vẽ tự độngCác bước thực hiện
- Đọc thuộc tính. Mã, vật liệu, người thiết kế, REV.
- Xác định ô khung tên. Tọa độ từng ô trên sheet.
- Tạo ghi chú từng ô. AnnotationManager.CreateNote.
- Đặt tên ghi chú. Để lần sau cập nhật thay vì tạo trùng.
- Cập nhật nếu đã có. Xóa và tạo lại theo tên.
Code tham khảo (Python)
import NXOpen KIEU = NXOpen.NXObject.AttributeType # Tọa độ góc dưới trái của từng ô trong khung tên (mm trên sheet A3), điều chỉnh theo mẫu khung tên của bạn O_KHUNG_TEN = { "MA_CHI_TIET": (300.0, 22.0), "VAT_LIEU": (300.0, 14.0), "NGUOI_THIET_KE": (360.0, 22.0), "REV": (360.0, 14.0), } def doc(part, ten): if part.HasUserAttribute(ten, KIEU.String, -1): return part.GetUserAttributeAsString(ten, KIEU.String, -1) return "" def xoa_note_cu(part, ten_note): for n in list(part.Notes): if n.Name == ten_note: NXOpen.Session.GetSession().UpdateManager.AddObjectsToDeleteList([n]) def tao_note(part, ten_note, noi_dung, x, y, co_chu=3.5): ann = part.Annotations chu = ann.Preferences.GetLetteringPreferences() gtext = chu.GetGeneralText() gtext.Size = co_chu chu.SetGeneralText(gtext) ky_hieu = ann.NewUserSymbolPreferences(NXOpen.Annotations.UserSymbolPreferences.SizeType.ScaleAspectRatio, 1.0, 1.0) note = ann.CreateNote([noi_dung or "-"], NXOpen.Point3d(x, y, 0.0), NXOpen.AxisOrientation.Horizontal, chu, ky_hieu) note.SetName(ten_note) return note def main(): session = NXOpen.Session.GetSession() lw = session.ListingWindow lw.Open() part = session.Parts.Work if part is None or part.DrawingSheets.CurrentDrawingSheet is None: lw.WriteLine("Cần part có sheet bản vẽ đang kích hoạt") return mark = session.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Khung ten") for ten, (x, y) in O_KHUNG_TEN.items(): xoa_note_cu(part, "KT_" + ten) session.UpdateManager.DoUpdate(mark) for ten, (x, y) in O_KHUNG_TEN.items(): tao_note(part, "KT_" + ten, doc(part, ten), x, y) lw.WriteLine("Đã điền %d ô khung tên" % len(O_KHUNG_TEN)) if __name__ == "__main__": main()Giải thích code
- Ghi chú được đặt tên
KT_<thuộc tính>nên lần chạy sau tìm và xóa bản cũ trước khi tạo mới, tránh chồng chất. - Tọa độ ô khung tên phụ thuộc mẫu khung tên của công ty; đo một lần rồi đưa vào bảng
O_KHUNG_TEN. - Thuộc tính rỗng được thay bằng dấu
-để thấy ô vẫn có mặt nhưng thiếu dữ liệu.
Lỗi thường gặp
- NX có tính năng tham chiếu thuộc tính trực tiếp trong khung tên (liên kết sống); nếu mẫu khung tên của bạn đã hỗ trợ thì dùng nó thay cho tạo ghi chú rời.
- Cỡ chữ và font phải theo tiêu chuẩn khung tên; kiểm tra bằng in thử một bản.
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.