Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
ketxu

[Hỏi] Cùng nhau học LISP

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

Đoạn code ma ban Binh sửa: (command "offset" o (setq arc2 (entsel "chon doi tuong:")) thay bằng (command "offset" o arc1 '(-1.5707 -60) ""). Máy khong hieu offset mot đoạn 20mm. Ban co the chỉ lai minh phan này. Con doan: (command "pedit" arc2 "y" "j" (ssget) "") (setq a9 (entlast)) (command "extrude" a9 "" h1) máy nó trả về : "Select objects:

3 segments added to polyline

 

Enter an option [Open/Join/Width/Edit vertex/Fit/Spline/Decurve/Ltype

gen/Reverse/Undo]: extrude

Invalid option keyword.

; error: Function cancelled". Khi ma minh zoom man hình thi phan offset no khong hiểu theo toa độ mình muốn:

1-1.jpg

Mong hồi đáp của ban Bình va các huynh....

;;;;bat dau hoc
(defun c:apo()
 (setq p1 (getpoint "\ndiem chuan"))
;;; doi mau
 (command "color" 1)
;;;;nhap khoang cach
 (setq x (getreal "\nchieu cao:"))
 (setq l (getreal "\nchieu dai theo truc x:"))
 (setq h (getreal "\nchieu cao cung:"))
 (setq o (getreal "\nkhoang cach:"))
 (setq p2 (polar p1 (/ pi 2) x))
 (setq d1 (command "line" p1 p2 ""))
 (setq p3 (polar p2 0.0 l))
(setq p4 (polar p3 (-(/ pi 2)) x))
(setq d2 (command "line" p3 p4 ""))
;;;;ket thuc mot cai
 (setq p5 (polar p2 0.0 (/ l 2)))
 (setq p6 (polar p5 (/ pi 2) h))
;;;; ve arc
 (setq arc1 (command "arc" p3 p6 p2 ""))
;;;; offset
 (command "offset" o
  (setq arc2 (entsel "chon doi tuong:"))
  '(-1.5707 -60) "e")
  (command "zoom" "all")
(command "fillet" "r" 0 "")
 (command "fillet" (entsel "\n Chon doi tuong 1")
(entsel "\n Chon doi tuong 2") "")
 (command "fillet" (entsel "\n Chon doi tuong 3")
(entsel "\n Chon doi tuong 4") "")
  (setq h1 (getreal "\nchieu cao doi tuong:"))
 (command "pedit" arc2 "y" "j" (ssget) "")
  (setq a9 (entlast))
(command "extrude" a9 "" h1)
 (princ)
 )

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
lp_hai    207
Đoạn code ma ban Binh sửa: (command "offset" o (setq arc2 (entsel "chon doi tuong:")) thay bằng (command "offset" o arc1 '(-1.5707 -60) ""). Máy khong hieu offset mot đoạn 20mm. Ban co the chỉ lai minh phan này. Con doan: (command "pedit" arc2 "y" "j" (ssget) "") (setq a9 (entlast)) (command "extrude" a9 "" h1) máy nó trả về : "Select objects: 3 segments added to polyline Enter an option [Open/Join/Width/Edit vertex/Fit/Spline/Decurve/Ltype gen/Reverse/Undo]: extrude Invalid option keyword. ; error: Function cancelled". Khi ma minh zoom man hình thi phan offset no khong hiểu theo toa độ mình muốn: 1-1.jpg Mong hồi đáp của ban Bình va các huynh....

nguyên nhân là đây nè:

(command "pedit" arc2 "y" "j" (ssget) "")

bạn bỏ "y" khỏi đoạn code đi là đượ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
ketxu    2.649

Đối số "y" đằng sau lệnh Pedit sẽ còn phụ thuộc vào các đối tượng bạn chọn (có chứa Line, Arc.. hay không ?)

Gợi ý bạn biến sysvar Peditaccept :)

  • 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

Mình bỏ thử nhưng đâu co khac j. Nó con hoi co yes hay no. Ban đã làm thử chưa?? giup thi giup cho chot nha ban. thanks bạn

Bạn ketxu minh có tìm biến sysvar peditaccept nhung khong thấy, ban co the giai thich ro hon duoc không?

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
lp_hai    207

Mình bỏ thử nhưng đâu co khac j. Nó con hoi co yes hay no. Ban đã làm thử chưa?? giup thi giup cho chot nha ban. thanks bạn

Thú thật mình ko biết bạn bực mình hay sao àh? Ở đây mình góp ý vậy, có thể đúng hoặc chưa đúng. nhưng ko ai có ý chọc tức bạn hay là nói cho DZui đâu.

Bạn thay dòng code trên bằng cách thêm một "" ở cuối đoạn code. MÌnh thử và thấy OK.

(command "pedit" arc2 "y" "j" (ssget) "" "")

vì dấu nháy đầu tiên là kết thúc chọn dt, thêm một dấu để kết thúc lệ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

Trời cuối cùng tui da lam hoan thanh. Thanks bác Bình, ketxu, lp_hai. Neu cac bác con thay nen sua phan gi nua. Dong gop cho minh them nha.

;;;;bat dau hoc
(defun c:apo()
 (setq p1 (getpoint "\ndiem chuan"))
;;; doi mau
 (command "color" 1)
;;;;nhap khoang cach
 (setq x (getreal "\nchieu cao:"))
 (setq l (getreal "\nchieu dai theo truc x:"))
 (setq h (getreal "\nchieu cao cung:"))
 (setq o (getreal "\nkhoang cach:"))
 (setq p2 (polar p1 (/ pi 2) x))
 (setq d1 (command "line" p1 p2 ""))
 (setq p3 (polar p2 0.0 l))
(setq p4 (polar p3 (-(/ pi 2)) x))
(setq d2 (command "line" p3 p4 ""))
;;;;ket thuc mot cai
 (setq p5 (polar p2 0.0 (/ l 2)))
 (setq p6 (polar p5 (/ pi 2) h))
;;;; ve arc
 (setq arc1 (command "arc" p3 p6 p2 ""))
;;;; offset
 (command "offset" o
  (setq arc2 (entsel "chon doi tuong:"))
  '(-1.5707 -60) "e")
  (command "zoom" "all")
(command "fillet" "r" 0 "")
 (command "fillet" (entsel "\n Chon doi tuong 1")
(entsel "\n Chon doi tuong 2") "")
 (command "fillet" (entsel "\n Chon doi tuong 3")
(entsel "\n Chon doi tuong 4") "")
  (setq h1 (getreal "\nchieu cao doi tuong:"))
 (command "pedit" arc2 "Y" "j" (ssget "X") "" "")
  (setq a9 (entlast))
(command "extrude" a9 "" h1)
 (princ)
 )

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
lp_hai    207

Trời cuối cùng tui da lam hoan thanh. Thanks bác Bình, ketxu, lp_hai. Neu cac bác con thay nen sua phan gi nua. Dong gop cho minh them nha.

;;;;bat dau hoc
(defun c:apo()
 (setq p1 (getpoint "\ndiem chuan"))
;;; doi mau
 (command "color" 1)
;;;;nhap khoang cach
 (setq x (getreal "\nchieu cao:"))
 (setq l (getreal "\nchieu dai theo truc x:"))
 (setq h (getreal "\nchieu cao cung:"))
 (setq o (getreal "\nkhoang cach:"))
 (setq p2 (polar p1 (/ pi 2) x))
 (setq d1 (command "line" p1 p2 ""))
 (setq p3 (polar p2 0.0 l))
(setq p4 (polar p3 (-(/ pi 2)) x))
(setq d2 (command "line" p3 p4 ""))
;;;;ket thuc mot cai
 (setq p5 (polar p2 0.0 (/ l 2)))
 (setq p6 (polar p5 (/ pi 2) h))
;;;; ve arc
 (setq arc1 (command "arc" p3 p6 p2 ""))
;;;; offset
 (command "offset" o
  (setq arc2 (entsel "chon doi tuong:"))
  '(-1.5707 -60) "e")
  (command "zoom" "all")
(command "fillet" "r" 0 "")
 (command "fillet" (entsel "\n Chon doi tuong 1")
(entsel "\n Chon doi tuong 2") "")
 (command "fillet" (entsel "\n Chon doi tuong 3")
(entsel "\n Chon doi tuong 4") "")
  (setq h1 (getreal "\nchieu cao doi tuong:"))
 (command "pedit" arc2 "Y" "j" (ssget "X") "" "")
  (setq a9 (entlast))
(command "extrude" a9 "" h1)
 (princ)
 )

Lisp chạy thì đúng với yêu cầu rồi. Nhưng phần chọn đối tượng thì chưa ổn. Bạn đọc kỹ lại chỉ dẫn của bác Bình nha. Bạn chỉ làm theo lời bác ấy có một nửa thôi:

VD như bạn (setq d1 (command "line" p1 p2 ""))

mà ko ứng dụng thằng d1 này vào lệnh fillet, tương tự như đoạn:

(command "offset" o

(setq arc2 (entsel "chon doi tuong:"))

'(-1.5707 -60) "e")

bạn lại phải chọn lại cái arc, trong khi đó bạn đã có nó là arc1

thì bạn phải sửa là:

(command "offset" o arc1 '(-1.5707 -60) "e")

(setq arc2 (entlast))

khi này bạn đã có arc2. Bạn hãy thay chúng vào lệnh fillet mà ko cần phải chọn lại dt:

(command "fillet" arc2 d1)

....

bạn thử xem thế nào

Hic (setq d1 (command "line" p1 p2 ""))

dòng lệnh này ko ổn rồi!

Phải là thế này:

(command "line" p1 p2 "")

(setq d1 (entlast))

như vậy nó mới hiểu d1

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    2.649

Nhắc bạn huynhphuongdesigner lần cuối cùng, nếu các bài viết tiếp theo còn không type dấu mình sẽ del toàn bộ. Cám ơn 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
phamthanhbinh    3.123

Mình bỏ thử nhưng đâu co khac j. Nó con hoi co yes hay no. Ban đã làm thử chưa?? giup thi giup cho chot nha ban. thanks bạn

Hề hề hề,

Mình hơi bận nên giờ mới lên mạng được.

Về những thắc mắc của bạn ta sẽ từ từ xem nhé;

1/- (command "offset" o arc1 '(-1.5707 -60) ""). Máy khong hieu offset mot đoạn 20mm.

Cái ni bạn hãy chú ý cái tham số o. Theo cú pháp của lệnh offset thì o chính là tham số chỉ khoảng cách cần offset. Vì trong lisp của bạn đã có cái định nghĩa về tham số này rồi nên mình không định nghĩa lại nữa. Nếu bạn tách riêng đoạn code này ra khỏi cái lisp của bạn thì tất yếu sẽ không có cái tham số này. hãy kiểm tra lại nhé vì mình thấy cú pháp của câu lệnh này không sai.

2/- (command "pedit" arc2 "y" "j" (ssget) "") (setq a9 (entlast)) (command "extrude" a9 "" h1) máy nó trả về : "Select objects: 3 segments added to polyline Enter an option [Open/Join/Width/Edit vertex/Fit/Spline/Decurve/Ltype gen/Reverse/Undo]: extrude Invalid option keyword. ; error: Function cancelled".

Ấy là do cú pháp của câu lệnh này : (command "pedit" arc2 "y" "j" (ssget) "") chưa đầy đủ bạn ạ.

Lỗi là do mình không kiểm lại mà cứ nhớ phuong phưởng nó mà thôi.

Với câu lệnh này sau khi nó joint các đoạn lại thành một polyline duy nhất thì nó sẽ xuất hiện Enter an option [Open/Join/Width/Edit vertex/Fit/Spline/Decurve/Ltype gen/Reverse/Undo]

 

Thực ra như bạn thấy nó đã liên kết được thêm 3 đoạn (segment) mới rồi đó.

Tuy nhiên đáng lý ra phải có thêm một cặp dấu nháy "" nữa để lisp hiểu rằng mình chẳng muốn chọn thêm gì nữa và thoát khỏi lệnh pedit thì mình lại quên cái cặp dấu nháy này (cái cặp dấu nháy đã có trong lisp mới chỉ có tác dụng kết thúc lệnh ssget để chọn đối tượng chứ chưa có tác dụng kết thúc lệnh pedit) .Vì thế nó chưa thoát được khỏi lệnh pedit nên nó vẫn tiếp tục hỏi và chờ bạn trả lời.

Tiếp sau đó là lệnh extrude, lúc này lisp hiểu cái "extrude" này là tham số bạn chọn tiếp theo của lệnh pedit mà lệnh này lại chẳng hề có tham số nào như vậy. Thế nên mới có thông báo: extrude Invalid option keyword. ; error: Function cancelled"

 

Vì vậy với cái lỗi ngớ ngẩn này của mình bạn chỉ cần thêm một cặp dấu nháy "" nữa vào cuối câu lệnh trên để thành (command "pedit" arc2 "y" "j" (ssget) "" "") là mình tin nó sẽ khỏi bệnh mà.

 

Hề hề hề, thực ra do bạn mới làm lisper nên mới gặp khó khi thấy những lỗi này. Nếu thêm độ vài giờ kính nghiệm làm lisp nữa thì bạn sẽ dễ dàng nháy mắt với mấy cái lỗi ngớ ngẩn này ngay ý mà.

Thành thật xin lỗi bạn vì đã ngớ ngẩn.

 

Hề hề hề,

Bạn hãy thử tự chứng minh những điều mình nói xem 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
Doan Van Ha    2.676

Bạn không thể lấy đối tượng line kiểu này được đâu nhé. Khi mới học lisp cứ ngỡ vẽ line xong rồi setq là lấy được nó, nhưng không. Muốn lấy nó thì dùng (entlast) hoặc thay hàm command bởi entmakex

(setq d1 (command "line" p1 p2 ""))

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ác huynh đã quên khi fillet ta chọn đối tượng pick gần nhất nó mới kín được. không sẽ thành ra như vậy nè. Chờ hồi âm từ các huynh nhanh nhất.

2-1.jpg

Theo cách của bạn Bình mình bỏ O trong đoạn: 1/ (command "offset" o arc1 '(-1.5707 -60) "") thì máy nó bắt chon đối tượng và nhập khoảng cách offset. Lúc này càng phức tạp hơn. Ban xem lại thử nha.

 

;;;;bat dau hoc
(defun c:apo()
 (setq p1 (getpoint "\ndiem chuan"))
;;; doi mau
 (command "color" 1)
;;;;nhap khoang cach
 (setq x (getreal "\nchieu cao:"))
 (setq l (getreal "\nchieu dai theo truc x:"))
 (setq h (getreal "\nchieu cao cung:"))
 (setq o (getreal "\nkhoang cach:"))
 (setq p2 (polar p1 (/ pi 2) x))
 (command "line" p1 p2 "")
 (setq d1 (entlast))
 (setq p3 (polar p2 0.0 l))
(setq p4 (polar p3 (-(/ pi 2)) x))
(command "line" p3 p4 "")
(setq d2 (entlast))
;;;;ket thuc mot cai
 (setq p5 (polar p2 0.0 (/ l 2)))
 (setq p6 (polar p5 (/ pi 2) h))
;;;; ve arc
 (command "arc" p3 p6 p2 "")
 (setq arc1 (entlast))
;;;; offset
 (command "offset" o
   (entsel "chon doi tuong:")'(-1.5707 -60) "e")
 (setq arc2 (entlast))
  (command "zoom" "all")
(command "fillet" "r" 0 "")
 (command "fillet" arc2 d1 )
 (command "fillet" d2 arc2 )
  (setq h1 (getreal "\nchieu cao doi tuong:"))
 (command "pedit" arc2 "Y" "j" (ssget "X") "" "")
  (setq a9 (entlast))
(command "extrude" a9 "" h1)
 (princ)
 )[/b]
[b]

 

 

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
phamthanhbinh    3.123

Trời cuối cùng tui da lam hoan thanh. Thanks bác Bình, ketxu, lp_hai. Neu cac bác con thay nen sua phan gi nua. Dong gop cho minh them nha.

;;;;bat dau hoc
(defun c:apo()
 (setq p1 (getpoint "\ndiem chuan"))
;;; doi mau
 (command "color" 1)
;;;;nhap khoang cach
 (setq x (getreal "\nchieu cao:"))
 (setq l (getreal "\nchieu dai theo truc x:"))
 (setq h (getreal "\nchieu cao cung:"))
 (setq o (getreal "\nkhoang cach:"))
 (setq p2 (polar p1 (/ pi 2) x))
 (setq d1 (command "line" p1 p2 ""))
 (setq p3 (polar p2 0.0 l))
(setq p4 (polar p3 (-(/ pi 2)) x))
(setq d2 (command "line" p3 p4 ""))
;;;;ket thuc mot cai
 (setq p5 (polar p2 0.0 (/ l 2)))
 (setq p6 (polar p5 (/ pi 2) h))
;;;; ve arc
 (setq arc1 (command "arc" p3 p6 p2 ""))
;;;; offset
 (command "offset" o
  (setq arc2 (entsel "chon doi tuong:"))
  '(-1.5707 -60) "e")
  (command "zoom" "all")
(command "fillet" "r" 0 "")
 (command "fillet" (entsel "\n Chon doi tuong 1")
(entsel "\n Chon doi tuong 2") "")
 (command "fillet" (entsel "\n Chon doi tuong 3")
(entsel "\n Chon doi tuong 4") "")
  (setq h1 (getreal "\nchieu cao doi tuong:"))
 (command "pedit" arc2 "Y" "j" (ssget "X") "" "")
  (setq a9 (entlast))
(command "extrude" a9 "" h1)
 (princ)
 )

Hề hề hề,

Trâu chậm uống nước đục. té ra bạn đã tìm được lỗi và tự mình hoán thành cái lisp theo ý bạn.

Tuy nhiên ngoài những điểm đã nói lúc trước, bạn cần lưu ý thêm những điểm sau đây nhé.

1/- Hàm (command .......) được dùng trong lisp để gọi các lệnh của CAD và được sử dụng đúng theo cú pháp của lệnh này khi gõ trên dòng command. Hàm này có đặc điểm là luôn trả về giá trị nil khi kết thúc chứ không trả về giá trị biến cuối cùng như các hàm lisp khác. Đó là lý do mà bác DoanVanHa và bạn lp_hai đã nhắc nhở bạn.

2/- Hàm (ssget ..... ) khi dùng với tham số "x" mà lại không có bộ lọc nào kèm theo thì nó sẽ lựa chọn tuốt luột tất cả mọi đối tượng có trong bản vẽ của bạn, kể cả các đối tượng nằm trên các lớp ẩn. Do vậy nên thận trọng khi dùng kẻo làm cho lisp nó nặng chình chịch bạn ạ.

Trong trường hợp của bạn, nếu bản vẽ đã có sẵn vài chục ngàn em rùi và bạn muốn vẽ thêm cái lưng ghế này thì bạn sẽ biết tay nhau ngay ý mà.....

Hề hề hề,

Chúc bạn thành công trong sự nghiệp và cuộc sống.

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
phamthanhbinh    3.123

Các huynh đã quên khi fillet ta chọn đối tượng pick gần nhất nó mới kín được. không sẽ thành ra như vậy nè. Chờ hồi âm từ các huynh nhanh nhất.

2-1.jpg

Theo cách của bạn Bình mình bỏ O trong đoạn: 1/ (command "offset" o arc1 '(-1.5707 -60) "") thì máy nó bắt chon đối tượng và nhập khoảng cách offset. Lúc này càng phức tạp hơn. Ban xem lại thử nha.

 

 

Hề hề hề,

Bạn Bình nào bảo bạn bỏ tham số o trong lệnh offset vậy????

Hổng nhẽ mình lẩm cẩm thiệt rồi sao???? Hu hu hu.....

Bạn coi kỹ lại nha, mình viết có tham số o đàng hoàng cơ mà. Hổng nhẽ diễn đàn lại thu phí bằng cái chữ o đó của mình....

Hề hề hề,....

  • 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

Đa tạ bác Bình đã chỉ giáo tận tình. Nhưng hiên tại mình làm theo yêu cầu của các huynh là không cần chọn đối tượng để fillet mà dùng lệnh : (command "line" p1 p2 "") (setq d1 (entlast)) để nhận diện line và arc. Nhưng nếu làm vậy thì bị lỗi giống hình mình đã post. Chờ các bác hồi âm....

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
lp_hai    207

Cũng như em nói ở trên. Lisp chạy thì OK nhưng cách chọn đt thì bị trùng lấp nhiều quá. Tỷ như chuyện chọn arc thì phải chọn 2 lần, setq d1 d2 mà ko để ứng dụng dc gì. Em có nói bác ấy là (command "fillet" arc2 d1) thiệt là bậy wá. Xin lỗi mấy bác!

Thành thử em đền cho bác ấy lisp sau. Cơ bản là như vậy như bạn chỉ cần nhập đầu vào một lần. Còn nhập chiều cao bạn có thể đem lên trên để cho lisp chạy cái một thì hay hơn.

(defun c:appo()
 (setq p1 (getpoint "\ndiem chuan"))
;;; doi mau
 (command "color" 1)
;;;;nhap khoang cach
 (setq x (getreal "\nchieu cao:"))
 (setq l (getreal "\nchieu dai theo truc x:"))
 (setq h (getreal "\nchieu cao cung:"))
 (setq o (getreal "\nkhoang cach:"))
 (setq p2 (polar p1 (/ pi 2) x))
 (command "line" p1 p2 "")
 (setq d1 (entlast))
 (setq p3 (polar p2 0.0 l))
(setq p4 (polar p3 (-(/ pi 2)) x))
(command "line" p3 p4 "")
 (setq d2 (entlast))
;;;;ket thuc mot cai
 (setq p5 (polar p2 0.0 (/ l 2)))
 (setq p6 (polar p5 (/ pi 2) h))
;;;; ve arc
 (command "arc" p3 p6 p2 "")
 (setq arc1 (entlast))
;;;; offset 
  (command "offset" o arc1
  '(-1.5707 -60) "e")
 (setq arc2 (entlast))
 (command "extend" arc2 "" "e" "e" d1 d2 "")
 (setq p7 (vlax-curve-getEndPoint arc2))
 (entdel arc2)
 (command "arc" (vlax-curve-getstartPoint d1) p7 (vlax-curve-getEndPoint d2))
 (setq arc2 (entlast))
  (setq h1 (getreal "\nchieu cao doi tuong:"))
 (command "pedit" arc2 "Y" "j" arc1 d1 d2 "" "")
  (setq a9 (entlast))
(command "extrude" a9 "" h1)
 (command "extend" "" "e" "n" "")
 (princ)
 ) 

Cách sửa của mình như sau:

tìm điểm p7 là điểm nằm trên arc2

sau đó extend cho đường d1 và d2 tới arc2 (cái này do em gà nên ko biết lấy điểm giao giữ 2 thằng này, bác nào biết chỉ giùm em luôn ah!! :) )

vẽ lại arc2 theo 3 điểm là điểm đầu d1 diểm p7 và điểm cuối của d2

lệnh pedit khi này không cần chọn đối tượng mà lisp tự gom arc1 arc2 d1 và d2 luô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
phamthanhbinh    3.123

Đa tạ bác Bình đã chỉ giáo tận tình. Nhưng hiên tại mình làm theo yêu cầu của các huynh là không cần chọn đối tượng để fillet mà dùng lệnh : (command "line" p1 p2 "") (setq d1 (entlast)) để nhận diện line và arc. Nhưng nếu làm vậy thì bị lỗi giống hình mình đã post. Chờ các bác hồi âm....

Hề hề hề,

Huynh hay đệ còn chửa biết. Nhưng mà:

Đúng là cái thằng fillet này cũng hơi oái oăm. Theo ngu ý của mình thì cái lỗi ni có nhẽ do cái biến x của bạn hơi bị ..... thừa. Bi giờ bạn thử nhập giá trị biến x bằng với giá trị của biến o coi sao 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
phamthanhbinh    3.123

Cũng như em nói ở trên. Lisp chạy thì OK nhưng cách chọn đt thì bị trùng lấp nhiều quá. Tỷ như chuyện chọn arc thì phải chọn 2 lần, setq d1 d2 mà ko để ứng dụng dc gì. Em có nói bác ấy là (command "fillet" arc2 d1) thiệt là bậy wá. Xin lỗi mấy bác!

Thành thử em đền cho bác ấy lisp sau. Cơ bản là như vậy như bạn chỉ cần nhập đầu vào một lần. Còn nhập chiều cao bạn có thể đem lên trên để cho lisp chạy cái một thì hay hơn.

 

Cách sửa của mình như sau:

tìm điểm p7 là điểm nằm trên arc2

sau đó extend cho đường d1 và d2 tới arc2 (cái này do em gà nên ko biết lấy điểm giao giữ 2 thằng này, bác nào biết chỉ giùm em luôn ah!! :) )

vẽ lại arc2 theo 3 điểm là điểm đầu d1 diểm p7 và điểm cuối của d2

lệnh pedit khi này không cần chọn đối tượng mà lisp tự gom arc1 arc2 d1 và d2 luôn

....

Hề hề hề,

Bác lp_hai nhanh tay thế,

Cái vụ extend này bác phải coi chừng đó nghen. Vì nó phụ thuộc vào cái biến x của bạn chủ thớt. Khi x đủ to thì hổng xài extend được mà thậm chí còn phải trim đó bác ạ.

Cái hàm tìm giao điểm giữa hai đối tượng này trong express tools đã có. Đó là (acet-geom-intersectwith en1 en2 flag) trong đó en1 en2 là ename của hai đối tượng cần tìm, flag là mã để xác định kiểu tìm giao như sau:

- 0: không mở rộng 2 đối tượng en1 en2

- 1: mở rộng đối tượng en1, không mở rộng đối tượng en2.

- 2: không mở rộng đối tượng en1, mở rộng đối tượng en2.

- 3: mở rộng 2 đối tượng en1 en2

Hề hề hề,

  • 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
Doan Van Ha    2.676

sau đó extend cho đường d1 và d2 tới arc2 (cái này do em gà nên ko biết lấy điểm giao giữ 2 thằng này, bác nào biết chỉ giùm em luôn ah!!

Bạn lp_hai dùng hàm (acet-geom-intersectwith en1 en2 flag)

Hàm trả về listpoint tọa độ các điểm giao của 2 đối tượng en1 en2. Flag là số interger, cờ quy định các kiểu giao:

- 0: không mở rộng 2 đối tượng en1, en2

- 1: mở rộng đối tượng en1, không mở rộng đối tượng en2.

- 2: không mở rộng đối tượng en1, mở rộng đối tượng en2.

- 3: mở rộng 2 đối tượng en1 en2

Thứ tự giao điểm sắp xếp lần lượt theo chiều của en1.
  • 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
lp_hai    207

Trước hết thanks bác lp_hai. Nhưng minh sử dụng lisp đó nó đâu có tạo thành 1 biên dạng kín đâu. Bác xem lại giúp nha.....

(defun c:appo(/ p1 p2 p3 p4 p5 p6 x o h1 d1 d2 os a9)
 (setq p1 (getpoint "\ndiem chuan"))
(setq os (getvar "osmode"))
(setvar "osmode" 0)
;;; doi mau
 (command "color" 1)
;;;;nhap khoang cach
 (setq x (getreal "\nchieu cao:"))
 (setq l (getreal "\nchieu dai theo truc x:"))
 (setq h (getreal "\nchieu cao cung:"))
 (setq o (getreal "\nkhoang cach:"))
 (setq p2 (polar p1 (/ pi 2) x))
 (command "line" p1 p2 "")
 (setq d1 (entlast))
 (setq p3 (polar p2 0.0 l))
(setq p4 (polar p3 (-(/ pi 2)) x))
(command "line" p3 p4 "")
 (setq d2 (entlast))
;;;;ket thuc mot cai
 (setq p5 (polar p2 0.0 (/ l 2)))
 (setq p6 (polar p5 (/ pi 2) h))
;;;; ve arc
 (command "arc" p3 p6 p2)
 (setq arc1 (entlast))
;;;; offset
  (command "offset" o arc1
  p1 "e");;cai nay de offset luon ve phia p1, ko phu thuoc vao vi tri ban dang ve
 (setq arc2 (entlast))
 (command "Pline" (nth 1(acet-geom-intersectwith arc2 d1 3)) "a" "S"
(vlax-curve-getEndPoint arc2) (nth 0(acet-geom-intersectwith arc2 d2 3)) "L" p3 "a" "s" p6 p2 "l" "c"
);;cai nay ve lai toan bo hinh thanh mot Pline, ko can phai dung them lenh pedit de noi cac duong
;xoa cac duong cu
 (entdel arc2)
 (entdel d1)
 (entdel d2)
 (entdel arc1)
  (setq h1 (getreal "\nchieu cao doi tuong:"));;doan nay ban co the dem lenh tren de lisp lam viec lien tuc
  (setq a9 (entlast))
(command "extrude" a9 "" h1)
(setvar "osmode" os)
 (princ)
 )

bạn test lại thử xem! Mình mới áp dụng cách lấy điểm giao nhau giữa 2 đường. Bạn nhớ thanks 2 bác ở trên luôn nha!

:) thâ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

Hề hề hề,

Huynh hay đệ còn chửa biết. Nhưng mà:

Đúng là cái thằng fillet này cũng hơi oái oăm. Theo ngu ý của mình thì cái lỗi ni có nhẽ do cái biến x của bạn hơi bị ..... thừa. Bi giờ bạn thử nhập giá trị biến x bằng với giá trị của biến o coi sao nhé.

Bác Bình mình đã thử theo cách bạn, Cung arc và line không cắt nhau. Heee thiệt là làm khổ bác quá đi.

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

(defun c:appo(/ p1 p2 p3 p4 p5 p6 p7 d1 d2 arc1 arc2 a9 os h1)
 (setq p1 (getpoint "\ndiem chuan"))
(setq os (getvar "osmode"))
(getvar "osmode" 0)
;;; doi mau
 (command "color" 1)
;;;;nhap khoang cach
 (setq x (getreal "\nchieu cao:"))
 (setq l (getreal "\nchieu dai theo truc x:"))
 (setq h (getreal "\nchieu cao cung:"))
 (setq o (getreal "\nkhoang cach:"))
 (setq p2 (polar p1 (/ pi 2) x))
 (command "line" p1 p2 "")
 (setq d1 (entlast))
 (setq p3 (polar p2 0.0 l))
(setq p4 (polar p3 (-(/ pi 2)) x))
(command "line" p3 p4 "")
 (setq d2 (entlast))
;;;;ket thuc mot cai
 (setq p5 (polar p2 0.0 (/ l 2)))
 (setq p6 (polar p5 (/ pi 2) h))
;;;; ve arc
 (command "arc" p3 p6 p2 "")
 (setq arc1 (entlast))
;;;; offset
  (command "offset" o arc1
  p1 "e");;cai nay de offset luon ve phia p1, ko phu thuoc vao vi tri ban dang ve
 (setq arc2 (entlast))
 (setq p7 (vlax-curve-getEndPoint arc2))
 (command "Pline" (nth 1(acet-geom-intersectwith arc2 d1 3)) "a" "S"
p7 (nth 0(acet-geom-intersectwith arc2 d2 3)) "L" p3 "a" "s" p6 p2 "l" "c"
);;cai nay ve lai toan bo hinh thanh mot Pline, ko can phai dung them lenh pedit de noi cac duong
;xoa cac duong cu
 (entdel arc2)
 (entdel d1)
 (entdel d2)
 (entdel arc1)
  (setq h1 (getreal "\nchieu cao doi tuong:"));;doan nay ban co the dem lenh tren de lisp lam viec lien tuc
  (setq a9 (entlast))
(command "extrude" a9 "" h1)
(getvar "osmode" os)
 (princ)
 )

bạn test lại thử xem! Mình mới áp dụng cách lấy điểm giao nhau giữa 2 đường. Bạn nhớ thanks 2 bác ở trên luôn nha!

:) thân!

1-3.jpg

1/ Bác Hai oi: mình muốn hai cung này song song. Cái của bác đâu có song song.

2/ Nếu nhập chiều cao lien la 50 nó fillet thanh ra như hình 2.

Bác xem lại nha.

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
lp_hai    207

Cái vụ extend này bác phải coi chừng đó nghen. Vì nó phụ thuộc vào cái biến x của bạn chủ thớt. Khi x đủ to thì hổng xài extend được mà thậm chí còn phải trim đó bác ạ.

 

đúng bác ah. Mà e thấy chủ thớt setq điểm hơi bị ngược. Nếu là e thì "điểm chuẩn" ko phải là p1 đâu, mà là p2. vì từ p2 mới vẽ ra dc cái arc1, còn p1 thì chỉ có ý nghĩa định hướng mà thôi, sau này cũng ko xài lại p1 nữa. Nếu setq p2 là chuẩn thì ko cần phải setq thêm p1 và p4. chỉ cần p2 và p3 là đủ vẽ rồi!?

hehhe, cảm ơn bác vụ (acet-geom-intersectwith...) nhờ vậy em thoát cái vụ extend phiền phứ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

 

đúng bác ah. Mà e thấy chủ thớt setq điểm hơi bị ngược. Nếu là e thì "điểm chuẩn" ko phải là p1 đâu, mà là p2. vì từ p2 mới vẽ ra dc cái arc1, còn p1 thì chỉ có ý nghĩa định hướng mà thôi, sau này cũng ko xài lại p1 nữa. Nếu setq p2 là chuẩn thì ko cần phải setq thêm p1 và p4. chỉ cần p2 và p3 là đủ vẽ rồi!?

hehhe, cảm ơn bác vụ (acet-geom-intersectwith...) nhờ vậy em thoát cái vụ extend phiền phức!

Bác Hải giải thích các hàm này nha: (setq p7 (vlax-curve-getEndPoint arc2))

(command "Pline" (nth 1(acet-geom-intersectwith arc2 d1 3)) "a" "S"

p7 (nth 0(acet-geom-intersectwith arc2 d2 3)) "L" p3 "a" "s" p6 p2 "l" "c"

). Mình chưa hiểu lắm

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
lp_hai    207
1-3.jpg 1/ Bác Hai oi: mình muốn hai cung này song song. Cái của bác đâu có song song. 2/ Nếu nhập chiều cao lien la 50 nó fillet thanh ra như hình 2. Bác xem lại nha.

SRR bạn, mình sửa lại rồi đó!

  • 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


×