Đến nội dung


Hình ảnh
- - - - -

(Yêu cầu) lisp fillet. lấy một đối tuợng chọn làm chuân


  • Please log in to reply
17 replies to this topic

#1 laivanyen

laivanyen

    biết vẽ line

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

Đã gửi 04 August 2011 - 08:53 AM

Bình thường khi sử dụng fillet giữa 2 đuờng thẳng em thường phải sử dụng thêm lệnh matchprop để cho 2 đối tượng giống nhau. Nay em muốn các anh giúp em một lisp làm sao fillet thì nó sẽ lấy đối tượng chọn trước làm chuẩn để không cần phải matchprop ạ
  • 0

#2 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 04 August 2011 - 09:12 AM

Ơ lạ nhỉ, máy mình cứ fillet là nó lại cùng 1 loại luôn mới chán chứ ^^
  • 0

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


#3 vetgo

vetgo

    biết vẽ polygon

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

Đã gửi 04 August 2011 - 09:57 AM

Ơ lạ nhỉ, máy mình cứ fillet là nó lại cùng 1 loại luôn mới chán chứ ^^

Bác ketxu thử Fillet 2 đối tượng là 2 Line thuộc 2 Layer khác nhau xem thế nào... :rolleyes:
  • 0
Nếu nội dung post là có ích, xin tick + để thăng hàm lên lương...

#4 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 04 August 2011 - 10:13 AM

À Ket quên mất, tại vì hay fillet Pline nên nó thế ^^
Chắc là nó na ná thế này :

(defun c:f(/ e1 e2)
(setq e1 (car(entsel "Doi tuong 1 :")))(redraw e1 3)
(setq e2(car(entsel "Doi tuong 2 :")))(redraw e2 3)
(vl-cmdf ".MATCHPROP" e1 e2 "")
(command ".fillet" e1 e2 )
)


  • 0

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
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 04 August 2011 - 10:20 AM

À Ket quên mất, tại vì hay fillet Pline nên nó thế ^^
Chắc là nó na ná thế này :

Ketxu chơi kiểu này thì không cho chọn gì ráo trọi.
Select first object or [Undo/Polyline/Radius/Trim/Multiple]:
  • 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.


#6 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 04 August 2011 - 10:22 AM

Ketxu chơi kiểu này thì không cho chọn gì ráo trọi.
Select first object or [Undo/Polyline/Radius/Trim/Multiple]:

:o
  • 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


#7 lp_hai

lp_hai

    biết lệnh measure

  • Members
  • PipPipPipPipPipPip
  • 456 Bài viết
Điểm đánh giá: 202 (khá)

Đã gửi 04 August 2011 - 10:33 AM

Ketxu chơi kiểu này thì không cho chọn gì ráo trọi.
Select first object or [Undo/Polyline/Radius/Trim/Multiple]:

ý pác này nói là các tùy chọn Radius ... đó mà :rolleyes:
@chắc Ket phải cho thêm mấy dòng code cho nó giống lệnh Fillet gốc của Cad nhể?
  • 1
Hình đã gửi

#8 vetgo

vetgo

    biết vẽ polygon

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

Đã gửi 04 August 2011 - 10:41 AM

:o

Theo ý mình hiểu có nghĩa là bác ketxu không cho anh em lựa chọn mấy tùy biến mặc định của lệnh Fillet rồi, ví dụ hiện tại mình muốn Fillet 2 Line với 1 bán kính là 10 chẳng hạn thì dùng Lisp của bác ketxu sẽ không thể thực hiện được.. :blush:
  • 0
Nếu nội dung post là có ích, xin tick + để thăng hàm lên lương...

#9 vetgo

vetgo

    biết vẽ polygon

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

Đã gửi 04 August 2011 - 10:50 AM

À Ket quên mất, tại vì hay fillet Pline nên nó thế ^^
Chắc là nó na ná thế này :

Theo mình nên sửa thế này
(defun c:FF(/ e1 e2)
(setq e1 (car(entsel "Doi tuong 1 :")))(redraw e1 3)
(setq e2(car(entsel "Doi tuong 2 :")))(redraw e2 3)
(vl-cmdf ".MATCHPROP" e1 e2 "")
(command ".fillet")
)
  • 0
Nếu nội dung post là có ích, xin tick + để thăng hàm lên lương...

#10 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 04 August 2011 - 10:57 AM

:) Nh­ư vetgo sửa thì sẽ chọn lại 2 thằng đó lần nữa đó :) Mời các bác gỡ bí giúp ket nào ^^
  • 0

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


