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

Nhờ viết Lisp thay đổi lệnh Trim (TR)

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

Nhờ các anh em viết dùm Lisp về lệnh Trim như sau:

- Mình có một đường thẳng bị cắt bởi 2 đường thẳng (Line, XLine, PLine...)

- Mình sử dựng lệnh: TR, Enter, chọn 2 đường thẳng cắt, Enter, Click vào đường thẳng bị cắt ở phía trong 2 đường thẳng cắt. Thì đoạn phía trong 2 đường cắt sẽ bị trim

- Giờ mình muốn Trim như trên mà giữ lại phần giữa, chỉ trim phần phía ngoài 2 đường thẳng cắt nó (giữ lại đoạn giữa nằm trong 2 đường cắt)

Mong anh em viết giúp lisp nhé, cảm ơn rất nhiều!

Đính kèm: http://www.cadviet.com/upfiles/4/136880_drawing1.dwg

 

  • 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

Nhờ các anh em viết dùm Lisp về lệnh Trim như sau:

- Mình có một đường thẳng bị cắt bởi 2 đường thẳng (Line, XLine, PLine...)

- Mình sử dựng lệnh: TR, Enter, chọn 2 đường thẳng cắt, Enter, Click vào đường thẳng bị cắt ở phía trong 2 đường thẳng cắt. Thì đoạn phía trong 2 đường cắt sẽ bị trim

- Giờ mình muốn Trim như trên mà giữ lại phần giữa, chỉ trim phần phía ngoài 2 đường thẳng cắt nó (giữ lại đoạn giữa nằm trong 2 đường cắt)

Mong anh em viết giúp lisp nhé, cảm ơn rất nhiều!

Đính kèm: http://www.cadviet.com/upfiles/4/136880_drawing1.dwg

 

Nếu viết lisp theo đúng ý tưởng của anh thao tác sẽ hơi bị ....chậm! :) :) :)

Cách tươi đẹp nhất vừa nhanh vừa đỡ hao tổn nơ-tron vẫn là:  gõ TR >>> gõ Enter 02 phát >>> bấm chuột 02 phát >>>Xong!

Command: TR

TRIM

Current settings: Projection=UCS, Edge=None

Select cutting edges ...

Select objects or <select all>:

Select object to trim or shift-select to extend or

[Fence/Crossing/Project/Edge/eRase/Undo]:

Select object to trim or shift-select to extend or

[Fence/Crossing/Project/Edge/eRase/Undo]:

 

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

Cảm ơn bạn nhé nhưng cách bạn nói mình cũng biết rồi, mất công ở chỗ 2 lần click chuột, nếu mà bản vẽ nhiều và rộng thì 2 phát đó click phê lắ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

Mục đích của lisp là:

1. Tạo ra lệnh mới mà cad chưa có.

2. Thay một số lớn thao tác lập đi lập lại 1 cách nhàm chán bằng 1 lệnh duy nhất.

Yêu cầu của bạn chỉ thay 2 click = 1 click , có vẻ không kinh tế lắm!!

  • 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

Công việc của mình là thiết kế các cây cột điện cao thế (trụ thép 4 chân), khi vẽ trục và offset các thanh thép, nếu trim như thế này thì lâu lắm (do nhiều thanh lắm). Có vẻ yêu cầu của mình ít có ai ủng hộ, nên đành phải TR, enter, enter, click, rê.rê..rê.rê..và click vậy. Cảm ơn các bạ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

Bạn dùng lệnh extrim đi. Chọn đường cắt -> chọn phía muốn cắt -> ok, tất cả các đường giao với đường cắt sẽ bị cắt hết ở phía muốn cắt. Nhanh lắm

  • 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

Công việc của mình là thiết kế các cây cột điện cao thế (trụ thép 4 chân), khi vẽ trục và offset các thanh thép, nếu trim như thế này thì lâu lắm (do nhiều thanh lắm). Có vẻ yêu cầu của mình ít có ai ủng hộ, nên đành phải TR, enter, enter, click, rê.rê..rê.rê..và click vậy. Cảm ơn các bạn!

 

Lỗi do anh đã ra đề: "Mình sử dựng lệnh: TR, Enter, chọn 2 đường thẳng cắt, Enter, Click vào đường thẳng bị cắt ở phía trong 2 đường thẳng cắt. Thì đoạn phía trong 2 đường cắt sẽ bị trim" + hình minh họa đơn chiếc...

 

