Đến nội dung


Hình ảnh
- - - - -

[Yêu cầu] Offset, chuyện cũ với yêu cầu mới


  • Please log in to reply
62 replies to this topic

#1 AGi

AGi

    biết vẽ ellipse

  • Members
  • PipPip
  • 58 Bài viết
Điểm đánh giá: 13 (tàm tạm)

Đã gửi 20 March 2013 - 10:05 AM

Mình nhờ các pro viết một Lisp rút gọn lệnh Fillet như sau:

Bình thường khi muốn fillet với bán kinh r=100 (lệnh fillet trc đó R#100) thì mình sẽ phải làm tuần tữ là:

F :enter

R :enter

100 :enter

....

Giờ mình muốn khi cần fillet với một bán kính R=100 thì chỉ cần gõ: R100 thì CAD sẽ hiểu là Lệnh Fillet với tham số b.kính R=100 (bỏ qua 3 bước ở trên).

Thanks tất cả mọi người! Phần này coi như đã xong

 

Bổ sung:

Mình nhờ các pro viết bổ sung thêm tính năng Lisp chamfer nhập biến trực tiếp của bro Ketxu mình , giúp Chamfer giữa đường thẳng và đường cong và giữa 2 đường cong theo kiểu như mình Chamfer giữa 2 đường thẳng với nhau. Yêu cầu như sau:

 * Sau khi nhập lệnh (ví dụ D5) thì chọn đối tượng. Có 2 trường hợp xảy ra:

1/ Nếu 2 đối tượng là đường thẳng thìm thực hiện lệnh Chamfer bình thường với biến D=5 (cái này lisp của bro Ketxu đã có ).

2/ Nếu 2 đối tượng được chọn có 1 hoặc cả 2 là đường cong thì sẽ thực hiện từng bớc như sau:

   + Bước 1: Thực hiện lệnh Fillet 2 đối tượng được chọn với bk R = D (ở đây R=D=5);[hoặc nhập R, rồi nhập bk, rồi fillet 2 đ.tượng được chọn với bk R vừa nhập.

   + Bước 2: Xóa bỏ cung tròn vừa được tạo ra bằng lệnh Fillet ở bước 1.

   + Bước 3: Nối 2 điểm trên 2 đối tượng lại bằng 1 đường thẳng. Mọi người xem hình minh họa sẽ rõ hơn.3

   + Bước 4: Chọn đối tượng tiếp theo hoặc Enter kết thúc lệnh. Xong

guicadviet_zps63056014.jpg

 

 

 Hết.

Thanks all!

 


  • 0

#2 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 20 March 2013 - 10:45 AM

Mình nhờ các pro viết một Lisp rút gọn lệnh Fillet như sau:

Bình thường khi muốn fillet với bán kinh r=100 (lệnh fillet trc đó R#100) thì mình sẽ phải làm tuần tữ là:

F :enter

R :enter

100 :enter

....

Giờ mình muốn khi cần fillet với một bán kính R=100 thì chỉ cần gõ: R100 thì CAD sẽ hiểu là Lệnh Fillet với tham số b.kính R=100 (bỏ qua 3 bước ở trên).

Thanks tất cả mọi người!

 

Hề hề hề,

Khó hè???? Làm răng để nhét được cái tham số bán kính vô tên lệnh bây chừ??? Có nhẽ phải dùng hàm con chăng???


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#3 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 20 March 2013 - 10:47 AM

Tôi đã viết lisp này, bài #20, link dưới đây. Bạn sang đó down nhé!

http://www.cadviet.c...052#entry224052


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


#4 AGi

AGi

    biết vẽ ellipse

  • Members
  • PipPip
  • 58 Bài viết
Điểm đánh giá: 13 (tàm tạm)

Đã gửi 20 March 2013 - 11:38 AM

Tôi đã viết lisp này, bài #20, link dưới đây. Bạn sang đó down nhé!

http://www.cadviet.c...052#entry224052

Thanks bro. Nhưng cái này chưa đúng ý mình muốn.

Mình muốn rút gọn lệnh Fillet (bỏ qua bước nhập lệnh và tham số b.kính)

Ví dụ: Cần fillet với tham số b.kinh R=10 thì chỉ cần nhập lệnh: R10 là có thể fillet với b.kinh R=10

hay nhập R15 là có thể fillet với b.kính R=15.

Còn khi cần fillet với b.kính của lần fillet trước thì nhập: F như bình thường.


  • 0

#5 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 20 March 2013 - 01:11 PM

Lâu rồi k viết, code tí cho đỡ quên ^^

 

;Fillet voi ban kinh bat ky, nhap lenh theo cau truc Rbankinh (R10, R100, R50, R1.5 ...)
;Ketxu 20/3/13
(vl-load-com)
(if (null fillet_reactor)(setq fillet_reactor (vlr-command-reactor nil '((:vlr-unknownCommand . fillet_df)))))
(defun	fillet_df (a b / cmd r)	
	(cond
		((and (wcmatch (setq cmd (strcase (nth 0 b))) "R*")(setq r (distof (substr cmd 2))))
			(setvar 'FILLETRAD r)
			(vla-sendcommand (vla-get-activedocument (vlax-get-acad-object)) "fillet m ")			
		)
	)
	(princ)
)


  • 11

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


#6 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 20 March 2013 - 01:32 PM

Hay quá Ket ơi!


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


#7 AGi

AGi

    biết vẽ ellipse

  • Members
  • PipPip
  • 58 Bài viết
Điểm đánh giá: 13 (tàm tạm)

Đã gửi 20 March 2013 - 01:36 PM

Lâu rồi k viết, code tí cho đỡ quên ^^

 

;Fillet voi ban kinh bat ky, nhap lenh theo cau truc Rbankinh (R10, R100, R50, R1.5 ...)
;Ketxu 20/3/13
(vl-load-com)
(if (null fillet_reactor)(setq fillet_reactor (vlr-command-reactor nil '((:vlr-unknownCommand . fillet_df)))))
(defun	fillet_df (a b / cmd r)	
	(cond
		((and (wcmatch (setq cmd (strcase (nth 0 b))) "R*")(setq r (distof (substr cmd 2))))
			(setvar 'FILLETRAD r)
			(vla-sendcommand (vla-get-activedocument (vlax-get-acad-object)) "fillet m ")			
		)
	)
	(princ)
)

Đây mới đúng là cái mình cần.

Thanks bro ketxu rất là nhiều. :D

Có cái này giúp mình vẽ nhanh hơn rất nhiều.

Nếu ko phiền bro làm luôn cái Lisp kiểu như thế này nhưng cho lệnh CHAMFER nhe!

Chỉ cần nhập: D10 hay D15 ... là có thể chặt chém tới bến Ninh Kiều luôn hihihihii

Thanks bro ketxu một lần nữa nhe!!!! :D :D :D


  • 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 20 March 2013 - 01:50 PM

Gì chớ "ăn cắp" thì mần được:

(vl-load-com)

(if (null chamfer_reactor)(setq chamfer_reactor (vlr-command-reactor nil '((:vlr-unknownCommand . chamfer_df)))))

(defun    chamfer_df (a b / cmd d)    
 (cond
  ((and (wcmatch (setq cmd (strcase (nth 0 B))) "D*")(setq d (distof (substr cmd 2))))
   (setvar 'CHAMFERA d) (setvar 'CHAMFERB d)
   (vla-sendcommand (vla-get-activedocument (vlax-get-acad-object)) "chamfer m ")))
 (princ))
Reator hay quá. Chắc phải tìm học thôi.

  • 8

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

ketxu

    Copier - Paster - Editor

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

Đã gửi 20 March 2013 - 03:06 PM

Gì chớ "ăn cắp" thì mần được

Reator hay quá. Chắc phải tìm học thôi.

Bác cháu ta giống nhau, của chôm được là của quý, chôm xài lâu năm thì thành của ta, tội j ^^ 

 

 Đợt update này lại k xem được ai vote +/- nhỉ


  • 2

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


#10 AGi

AGi

    biết vẽ ellipse

  • Members
  • PipPip
  • 58 Bài viết
Điểm đánh giá: 13 (tàm tạm)

Đã gửi 20 March 2013 - 03:24 PM

Gì chớ "ăn cắp" thì mần được:

(if (null chamfer_reactor)(setq chamfer_reactor (vlr-command-reactor nil '((:vlr-unknownCommand . chamfer_df)))))

(defun    chamfer_df (a b / cmd d)    
 (cond
  ((and (wcmatch (setq cmd (strcase (nth 0 B))) "D*")(setq d (distof (substr cmd 2))))
   (setvar 'CHAMFERA d) (setvar 'CHAMFERB d)
   (vla-sendcommand (vla-get-activedocument (vlax-get-acad-object)) "chamfer m ")))
 (princ))
Reator hay quá. Chắc phải tìm học thôi.

Ủa sao mình chamfer ko đc ta?

Nhập D10

Cad báo lỗi:

; error: no function definition: CHAMFER_DF
Unknown command "D10".  Press F1 for help
.


  • 0

#11 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 20 March 2013 - 03:56 PM

Bạn thêm dòng (vl-load-com) vào đầu lisp như tôi đã edit ở trên nhé. Tôi chép thiếu dòng này.

Tôi test mọi thứ đều ổn.

Khi bạn load nó có báo gì không?


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


#12 AGi

AGi

    biết vẽ ellipse

  • Members
  • PipPip
  • 58 Bài viết
Điểm đánh giá: 13 (tàm tạm)

Đã gửi 20 March 2013 - 04:30 PM

Bạn thêm dòng (vl-load-com) vào đầu lisp như tôi đã edit ở trên nhé. Tôi chép thiếu dòng này.

Tôi test mọi thứ đều ổn.

Khi bạn load nó có báo gì không?

Đúng rồi. Lúc bro vừa post là mình down về liền.

Giờ thì ngon rồi.

Thanks bro Doan Van Ha nhiều nhe!!! :D :D :D


  • 0

#13 Truong_AAn

Truong_AAn

    biết dimradius

  • Members
  • PipPipPipPipPip
  • 314 Bài viết
Điểm đánh giá: 68 (tàm tạm)

Đã gửi 20 March 2013 - 04:51 PM

Uả sao em load về vẩn báo lỗi vậy anh Hà

 

Command: ; error: no function definition: A
Command: ; error: no function definition: A


  • 0
Hình đã gửi
----------------------------------------------------------------------------------//-------------------------------------------------------------------------------------

#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 20 March 2013 - 04:57 PM

Cadviet bị lỗi code. Nếu down mà tồn tại đoạn dưới đây thì tìm mà delete nó đi:

<span>


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

Truong_AAn

    biết dimradius

  • Members
  • PipPipPipPipPip
  • 314 Bài viết
Điểm đánh giá: 68 (tàm tạm)

Đã gửi 20 March 2013 - 05:04 PM

Sau khi em xoá chữ span nó lại báo như này

 

PPLOAD lisp chamfer.lsp successfully loaded.
lisp chamfer.lsp successfully loaded.
Command:
Command:
Command:
Command: c3 Unknown command "C3".  Press F1 for help.

:wacko:  :wacko:


  • 0
Hình đã gửi
----------------------------------------------------------------------------------//-------------------------------------------------------------------------------------

#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 20 March 2013 - 05:07 PM

Bạn nhập là D3 hay D7.6 vân vân. Chứ sao lại nhập C3 ?


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

Truong_AAn

    biết dimradius

  • Members
  • PipPipPipPipPip
  • 314 Bài viết
Điểm đánh giá: 68 (tàm tạm)

Đã gửi 20 March 2013 - 05:12 PM

Hi Hi em đọc bài viết không kĩ nên dùng y lệnh cad là C. :D

 Thnk anh!


  • 0
Hình đã gửi
----------------------------------------------------------------------------------//-------------------------------------------------------------------------------------

#18 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 22 March 2013 - 04:10 PM


Gì chớ "ăn cắp" thì mần được:

Reator hay quá. Chắc phải tìm học thôi.

 

Hề hề hề,

Bác DoanVanHa và ketxu cho hỏi thăm đường một chút.

1/- Tại sao phải có cái biến toàn cục a trong định nghĩa (defun    chamfer_df (a b / cmd d) . 

2/- Nếu dùng như bác DoanVanHa thì cái thằng chamfer này nó chém đều hai cạnh của góc cần chamfer. Vậy nếu ta thêm biến vào để có thể thích chém kiểu chi cũng được có nên không???

3/- Cái tham số m trong lệnh chamfer và fillet này (  "chamfer m ") có thực sự cần phải có hay không???

Cũng muốn chôm cái ni lắm nhưng mà chửa hiểu rõ nên hổng dám, chôm về nhỡ nó  nổ một phát thì tẩu hỏa nhập ma mất.

Hề hề hề,...


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#19 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 22 March 2013 - 04:45 PM

Hề hề hề,

Bác DoanVanHa và ketxu cho hỏi thăm đường một chút.

1/- Tại sao phải có cái biến toàn cục a trong định nghĩa (defun    chamfer_df (a b / cmd d) . 

2/- Nếu dùng như bác DoanVanHa thì cái thằng chamfer này nó chém đều hai cạnh của góc cần chamfer. Vậy nếu ta thêm biến vào để có thể thích chém kiểu chi cũng được có nên không???

3/- Cái tham số m trong lệnh chamfer và fillet này (  "chamfer m ") có thực sự cần phải có hay không???

Cũng muốn chôm cái ni lắm nhưng mà chửa hiểu rõ nên hổng dám, chôm về nhỡ nó  nổ một phát thì tẩu hỏa nhập ma mất.

Hề hề hề,...

Trước hết, tôi chôm code của Ket để sửa lại, nên nếu những trả lời dưới đây là sai thì Ket hoàn toàn chịu trách nhiệm trước pháp luật:

1). Chamfer và Fillet theo y/c của 2 chủ nhân thì đã biết D hoặc R rồi nên nó cần đúng 2 đối số là 2 đối tượng (ent1 và ent2) muốn Chamfer/Fillet, tương tự (command "Chamfer" ent1 ent2).

2). Chủ nhân yêu cầu 1 D thì tôi mần 1 D chung. Nếu cần D1 và D2 thì sửa code lại thôi, nhưng nhập dài hơn, VD là D50D100, chứ không phải là D50.

3). M là Multiple. Nếu bỏ M đi thì Chamfer/Fillet chỉ được 1 lần rồi dừng lại. Ở đây có EM nên nó muốn mần thêm vài cú nữa.


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


#20 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 22 March 2013 - 05:00 PM

Trước hết, tôi chôm code của Ket để sửa lại, nên nếu những trả lời dưới đây là sai thì Ket hoàn toàn chịu trách nhiệm trước pháp luật:

1). Chamfer và Fillet theo y/c của 2 chủ nhân thì đã biết D hoặc R rồi nên nó cần đúng 2 đối số là 2 đối tượng (ent1 và ent2) muốn Chamfer/Fillet, tương tự (command "Chamfer" ent1 ent2).

2). Chủ nhân yêu cầu 1 D thì tôi mần 1 D chung. Nếu cần D1 và D2 thì sửa code lại thôi, nhưng nhập dài hơn, VD là D50D100, chứ không phải là D50.

3). M là Multiple. Nếu bỏ M đi thì Chamfer/Fillet chỉ được 1 lần rồi dừng lại. Ở đây có EM nên nó muốn mần thêm vài cú nữa.

Hề hề hề,

Ới bác DoanVanHa ơi. Hình như không phải rứa????

1/- Biến a là gì thì mình chưa biết, nhưng biến b chính là cái lệnh gõ vào dòng command. Bởi thế mới có (wcmatch (setq cmd (strcase (nth 0 B))) "R*")

2/- Tham số m trong lệnh fillet và chamfer không phải là multi mà muốn multi phải dùng tham số U chớ ạ. (Select first object or [Polyline/Radius/Trim/mUltiple]:)

3/- Nếu sửa vậy thì cần cả việc tách chuỗi nữa ạ.


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.