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

Sửa Auto lisp break trong cad

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

Em chào các bác,

Qua youtube, e có xem được 1 bác tạo và share lisp về lệnh break trong cad rất hay và hữu ích. (link đây ạ : https://www.youtube.com/watch?v=9R7GlOnxTZg )

Để vận dụng cho việc tạo join trong lập trình cnc cho laser, e muốn khoảng break = 1mm thì cần sửa lại code như nào ạ?

Bác nào rành có thể giúp đỡ e được ko?

E gửi đính kèm file code và hình ảnh mong muốn.

Em cảm ơn ạ!!!

Break First - BRF.lsp

br.jpg

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

đoạn mã code đây ạ:

 

(defun c:BRF (/ *Error* osold ob ob1 pt pt1)
(defun *error* (msg)
  (setvar "osmode" osold)
  (princ msg)
  (princ))

  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq osold (getvar "osmode"))
(setvar "osmode" 32)

(while
    (and
        (setq ob1 (car (entsel "Chon doi tuong Break : ")))
        (not (redraw ob1 3))
        (setq pt1 (getpoint "\nChon diem Break : "))
    ); End And

  
      (setq pt (vlax-curve-getClosestPointTo (vlax-ename->vla-object ob1) pt1)
          ob (ssadd ob1))
      (command "break" ob pt pt)
);endwhile
  (setvar "osmode" osold)
  (princ ))

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
50 phút trước, Victory8x đã nói:

e có hỏi rồi nhưng bác ý bảo e lên đây hỏi. bác ý giờ ko viết code nữa

Bác í rửa tay gác kiếm rồi à? chắc viết code chán quá chẳng được gì.

Thấy cái lisp này cũng dễ nên giúp bạn làm phước vậy.

Lisp hỏi thêm điểm thứ 2 để biết hướng break.

BRF.lsp

  • 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
17 phút trước, 7o7 đã nói:

Bác í rửa tay gác kiếm rồi à? chắc viết code chán quá chẳng được gì.

Thấy cái lisp này cũng dễ nên giúp bạn làm phước vậy.

Lisp hỏi thêm điểm thứ 2 để biết hướng break.

BRF.lsp

Quá đẳng cấp.

Cảm ơn bác nhiều ạ!!!

 

 

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 10/12/2022 tại 13:55, 7o7 đã nói:

Bác í rửa tay gác kiếm rồi à? chắc viết code chán quá chẳng được gì.

Thấy cái lisp này cũng dễ nên giúp bạn làm phước vậy.

Lisp hỏi thêm điểm thứ 2 để biết hướng break.

BRF.lsp

Bác ơi, e có dùng 1 thời gian thì e thấy nó phải click 3 lần ( lần 1 - chọn đường; lần 2 - chọn vị trí; lần 3 - chọn hướng), có cách nào sửa dc code để chỉ phải click 1 lần dc luôn ko bác? vì e phải thực hiện nhiều lần trên 1 bản vẽ có nhiều chi tiết, nên e muốn tiết kiêm thời gian. Bác giúp e với ạ...

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

Click 1 lần cũng được nếu quy định điểm 2 ở bên phải hoặc bên trên điểm 1, nhưng cho hỏi đường của bạn là LINE hay POLYLINE?

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
5 phút trước, 7o7 đã nói:

Click 1 lần cũng được nếu quy định điểm 2 ở bên phải hoặc bên trên điểm 1, nhưng cho hỏi đường của bạn là LINE hay POLYLINE?

dạ, quy định ở bên trái hoặc phải của vị trí đưa chuột đến click đều ok ạ, e ko quan trọng chính xác vị trí. Mục đích e chỉ cần 1 điểm break tại khu vực của đường đó >> để e giữ tôn cho khỏi cong vênh lên sau khi cắt ạ. Bác check bản vẽ giúp e xem cho rõ hơn mục đích của e vơi.

5s.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

Bạn thử lisp này xem sao.

(defun c:brf  (/ ang ent poi sel)
  (while (and (setq sel (entsel "\nChon vi tri Break: "))
              (wcmatch (cdr (assoc 0 (entget (setq ent (car sel))))) "*LINE"))
    (setq poi (vlax-curve-getClosestPointTo ent (cadr sel))
          ang (angle '(0 0 0)
                     (vlax-curve-getFirstDeriv ent (vlax-curve-getParamAtPoint ent poi))))
    (command "break" ent "_none" (polar poi ang 0.5) "_none" (polar poi ang -0.5)))
  (princ))

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
21 phút trước, NTHAHT đã nói:

