Chuyển đến nội dung
Diễn đàn CADViet
ssg

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

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

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.

  • Vote tăng 2

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ọ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ì ạ

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

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

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

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ế

  • Vote tăng 2

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

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

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

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

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

 

 

2736a594a0adbfb7a511b1c0856e3bd0_51411687.snapshot20121203132934.png

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

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 ạ

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

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

  • 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

thank bác e đã thêm dòng tắt osnap và đã vẽ đc chuẩn như sau:

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 ạ

Tôi test OK. Bạn down về thử lại nhé. Tôi thêm cho bạn 2 dòng code để khỏi bận tâm osnap.

(defun C:VMC(/ a b c p1 p2 p3 p4 p5 p6 p7 p8 p9 osm)
(setq osm (getvar "osmode"))
;;;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")
(setvar "osmode" osm))

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

thank bác Bình và bac Ha, cho e hỏi thêm 1 chút. Bây h e muốn vẽ 1 đoạn pline có độ dày mặc định là 0.1 chẳng hạn qua các điểm p3 p4 p5 p6 p7 p8 p9 thì phải thêm dòng ntn ạ?

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

Thay dòng vẽ pline bằng dòng dưới đây. Bạn cũng nên tự ngâm cứu từ command pline để suy ra được mà, chứ tôi e là nếu cái gì cũng hỏi sẽ lâu tiến bộ đó nghen.

(command "pline" p1 p2 p3 "w" 0.1 0.1 p4 p5 p6 p7 p8 p9 "w" 0 0 "c")

  • 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

:D hi trước khi hỏi e cũng đã ngâm dòng command rồi và có thay giống như thế này ko hiểu sao . nó cứ ra cả loạt tất cả các nét là 0.1 nên e mới hỏ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

thank bác e thay đoạn của bác vào thì ổn, do e ko hiểu đc trình tự của dòng command khi vẽ 1 lệnh pline thay đổi độ dày nên e thay sai hết cả :D

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ước đây mình cũng có viết một hàm vẽ HCN với yêu cầu khác của bạn một chút.

Bạn có thể tham khảo để thấy được kết quả trong khi chọn điểm thứ ba.

(defun RectangPts (p1 p2 rp3 rp4 / a )
(setq a (angle p1 p2))
(set rp4 (inters p1 (polar p1 (+ a (/ pi 2)) 100) (eval rp3) (polar (eval rp3) a 100) nil))
(set rp3 (polar (eval rp4) a (distance p1 p2)))
)

(defun C:RotateRectang (/ n p1 p2 p3 p4 a grdat om)
(setq p1 (getpoint "\nPoint 1:") p2 (getpoint p1 "\nPoint 2:") a (angle p1 p2))
(while (/= 3 n)
	(setq grdat (grread t 7 0) n (car grdat) p3 (cadr grdat))
(if (eq 5 n)
		(progn
			(redraw)(RectangPts p1 p2 'p3 'p4 )
			(grvecs (list -7 p1 p2 p2 p3 p3 p4 p4 p1) )
	)	)
)
(setq om (getvar "osmode"))
(setvar "osmode" 0)
(redraw)(RectangPts p1 p2 'p3 'p4 )
(command "PLINE" p1 p2 p3 p4 "c" )
(setvar "osmode" om)
)

Nhờ Bạn chỉnh lisp vẽ kiễu nhà dựa trên lisp vẽ hình chữ nhật trên, mong duoc giup do

Cám ơn

http://www.cadviet.c..._nha_ngoi_1.dwg

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ự tay mình lập một chương trình Lisp có gì khác so với nhờ ai đó làm? Chưa cần xét kết quả, điểm khác nhau rất cơ bản là bạn sẽ có được cái cảm giác rất là khoái chí (không thể diễn tả) khi chạy thử chương trình.

Ssg lập topic này không ngoài mục đích tạo điều kiện cho các bạn tự mình tìm hiểu và khám phá cái cảm giác "khoái chí không thể diễn tả" nói trên.

Với tinh thần "Share is Receive", ssg cũng mong các bạn đã thành thạo Lisp quan tâm giúp đỡ các bạn mới để cộng đồng Lisp của CadViet ngày càng đông vui và tạo được nhiều chương trình hữu ích.

Để bắt đầu, ssg post lại một bài viết cũ, nhưng có lẽ vẫn còn mới đối với một số bạn. Hy vọng sẽ giúp được chút gì đó cho các bạn mới tiếp cận với Lisp:

 

http://www.cadviet.com/upfiles/Relax_1.zip

 

Download, giải nén rồi đọc file *.doc

Link die rùi Bác ui! Bác up lại hoặc cho em xin file qua mail: tranthien.int@gmail.com dc ko ạ? Thank bác nhiều!

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ự tay mình lập một chương trình Lisp có gì khác so với nhờ ai đó làm? Chưa cần xét kết quả, điểm khác nhau rất cơ bản là bạn sẽ có được cái cảm giác rất là khoái chí (không thể diễn tả) khi chạy thử chương trình.

Ssg lập topic này không ngoài mục đích tạo điều kiện cho các bạn tự mình tìm hiểu và khám phá cái cảm giác "khoái chí không thể diễn tả" nói trên.

Với tinh thần "Share is Receive", ssg cũng mong các bạn đã thành thạo Lisp quan tâm giúp đỡ các bạn mới để cộng đồng Lisp của CadViet ngày càng đông vui và tạo được nhiều chương trình hữu ích.

Để bắt đầu, ssg post lại một bài viết cũ, nhưng có lẽ vẫn còn mới đối với một số bạn. Hy vọng sẽ giúp được chút gì đó cho các bạn mới tiếp cận với Lisp:

 

http://www.cadviet.com/upfiles/Relax_1.zip

 

Download, giải nén rồi đọc file *.doc

LINK DIE RÙI BÁC SSG ƠI! NHỜ BÁC ÚP LẠI ANH EM NGHIÊN CỨU VỚI! THANKS BÁC NHIỀU!

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

×