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

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

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

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 ạ

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ạ 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:

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

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

)

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

À 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]:

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

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

  • 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

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ể?

  • 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

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

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

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

)

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­ư 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 ^^

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­ư 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.

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

  • 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

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

  • 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

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!

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

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

  • 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

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à???

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

  • 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

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  

×