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

[Yêu cầu] Lisp offset nhiều đường tròn

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

Các bác giúp em cái lisp như sau với:

- chọn toàn bộ đường tròn có R<=15 ở trong bản vẽ

- Offset tất cả các đg tròn đó thành R10

Thanks các 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

Rồi có xoá đường tròn cũ không?

P/S: định viết giúp bạn nhưng google thấy có rất nhiều người đã viết, nên tốt nhất bạn theo link này xem sao:

http://www.cadviet.com/forum/index.php?showtopic=1642&st=0

  • 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

Rồi có xoá đường tròn cũ không?

P/S: định viết giúp bạn nhưng google thấy có rất nhiều người đã viết, nên tốt nhất bạn theo link này xem sao:

http://www.cadviet.c...topic=1642&st=0

Làm sao để list tự kiểm tra đường kính các đường tròng trong bản vẽ, và thực hiện lệnh offset với những đường trong có R<15 vậy 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

Làm sao để list tự kiểm tra đường kính các đường tròng trong bản vẽ, và thực hiện lệnh offset với những đường trong có R<15 vậy bạn?

Bạn trả lời câu hỏi của bác ĐVH đi đã, chứ trả lời bằng 1 câu hỏi thì ....^^

- Cái mà bạn đang nhờ viết là LISP chứ không phải LIST

- Việc làm thế nào để kiểm tra tự khắc người viết lisp sẽ có cách giải quyết, tuy nhiên điều người viết cần biết thì bạn k nói

- Mình e là bạn nhầm lẫn giữa Sửa thành - với Offset thành. 2 cái này khác nhau, nên bạn cần nói rõ để mọi người viết cho bạn

  • 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

Làm sao để list tự kiểm tra đường kính các đường tròng trong bản vẽ, và thực hiện lệnh offset với những đường trong có R<15 vậy bạn?

Tôi cũng đang nghi bạn scale circle có R<=15 thành circle có R=10. Còn nếu muốn offset thì thử cái này xem!

