NX Lab

Tròn xoay (Revolve) biên dạng quanh trục: tạo trục, bậc và puli đơn giản

#Python#Revolve1 lượt xem

  1. Quản trị viênQuản trị· 0 điểm

    Câu hỏi ·

    Các chi tiết tròn xoay như trục bậc, puli, nắp đều làm từ Revolve. Bạn cần một biên dạng nửa mặt cắt kín và một trục quay.

    Tròn xoay (Revolve) biên dạng quanh trục Tròn xoay (Revolve) biên dạng quanh trục

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

    1. Vẽ nửa mặt cắt. Polyline kín nằm một phía trục.
    2. Tạo section. Giống Extrude, thêm các đường vào section.
    3. Tạo trục. part.Axes.CreateAxis(điểm, vectơ, tùy chọn).
    4. Đặt góc quay. Limits.StartExtend=0, EndExtend=360.
    5. Commit. CommitFeature.

    Code tham khảo (Python)

    import NXOpen
    
    def duong_kin(part, toa_do):
        """toa_do: danh sách (x, y) trên mặt phẳng XY, nối đầu cuối."""
        ds = []
        n = len(toa_do)
        for i in range(n):
            a, b = toa_do[i], toa_do[(i + 1) % n]
            ds.append(part.Curves.CreateLine(NXOpen.Point3d(a[0], a[1], 0), NXOpen.Point3d(b[0], b[1], 0)))
        return ds
    
    def quay_tron(part, duong, goc_do=360.0):
        builder = part.Features.CreateRevolveBuilder(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)
            # Trục quay: trục X đi qua gốc tọa độ
            builder.Axis = part.Axes.CreateAxis(NXOpen.Point3d(0, 0, 0), NXOpen.Vector3d(1, 0, 0),
                                                NXOpen.SmartObject.UpdateOption.WithinModeling)
            builder.Limits.StartExtend.Value.RightHandSide = "0"
            builder.Limits.EndExtend.Value.RightHandSide = str(goc_do)
            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, "Truc bac")
        # Nửa mặt cắt của trục có 3 đoạn: Ø20 dài 30, Ø30 dài 40, Ø20 dài 30 (bán kính 10, 15, 10)
        mat_cat = [(0, 0), (0, 10), (30, 10), (30, 15), (70, 15), (70, 10), (100, 10), (100, 0)]
        f = quay_tron(part, duong_kin(part, mat_cat))
        lw.WriteLine("Đã tạo trục bậc: " + f.GetFeatureName())
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • Biên dạng gồm cả đoạn nằm trên trục ((100,0) về (0,0)) để chuỗi đường kín.
    • EndExtend ở đây là góc (độ), không phải chiều dài như Extrude.
    • Đổi goc_do thành 180 để tạo nửa mặt tròn xoay.

    Lỗi thường gặp

    • Biên dạng cắt qua trục quay tạo hình tự cắt chính nó và bị NX từ chối.
    • Nhớ bán kính chứ không phải đường kính khi nhập tọa độ biên dạng.

    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.