Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
3 replies to this topic

#1 victor85

victor85

    biết lệnh stretch

  • Members
  • PipPipPip
  • 169 Bài viết
Điểm đánh giá: 10 (tàm tạm)

Đã gửi 12 October 2011 - 05:22 PM

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 :)
  • 1

#2 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5453 Bài viết
Điểm đánh giá: 2625 (tuyệt vời)

Đã gửi 13 October 2011 - 09:51 AM

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 Hình đã gửi

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))

  • 2

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#3 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 13 October 2011 - 10:39 AM

@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)
  • 4

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#4 victor85

victor85

    biết lệnh stretch

  • Members
  • PipPipPip
  • 169 Bài viết
Điểm đánh giá: 10 (tàm tạm)

Đã gửi 14 October 2011 - 02:34 PM

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!
  • 0