
Công cụ xuất đa định dạng điều khiển bằng file JSON: chọn định dạng, thư mục, quy tắc tên
#Python#Tổng hợp#Xuất file1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Bài tổng hợp nhóm xuất file: một script đọc cấu hình JSON, chạy lần lượt các định dạng được bật (STEP, PDF, DXF) cho part đang mở và ghi báo cáo. Người dùng chỉ sửa JSON, không động tới code.
Công cụ xuất đa định dạng điều khiển bằng…Các bước thực hiện
- Thiết kế cấu hình. Thư mục ra, định dạng bật, tùy chọn.
- Viết bộ xuất. Hàm riêng cho mỗi định dạng.
- Bảng ánh xạ. Tên định dạng -> hàm.
- Chạy các định dạng đã bật. Có bắt lỗi từng định dạng.
- Báo cáo. Thành công hay lỗi mỗi định dạng.
Code tham khảo (Python)
import json import os import NXOpen CAU_HINH_MAU = { "thu_muc_ra": "D:/NXLab_xuat", "dinh_dang": {"step": True, "pdf": True, "dxf": False}, } def doc_cau_hinh(duong_dan): if os.path.isfile(duong_dan): with open(duong_dan, "r", encoding="utf-8") as f: return json.load(f) os.makedirs(os.path.dirname(duong_dan), exist_ok=True) with open(duong_dan, "w", encoding="utf-8") as f: json.dump(CAU_HINH_MAU, f, ensure_ascii=False, indent=2) return dict(CAU_HINH_MAU) def xuat_step(session, part, ra): cau_hinh = os.path.join(session.GetEnvironmentVariableValue("UGII_BASE_DIR"), "step214ug", "ugstep214.def") c = session.DexManager.CreateStep214Creator() try: c.ExportFrom = NXOpen.Step214Creator.ExportFromOption.ExistingPart c.InputFile, c.OutputFile, c.SettingsFile = part.FullPath, ra + ".stp", cau_hinh c.FileSaveFlag = False c.Commit() finally: c.Destroy() def xuat_pdf(session, part, ra): sheets = list(part.DrawingSheets) if not sheets: raise RuntimeError("Không có sheet bản vẽ") b = part.PlotManager.CreatePrintPdfbuilder() try: b.SourceBuilder.SetSheets(sheets) b.Filename = ra + ".pdf" b.Action = NXOpen.PrintPDFBuilder.ActionOption.Overwrite b.Commit() finally: b.Destroy() def xuat_dxf(session, part, ra): c = session.DexManager.CreateDxfdwgCreator() try: c.ExportFrom = NXOpen.DxfdwgCreator.ExportFromOption.ExistingPart c.InputFile, c.OutputFile = part.FullPath, ra + ".dxf" c.OutputFileType = NXOpen.DxfdwgCreator.OutputFileTypeOption.Dxf c.FileSaveFlag = False c.Commit() finally: c.Destroy() BO_XUAT = {"step": xuat_step, "pdf": xuat_pdf, "dxf": xuat_dxf} 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 cfg = doc_cau_hinh("D:/NXLab_cau_hinh/xuat.json") os.makedirs(cfg["thu_muc_ra"], exist_ok=True) ra = "%s/%s" % (cfg["thu_muc_ra"].rstrip("/"), os.path.splitext(part.Leaf)[0]) for ten, bat in cfg["dinh_dang"].items(): if not bat: continue try: BO_XUAT[ten](session, part, ra) lw.WriteLine("[OK ] " + ten) except Exception as ex: lw.WriteLine("[LỖI] %s: %s" % (ten, ex)) if __name__ == "__main__": main()Giải thích code
BO_XUATlà bảng ánh xạ tên định dạng với hàm; thêm định dạng mới chỉ cần viết hàm và thêm một dòng.- Mỗi định dạng có
try/exceptriêng nên một định dạng lỗi không chặn các định dạng khác. - Lần đầu chạy script tự tạo file JSON mẫu để người dùng chỉnh.
Lỗi thường gặp
- File cấu hình sai tên định dạng gây
KeyError; kiểm tra tên trước khi gọi. - Part chưa lưu có
FullPathcũ hoặc rỗng; hãy lưu trước khi xuất theoExistingPart.
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.