Chuyển đến nội dung
Diễn đàn CADViet
minhmani

(Help) Xin lisp chuyển 2dpline,arc,ellipse thành pline

Các bài được khuyến nghị

Hiện mình đang cần 1 lisp có thể chuyển tất cả các loại nét ( 2Dpline, arc, ellipse...) về thành pline. Mong các cao nhân của diễn đàn giúp đỡ. Xin cảm ơn :D

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Quote

Việc này lệnh cad có thể xử lý, sao bạn không dùng, đừng phụ thuộc vào diễn đàn quá

đúng rồi bác, mấy đường arc, line, 2Dpline thì đơn giản; nhưng mà cái đường elip về pline thì nó cứ phải opset 2 lần mới thành được spline rồi mới chuyển về thành pline được ý bác :D

  • Vote giảm 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
2 giờ trước, minhmani đã nói:

đúng rồi bác, mấy đường arc, line, 2Dpline thì đơn giản; nhưng mà cái đường elip về pline thì nó cứ phải opset 2 lần mới thành được spline rồi mới chuyển về thành pline được ý bác :D

(defun c:te(/ ss)
(setq ss (ssget))
(command "PEDIT" "M" ss "" "Y" "")
  (acet-ss-convert-ellipses-to-plines ss)
  )

 

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Quote

(defun c:te(/ ss) (setq ss (ssget)) (command "PEDIT" "M" ss "" "Y" "") (acet-ss-convert-ellipses-to-plines ss) )

Bác Doan Nguyen Van ơi lisp này của bác k chuyển được đường elip về pline. Bác thử ktra trên bản vẽ này xem

TEST.dwg

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Vào lúc 30/3/2020 tại 10:32, minhmani đã nói:

Hiện mình đang cần 1 lisp có thể chuyển tất cả các loại nét ( 2Dpline, arc, ellipse...) về thành pline. Mong các cao nhân của diễn đàn giúp đỡ. Xin cảm ơn :D

Năm 2009, Thiep có viết lisp này rồi, đã có trong thư viện lisp của cadviet, nhưng cũng chưa ưng ý lắm.

Lisp sau đây Thiep đã hoàn thiện nó, các curve có đoạn bán kính cong lớn thì node sẽ thưa hơn những đoạn có bán kính cong nhỏ.

TB: Xin hỏi minhmani, bản vẽ của bạn dùng phần mềm gì mà bạn có thể vẽ được mặt cắt địa chất công trình như vậy, và dữ liệu đầu vào như thế nào? Có thể share cho mình được không, để học hỏi thêm. (mail: tranthiep66@gmail.com)

