Đến nội dung


Hình ảnh
* * - - - 1 Bình chọn

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


  • Please log in to reply
171 replies to this topic

#101 huynhphuongdesigner

huynhphuongdesigner

    biết vẽ circle

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

Đã gửi 09 November 2011 - 11:25 AM

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

  • 0

#102 lp_hai

lp_hai

    biết lệnh measure

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

Đã gửi 09 November 2011 - 01:42 PM

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

#103 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 09 November 2011 - 01:55 PM

Đố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 :)
  • 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


#104 huynhphuongdesigner

huynhphuongdesigner

    biết vẽ circle

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

Đã gửi 09 November 2011 - 02:04 PM

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

#105 lp_hai

lp_hai

    biết lệnh measure

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

Đã gửi 09 November 2011 - 02:17 PM

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

#106 huynhphuongdesigner

huynhphuongdesigner

    biết vẽ circle

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

Đã gửi 09 November 2011 - 02:23 PM

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

  • 0

#107 lp_hai

lp_hai

    biết lệnh measure

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

Đã gửi 09 November 2011 - 02:39 PM

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

#108 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 09 November 2011 - 02:39 PM

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


#109 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 09 November 2011 - 02:40 PM

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

#110 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 09 November 2011 - 03:04 PM

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


#111 huynhphuongdesigner

huynhphuongdesigner

    biết vẽ circle

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

Đã gửi 09 November 2011 - 03:34 PM

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



  • 0

#112 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 09 November 2011 - 03:54 PM

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

#113 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 09 November 2011 - 03:56 PM

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

#114 huynhphuongdesigner

huynhphuongdesigner

    biết vẽ circle

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

Đã gửi 09 November 2011 - 04:07 PM

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

#115 lp_hai

lp_hai

    biết lệnh measure

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

Đã gửi 09 November 2011 - 04:15 PM

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

#116 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 09 November 2011 - 04:24 PM

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

#117 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 09 November 2011 - 04:34 PM

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

#118 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 09 November 2011 - 04:34 PM

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.


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


#119 huynhphuongdesigner

huynhphuongdesigner

    biết vẽ circle

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

Đã gửi 10 November 2011 - 08:14 AM

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

#120 lp_hai

lp_hai

    biết lệnh measure

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

Đã gửi 10 November 2011 - 09:08 AM

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