Đến nội dung


Hình ảnh
5 stars - based on 24598 reviews
* * * - - 3 Bình chọn

Hướng dẫn lập trình Lisp


  • Please log in to reply
493 replies to this topic

#421 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 21 July 2012 - 04:41 PM

Sau đấy bạn đọc kỹ lại hàm <,>, hàm cond, bạn sẽ viết lại được lisp này ngắn và hay hơn nữa ^^
  • 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


#422 hmt

hmt

    biết lệnh scale

  • Members
  • PipPipPip
  • 146 Bài viết
Điểm đánh giá: -11 (hơi kém)

Đã gửi 01 December 2012 - 11:39 PM

các bác giải thích cho e dòng này đc ko ạ , e ko hiểu lắm @@ hàm polar và cách tính tọa độ của cái này trong cad ?

(setq
p1 (getpoint "\nDiem chuan: ")
p2 (polar p1 0.0 W)
p3 (polar p2 (/ pi 2) H1)
p4 (polar p3 pi W)
p5 (list (+ (car p4) (/ W 2)) (+ (cadr p4) H2))
  • 0

#423 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 02 December 2012 - 07:46 AM

Hàm polar là hàm xác định tọa độ 1 điểm theo 1 điểm cho trước trong hệ tọa độ cầu (khác với hệ tọa độ Đề các).
Để xác định điểm trong hệ tọa độ cầu cần biết:
- Điểm chuẩn p1 (điểm gốc).
- Góc hợp bởi p1p2 với trục X.
- Khoảng cách p1p2 (hay gọi là bán kính).
Như vậy:
(setq p2 (polar p1 (/ pi 6) 100)
Nghĩa là:
Lấy điểm p2 bằng cách: từ p1 vẽ góc 30 độ, trên đường thẳng này lấy điểm p2 cách p1 khoảng cách 100.
Chắc bạn hiểu?
  • 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.


#424 hmt

hmt

    biết lệnh scale

  • Members
  • PipPipPip
  • 146 Bài viết
Điểm đánh giá: -11 (hơi kém)

Đã gửi 02 December 2012 - 09:28 AM

thank bác , e đã hiểu như vậy ở đây điểm p1 là điểm chuẩn,bác cho e hỏi thêm là khi e load lisp NHA.lsp xong và nhập xong các thông số thì đến bước nhập điểm chuẩn. ở đây hàm getpoint này cho phép nhập tọa độ từ bàn phím và có thể pick bằng chuột lên 1 vị trí bất kì trên màn hình phải ko ạ? dòng :
p5 (list (+ (car p4) (/ W 2)) (+ (cadr p4) H2)) có thể dịch là ntn ạ
  • 0

#425 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 02 December 2012 - 09:36 AM

thank bác , e đã hiểu như vậy ở đây điểm p1 là điểm chuẩn,bác cho e hỏi thêm là khi e load lisp NHA.lsp xong và nhập xong các thông số thì đến bước nhập điểm chuẩn. ở đây hàm getpoint này cho phép nhập tọa độ từ bàn phím và có thể pick bằng chuột lên 1 vị trí bất kì trên màn hình phải ko ạ? dòng :
p5 (list (+ (car p4) (/ W 2)) (+ (cadr p4) H2)) có thể dịch là ntn ạ

1). Có thể pick điểm trên màn hình hoặc nhập x,y từ bàn phím. Cái này bạn có thể thử chứ cần gì phải hỏi.
2). p5 (list (+ (car p4) (/ W 2)) (+ (cadr p4) H2))
có nghĩa là điểm p5 là 1 điểm được xác định bằng list của x và y, trong đó x=(car p4)+(/ w 2) và y=(cadrp4)+H2.
  • 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.


#426 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 02 December 2012 - 09:48 AM

Hàm polar là hàm xác định tọa độ 1 điểm theo 1 điểm cho trước trong hệ tọa độ cầu (khác với hệ tọa độ Đề các).
Để xác định điểm trong hệ tọa độ cầu cần biết:
- Điểm chuẩn p1 (điểm gốc).
- Góc hợp bởi p1p2 với trục X.
- Khoảng cách p1p2 (hay gọi là bán kính).
.....

Hệ toạ độ này là hệ toạ độ cực mới đúng bác ơi.
  • 2

#427 hmt

hmt

    biết lệnh scale

  • Members
  • PipPipPip
  • 146 Bài viết
Điểm đánh giá: -11 (hơi kém)

Đã gửi 02 December 2012 - 10:33 AM

thank 2 bác :D e đã hiểu ạ rất mong đc sự chỉ dạy tận tình của các bác :D
  • 0

#428 hmt

hmt

    biết lệnh scale

  • Members
  • PipPipPip
  • 146 Bài viết
Điểm đánh giá: -11 (hơi kém)

Đã gửi 02 December 2012 - 12:13 PM

mọi ng cho e hỏi dòng này nữa ạ
(command "line" p1 p2 p3 p4 "c")
(command "line" p3 p5 p4 "")
ở đây là dòng thực thi lệnh vẽ xong e ko hiểu thế nào? vẽ bằng đối tượng line qua các điểm p1 p2 p3 p4 thế cái "c" này là gì ạ
  • 0

