NX Lab

Tạo Sketch trên mặt phẳng XY bằng SketchInPlaceBuilder rồi vẽ hình chữ nhật

#Python#Sketch1 lượt xem

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

    Câu hỏi ·

    Sketch cho biên dạng có ràng buộc, chỉnh sửa được sau này. Với script, trình tự là: tạo sketch trên mặt phẳng, kích hoạt, thêm hình học, rồi thoát sketch.

    Tạo Sketch trên mặt phẳng XY bằng… Tạo Sketch trên mặt phẳng XY bằng…

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

    1. Tạo mặt phẳng. part.Planes.CreatePlane(gốc, pháp tuyến, tùy chọn cập nhật).
    2. Tạo builder. part.Sketches.CreateSketchInPlaceBuilder2(Sketch.Null).
    3. Gán mặt phẳng và Commit. builder.PlaneReference = plane; sketch = builder.Commit().
    4. Kích hoạt và thêm hình. sketch.Activate(...); sketch.AddGeometry(curve).
    5. Thoát sketch. sketch.Deactivate(ViewReorient.FalseValue, UpdateLevel.Model).

    Code tham khảo (Python)

    import NXOpen
    
    def tao_sketch_xy(part, ten="SKT_CHU_NHAT"):
        builder = part.Sketches.CreateSketchInPlaceBuilder2(NXOpen.Sketch.Null)
        try:
            mat = part.Planes.CreatePlane(NXOpen.Point3d(0, 0, 0), NXOpen.Vector3d(0, 0, 1),
                                          NXOpen.SmartObject.UpdateOption.WithinModeling)
            builder.PlaneReference = mat
            sk = builder.Commit()
        finally:
            builder.Destroy()
        sk.SetName(ten)
        return sk
    
    def ve_chu_nhat_trong_sketch(part, sk, rong, cao):
        sk.Activate(NXOpen.Sketch.ViewReorient.FalseValue)
        try:
            a, b = NXOpen.Point3d(0, 0, 0), NXOpen.Point3d(rong, 0, 0)
            c, d = NXOpen.Point3d(rong, cao, 0), NXOpen.Point3d(0, cao, 0)
            for p, q in ((a, b), (b, c), (c, d), (d, a)):
                duong = part.Curves.CreateLine(p, q)
                sk.AddGeometry(duong, NXOpen.Sketch.InferConstraintsOption.InferCoincidentConstraints)
        finally:
            sk.Deactivate(NXOpen.Sketch.ViewReorient.FalseValue, NXOpen.Sketch.UpdateLevel.Model)
    
    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, "Sketch")
        sk = tao_sketch_xy(part)
        ve_chu_nhat_trong_sketch(part, sk, 60.0, 30.0)
        lw.WriteLine("Sketch %s có %d đối tượng hình học" % (sk.Name, len(sk.GetAllGeometry())))
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • SketchInPlaceBuilder ở NX 12 có nhiều thuộc tính; chỉ cần gán PlaneReference cho trường hợp đơn giản.
    • AddGeometry đưa đường có sẵn vào sketch và có thể tự suy ra ràng buộc trùng điểm.
    • Deactivate với UpdateLevel.Model cập nhật mô hình sau khi thoát sketch.

    Lỗi thường gặp

    • Quên Deactivate để sketch ở trạng thái đang soạn thảo; các lệnh sau có thể báo lỗi.
    • Tên sketch trùng nhau được NX tự thêm hậu tố; hãy đặt tên có ý nghĩa để tìm lại.

    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.