#11 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 04 August 2011 - 11:14 AM

:) Nh­ư vetgo sửa thì sẽ chọn lại 2 thằng đó lần nữa đó :) Mời các bác gỡ bí giúp ket nào ^^

Theo ngu ý của tôi, liệu có thể theo hướng này không?
1) MATCHPROP:
(setq e1 (car(entsel "Doi tuong 1 :")))(redraw e1 3)
(setq e2(car(entsel "Doi tuong 2 :")))(redraw e2 3)
(vl-cmdf ".MATCHPROP" e1 e2 "")
2) FILLET:
Nhập vào tuỳ chọn [Undo/Polyline/Radius/Trim/Multiple/No].
Nếu N thì (command "fillet" e1 e2).
Nếu hoặc U, P, R, T, M thì đẻ thêm tuỳ chọn con (nếu có)...
Cuối cùng (command "fillet" "các tuỳ chọn tương ứng..." e1 e2).
Tuy nhiên, hơi bị mệt vì khá nhiều tuỳ chọn của lệnh fillet.
  • 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 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 04 August 2011 - 11:47 AM

Theo ý mình hiểu có nghĩa là bác ketxu không cho anh em lựa chọn mấy tùy biến mặc định của lệnh Fillet rồi, ví dụ hiện tại mình muốn Fillet 2 Line với 1 bán kính là 10 chẳng hạn thì dùng Lisp của bác ketxu sẽ không thể thực hiện được.. :blush:

Bạn thử xem :

(defun c:f(/ e1 e2 FR)
(or *FR* (setq *FR* (getvar "filletrad")))
(setq FR (getreal (strcat "\n Nhap ban kinh Fillet < " (rtos *FR*) " > :")))
(if FR (setq *FR* FR) (setq FR *FR*))
(setvar "filletrad" FR)

(setq e1 (car(entsel "Doi tuong 1 :")))(redraw e1 3)
(setq e2(car(entsel "Doi tuong 2 :")))(redraw e2 3)
(vl-cmdf ".MATCHPROP" e1 e2 "")
(command ".fillet" e1 e2 )
)

  • 1

#13 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 04 August 2011 - 12:00 PM

Theo ngu ý của tôi, liệu có thể theo hướng này không?
1) MATCHPROP:
(setq e1 (car(entsel "Doi tuong 1 :")))(redraw e1 3)
(setq e2(car(entsel "Doi tuong 2 :")))(redraw e2 3)
(vl-cmdf ".MATCHPROP" e1 e2 "")
2) FILLET:
Nhập vào tuỳ chọn [Undo/Polyline/Radius/Trim/Multiple/No].
Nếu N thì (command "fillet" e1 e2).
Nếu hoặc U, P, R, T, M thì đẻ thêm tuỳ chọn con (nếu có)...
Cuối cùng (command "fillet" "các tuỳ chọn tương ứng..." e1 e2).
Tuy nhiên, hơi bị mệt vì khá nhiều tuỳ chọn của lệnh fillet.

Chắc ý của bác ĐVH là :
(defun c:FF(/ e1 e2)
(setq e1 (car(entsel "Doi tuong 1 :")))(redraw e1 3)
(setq e2(car(entsel "Doi tuong 2 :")))(redraw e2 3)
(vl-cmdf ".MATCHPROP" e1 e2 "")
(initget "U P R T M ")
(setq ans (getstring "uNdo/Polyline/Radius/Trim/mUltiple"))
(cond
((= (strcase ans) "N")(command ".fillet" ans ""))
((= (strcase ans) "P")(command ".fillet" ans pause))
((wcmatch (strcase ans) "R,T,U")(command ".fillet" ans pause ".fillet" e1 e2))
(T (command ".fillet" e1 e2))
)
)

  • 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


#14 vetgo

vetgo

    biết vẽ polygon

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

Đã gửi 04 August 2011 - 12:13 PM

Chắc ý của bác ĐVH là :

(defun c:FF(/ e1 e2)
(setq e1 (car(entsel "Doi tuong 1 :")))(redraw e1 3)
(setq e2(car(entsel "Doi tuong 2 :")))(redraw e2 3)
(vl-cmdf ".MATCHPROP" e1 e2 "")
(initget "U P R T M ")
(setq ans (getstring "uNdo/Polyline/Radius/Trim/mUltiple"))
(cond
((= (strcase ans) "N")(command ".fillet" ans ""))
((= (strcase ans) "P")(command ".fillet" ans pause))
((wcmatch (strcase ans) "R,T,U")(command ".fillet" ans pause ".fillet" e1 e2))
(T (command ".fillet" e1 e2))
)
)