;Doan Van Ha - CADViet.com - Ngay 23/12/2011
;Muc dich: Offset tat ca duong tron co R<=15 ve R=10.
(defun C:HA()
(vl-load-com)
(princ "\nChon cac Circle can Offset...")
(setq entlst (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget  '((0 . "CIRCLE") (-4 . "<=") (40 . 15.0)))))))
(foreach ent entlst
 (vla-offset (vlax-ename->vla-object ent) (- 10.0 (cdr (assoc 40 (entget ent))))))
(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

Hi bạn.

@ Doan Van Ha: có xóa đường trong cũ bạn ơi

@ketxu: Cảm ơn bạn đã nhận xét. Đúng là mình đã nhầm lẫn giữa offset và thay đổi bán kính rồi. Bác giúp mình lisp này với nhé

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

Hi bạn.

@ Doan Van Ha: có xóa đường trong cũ bạn ơi

@ketxu: Cảm ơn bạn đã nhận xét. Đúng là mình đã nhầm lẫn giữa offset và thay đổi bán kính rồi. Bác giúp mình lisp này với nhé

Biết mà! Đây bạn!

P/S: đã sửa lỗi do sơ ý quên hàm (vl-load-com)

;Doan Van Ha - CADViet.com - Ngay 23/12/2011
;Muc dich: Scale tat ca duong tron duoc chon co R<=15 ve R=10.
(defun C:HA()
(vl-load-com)
(princ "\nChon cac Circle can Scale...")
(setq entlst (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget  '((0 . "CIRCLE") (-4 . "<=") (40 . 15.0)))))))
(foreach ent entlst
 (vla-put-Radius (vlax-ename->vla-object ent) 10.0))
(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

List hoạt động quá tốt, cảm ơn bạn Doan Van Ha ^^. Bạn có thể giải thích cho mình các dòng lệnh , để mình có thể tùy biến đc ko :)

Như các đường tròn có 15<=R<=18(mm) thì viết như thế nào 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

(ssget '((0 . "CIRCLE") (-4 . "<=") (40 . 18.0) (-4 . ">=") (40 . 15.0)))

Hề hề hề,

Bác DoanvanHa ơi,

Bác dùng thằng (-4 . ..... ) này tài thật. Mình chửa hiểu nó lắm. Vì cứ như mình đọc trong help thì nó phải có một cặp đóng và mở và được dùng với các toán tử logic thôi mà. Vậy mà bác chơi được cả với các toán tử so sánh này nữa mà lại chơi có phát một.

Nhờ bác chỉ dẫn thêm là liệu nó có dùng được với các toán tử khác như +, - , *, / ...... hay không và cách dùng ra sao??? dùng đơn hay phải dùng cả cặp như đối với toán tử logic???

Hề hề hề,

Chúc bác luôn mạnh khỏe và vui .....

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

Hề hề hề,

Bác DoanvanHa ơi,

Bác dùng thằng (-4 . ..... ) này tài thật. Mình chửa hiểu nó lắm. Vì cứ như mình đọc trong help thì nó phải có một cặp đóng và mở và được dùng với các toán tử logic thôi mà. Vậy mà bác chơi được cả với các toán tử so sánh này nữa mà lại chơi có phát một.

Nhờ bác chỉ dẫn thêm là liệu nó có dùng được với các toán tử khác như +, - , *, / ...... hay không và cách dùng ra sao??? dùng đơn hay phải dùng cả cặp như đối với toán tử logic???

Hề hề hề,

Chúc bác luôn mạnh khỏe và vui .....

Bên cạnh các toán tử Logic như bác đã biết, còn có các toán tử Operator mà trong Help có ghi

Bác có thể vào trong Help ở trang này :

 

ActiveX and VBA Developer's Guide > Create and Edit AutoCAD Entities > Work with Selection Sets > Define Rules for Selection Sets >

Add Complexity to Your Filter List Conditions

 

Use a -4 DXF code to indicate a relational operator in your filter specification. Specify the operator as a string. The allowable relational operators are shown in the following table.

 

Description

"=" Equals

"/=" Not equal to

"<" Less than or equal to

">" Greater than

">=" Greater than or equal to

 

.........

 

Với yêu cầu của bạn saycaphe dùng CAD giải quyết cái rẹt, không nên quá lạm dụng Lisp

  • 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

Theo những gì tôi biết đến hôm nay thì hình như không dùng được với các toán tử +-*/. Còn toán tử so sánh thì bác Tue_NV đã chỉ. Và tôi nghĩ còn thêm một điều này nữa: không phải bất cứ cái gì trong Help cũng có. Tôi thỉnh thoảng đi mót trên những cánh đồng xa, và thấy vậy, không biết có đúng không.

Chúc bác PTB và bác Tue_NV có một mùa Giáng Sinh vui vẽ với... LISP.

  • 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ới yêu cầu của bạn saycaphe dùng CAD giải quyết cái rẹt, không nên quá lạm dụng Lisp

Bác chỉ giùm tôi trong Cad cách thức chọn các Circle có R<=15 để giải quyết nhanh bài toán này, vì thật tình tôi chưa biết điều 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

Bác chỉ giùm tôi trong Cad cách thức chọn các Circle có R<=15 để giải quyết nhanh bài toán này, vì thật tình tôi chưa biết điều này.

Bạn Dùng lệnh Filer như hình sau :

4652_filter_circle.jpg

Còn chọn các Circle có 5<R<20 thì theo hình sau :

Việc thay đổi bán kính chắc đơn giản rồi

Chúc bạn DoanVan Ha và các bác 1 ngày gián sinh anh lành và hạnh phúc

 

4652_filter_circle2.jpg

  • 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

Thank bác Tue_NV! Thật sự tôi chưa hề biết lệnh này. Nhưng nếu so sánh thì tôi nghĩ chắc Lisp sẽ nhanh hơn Cad. Nhưng mà thôi, đây là chuyện không lớn mà! Vả lại, đôi khi viết Lisp thì cứ say mê viết vậy thôi. Thậm chí đôi lúc viết một vấn đề, xong mới ngả ngữa ra: ồ, nó đã có rồi! OK?

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

Thank bác Tue_NV! Thật sự tôi chưa hề biết lệnh này. Nhưng nếu so sánh thì tôi nghĩ chắc Lisp sẽ nhanh hơn Cad. Nhưng mà thôi, đây là chuyện không lớn mà! Vả lại, đôi khi viết Lisp thì cứ say mê viết vậy thôi. Thậm chí đôi lúc viết một vấn đề, xong mới ngả ngữa ra: ồ, nó đã có rồi! OK?

Có thể là dùng Lisp sẽ nhanh hơn CAD. Tuy nhiên, lệnh Filter lại có rất nhiều lựa chọn hơn.

Một là có thể lưu lại bộ chọn bằng 1 cái tên, sau này có thể lấy ra sử dụng

Hai là nó có nhiều lựa chọn hơn. Ví dụ: muốn chọn thêm Circle có thêm điều kiện khác nữa, ví dụ các circle bên cạnh nó thỏa mãn R<=15 và các circle thuộc 1 Layer nào đấy nữa. Không lý cứ mỗi lần như vậy, ta lại vào LSP để sửa. Vậy thì dùng CAD sẽ nhanh hơn.

Ba là, mất công tốn thêm 1 câu lệnh để phải nhớ mỗi khi thực hiện câu lệnh đó. Trong khi mình chỉ nhớ mỗi lệnh Filter là đủ.

.......

  • 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

Trong trường hợp đặc biệt của bạn thì có lẽ dùng lisp nhanh hơn, nhưng tổng quát thì nên dùng lệnh filter vì nó có nhiều chức năng hơn. Trong lisp tôi viết cho bạn không sử dụng lệnh 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

Bác cho mình hỏi cú pháp lệnh filber trong lisp với :D

Tôi mới biết lệnh này hôm nay nên chưa thể tìm ra cú pháp của nó được liền. Cần phải n/c đã.

  • 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

Bác chỉ giùm tôi trong Cad cách thức chọn các Circle có R<=15 để giải quyết nhanh bài toán này, vì thật tình tôi chưa biết điều này.

http://www.cadviet.com/forum/index.php?showtopic=8811

^^ Filter quá phức tạp để sử dụng với command 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

http://www.cadviet.c...?showtopic=8811

^^ Filter quá phức tạp để sử dụng với command bác ạ ^^

Ấy ấy! Tôi hỏi là lúc tôi chưa biết có lệnh "filter". Chứ nhìn Dialoge của nó thì ngộ ra rồi. OK?

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

Biết mà! Đây bạn!

P/S: đã sửa lỗi do sơ ý quên hàm (vl-load-com)

;Doan Van Ha - CADViet.com - Ngay 23/12/2011
;Muc dich: Scale tat ca duong tron duoc chon co R<=15 ve R=10.
(defun C:HA()
(vl-load-com)
(princ "\nChon cac Circle can Scale...")
(setq entlst (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget  '((0 . "CIRCLE") (-4 . "<=") (40 . 15.0)))))))
(foreach ent entlst
 (vla-put-Radius (vlax-ename->vla-object ent) 10.0))
(princ))

Bác ơi, lisp này chỉ hoạt động khi tồn tại Circle đáp ứng điều kiện R <=15, còn nếu ko tồn tại thì sẽ gặp lỗi ko chạy đc. Có cách nào cho nó kiểm tra, xem có tồn tại đường tròn R<=15, nếu tồn tại thì mới thực hiện lệnh scale circle vậy 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

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  

×