#429 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 02 December 2012 - 12:17 PM

Cái "c" nghĩa là "close", nghĩa là đóng về điểm đầu tiên.
Cái "" nghĩa là "enter", nghĩa là vẽ đến đó thì dừng.
  • 2

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


#430 hmt

hmt

    biết lệnh scale

  • Members
  • PipPipPip
  • 146 Bài viết
Điểm đánh giá: -11 (hơi kém)

Đã gửi 02 December 2012 - 12:36 PM

e thử thực hành với 1 cái lisp đơn giản là vẽ hình vuông cấu trúc như lisp vẽ nhà mà cad toàn báo thiếu đối số error: too few arguments


(defun C:vhv(/a b p1 p2 p3 p4 )
;;;Nhap so lieu
(setq
a(getreal"\nchieu dai a=")
b(getreal"\nchieu rong b=")
p1(getpoint"\ndiem chuan: ")
;;;Tinh toa do
p2(polar p1 0.0 a)
p3(polar p2 (/pi 2) b )
p4(polar p3 pi a)
)
;;;ve hinh vuong
(comand "line" p1 p2 p3 p4"c")
)

vậy chỗ này e thiếu chỗ nào ạ ?
  • 0

#431 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 02 December 2012 - 12:47 PM

e thử thực hành với 1 cái lisp đơn giản là vẽ hình vuông cấu trúc như lisp vẽ nhà mà cad toàn báo thiếu đối số error: too few arguments


(defun C:vhv(/a b p1 p2 p3 p4 )
;;;Nhap so lieu
(setq
a(getreal"\nchieu dai a=")
b(getreal"\nchieu rong b=")
p1(getpoint"\ndiem chuan: ")
;;;Tinh toa do
p2(polar p1 0.0 a)
p3(polar p2 (/pi 2) b )
p4(polar p3 pi a)
)
;;;ve hinh vuong
(comand "line" p1 p2 p3 p4"c")
)

vậy chỗ này e thiếu chỗ nào ạ ?

Lỗi bị "thiếu" chổ này :

