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

Help .......nhờ các anh viết lisp ....về lệnh trim

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

Trình bày thì ko trình bày, quăng mỗi bản vẽ lên với cái tiêu đề.

Làm như ai đó cũng rảnh mà tải về rồi mở bản vẽ lên, sau đó hỏi bạn yêu cầu này nọ để viết.

Đi nhờ mà làm như bố thiên hạ.

  • Like 1
  • 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

Thôi dù sao trong bản vẽ bạn ý cũng đã trình bày cụ thể vấn đề rồi.

Mình giúp bạn theo cách nhanh nhé:

1. Nếu đa số trường hợp cần cắt của bạn giống như ví dụ thì bạn chỉ cần tạm thời đóng kín pline đỏ lại (nối 2 đầu lại), sau đó dùng EXTRIM, chọn miền trong pline đó là OK.

2. Bạn dùng lệnh TEXTMASK, tuy nhiên nó liên quan đến việc tạo wipeout và không hiện viền wipeout, nếu ý đồ của bạn ko phải vậy thì dùng lệnh này đc.

  • 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

xXin lỗi các bác về điều vô ý trên .  thực tình thì em cũng không cố ý về điều đó .mong các bác thông cảm bỏ qua 

 

 

 

 

 

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

Cảm ơn Bác Duy đã thông cảm và chia sẻ  
Trong trường hợp 2 đã đúng ý của em rồi . còn trường hợp 1 vì nhiều lý do không thể nối ( sau này sẽ mất công tách lớp  ) lên em muốn có 1 lệnh nào đó bo tất cả rồi chọn miền cắt

 

 

 

 

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

 

Hehe, vì dốt lisp nên mình bày cho bạn cách nữa để chữa cháy:

Bạn copy toàn bộ sang 1 bên, 1 bên bạn extrim đường trên, bên kia extrim đường dưới, move lại đúng vị trí, có thể sinh ra 1 vài chỗ bị trùng đối tượng thì giải quyết bằng lệnh OVERKILL để xóa đối tượng trùng nhau.

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

Lâu ngày không viết nên ngứa ngáy tay chân. 

Lisp của bạn đây : Lệnh TRR