Bạn thử lisp này xem sao.

(defun c:brf  (/ ang ent poi sel)
  (while (and (setq sel (entsel "\nChon vi tri Break: "))
              (wcmatch (cdr (assoc 0 (entget (setq ent (car sel))))) "*LINE"))
    (setq poi (vlax-curve-getClosestPointTo ent (cadr sel))
          ang (angle '(0 0 0)
                     (vlax-curve-getFirstDeriv ent (vlax-curve-getParamAtPoint ent poi))))
    (command "break" ent "_none" (polar poi ang 0.5) "_none" (polar poi ang -0.5)))
  (princ))

Quá ok bác ơi, đúng cái e cần. Bác cho e hỏi chỉnh khe hở đang là 1mm thành 0.5mm thì sửa cái nào bác?

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

Gửi bạn bản này đầy đủ hơn. Hiệu chỉnh khe hở thì ở chỗ số 1 màu đỏ.

(defun c:BR2  (/ *error* cmd ent khe poi sel)
  (defun *error* (msg) (setvar 'CMDECHO cmd) (princ msg) (princ))
  (setq cmd (getvar 'CMDECHO)
        khe 1)
  (setvar 'CMDECHO 0)
  (while (and (setq sel (entsel "\nChon vi tri Break: "))
              (wcmatch (cdr (assoc 0 (entget (setq ent (car sel))))) "*LINE")
              (setq poi (vlax-curve-getClosestPointTo ent (cadr sel))))
    (apply 'vl-cmdf
           (apply 'append
                  (cons (list "break" ent)
                        (mapcar '(lambda (x)
                                   (list "_none"
                                         (vlax-curve-getPointAtDist ent
                                                                    (+ (vlax-curve-getDistAtPoint ent poi) (* x 0.5 khe)))))
                                '(-1 1))))))
  (setvar 'CMDECHO cmd)
  (princ))

  • 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
19 phút trước, NTHAHT đã nói:

Gửi bạn bản này đầy đủ hơn. Hiệu chỉnh khe hở thì ở chỗ số 1 màu đỏ.

(defun c:BR2  (/ *error* cmd ent khe poi sel)
  (defun *error* (msg) (setvar 'CMDECHO cmd) (princ msg) (princ))
  (setq cmd (getvar 'CMDECHO)
        khe 1)
  (setvar 'CMDECHO 0)
  (while (and (setq sel (entsel "\nChon vi tri Break: "))
              (wcmatch (cdr (assoc 0 (entget (setq ent (car sel))))) "*LINE")
              (setq poi (vlax-curve-getClosestPointTo ent (cadr sel))))
    (apply 'vl-cmdf
           (apply 'append
                  (cons (list "break" ent)
                        (mapcar '(lambda (x)
                                   (list "_none"
                                         (vlax-curve-getPointAtDist ent
                                                                    (+ (vlax-curve-getDistAtPoint ent poi) (* x 0.5 khe)))))
                                '(-1 1))))))
  (setvar 'CMDECHO cmd)
  (princ))

Cảm ơn bác rất nhiều!!! quá ok rồi ạ. 

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 22/12/2022 tại 11:22, NTHAHT đã nói:

Gửi bạn bản này đầy đủ hơn. Hiệu chỉnh khe hở thì ở chỗ số 1 màu đỏ.

(defun c:BR2  (/ *error* cmd ent khe poi sel)
  (defun *error* (msg) (setvar 'CMDECHO cmd) (princ msg) (princ))
  (setq cmd (getvar 'CMDECHO)
        khe 1)
  (setvar 'CMDECHO 0)
  (while (and (setq sel (entsel "\nChon vi tri Break: "))
              (wcmatch (cdr (assoc 0 (entget (setq ent (car sel))))) "*LINE")
              (setq poi (vlax-curve-getClosestPointTo ent (cadr sel))))
    (apply 'vl-cmdf
           (apply 'append
                  (cons (list "break" ent)
                        (mapcar '(lambda (x)
                                   (list "_none"
                                         (vlax-curve-getPointAtDist ent
                                                                    (+ (vlax-curve-getDistAtPoint ent poi) (* x 0.5 khe)))))
                                '(-1 1))))))
  (setvar 'CMDECHO cmd)
  (princ))

Bác ơi, lệnh rất ok rồi, nhưng hiện e đang dùng thì e thấy nó ko break được đường tròn, hình như chỉ break được đường thằng và đường chéo hay sao ý. Làm sao để nó break dc đường tròn hay cung tròn hả bác? có sửa dc ko bác? em cảm ơn!

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 28/12/2022 tại 09:44, NTHAHT đã nói:

Chỗ này: "*LINE"

Bạn sửa lại như sau: "ARC,CIRCLE,*LINE"

Là được.

Bác ơi, em dùng rất ok rồi. Bác cho e hỏi : 

Có cách nào làm hiển thị những đoạn break ( = 1 hoặc 0.5mm) đó sáng lên kiểu như bôi đen ko ạ? vì e click nhiều vị trí thỉnh thoảng bỏ sót ấy ạ

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 28/7/2023 tại 14:55, Victory8x đã nói:

Bác ơi, em dùng rất ok rồi. Bác cho e hỏi : 

Có cách nào làm hiển thị những đoạn break ( = 1 hoặc 0.5mm) đó sáng lên kiểu như bôi đen ko ạ? vì e click nhiều vị trí thỉnh thoảng bỏ sót ấy ạ

 

+ Bạn có thể báo các bác viết code chèn thêm Point với : PDMODE =8.

Chèn point ở điểm đầu và cuối đoạn Break :))

Như vậy sẽ dễ dàng phát hiện đoạn nào đã Break.

 

Code thì mình chịu :))) Lâu rồi ko viết, quên hết rồi :v :v

  • 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
Vào lúc 31/7/2023 tại 11:04, No.Star đã nói:

 

+ Bạn có thể báo các bác viết code chèn thêm Point với : PDMODE =8.

Chèn point ở điểm đầu và cuối đoạn Break :))

Như vậy sẽ dễ dàng phát hiện đoạn nào đã Break.

 

Code thì mình chịu :))) Lâu rồi ko viết, quên hết rồi :v :v

Cảm ơn bác đã góp ý. E cũng mù tịt code. không biết có cao nhân nào đi qua đây giúp đỡ e với híc híc

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 31/7/2023 tại 11:04, No.Star đã nói:

 

+ Bạn có thể báo các bác viết code chèn thêm Point với : PDMODE =8.

Chèn point ở điểm đầu và cuối đoạn Break :))

Như vậy sẽ dễ dàng phát hiện đoạn nào đã Break.

 

Code thì mình chịu :))) Lâu rồi ko viết, quên hết rồi :v :v

Liệu có lệnh nào tạo point tự động chỗ điểm break đấy ko bác nhỉ? e chỉ cần thế thôi cũng được

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
19 giờ trước, Victory8x đã nói:

Liệu có lệnh nào tạo point tự động chỗ điểm break đấy ko bác nhỉ? e chỉ cần thế thôi cũng được

NHư thế  này ok chưa bạn

brp.png

Break (BRP)3.lsp

  • 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
4 giờ trước, limfx đã nói:

NHư thế  này ok chưa bạn

brp.png

Break (BRP)3.lsp

Ok Bác. Em hiểu ý bác rồi. Như này sau khi tạo break xong hiển thị ra những mark poin đánh dấu ở vị trí đó -tạo luôn cho nó màu đỏ, khi nào cần xóa dấu đó đi chỉ cần dùng lệnh qse chọn xóa đăc tính màu đỏ đi là ok. Cảm ơn bác rất nhiều. Chúc bác thành công trong cuộc sống ạ!

  • 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
Vào lúc 11/8/2023 tại 17:24, Victory8x đã nói:

Ok Bác. Em hiểu ý bác rồi. Như này sau khi tạo break xong hiển thị ra những mark poin đánh dấu ở vị trí đó -tạo luôn cho nó màu đỏ, khi nào cần xóa dấu đó đi chỉ cần dùng lệnh qse chọn xóa đăc tính màu đỏ đi là ok. Cảm ơn bác rất nhiều. Chúc bác thành công trong cuộc sống ạ!

Nghe bạn sử dụng lệnh QSE để lựa chọn thì đã thấy phiền rồi. 

Bạn nên sử dụng lệnh Filter thì sẽ tốt hơn.

Bạn có thể học cách sử dụng lệnh Filter ở đây : 

 

  • 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

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  

×