NX Lab

Sinh họ trục bậc từ bảng đường kính - chiều dài: revolve tham số và đặt tên file theo thông số

#Python#Tham số#Revolve1 lượt xem

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

    Câu hỏi ·

    Một họ trục có ba đoạn với đường kính và chiều dài khác nhau. Bài này dựng mặt cắt từ các thông số, quay tròn, đặt tên file theo thông số, và sinh cả bảng biến thể.

    Sinh họ trục bậc từ bảng đường kính… Sinh họ trục bậc từ bảng đường kính…

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

    1. Nhận thông số. Danh sách đoạn (đường kính, chiều dài).
    2. Dựng mặt cắt. Điểm theo bán kính và vị trí tích lũy.
    3. Revolve. Quay 360 độ quanh trục X.
    4. Đặt tên file. TRUC_D20_L100.
    5. Lặp qua bảng. Mỗi dòng một trục.

    Code tham khảo (Python)

    import NXOpen
    
    def toa_do_mat_cat(doan):
        """doan = [(duong_kinh, chieu_dai), ...] -> danh sách điểm (x, y) khép kín quanh trục X."""
        tren, x = [(0.0, 0.0)], 0.0
        for dk, dai in doan:
            r = dk / 2.0
            tren.append((x, r))
            x += dai
            tren.append((x, r))
        tren.append((x, 0.0))
        return tren
    
    def duong_kin(part, diem):
        ds = []
        for i in range(len(diem)):
            a, b = diem[i], diem[(i + 1) % len(diem)]
            if abs(a[0] - b[0]) + abs(a[1] - b[1]) < 1e-9:
                continue
            ds.append(part.Curves.CreateLine(NXOpen.Point3d(a[0], a[1], 0.0), NXOpen.Point3d(b[0], b[1], 0.0)))
        return ds
    
    def quay_tron(part, duong):
        b = part.Features.CreateRevolveBuilder(NXOpen.Features.Feature.Null)
        try:
            section = part.Sections.CreateSection(0.0095, 0.01, 0.5)
            b.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)
            b.Axis = part.Axes.CreateAxis(NXOpen.Point3d(0, 0, 0), NXOpen.Vector3d(1, 0, 0),
                                          NXOpen.SmartObject.UpdateOption.WithinModeling)
            b.Limits.StartExtend.Value.RightHandSide = "0"
            b.Limits.EndExtend.Value.RightHandSide = "360"
            return b.CommitFeature()
        finally:
            b.Destroy()
    
    def ten_truc(doan):
        tong = sum(d for _, d in doan)
        return "TRUC_" + "_".join("D%g" % dk for dk, _ in doan) + "_L%g" % tong
    
    def main():
        session = NXOpen.Session.GetSession()
        lw = session.ListingWindow
        lw.Open()
        part = session.Parts.Work
        if part is None:
            return
        bien_the = [
            [(20, 30), (30, 40), (20, 30)],
            [(16, 25), (24, 50), (16, 25)],
        ]
        session.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Truc bac")
        for doan in bien_the:
            f = quay_tron(part, duong_kin(part, toa_do_mat_cat(doan)))
            lw.WriteLine("Đã dựng %s (%s)" % (ten_truc(doan), f.GetFeatureName()))
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • toa_do_mat_cat đi lên theo bán kính từng đoạn rồi về trục, tạo đường viền kín.
    • Bỏ qua đoạn có độ dài bằng 0 để không tạo đường suy biến.
    • Hai biến thể ở main dựng trong cùng part để dễ thấy; khi thật nên mỗi biến thể một file (bài trước).

    Lỗi thường gặp

    • Hai biến thể dựng chồng lên nhau trong cùng part cùng một vị trí; dịch hoặc dùng part riêng.
    • Bậc có đường kính liên tiếp bằng nhau tạo đoạn trùng; gộp trước khi 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.