(defun c:trr(/ e1 e2 i en)
(defun Tue-geom-divpt (p1 p2 k)
    (polar p1 (angle p1 p2) (* (distance p1 p2) k))
)
(defun Tue-list-tach (lst count / i j Lst-tinh Reslis)
 ;;;;;Ex: (Tue-list-tach '(1 5 4 6 3 5) 2)--> ((1 5) (4 6) (3 5))
 ;;;;;;;;;(Tue-list-tach '(1 5 4 6 3 5) 3)--> ((1 5 4) (6 3 5))
 ;;;;;;;;;(Tue-list-tach '(1 5 4 6 3 5) 5)--> nil
   (setq i 0 j 0)
   (while (and (< i (/ (length lst) count)) (= (rem (length lst) count) 0))
    (Repeat count
      (setq Lst-tinh (append Lst-tinh (list (nth j lst)) ))
      (setq j (1+ j))  
     )
         (setq Reslis (append Reslis (list Lst-tinh))
           Lst-tinh nil)
     (setq i (1+ i))
    )
 Reslis
)
(defun Tue-geom-inters(e1 e2 flag / Lst_tong Lst);;;Tue-list-tach
 ;;; flag= 0 : acExtendNone Does not extend either object.
 ;;; flag= 1 : acExtendThisEntity Extends the base object.
 ;;; flag= 2 : acExtendOtherEntity Extends the object passed as an argument.
 ;;; flag= 3 : acExtendBoth  Extends both objects.
;;Ex: (Tue-geom-inters (ssname (TUE-SS-ENTSEL '((0 . "*LINE,ARC,CIRCLE,ELLIPSE")) "\npick chon doi tuong thu 1 :") 0)
;;;;;;;;;;;;;;;;;;;;;;;(ssname (TUE-SS-ENTSEL '((0 . "*LINE,ARC,CIRCLE,ELLIPSE")) "\npick chon doi tuong thu 2 :") 0) 0)
  (if (= (type e1) 'ENAME) (setq e1 (vlax-ename->vla-object e1)))
  (if (= (type e2) 'ENAME) (setq e2 (vlax-ename->vla-object e2)))
  (Tue-list-tach (vlax-invoke e1 'IntersectWith e2 flag) 3)
)
;;;main
  (setq e1 (car(entsel "\n Chon duong cat 1 :")))
  (setq e2 (car(entsel "\n Chon duong cat 2 :")) i -1)
  (if (setq ss (ssget '((0 . "*LINE,ARC"))))
  (while (setq en (ssname ss (setq i (1+ i))))
    (if (and (= (length (setq p1 (Tue-geom-inters e1 en 0))) 1) (= (length (setq p2 (Tue-geom-inters e2 en 0))) 1))
    (command "._trim" e1 e2 ""
         (Tue-geom-divpt (car p1)  (car p2) 0.5) "")
  )
)
)
  )

 

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

Lâu ngày không viết nên ngứa ngáy tay chân. 

Lisp của bạn đây : Lệnh TRR



(defun c:trr(/ e1 e2 i en)
(defun Tue-geom-divpt (p1 p2 k)
    (polar p1 (angle p1 p2) (* (distance p1 p2) k))
)
(defun Tue-list-tach (lst count / i j Lst-tinh Reslis)
 ;;;;;Ex: (Tue-list-tach '(1 5 4 6 3 5) 2)--> ((1 5) (4 6) (3 5))
 ;;;;;;;;;(Tue-list-tach '(1 5 4 6 3 5) 3)--> ((1 5 4) (6 3 5))
 ;;;;;;;;;(Tue-list-tach '(1 5 4 6 3 5) 5)--> nil
   (setq i 0 j 0)
   (while (and (< i (/ (length lst) count)) (= (rem (length lst) count) 0))
    (Repeat count
      (setq Lst-tinh (append Lst-tinh (list (nth j lst)) ))
      (setq j (1+ j))  
     )
         (setq Reslis (append Reslis (list Lst-tinh))
           Lst-tinh nil)
     (setq i (1+ i))
    )
 Reslis
)
(defun Tue-geom-inters(e1 e2 flag / Lst_tong Lst);;;Tue-list-tach
 ;;; flag= 0 : acExtendNone Does not extend either object.
 ;;; flag= 1 : acExtendThisEntity Extends the base object.
 ;;; flag= 2 : acExtendOtherEntity Extends the object passed as an argument.
 ;;; flag= 3 : acExtendBoth  Extends both objects.
;Ex: (Tue-geom-inters (ssname (TUE-SS-ENTSEL '((0 . "*LINE,ARC,CIRCLE,ELLIPSE")) "\npick chon doi tuong thu 1 :") 0)
;;;;;;;;;;;;;;;;;;;;;;(ssname (TUE-SS-ENTSEL '((0 . "*LINE,ARC,CIRCLE,ELLIPSE")) "\npick chon doi tuong thu 2 :") 0) 0)
  (if (= (type e1) 'ENAME) (setq e1 (vlax-ename->vla-object e1)))
  (if (= (type e2) 'ENAME) (setq e2 (vlax-ename->vla-object e2)))
  (Tue-list-tach (vlax-invoke e1 'IntersectWith e2 flag) 3)
)
;;;main
  (setq e1 (car(entsel "\n Chon duong cat 1 :")))
  (setq e2 (car(entsel "\n Chon duong cat 2 :")) i -1)
  (if (setq ss (ssget '((0 . "*LINE,ARC"))))
  (while (setq en (ssname ss (setq i (1+ i))))
    (if (and (= (length (setq p1 (Tue-geom-inters e1 en 0))) 1) (= (length (setq p2 (Tue-geom-inters e2 en 0))) 1))
    (command "._trim" e1 e2 ""
         (Tue-geom-divpt (car p1)  (car p2) 0.5) "")
  )
)
)
  )

 

Cảm ơn bác Tuệ đã quan tâm . nhưng bác cho em hỏi sao em load lisp lên lại không dùng được ạ  ( em dùng cad 2007 ) . 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
5 giờ trước, Tue_NV đã nói:

Lâu ngày không viết nên ngứa ngáy tay chân. 

Lisp của bạn đây : Lệnh TRR



(defun c:trr(/ e1 e2 i en)
(defun Tue-geom-divpt (p1 p2 k)
    (polar p1 (angle p1 p2) (* (distance p1 p2) k))
)
(defun Tue-list-tach (lst count / i j Lst-tinh Reslis)
 ;;;;;Ex: (Tue-list-tach '(1 5 4 6 3 5) 2)--> ((1 5) (4 6) (3 5))
 ;;;;;;;;;(Tue-list-tach '(1 5 4 6 3 5) 3)--> ((1 5 4) (6 3 5))
 ;;;;;;;;;(Tue-list-tach '(1 5 4 6 3 5) 5)--> nil
   (setq i 0 j 0)
   (while (and (< i (/ (length lst) count)) (= (rem (length lst) count) 0))
    (Repeat count
      (setq Lst-tinh (append Lst-tinh (list (nth j lst)) ))
      (setq j (1+ j))  
     )
         (setq Reslis (append Reslis (list Lst-tinh))
           Lst-tinh nil)
     (setq i (1+ i))
    )
 Reslis
)
(defun Tue-geom-inters(e1 e2 flag / Lst_tong Lst);;;Tue-list-tach
 ;;; flag= 0 : acExtendNone Does not extend either object.
 ;;; flag= 1 : acExtendThisEntity Extends the base object.
 ;;; flag= 2 : acExtendOtherEntity Extends the object passed as an argument.
 ;;; flag= 3 : acExtendBoth  Extends both objects.
;Ex: (Tue-geom-inters (ssname (TUE-SS-ENTSEL '((0 . "*LINE,ARC,CIRCLE,ELLIPSE")) "\npick chon doi tuong thu 1 :") 0)
;;;;;;;;;;;;;;;;;;;;;;(ssname (TUE-SS-ENTSEL '((0 . "*LINE,ARC,CIRCLE,ELLIPSE")) "\npick chon doi tuong thu 2 :") 0) 0)
  (if (= (type e1) 'ENAME) (setq e1 (vlax-ename->vla-object e1)))
  (if (= (type e2) 'ENAME) (setq e2 (vlax-ename->vla-object e2)))
  (Tue-list-tach (vlax-invoke e1 'IntersectWith e2 flag) 3)
)
;;;main
  (setq e1 (car(entsel "\n Chon duong cat 1 :")))
  (setq e2 (car(entsel "\n Chon duong cat 2 :")) i -1)
  (if (setq ss (ssget '((0 . "*LINE,ARC"))))
  (while (setq en (ssname ss (setq i (1+ i))))
    (if (and (= (length (setq p1 (Tue-geom-inters e1 en 0))) 1) (= (length (setq p2 (Tue-geom-inters e2 en 0))) 1))
    (command "._trim" e1 e2 ""
         (Tue-geom-divpt (car p1)  (car p2) 0.5) "")
  )
)
)
  )

 

Bác Tuệ cho em hỏi mình có nhiều đối tượng hơn 2 ( trong lisp) thì có dùng được lisp này không ạ ( bản vẽ bên dưới ạ )

;Ex: (Tue-geom-inters (ssname (TUE-SS-ENTSEL '((0 . "*LINE,ARC,CIRCLE,ELLIPSE")) "\npick chon doi tuong thu 1

:") 0) ;;;;;;;;;;;;;;;;;;;;;;(ssname (TUE-SS-ENTSEL '((0 . "*LINE,ARC,CIRCLE,ELLIPSE")) "\npick chon doi tuong thu 2 :") 0) 0)

EM CẢM ƠN

th.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
10 giờ trước, lethanh2004 đã nói:

Cảm ơn bác Tuệ đã quan tâm . nhưng bác cho em hỏi sao em load lisp lên lại không dùng được ạ  ( em dùng cad 2007 ) . em cảm ơn

bạn thêm dòng (vl-load-com) vào đầu lisp là sử dụng được nhé

Viết thêm code bổ sung chọn nhiều đường cắt màu đỏ 

1./ Chọn các đường cắt màu đỏ

2./ Chọn toàn bộ đường cần cắt. Quét hết (có thể trong đó bao gồm luôn cả đường cắt) thì lisp sẽ hoạt động


(vl-load-com)
(defun c:trr(/ es1 e2 i en j lst-res ss1 ss)
(defun Tue-geom-divpt (p1 p2 k)
    (polar p1 (angle p1 p2) (* (distance p1 p2) k))
)
(defun Tue-list-tach (lst count / i j Lst-tinh Reslis)
 ;;;;;Ex: (Tue-list-tach '(1 5 4 6 3 5) 2)--> ((1 5) (4 6) (3 5))
 ;;;;;;;;;(Tue-list-tach '(1 5 4 6 3 5) 3)--> ((1 5 4) (6 3 5))
 ;;;;;;;;;(Tue-list-tach '(1 5 4 6 3 5) 5)--> nil
   (setq i 0 j 0)
   (while (and (< i (/ (length lst) count)) (= (rem (length lst) count) 0))
    (Repeat count
      (setq Lst-tinh (append Lst-tinh (list (nth j lst)) ))
      (setq j (1+ j))  
     )
         (setq Reslis (append Reslis (list Lst-tinh))
           Lst-tinh nil)
     (setq i (1+ i))
    )
 Reslis
)
(defun Tue-geom-inters(e1 e2 flag / Lst_tong Lst);;;Tue-list-tach
 ;;; flag= 0 : acExtendNone Does not extend either object.
 ;;; flag= 1 : acExtendThisEntity Extends the base object.
 ;;; flag= 2 : acExtendOtherEntity Extends the object passed as an argument.
 ;;; flag= 3 : acExtendBoth  Extends both objects.
;;Ex: (Tue-geom-inters (ssname (TUE-SS-ENTSEL '((0 . "*LINE,ARC,CIRCLE,ELLIPSE")) "\npick chon doi tuong thu 1 :") 0)
;;;;;;;;;;;;;;;;;;;;;;;(ssname (TUE-SS-ENTSEL '((0 . "*LINE,ARC,CIRCLE,ELLIPSE")) "\npick chon doi tuong thu 2 :") 0) 0)
  (if (= (type e1) 'ENAME) (setq e1 (vlax-ename->vla-object e1)))
  (if (= (type e2) 'ENAME) (setq e2 (vlax-ename->vla-object e2)))
  (Tue-list-tach (vlax-invoke e1 'IntersectWith e2 flag) 3)
)
;;;main
 (princ "chon cac duong cat: ")
   (setq ss1 (ssget '((0 . "*LINE"))) j -1 i -1 lst-res '())
(princ "chon cac duong can cat: ")
   (setq ss (ssget '((0 . "*LINE,ARC"))));;line cat
   (while (setq en (ssname ss (setq i (1+ i))))
       (while (setq es1 (ssname ss1 (setq j (1+ j))))
      (if (setq p1 (Tue-geom-inters es1 en 0))
        (setq lst-res (append lst-res (List (car p1))))
         )
       )
     (if (= (length lst-res) 2) (command "._break" en "non" (car lst-res) "non" (cadr lst-res))   
     )
     (setq j -1 lst-res '())
   )

  )

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

Command: ap
APPLOAD trr.lsp successfully loaded.


Command: ; error: syntax error

 khi mình load lisp và nhận được thông báo này bác Tuệ ơ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
6 phút trước, lethanh2004 đã nói:

Bác Tuệ cho em phiền xíu nữa . sao em test bản vẽ này lại không cắt được ạ

test.dwg

Nó thuộc phạm trù về kỹ năng vẽ của bạn, cái này không cần lisp cũng làm nhanh được. Chỉ cần hiện riêng layer 0, Bo lại phần đường, dùng lệnh extrim là được.

 

image.png.86c860d5cf02c484c4397e2cab26b7d8.png

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

Nó thuộc phạm trù về kỹ năng vẽ của bạn, cái này không cần lisp cũng làm nhanh được. Chỉ cần hiện riêng layer 0, Bo lại phần đường, dùng lệnh extrim là được.

cảm ơn bác Conghoa đã góp ý . như em đã nói ở trên . do em tách lớp phân biệt các loại đường ( theo chuyên ngành cuả e ) . nếu nối khép kín sau này lại mất công tách từng lớp đường đó ra . bác có ý gì hay bác chia sẻ giúp em vs ạ

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

cảm ơn bác Conghoa đã góp ý . như em đã nói ở trên . do em tách lớp phân biệt các loại đường ( theo chuyên ngành cuả e ) . nếu nối khép kín sau này lại mất công tách từng lớp đường đó ra . bác có ý gì hay bác chia sẻ giúp em vs ạ

Nhiệm vụ tạo đường bo bằng lệnh BO chỉ để mục đích extrim nhanh các đối tượng nằm trong đường bo đó, sau khi extrim xong bạn có thể xóa nó đi mà.

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 là coppy các tuyến đó ra nối thành 1 đường bo khép kín rồi thực hiện lệnh ....

đó cũng là 1 ý hay . cảm ơn bác đã góp ý 

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

ý bác là coppy các tuyến đó ra nối thành 1 đường bo khép kín rồi thực hiện lệnh ....

đó cũng là 1 ý hay . cảm ơn bác đã góp ý 

Bạn nên học lại các lệnh đơn giản, mình đã nói rõ là:

Chỉ cần hiện riêng layer 0, Bo lại phần đường, dùng lệnh extrim là được:

- Hiện riêng layer 0 bằng lệnh layiso

- đánh lệnh BO để bo bên trong các đường của bạn

- Hiện toàn bộ layer lên bằng lệnh layon

- Đánh lệnh extrim để xóa các đối tượng bên trong đường bo

Kết quả đạt được giống như hình mình có post bên trên. 

 

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

Bạn nên học lại các lệnh đơn giản, mình đã nói rõ là:

Chỉ cần hiện riêng layer 0, Bo lại phần đường, dùng lệnh extrim là được:

- Hiện riêng layer 0 bằng lệnh layiso

- đánh lệnh BO để bo bên trong các đường của bạn

- Hiện toàn bộ layer lên bằng lệnh layon

- Đánh lệnh extrim để xóa các đối tượng bên trong đường bo

Kết quả đạt được giống như hình mình có post bên trên. 

 

Cảm ơn bác conghoa . em hơi dốt cad lên bác thông cảm . em thấy lệnh bo nếu là 1 tuyến thì ok . nhưng nếu nó lại chia ra nhiều tuyến riêng biệt thì cũng hơi đau đầu . mong bác chia sẻ

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

Cảm ơn bác conghoa . em hơi dốt cad lên bác thông cảm . em thấy lệnh bo nếu là 1 tuyến thì ok . nhưng nếu nó lại chia ra nhiều tuyến riêng biệt thì cũng hơi đau đầu . mong bác chia sẻ

Bạn gửi ví dụ lên đâ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

File chỉ gửi với 1 đối tương chỉ giao cắt với 2 điểm. nếu PLInE giao cắt nhiều điểm với dao cắt thì phải viết kiểu khác 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

×