
Tạo điểm bằng Point3d và PointCollection: một điểm, một hàng điểm, một lưới điểm
#Python#Hình học1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Điểm là đối tượng hình học đơn giản nhất và cũng là nền cho gần như mọi thao tác khác. Bài này tạo một điểm, rồi mở rộng thành hàng và lưới điểm có bước chỉnh được.
Tạo điểm bằng Point3d và PointCollectionCác bước thực hiện
- Phân biệt Point3d và Point. Point3d chỉ là bộ ba số (cấu trúc dữ liệu); Point là đối tượng thật nằm trong part.
- Tạo điểm. part.Points.CreatePoint(Point3d) trả về Point; điểm xuất hiện trong mô hình.
- Lặp để tạo hàng. Dùng vòng for với bước cách đều.
- Lặp lồng nhau tạo lưới. Hai vòng for cho trục X và Y.
- Gom vào layer riêng. Giữ các điểm phụ ở layer khác để dễ ẩn.
Code tham khảo (Python)
import NXOpen def tao_diem(part, x, y, z): return part.Points.CreatePoint(NXOpen.Point3d(x, y, z)) def tao_luoi(part, so_cot, so_hang, buoc_x, buoc_y, goc=(0.0, 0.0, 0.0)): diem = [] for i in range(so_cot): for j in range(so_hang): diem.append(tao_diem(part, goc[0] + i * buoc_x, goc[1] + j * buoc_y, goc[2])) return diem 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 mark = session.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Luoi diem") luoi = tao_luoi(part, so_cot=5, so_hang=4, buoc_x=25.0, buoc_y=20.0) lw.WriteLine("Đã tạo %d điểm" % len(luoi)) p = luoi[7] lw.WriteLine("Điểm #7: (%.1f, %.1f, %.1f)" % (p.Coordinates.X, p.Coordinates.Y, p.Coordinates.Z)) if __name__ == "__main__": main()Giải thích code
NXOpen.Point3d(x, y, z)là cấu trúc giá trị; đổiX,Y,Zđược sau khi tạo.CreatePoint(Point3d)tạo điểm không tham số hóa; muốn điểm gắn với biểu thức dùng overload nhậnExpression.p.Coordinatestrả lạiPoint3dđể đọc tọa độ.
Lỗi thường gặp
- Tọa độ luôn theo đơn vị của part (mm hoặc inch), không tự quy đổi.
- Tạo hàng nghìn điểm trong một part làm cây mô hình nặng; xem xét dùng một spline hoặc pattern.
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.