Nếu vẽ nhiều anh có thể gõ  EXTR > chọn dao cắt > chọn phía cần cắt ;  hoặc gõ TR >> Enter 2 lần > quét chọn đồng loạt , đều nhanh như nhau!

 

Em chưa vẽ cột điện bao giờ, nhưng cái giông giống cột điện thì em đã vẽ hơi bị nhiều. :) :) :)

 

aacutedsadfas.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

Cảm ơn các bạn đã góp ý, mình minh hoạ đơn giản để các bạn hiểu ý và viết hộ lisp thôi. Chứ mình cần để áp dụng vào các bản vẽ thế này: http://www.cadviet.com/upfiles/4/136880_tktd.dwg

Mình nghĩ viết lisp này cũng đơn giản với các bạn mà, ai tốt bụng giúp mình nhé!! Thanku!

  • 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

Slow code cho bạn đây. Chọn 2 line rồi chọn những line cần cắt.

 

(defun c:trx (/ A B SS TT10A TT10B TT11A TT11B)
(defun dxf(id v) (cdr (assoc id (entget v))))
(command "undo" "be") (setvar 'cmdecho 0)
(princ "\nChon 2 line:")
(while (/= 2 (length (setq ss (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "LINE")))))))))
(Alert "\nChi chon 2 line!!")
)
(setq tt10a (dxf 10 (car ss))
tt11a (dxf 11 (car ss))
tt10b (dxf 10 (last ss))
tt11b (dxf 11 (last ss))
)
 
(princ "\nChon cac line bi cat:") 
(foreach v (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "LINE"))))))
(if (and (setq a (inters tt10a tt11a (dxf 10 v) (dxf 11 v)))
(setq b (inters tt10b tt11b (dxf 10 v) (dxf 11 v))))
(command "trim" (car ss) (last ss) "" (dxf 10 v) (dxf 11 v) "")))
(command "undo" "e") (setvar 'cmdecho 1)
(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

Cảm ơn các bạn đã góp ý, mình minh hoạ đơn giản để các bạn hiểu ý và viết hộ lisp thôi. Chứ mình cần để áp dụng vào các bản vẽ thế này: http://www.cadviet.com/upfiles/4/136880_tktd.dwg

Mình nghĩ viết lisp này cũng đơn giản với các bạn mà, ai tốt bụng giúp mình nhé!! Thanku!

Không hiểu bạn đã nắm bắt lệnh Trim ntn mà chê nó chậm :o . 

Gỏ Tr  Enter Enter   Pick khung cửa sổ Window phủ qua 2 thằng rìa muốn cắt và cứ thế làm tiếp        xong Enter :)

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

 

Slow code cho bạn đây. Chọn 2 line rồi chọn những line cần cắt.

(defun c:trx (/ A B SS TT10A TT10B TT11A TT11B)
(defun dxf(id v) (cdr (assoc id (entget v))))
(command "undo" "be") (setvar 'cmdecho 0)
(princ "\nChon 2 line:")
(while (/= 2 (length (setq ss (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "LINE")))))))))
(Alert "\nChi chon 2 line!!")
)
(setq tt10a (dxf 10 (car ss))
tt11a (dxf 11 (car ss))
tt10b (dxf 10 (last ss))
tt11b (dxf 11 (last ss))
)
 
(princ "\nChon cac line bi cat:") 
(foreach v (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "LINE"))))))
(if (and (setq a (inters tt10a tt11a (dxf 10 v) (dxf 11 v)))
(setq b (inters tt10b tt11b (dxf 10 v) (dxf 11 v))))
(command "trim" (car ss) (last ss) "" (dxf 10 v) (dxf 11 v) "")))
(command "undo" "e") (setvar 'cmdecho 1)
(princ)
)

Cảm ơn bạn Tot77 nhiều đã làm theo đúng ý mình, nhưng chỉ có tác dụng với Line thôi hả bạn, bạn có thể chỉnh lại một chút xíu là có thể áp dụng cho Line, Pline, Xline, Rectang, Circle không. Thanks bạn nhiều! chúc các bạn buổi tối vui vẻ !!!

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


×