(defun C:vhv(/a b p1 p2 p3 p4 )

giữa / và a phải có khoảng trắng
Bạn viết /a liền nhau thì Lisp xem như /a là biến số
=> thành ra báo thiếu đối số error: too few arguments là vì thế
  • 2

#432 hmt

hmt

    biết lệnh scale

  • Members
  • PipPipPip
  • 146 Bài viết
Điểm đánh giá: -11 (hơi kém)

Đã gửi 02 December 2012 - 02:29 PM

thank bác Tue , e đã sửa nhưng nó lai báo tiếp error: no function definition: /PI
  • 0

#433 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 02 December 2012 - 02:32 PM

Thì cũng thêm dấu cách ở giữa /pi thành / pi
  • 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.


#434 hmt

hmt

    biết lệnh scale

  • Members
  • PipPipPip
  • 146 Bài viết
Điểm đánh giá: -11 (hơi kém)

Đã gửi 02 December 2012 - 02:54 PM

thank bác Van Ha và bac Tue tiếc quá e đã đạt giới hạn kick like trong ngày hn chứ ko thì e kick tẹt bô :D thank 2 bác nhiều :D
  • 0

#435 hmt

hmt

    biết lệnh scale

  • Members
  • PipPipPip
  • 146 Bài viết
Điểm đánh giá: -11 (hơi kém)

Đã gửi 03 December 2012 - 11:11 AM

em đang thử với cách vẽ MC đơn giản như sau ạ :
(defun C:VMC(/ a b c p1 p2 p3 p4 p5 p6 p7 p8 p9 )
;;;Nhap so lieu
(setq
a(getreal"\nBE RONG MAT DUONG a=")
b(getreal"\nBE RONG HE b=")
c(getreal"\nCHENH CAO BO VIA c=")
p1(getpoint"\nPICK CHON DIEM DAT: ")
;;;Tinh toa do
p2(polar p1 0.0 (+(* 2 a) (* 2 b )))
p3(polar p2 (/ pi 2) 0.5)
p4(polar p3 (+(atan 0.02) (pi)) b )
p5(polar p4 (/ pi 2) c)
p6(polar p5 (- pi (atan 0.02)) a)
p7(polar p6 (+ pi (atan 0.02)) a)
p8(polar p7 (/ pi 2) c)
p9(polar p8 (- pi (atan 0.02)) b )
)
;;;ve mat cat
(command "pline" p1 p2 p3 p4 p5 p6 p7 p8 p9 "c")
)
nhưng khi load lisp thì nó báo bad funcition : 3,14159
chỗ này e ko hiểu sao lại báo lỗi ở số pi ??
  • 0

#436 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 03 December 2012 - 11:16 AM

(pi) => pi
  • 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.


#437 hmt

hmt

    biết lệnh scale

  • Members
  • PipPipPip
  • 146 Bài viết
Điểm đánh giá: -11 (hơi kém)

Đã gửi 03 December 2012 - 01:32 PM

Các a cho e hỏi chút ạ. e code lại là ntn :

(defun C:VMC(/ a b c p1 p2 p3 p4 p5 p6 p7 p8 p9 )
;;;Nhap so lieu
(setq
a(getreal"\nBE RONG MAT DUONG a=")
b(getreal"\nBE RONG HE b=")
c(getreal"\nCHENH CAO BO VIA c=")
p1(getpoint"\nCHON DIEM DAT: ")
;;;Tinh toa do
p2(polar p1 0.0 (+(* 2 a) (* 2 B)))
p3(polar p2 (/ pi 2) 1)
p4(polar p3 (+(atan 0.02) pi) (/ b (cos(atan 0.02))))
p5(polar p4 (+ pi (/ pi 2)) c)
p6(polar p5 (- pi (atan 0.02)) (/ a (cos(atan 0.02))))
p7(polar p6 (+ pi (atan 0.02)) (/ a (cos(atan 0.02))))
p8(polar p7 (/ pi 2) c)
p9(polar p8 (- pi (atan 0.02)) (/ b (cos(atan 0.02))))
)
;;;ve mat cat
(command "pline" p1 p2 p3 p4 p5 p6 p7 p8 p9 "c")
)
xong khi load lisp và chạy thì có lúc lisp vẽ đúng có lúc vẽ không đúng , cụ thể như 3 th như ảnh e post ạ, vậy đây là lỗi gì ạ và các khắc phục ntn ạ? thank các a :D


Hình đã gửi
  • 0

#438 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 03 December 2012 - 01:39 PM

Nhiều khả năng là bạn chưa tắt chế độ osnap trong lúc vẽ nên nó bắt điểm sai.
  • 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.


#439 hmt

hmt

    biết lệnh scale

  • Members
  • PipPipPip
  • 146 Bài viết
Điểm đánh giá: -11 (hơi kém)

Đã gửi 03 December 2012 - 02:01 PM

thank bác e đã thêm dòng tắt osnap và đã vẽ đc chuẩn như sau:
(defun C:VMC(/ a b c p1 p2 p3 p4 p5 p6 p7 p8 p9 )
;;;Nhap so lieu
(setq
a(getreal"\nBE RONG MAT DUONG a=")
b(getreal"\nBE RONG HE b=")
c(getreal"\nCHENH CAO BO VIA c=")
p1(getpoint"\nCHON DIEM DAT: ")
;;;Tinh toa do
p2(polar p1 0.0 (+(* 2 a) (* 2 B)))
p3(polar p2 (/ pi 2) 1)
p4(polar p3 (+(atan 0.02) pi) (/ b (cos(atan 0.02))))
p5(polar p4 (+ pi (/ pi 2)) c)
p6(polar p5 (- pi (atan 0.02)) (/ a (cos(atan 0.02))))
p7(polar p6 (+ pi (atan 0.02)) (/ a (cos(atan 0.02))))
p8(polar p7 (/ pi 2) c)
p9(polar p8 (- pi (atan 0.02)) (/ b (cos(atan 0.02))))
)
;;;Set object snap OFF
(setvar "osmode" 0)
;;;ve mat cat
(command "pline" p1 p2 p3 p4 p5 p6 p7 p8 p9 "c")
)
sau khi load lisp và nhập thông số xong thì lisp vẫn vẽ ra đc mặt cắt nhưng lại báo: too few arguments cho e hỏi thế là sao ạ
  • 0

#440 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 03 December 2012 - 02:06 PM

thank bác e đã thêm dòng tắt osnap và đã vẽ đc chuẩn như sau:
(defun C:VMC(/ a b c p1 p2 p3 p4 p5 p6 p7 p8 p9 )
;;;Nhap so lieu
(setq
a(getreal"\nBE RONG MAT DUONG a=")
b(getreal"\nBE RONG HE b=")
c(getreal"\nCHENH CAO BO VIA c=")
p1(getpoint"\nCHON DIEM DAT: ")
;;;Tinh toa do
p2(polar p1 0.0 (+(* 2 a) (* 2 B)))
p3(polar p2 (/ pi 2) 1)
p4(polar p3 (+(atan 0.02) pi) (/ b (cos(atan 0.02))))
p5(polar p4 (+ pi (/ pi 2)) c)
p6(polar p5 (- pi (atan 0.02)) (/ a (cos(atan 0.02))))
p7(polar p6 (+ pi (atan 0.02)) (/ a (cos(atan 0.02))))
p8(polar p7 (/ pi 2) c)
p9(polar p8 (- pi (atan 0.02)) (/ b (cos(atan 0.02))))
)
;;;Set object snap OFF
(setvar "osmode" 0)
;;;ve mat cat
(command "pline" p1 p2 p3 p4 p5 p6 p7 p8 p9 "c")
)
sau khi load lisp và nhập thông số xong thì lisp vẫn vẽ ra đc mặt cắt nhưng lại báo: too few arguments cho e hỏi thế là sao ạ

Hề hề hề,
Có nhẽ tại lisp nó không đọc được cái mặt cười trong code của bạn....
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.