
Tính thể tích, diện tích, khối lượng và trọng tâm bằng MeasureManager.NewMassProperties
#Python#Đo đạc1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Khối lượng chi tiết là số liệu quan trọng cho báo giá và kiểm tra thiết kế. NX tính chính xác bằng MeasureManager, bạn chỉ cần đưa đúng danh sách đơn vị.
Tính thể tích, diện tích, khối lượng và…Các bước thực hiện
- Chuẩn bị đơn vị. Diện tích, thể tích, khối lượng, độ dài, và các đơn vị tiếp theo.
- Đặt mật độ. body.Density (kg/mm³ theo đơn vị part) trước khi đo nếu cần khối lượng.
- Gọi NewMassProperties. Nhận danh sách đơn vị, độ chính xác và các body.
- Đọc kết quả. Area, Volume, Mass, Centroid.
- Hủy đối tượng đo. Đối tượng đo là tạm, có thể bỏ qua.
Code tham khảo (Python)
import NXOpen def do_khoi_luong(part, bodies, do_chinh_xac=0.99): uc = part.UnitCollection don_vi = [ uc.FindObject("SquareMilliMeter"), # diện tích uc.FindObject("CubicMilliMeter"), # thể tích uc.FindObject("Kilogram"), # khối lượng uc.FindObject("MilliMeter"), # độ dài uc.FindObject("Kilogram"), # (dự phòng cho các trường khối lượng khác) ] kq = part.MeasureManager.NewMassProperties(don_vi, do_chinh_xac, bodies) try: return { "dien_tich_mm2": kq.Area, "the_tich_mm3": kq.Volume, "khoi_luong_kg": kq.Mass, "trong_tam": (kq.Centroid.X, kq.Centroid.Y, kq.Centroid.Z), } finally: kq.Dispose() if hasattr(kq, "Dispose") else None def main(): session = NXOpen.Session.GetSession() lw = session.ListingWindow lw.Open() part = session.Parts.Work if part is None: return bodies = [b for b in part.Bodies if b.IsSolidBody] if not bodies: lw.WriteLine("Không có body đặc") return # Đặt mật độ thép 7.85e-6 kg/mm3 nếu body chưa có for b in bodies: if b.Density <= 0: b.Density = 7.85e-6 r = do_khoi_luong(part, bodies) lw.WriteLine("Diện tích : %.1f mm2" % r["dien_tich_mm2"]) lw.WriteLine("Thể tích : %.1f mm3" % r["the_tich_mm3"]) lw.WriteLine("Khối lượng : %.4f kg" % r["khoi_luong_kg"]) lw.WriteLine("Trọng tâm : (%.2f, %.2f, %.2f)" % r["trong_tam"]) if __name__ == "__main__": main()Giải thích code
- Mảng đơn vị có thứ tự cố định; nếu thiếu đơn vị NX sẽ báo lỗi, nên truyền đủ và đúng thứ tự như trong journal ghi sẵn.
Densitycủa body theo đơn vị khối lượng trên đơn vị thể tích của part; thép khoảng 7.85e-6 kg/mm³.- Độ chính xác 0.99 là mặc định phổ biến; tăng gần 1 để chính xác hơn nhưng chậm hơn.
Lỗi thường gặp
- Thứ tự và số lượng đơn vị truyền vào có thể khác nhau giữa các phiên bản; hãy so với journal NX ghi ở máy bạn.
- Body chưa gán vật liệu có
Densitybằng 0 nên khối lượng bằng 0; gán mật độ trước.
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.