
Đọc vị trí component bằng GetPosition và di chuyển bằng MoveComponent
#Python#Assembly1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Biết vị trí hiện tại của component và dịch chuyển nó là thao tác nền của mọi script điều khiển lắp ráp. Vị trí gồm điểm gốc và ma trận định hướng, còn di chuyển nhận vectơ tịnh tiến và ma trận quay.
Đọc vị trí component bằng GetPosition và…Các bước thực hiện
- Đọc vị trí. comp.GetPosition() trả về (điểm, ma trận).
- Chuẩn bị chuyển vị. Vectơ tịnh tiến và ma trận quay (đơn vị nếu chỉ dịch chuyển).
- Gọi MoveComponent. part.ComponentAssembly.MoveComponent(comp, vectơ, ma trận).
- Kiểm tra vị trí mới. Đọc lại GetPosition.
- Hoàn tác khi cần. Dùng Undo Mark.
Code tham khảo (Python)
import NXOpen def ma_tran_don_vi(): m = NXOpen.Matrix3x3() m.Xx, m.Xy, m.Xz = 1.0, 0.0, 0.0 m.Yx, m.Yy, m.Yz = 0.0, 1.0, 0.0 m.Zx, m.Zy, m.Zz = 0.0, 0.0, 1.0 return m def tim_component(part, ten): root = part.ComponentAssembly.RootComponent if root is None: return None ngan_xep = list(root.GetChildren()) while ngan_xep: c = ngan_xep.pop() if c.DisplayName == ten: return c ngan_xep.extend(c.GetChildren()) return None def doc_vi_tri(comp): vt, mt = comp.GetPosition() return vt def dich_chuyen(part, comp, dx, dy, dz): part.ComponentAssembly.MoveComponent(comp, NXOpen.Vector3d(dx, dy, dz), ma_tran_don_vi()) def main(): session = NXOpen.Session.GetSession() lw = session.ListingWindow lw.Open() part = session.Parts.Work comp = tim_component(part, "BU_LONG_01") if part else None if comp is None: lw.WriteLine("Không thấy component BU_LONG_01") return cu = doc_vi_tri(comp) lw.WriteLine("Vị trí cũ: (%.2f, %.2f, %.2f)" % (cu.X, cu.Y, cu.Z)) session.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Di chuyen") dich_chuyen(part, comp, 10.0, 0.0, 5.0) moi = doc_vi_tri(comp) lw.WriteLine("Vị trí mới: (%.2f, %.2f, %.2f)" % (moi.X, moi.Y, moi.Z)) if __name__ == "__main__": main()Giải thích code
GetPositioncó hai tham số ra (điểm và ma trận) nên Python trả về tuple hai phần tử.MoveComponentlà dịch chuyển tương đối so với vị trí hiện tại, không phải đặt tuyệt đối.- Dùng ngăn xếp thay cho đệ quy khi tìm component để tránh tràn ngăn xếp với cây sâu.
Lỗi thường gặp
- Component đã bị ràng buộc cố định hay mate thì MoveComponent có thể bị bỏ qua hoặc kéo theo xung đột.
- Vị trí trả về theo hệ tọa độ tuyệt đối của assembly chứa component.
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.