Chuẩn luôn, nhưng lựa chọn Trim đang có vấn đề, vẫn không lấy được hết các lựa chọn của Cad về lệnh Fillet!
  • 0
Nếu nội dung post là có ích, xin tick + để thăng hàm lên lương...

#15 vetgo

vetgo

    biết vẽ polygon

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

Đã gửi 04 August 2011 - 12:18 PM

Bạn thử xem :


(defun c:f(/ e1 e2 FR)
(or *FR* (setq *FR* (getvar "filletrad")))
(setq FR (getreal (strcat "\n Nhap ban kinh Fillet < " (rtos *FR*) " > :")))
(if FR (setq *FR* FR) (setq FR *FR*))
(setvar "filletrad" FR)

(setq e1 (car(entsel "Doi tuong 1 :")))(redraw e1 3)
(setq e2(car(entsel "Doi tuong 2 :")))(redraw e2 3)
(vl-cmdf ".MATCHPROP" e1 e2 "")
(command ".fillet" e1 e2 )
)

Cái này của bác chỉ giải quyết được lựa chọn bán kính, ý của bạn Doan van Ha là muốn lựa chọn tùy biến trong lệnh Fillter gốc của cad cơ.
Select first object or [Undo/Polyline/Radius/Trim/Multiple]
  • 0
Nếu nội dung post là có ích, xin tick + để thăng hàm lên lương...

#16 lp_hai

lp_hai

    biết lệnh measure

  • Members
  • PipPipPipPipPipPip
  • 456 Bài viết
Điểm đánh giá: 202 (khá)

Đã gửi 04 August 2011 - 01:03 PM

Cái này của bác chỉ giải quyết được lựa chọn bán kính, ý của bạn Doan van Ha là muốn lựa chọn tùy biến trong lệnh Fillter gốc của cad cơ.
Select first object or [Undo/Polyline/Radius/Trim/Multiple]

theo em thì lệnh F wan trọng nhất là Radius và Multiple thôi, mà R thì giải quyết rồi, M thì nên cho nó cái vòng lập While chắc là ổn.
còn những caí kia thì không cần, nhưng tốt nhất là đặt tên lệnh lại là ff hay gì đó cho khác F, để lỡ khi dùng tới những tùy chọn kia thì gõ lệnh F của cad
với lại em thấy lisp này cũng chưa đạt yêu cầu vì mỗi lần dùng lệnh là lisp hỏi chọn R
  • 1
Hình đã gửi

#17 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 04 August 2011 - 02:04 PM

Chuẩn luôn, nhưng lựa chọn Trim đang có vấn đề, vẫn không lấy được hết các lựa chọn của Cad về lệnh Fillet!

Hề hề hề,
Cái này có nhanh hơn dùng CAD không ta??? Sao phải khổ vầy cà???
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#18 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 04 August 2011 - 02:18 PM

Định nghĩa lại thì mệt lắm hè...

(defun c:f nil
(initget "U P R T M ")
(setq e1 (entsel "\nSelect first object or [uNdo/Polyline/Radius/Trim/mUltiple]:"))
(cond
((listp e1)(setq e1 (car e1))(redraw e1 3)(setq e2(car(entsel "Second object :")))(redraw e2 3)(vl-cmdf ".MATCHPROP" e1 e2 "")(command ".fillet" e1 e2))
((= (strcase e1) "N")(command ".fillet" e1 ""))
((= (strcase e1) "P")(command ".fillet" e1 pause))
((wcmatch (strcase e1) "R,T")(command ".fillet" e1 pause "")
(setq e1 (car(entsel "Select first object :")))(redraw e1 3)
(setq e2(car(entsel "Second object :")))(redraw e2 3)
(vl-cmdf ".MATCHPROP" e1 e2 "")
(command ".fillet" e1 e2))
((= (strcase e1) "U")
(while (and (setq e1 (car(entsel "Select first object :")))
(setq e2(car(entsel "Second object :"))))
(vl-cmdf ".MATCHPROP" e1 e2 "")
(command ".fillet" e1 e2)))
(T (setq e1 (car(entsel "Select first object :")))(redraw e1 3)
(setq e2(car(entsel "Second object :")))(redraw e2 3)
(vl-cmdf ".MATCHPROP" e1 e2 "")
(command ".fillet" e1 e2))
)
)

  • 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