Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
victor85

[Yêu cầu] nhờ viết lisp vẽ LINE và break đối tượng

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

Nhờ các bác viết dùm cái lisp như sau ( áp dụng nhiều cho trường hợp vẽ một đối tượng chèn trên một đối tượng cũ, đối tượng cũ sẽ phải vẽ bằng nét đứt tại các nơi giao nhau - cần break nét liền và thay vào bằng nét đứt):

 

LISP VẼ MỘT LINE MỚI CHÈN TRÊN CÁC LINE ( PLINE ĐÃ CÓ)

LINE MỚI VẼ RA SẼ BREAK CÁC ĐỐI TƯỢNG (mà nó nằm trùng lên) TẠI 2 ĐẦU MÚT CỦA LINE MỚI VẼ.

SAU ĐÓ SẼ XÓA HẾT (OVER KILL) TẤT CẢ CÁC ĐỐI TƯỢNG TRÙNG NẰM DƯỚI LINE MỚI VẼ.

 

+Hình minh họa:

http://www.mediafire...i/Y%20TUONG.dwg

Bác xem có giúp được em không với nhé! Cảm ơn các bác nhiều :)

  • Vote tăng 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

Nhờ các bác viết dùm cái lisp như sau ( áp dụng nhiều cho trường hợp vẽ một đối tượng chèn trên một đối tượng cũ, đối tượng cũ sẽ phải vẽ bằng nét đứt tại các nơi giao nhau - cần break nét liền và thay vào bằng nét đứt):

 

LISP VẼ MỘT LINE MỚI CHÈN TRÊN CÁC LINE ( PLINE ĐÃ CÓ)

LINE MỚI VẼ RA SẼ BREAK CÁC ĐỐI TƯỢNG (mà nó nằm trùng lên) TẠI 2 ĐẦU MÚT CỦA LINE MỚI VẼ.

SAU ĐÓ SẼ XÓA HẾT (OVER KILL) TẤT CẢ CÁC ĐỐI TƯỢNG TRÙNG NẰM DƯỚI LINE MỚI VẼ.

 

+Hình minh họa:

http://www.mediafire...i/Y%20TUONG.dwg

Bác xem có giúp được em không với nhé! Cảm ơn các bác nhiều smile.png

Có phải ý bạn muốn như thế này không?

;Doan Van Ha CADViet.com
(defun C:HA(/ p1 p2 ent)
(setq oldos (getvar "osmode"))
(setq p1 (getpoint "\nDiem 1: "))
(setq p2 (getpoint p1 "\nDiem 2: "))
(setq ent (car (nentselp p1)))
(setvar "osmode" 0)
(command "break" ent p1 p2)
(command "line" p1 p2 "")
(setvar "osmode" oldos)
(princ))

  • Vote tăng 2

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

@Bác ĐVH : code chưa xử lý trường hợp 2, 3 và trượng hợp dưới nó còn có mấy thằng ^^

Theo định nghĩa "chém" những thằng nó đi qua của victor85 thì :

(defun C:HA1(/ p1 p2)
(vl-load-com)
(if (setq p1 (getpoint "\nDiem 1: ")
 p2 (getpoint p1 "\nDiem 2: ")
 ss (acet-ss-to-list (ssget "C" p1 p2 (list (cons 0 "*LINE"))))
 ;ss  (vl-remove-if-not '(lambda(x / ang)(or (equal (setq ang (- (angle p1 p2) (angle (vlax-curve-getStartPoint x)(vlax-curve-getEndPoint x)))) 0)(equal ang pi)))ss )
)
(foreach x ss (command ".break" "_non" x p1 p2))
)
(entmake  (list (cons 0 "LINE")(cons 10 p1)(cons 11 p2)
;(cons 8 "TEN LAYER CHUA NET DUT")
;(cons 62 Mau)
  )
)
)

Victor tự sửa theo ghi chú trong Code, rồi bỏ dấu ; đằng trước dòng đó đi để nó có hiệu lực, hoặc bỏ qua :

- Sửa TEN LAYER CHUA NET DUT thành tên layer chứa nét đứt trong bản vẽ

- Sửa Mau thành màu của Line kẻ

- Bỏ dấu ; ở dòng ;ss (vl-remove-if-not... nếu muốn lisp chỉ xử lý thằng nào cùng phương với vector (p1, p2)

  • Vote tăng 4

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

Thấy bác ĐVH like bác ketxu nên em chỉ load lisp bác ketxu về dùng thôi. Chạy ổn rùi. Bác ketxu nhiệt tình thật. 1000 thanks rùi đấy. Hì. Chúc cadviet ngày càng phát triển mạnh và nổi tiếng hơn nữa!

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

Đăng nhập để thực hiện theo  

×