
Đùn (Extrude) hình chữ nhật thành khối: Section, Direction và giới hạn
#Python#Extrude1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Extrude là feature dùng nhiều nhất, và cũng là ví dụ điển hình cho cách builder làm việc: section chứa biên dạng, direction chứa hướng, limits chứa khoảng cách.
Đùn (Extrude) hình chữ nhật thành khốiCác bước thực hiện
- Chuẩn bị biên dạng. Danh sách các đường kín làm đầu vào.
- Tạo Section. part.Sections.CreateSection(...) rồi AddToSection với rule curve dumb.
- Đặt hướng. part.Directions.CreateDirection(gốc, vectơ, tùy chọn).
- Đặt giới hạn. Limits.StartExtend và EndExtend gán giá trị RightHandSide.
- Commit. CommitFeature rồi Destroy trong finally.
Code tham khảo (Python)
import NXOpen def chu_nhat(part, rong, cao): pts = [(0, 0), (rong, 0), (rong, cao), (0, cao)] ds = [] for i in range(4): x1, y1 = pts[i] x2, y2 = pts[(i + 1) % 4] ds.append(part.Curves.CreateLine(NXOpen.Point3d(x1, y1, 0), NXOpen.Point3d(x2, y2, 0))) return ds def extrude(part, duong, chieu_cao): builder = part.Features.CreateExtrudeBuilder(NXOpen.Features.Feature.Null) try: section = part.Sections.CreateSection(0.0095, 0.01, 0.5) builder.Section = section rule = part.ScRuleFactory.CreateRuleCurveDumb(duong) section.AddToSection([rule], duong[0], NXOpen.NXObject.Null, NXOpen.NXObject.Null, NXOpen.Point3d(0, 0, 0), NXOpen.Section.Mode.Create, False) builder.Direction = part.Directions.CreateDirection( NXOpen.Point3d(0, 0, 0), NXOpen.Vector3d(0, 0, 1), NXOpen.SmartObject.UpdateOption.WithinModeling) builder.Limits.StartExtend.Value.RightHandSide = "0" builder.Limits.EndExtend.Value.RightHandSide = str(chieu_cao) builder.BooleanOperation.Type = NXOpen.GeometricUtilities.BooleanOperation.BooleanType.Create return builder.CommitFeature() finally: builder.Destroy() def main(): session = NXOpen.Session.GetSession() lw = session.ListingWindow lw.Open() part = session.Parts.Work if part is None: return session.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Extrude") khoi = extrude(part, chu_nhat(part, 60.0, 30.0), 15.0) lw.WriteLine("Đã tạo feature: " + khoi.GetFeatureName()) if __name__ == "__main__": main()Giải thích code
- Ba số trong
CreateSection(chaining, distance, angle)là các dung sai; giá trị trên là giá trị journal NX thường ghi. RightHandSidenhận chuỗi biểu thức, nên có thể truyền tên expression như"chieu_cao".BooleanType.Createtạo body mới; đổi thànhUnitehoặcSubtractđể cộng/trừ với body có sẵn.
Lỗi thường gặp
- Chuỗi đường không kín hoặc có điểm hở khiến
CommitFeaturebáo lỗi biên dạng. - Quên hủy builder sẽ làm rò rỉ tài nguyên; luôn
Destroy()trongfinally.
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.