Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
44 replies to this topic

#1 saycaphe

saycaphe

    biết vẽ circle

  • Members
  • PipPip
  • 32 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 23 December 2011 - 04:02 PM

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

#2 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 23 December 2011 - 05:37 PM

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

* 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 saycaphe

saycaphe

    biết vẽ circle

  • Members
  • PipPip
  • 32 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 23 December 2011 - 09:03 PM

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

#4 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 23 December 2011 - 09:40 PM

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

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


#5 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 23 December 2011 - 09:54 PM

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

  • 1

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


#6 saycaphe

saycaphe

    biết vẽ circle

  • Members
  • PipPip
  • 32 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 23 December 2011 - 10:04 PM

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

#7 saycaphe

saycaphe

    biết vẽ circle

  • Members
  • PipPip
  • 32 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 23 December 2011 - 10:12 PM

Mình gặp lỗi này bạn ơi

Chon cac Circle can Offset...9 found
; error: no function definition: VLAX-ENAME->VLA-OBJECT
  • 0

#8 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 23 December 2011 - 10:15 PM

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

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


#9 saycaphe

saycaphe

    biết vẽ circle

  • Members
  • PipPip
  • 32 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 23 December 2011 - 10:28 PM

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

#10 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 23 December 2011 - 10:48 PM

(ssget '((0 . "CIRCLE") (-4 . "<=") (40 . 18.0) (-4 . ">=") (40 . 15.0)))
  • 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.


#11 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 24 December 2011 - 10:54 AM

(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 .....
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#12 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 24 December 2011 - 11:09 AM

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
  • 2

#13 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 24 December 2011 - 11:35 AM

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

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


#14 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 24 December 2011 - 04:50 PM

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

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


#15 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 24 December 2011 - 07:47 PM

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

Hình đã gửi
  • 2

#16 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 24 December 2011 - 10:28 PM

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

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


#17 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 25 December 2011 - 08:42 AM

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à đủ.
.......
  • 4

#18 saycaphe

saycaphe

    biết vẽ circle

  • Members
  • PipPip
  • 32 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 25 December 2011 - 05:44 PM

Mình cần dùng lisp vì mình cần phải sử lý hàng ngàn bản vẽ 1 lúc theo cùng một cách bác ạ :)
  • 0

#19 saycaphe

saycaphe

    biết vẽ circle

  • Members
  • PipPip
  • 32 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 25 December 2011 - 05:46 PM

lệnh Filber này có trog list ko vậy nhỉ?
  • 0

#20 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 25 December 2011 - 05:57 PM

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

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