NX Lab

Đùn (Extrude) hình chữ nhật thành khối: Section, Direction và giới hạn

#Python#Extrude1 lượt xem

  1. 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ối Đùn (Extrude) hình chữ nhật thành khối

    Các bước thực hiện

    1. Chuẩn bị biên dạng. Danh sách các đường kín làm đầu vào.
    2. Tạo Section. part.Sections.CreateSection(...) rồi AddToSection với rule curve dumb.
    3. Đặt hướng. part.Directions.CreateDirection(gốc, vectơ, tùy chọn).
    4. Đặt giới hạn. Limits.StartExtend và EndExtend gán giá trị RightHandSide.
    5. 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.
    • RightHandSide nhận chuỗi biểu thức, nên có thể truyền tên expression như "chieu_cao".
    • BooleanType.Create tạo body mới; đổi thành Unite hoặc Subtract để 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 CommitFeature báo lỗi biên dạng.
    • Quên hủy builder sẽ làm rò rỉ tài nguyên; luôn Destroy() trong finally.

    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.