(defun DXF (code en) (cdr (assoc code (entget en))))
(defun curve->Lstpo (ent num / LL_UR )
    (setq LL_UR (acet-ent-geomextents ent))
    (ACET-GEOM-SPLINE-POINT-LIST ent
                                 (/ (distance (car LL_UR) (cadr LL_UR)) num)
    )
)
(defun c:c2pl (/ ss lstpo obj)
    (command "undo" "be")
    (acet-error-init '(("cmdecho" 0 "osmode" 0 "PLINEGEN" 1) 1 (acet-ui-status)))
    (acet-ui-status "\nSelect curves to convert it into Lwpolylines" "PROMPT")
    (while (NOT (setq ss (ssget '((0 . "ARC,CIRCLE,ELLIPSE,SPLINE")))))
        (acet-ui-status "\nSelect arn't right, please select curves again" "PROMPT")
    )
    (acet-ui-status)
    (mapcar '(lambda (x)
                 (cond ((wcmatch (acet-dxf 0 (entget x)) "ARC,CIRCLE,ELLIPSE")
                        (acet-Lwpline-make (list (curve->Lstpo x 2020)))
                       )
                       (T (acet-Lwpline-make (list (curve->Lstpo x 3000))))
                 )
                 (setq obj (vlax-ename->vla-object (entlast)))
                 (if (dxf 6 x)(Vla-put-Linetype obj (dxf 6 x)))
                 (if (dxf 48 x)
                     (Vla-put-LinetypeScale obj (dxf 48 x))
                 )
                 (Vla-put-LinetypeGeneration obj :vlax-true)
                 (Vla-put-layer obj (dxf 8 x))
                 (Vla-put-color obj (dxf 62 x))
                 (entdel x)
             )
            (acet-ss-to-list ss)
    )
    (acet-error-restore)
    (command "undo" "en")
    (princ "\nOk")
)

 

  • Like 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Quote

Năm 2009, Thiep có viết lisp này rồi, đã có trong thư viện lisp của cadviet, nhưng cũng chưa ưng ý lắm.

Lisp sau đây Thiep đã hoàn thiện nó, các curve có đoạn bán kính cong lớn thì node sẽ thưa hơn những đoạn có bán kính cong nhỏ.

TB: Xin hỏi minhmani, bản vẽ của bạn dùng phần mềm gì mà bạn có thể vẽ được mặt cắt địa chất công trình như vậy, và dữ liệu đầu vào như thế nào? Có thể share cho mình được không, để học hỏi thêm. (mail: tranthiep66@gmail.com)

Cám ơn bác Thiep rất nhiều, lisp dùng tốt lắm bác. Thực ra cái bản vẽ này là vẽ tay bằng đường spline thôi bác. Xong mình copy cái TD địa chất này vào phần mềm Land của mình thì nó bị biến thành đường ellipse như vậy :D

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Vào lúc 1/4/2020 tại 13:13, thiep đã nói:

Năm 2009, Thiep có viết lisp này rồi, đã có trong thư viện lisp của cadviet, nhưng cũng chưa ưng ý lắm.

Lisp sau đây Thiep đã hoàn thiện nó, các curve có đoạn bán kính cong lớn thì node sẽ thưa hơn những đoạn có bán kính cong nhỏ.

TB: Xin hỏi minhmani, bản vẽ của bạn dùng phần mềm gì mà bạn có thể vẽ được mặt cắt địa chất công trình như vậy, và dữ liệu đầu vào như thế nào? Có thể share cho mình được không, để học hỏi thêm. (mail: tranthiep66@gmail.com)


(defun DXF (code en) (cdr (assoc code (entget en))))
(defun curve->Lstpo (ent num / LL_UR )
    (setq LL_UR (acet-ent-geomextents ent))
    (ACET-GEOM-SPLINE-POINT-LIST ent
                                 (/ (distance (car LL_UR) (cadr LL_UR)) num)
    )
)
(defun c:c2pl (/ ss lstpo obj)
    (command "undo" "be")
    (acet-error-init '(("cmdecho" 0 "osmode" 0 "PLINEGEN" 1) 1 (acet-ui-status)))
    (acet-ui-status "\nSelect curves to convert it into Lwpolylines" "PROMPT")
    (while (NOT (setq ss (ssget '((0 . "ARC,CIRCLE,ELLIPSE,SPLINE")))))
        (acet-ui-status "\nSelect arn't right, please select curves again" "PROMPT")
    )
    (acet-ui-status)
    (mapcar '(lambda (x)
                 (cond ((wcmatch (acet-dxf 0 (entget x)) "ARC,CIRCLE,ELLIPSE")
                        (acet-Lwpline-make (list (curve->Lstpo x 2020)))
                       )
                       (T (acet-Lwpline-make (list (curve->Lstpo x 3000))))
                 )
                 (setq obj (vlax-ename->vla-object (entlast)))
                 (if (dxf 6 x)(Vla-put-Linetype obj (dxf 6 x)))
                 (if (dxf 48 x)
                     (Vla-put-LinetypeScale obj (dxf 48 x))
                 )
                 (Vla-put-LinetypeGeneration obj :vlax-true)
                 (Vla-put-layer obj (dxf 8 x))
                 (Vla-put-color obj (dxf 62 x))
                 (entdel x)
             )
            (acet-ss-to-list ss)
    )
    (acet-error-restore)
    (command "undo" "en")
    (princ "\nOk")
)

 

Anh làm ơn chỉ cho em biết làm sao chạy được lisp này với, cảm ơn anh.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

×