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

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

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

Em chào các bác !

Em mới tìm hiểu về Lisp nên có chỗ hơi khó hỉu tý, muốn nhờ các bác chỉ giúp em:

Em có điểm A là điểm chèn ở 1 đỉnh của Hình chữ nhật cạnh a x b. giờ em dùng hàm chi để lấy tọa độ của đỉnh đối diện được ạ.

Em xin cảm ơn 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

Bạn thử Rotate HCN đó xung quanh điểm A => điểm B chạy trên đường tròn tâm A, bán kính = đường chéo HCN (căn bậc 2 (a^2+b^2))

  • 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

Bạn thử Rotate HCN đó xung quanh điểm A => điểm B chạy trên đường tròn tâm A, bán kính = đường chéo HCN (căn bậc 2 (a^2+b^2))

hàm polar cần 3 thông số point, angle, distance ket mới chỉ ra distance vậy angle xác định ra sao?

 

 

Em chào các bác !

Em mới tìm hiểu về Lisp nên có chỗ hơi khó hỉu tý, muốn nhờ các bác chỉ giúp em:

Em có điểm A là điểm chèn ở 1 đỉnh của Hình chữ nhật cạnh a x b. giờ em dùng hàm chi để lấy tọa độ của đỉnh đối diện được ạ.

Em xin cảm ơn nhiều !

Đỉnh của bạn là đỉnh nào: Top-Left, Right-Left, Bottom-Left hay Bottom-Right?

Sau khi xác định dc "đỉnh nào rồi thì bạn dùng công hức toán học như Ketxu nói hoắc dùng 2 hàm polar để tìm đỉnh đối diện

Thân!

  • 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

Chính vì bạn Luxury hỏi hời hợt nên câu trả lời như vậy là tổng quát r ^^

Á, còn quên, nhỡ bạn ấy lại hỏi trong 3D. Vậy sửa lại là hình cầ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

Em chào các bác ! Em nhờ các bác xem giúp em đoạn CODE này với. Em đang tập tành với cái thằng LIsp này mà cứ lỗi miết.

Chả là không biết bị răng mà khi em chạy nó cứ báo : Unknow Command .Nhưng em thấy lạ, sau khi load chạy nó báo vậy, em làm câu lệnh lấy cái điểm a mới: (setq a(getpoint)) thì lại được.

Code của nó đây ạ !

Em xin cảm ơn các bác nhiều !

(defun vekhungten (/ a el1 el2 kc el3 kg)
(setq a(getpoint"\n chon diem chen:")
)
(command ".line" a (polar a (/ pi 2) 80 ) "")
(setq el1(entlast))
(command ".offset"  "180" el1 (polar a pi 20) "")
(command ".offset"  "80"  el1 (polar a pi 20) "")
(command ".line"  a (polar a pi 180) "")
(setq el2(entlast))
(command ".offset" "80" el2 (polar a (/ pi 2) 50) "")
(command ".offset" "50" el2 (polar a (/ pi 2) 50) "")
(setq kc 0)
(Repeat 4
(setq kc(+ kc 10))
(command ".offset" kc el2  (polar a (/ pi 2) 200) "")
)

(command ".line" (polar a pi 40) (polar (polar a pi 40) (/ pi 2) 30 ) "")
(command ".line" (polar a pi 160) (polar (polar a pi 160) (/ pi 2) 50) "")
(setq el3(entlast))
(command ".offset" "60" el3 a "")
(command ".trim" "" (polar (polar a pi 40) (/ pi 2) 40)  (polar (polar a pi 40) (/ pi 2) 35) ^C^C )
)
(defun c:kt ()
(setq cmdluu(getvar "cmdecho")
osm(getvar "osmode")
)
         	(setvar "cmdecho" 0)
(initget 1 " A0 A1 A2 A3 A4")
(setq kg(strcase(getkword "\n Chon kho giay <A0/ A1/ A2/ A3/ A4>:")))
(vekhungten)
(Cond
((= kg "A0")
(command ".rectangle" a "@ -1189,841")
)
((= kg "A1")
 (command".rectangle" a "@ -841,594")
)
((= kg "A2")
 (command".rectangle" a "@ -594,420")
)
((= kg "A3")
 (command".rectangle" a "@ -420,297")
)
((= kg "A4")
 (command".rectangle" a "@ -297,210")
)
)  
(setvar "cmdecho" cmdluu)
(princ)
)
;;;;; (command "-style" "BT" "Arial" "0" "1" "0" "n" "n")
;;;;;  (command ".Text" (polar (polar a pi 70) (/ pi 2) 3) 5 0 "BV So:" )  ;;; Sai Diem Chen

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 chào các bác ! Em nhờ các bác xem giúp em đoạn CODE này với. Em đang tập tành với cái thằng LIsp này mà cứ lỗi miết.

Chả là không biết bị răng mà khi em chạy nó cứ báo : Unknow Command .Nhưng em thấy lạ, sau khi load chạy nó báo vậy, em làm câu lệnh lấy cái điểm a mới: (setq a(getpoint)) thì lại được.

Code của nó đây ạ !

Em xin cảm ơn các bác nhiều !

 

Bạn kiểm tra lại các hàm (command...) vì bạn đã viết sai cú pháp.

  • 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

Với các bác giới thiệu thêm cho em cách đổi 1 đối tượng qua Layer khác với ah mellow.pngmellow.png

(command "chprop" doituong "" "la" "lopchuyen" "")

Dòng trên chuyễn đối tượng doituong sang layer lopchuyen với điều kiện layer lopchuyen đã tồn tại trong bản vẽ.

  • 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

 

Bạn kiểm tra lại các hàm (command...) vì bạn đã viết sai cú pháp.

Dạ cái cú pháp này em đã kiểm tra rồi ạh. em chọn 1 điểm a mới sau đó lấy các command trên để thử thì vẫn bình thường mà bác.hjhj :mellow:

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ạ cái cú pháp này em đã kiểm tra rồi ạh. em chọn 1 điểm a mới sau đó lấy các command trên để thử thì vẫn bình thường mà bác.hjhj :mellow:

 

Ít nhất là trong các hàm (command "offset"...) thì bạn đã sai ở chỗ: các khoảng cách để offset phải viết theo dạng real (VD: 50) chứ không thể viết theo dạng string (VD: "50" như của bạn), tức là bạn dư 2 dấu ngoặc kép ".

P/S: srr, bị nhầ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

 

Ít nhất là trong các hàm (command "offset"...) thì bạn đã sai ở chỗ: các khoảng cách để offset phải viết theo dạng real (VD: 50) chứ không thể viết theo dạng string (VD: "50" như của bạn), tức là bạn dư 2 dấu ngoặc kép ".

Cái đó thì em thấy nó không sao cả, bị mỗi cái chỗ đoạn code em vẻ khung giấy ấy ạ. chạy nó toàn báo vậy: Unknown command "@ -841,594"

sau khi bị như vậy thì em viết luôn 1 dòng này tại command : (setq a(getpoint)) sau đó thực hiện lại lệnh thì lại chạy ngon ơ. Em cũng chưa hỉu tại sao lun, còn cái command theo bác nói chắc hem phải đâu ạ.Bởi vì cái khung tên là em vẻ trước, sau đó thấy hay hay nên viết tiếp cho nó ra lun cái khung đầy đủ luôn, hjhj

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 đó thì em thấy nó không sao cả, bị mỗi cái chỗ đoạn code em vẻ khung giấy ấy ạ. chạy nó toàn báo vậy: Unknown command "@ -841,594"

sau khi bị như vậy thì em viết luôn 1 dòng này tại command : (setq a(getpoint)) sau đó thực hiện lại lệnh thì lại chạy ngon ơ. Em cũng chưa hỉu tại sao lun, còn cái command theo bác nói chắc hem phải đâu ạ.Bởi vì cái khung tên là em vẻ trước, sau đó thấy hay hay nên viết tiếp cho nó ra lun cái khung đầy đủ luôn, hjhj

 

Sau khi chạy và bị lỗi bạn nhấn F2 để copy và paste lên đây để xem thao tác từ đầu cho đến cuối của bạn xem 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

Cái đó thì em thấy nó không sao cả, bị mỗi cái chỗ đoạn code em vẻ khung giấy ấy ạ. chạy nó toàn báo vậy: Unknown command "@ -841,594"

sau khi bị như vậy thì em viết luôn 1 dòng này tại command : (setq a(getpoint)) sau đó thực hiện lại lệnh thì lại chạy ngon ơ. Em cũng chưa hỉu tại sao lun, còn cái command theo bác nói chắc hem phải đâu ạ.Bởi vì cái khung tên là em vẻ trước, sau đó thấy hay hay nên viết tiếp cho nó ra lun cái khung đầy đủ luôn, hjhj

Sai cơ bản : biến a chưa từng được gán giá trị trong hàm chính

=> lệnh Rectang đương nhiên bị lỗi tại input a (nil) trong dòng lệnh rectang, phần @ đi sau sẽ được hiểu là lệnh mới (và tất nhiên k có lệnh này)

=> hãy cho biến a ra ngoài main

  • 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

Sai cơ bản : biến a chưa từng được gán giá trị trong hàm chính

=> lệnh Rectang đương nhiên bị lỗi tại input a (nil) trong dòng lệnh rectang, phần @ đi sau sẽ được hiểu là lệnh mới (và tất nhiên k có lệnh này)

=> hãy cho biến a ra ngoài main

Em cởm ơn bác Doan Van Ha và bác Ketxu nhé ! Có lẽ đúng theo như bác Ketxu nói.Vì vậy nên khi chạy nó lỗi thì em xác định lại biến a mới sau đó chạy thì nó lại ok ngay.

Hjhj các bác có các kinh nghiệm khắc phục hạn chế lỗi thì chia sẻ cho em xin với nhé. Thanks

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

ui, em xin lỗi, post bài định hỏi lên rồi mới tìm thấy cái lỗi của mình, hihi các bác Mod & Ad thông củm cho em nhé. hjhj :mellow: :mellow: :mellow:

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

Quả có thế thật. Thực ra khi mình mới học lisp mình cũng toàn phải ngồi đọc từng dòng code rồi ghi chú ra bên cạnh cái mà mình hiểu. Nhưng dần dần thì cái hiểu ấy nó ngấm vào rồi nên cái bệnh lười nó lại nổi lên, thế là chả thèm ghi chú nữa. Mặt khác quá trình viết lisp hoàn toàn không dễ như khi đọc, vậy nên lười được chút nào hay chút đó (để còn nhanh nhanh được ....... lười mà). Mặc dù cái việc ghi chú ấy nó chả lâu hơn song chả ai ghi chú khi đang viết cả vì có biết là nó đúng hay sai đâu. Vậy nên phải sau khi chạy thử mới có kết luận là lisp có dùng được hay không. Đến lúc đó mà ngồi ghi chú lại cả một trang lisp thì quả là ....không khoái bạn ạ.

Vậy nên có nhẽ cách tốt nhất để học có lẽ lại là chính người học phải tập đọc và hiểu các code cho nó ky kỹ, đừng cưỡi ngựa xem hoa, đừng có đọc lớt phớt rồi tự cho là mình hiểu rồi và cứ thế dùng ẩu mà chả hiểu vì sao lại phải viết như vậy. Có thế mới vỡ dần ra cái chưa biết của mình và mới vận dụng lisp tốt được. Trong quá trình đọc code, chỗ nào đã hiểu thì thôi, còn chỗ nào chưa hiểu thì ghi chú lại và post lên hỏi lại, chắc chắn như vậy sẽ hiệu quả hơn là chỉ đọc những lời ghi chú của người viết (Vì đôi khi người viết cũng ẩu mà). Cứ lấy mình ra làm ví dụ, có nhiều lisp mình viết thừa do quá trình viết phải sửa đi sửa lại, và những chỗ thừa mình cũng ngại xóa nữa, xong rồi chạy thử thấy nó tạm ổn thì post lên thôi chứ cũng ngại ngồi làm lại cho nó ra cái vẻ pro bạn ạ. Và cũng vì vậy, mình mãi mãi vẫn chỉ là thằng học mót chứ chả thể pro tí nào.

Hề hề hề.....

Quá chuẩn. Gần như không có cách nào khác là phải tự học để hiểu mình đang đọc gì thôi, chứ nhiều khi đến mấy trang dòng lệnh mà ghi chú hoài thì ai mà ghi chú được. Với lại đây đâu phải là sách dạy đâu. Tóm lại đối tượng đọc là người đã biết về Lisp, chí ít là đọc hiể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

các bác chỉ giáo cho em với

em muốn làm lisp vẽ 2 hình chữ nhât mà cho trước tọa đô. HCN 1 (0,0) ,(100,100)

                                                                                              HCN 2 (10,10), (90,90)

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 bác chỉ giáo cho em với

em muốn làm lisp vẽ 2 hình chữ nhât mà cho trước tọa đô. HCN 1 (0,0) ,(100,100)

                                                                                              HCN 2 (10,10), (90,90)

Muốn vẽ 2 HCN như thế bạn có 3 cách:

- Cách 1: vẽ 1 HCN, còn HCN kia thì offset với 10

- Cách 2: vẽ cả 2 HCN, xong

- Cách 3: vẽ vời thứ gì đó cho vui rồi ngồi đợi thiên thu.

  • 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ào cả nhà. mh muốn nhờ cả nhà làm giúp mh ứng dụng lisp thống kê tổng khối lượng thép có chia ra nhỏ hơn hoặc bằng fi 10, nhỏ hơn hoặc bằng fi 18 và lớn hoăc bằng fi 20

trong đó mh có các bảng thống kê Block thuộc tính. từ Block 1-n. mỗi một block mình có các cột ở đây mh đưa ra các cột quan trọng để lấy kl nên các cột còn lại thì bỏ qua nhá. cột đầu tiên là số hiệu (SH). cột hai là các kiểu thanh... cột 3 là chiều dài nối một thanh (CDNOI). cột 4 là đường kính (DK). cột 5 tổng chiều dài (TONGCD). cột 6 là khối lượng 1 thanh (KL).

đó là cái Block thuộc tính. nên mh muốn nhờ các cao thủ autolisp viết dùm mh một đoạn mã mà khi chay ra nó ra dạng text có ghi là (chia ra theo các loại nhé)

tổng khối lượng thép

tổng kl <=10 = ... kg

tổng kl   >10 = ... kg

tổng kl <=18 = ... kg

tổng kl  > 20 = ... kg

 

một ý kiến nữa là nếu là đươc tổng khối lường từng loại fi và ra được tổng số thanh của từng loại fi được thì càng tốt ạ.

....

cảm ơn các bạn đã đọc và giúp đỡ.

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 bạn tham khảo lệnh Dataextraction trong CAD, Sumif, Sumifs, Subtotal hoặc Pivot Table trong Excel. Topic này có để yêu cầu lisp đâ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

chào cả nhà. mh muốn nhờ cả nhà làm giúp mh ứng dụng lisp thống kê tổng khối lượng thép có chia ra nhỏ hơn hoặc bằng fi 10, nhỏ hơn hoặc bằng fi 18 và lớn hoăc bằng fi 20

trong đó mh có các bảng thống kê Block thuộc tính. từ Block 1-n. mỗi một block mình có các cột ở đây mh đưa ra các cột quan trọng để lấy kl nên các cột còn lại thì bỏ qua nhá. cột đầu tiên là số hiệu (SH). cột hai là các kiểu thanh... cột 3 là chiều dài nối một thanh (CDNOI). cột 4 là đường kính (DK). cột 5 tổng chiều dài (TONGCD). cột 6 là khối lượng 1 thanh (KL).

đó là cái Block thuộc tính. nên mh muốn nhờ các cao thủ autolisp viết dùm mh một đoạn mã mà khi chay ra nó ra dạng text có ghi là (chia ra theo các loại nhé)

tổng khối lượng thép

tổng kl <=10 = ... kg

tổng kl   >10 = ... kg

tổng kl <=18 = ... kg

tổng kl  > 20 = ... kg

 

một ý kiến nữa là nếu là đươc tổng khối lường từng loại fi và ra được tổng số thanh của từng loại fi được thì càng tốt ạ.

....

cảm ơn các bạn đã đọc và giúp đỡ.

Chắc giống vd này:

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ác biết viết thế nào không chỉ cho em với .Em làm theo cách thứ 2 nhung nó chỉ ra có 1 hình chữ nhật đè lên nhau

Muốn vẽ 2 HCN như thế bạn có 3 cách:

- Cách 1: vẽ 1 HCN, còn HCN kia thì offset với 10

- Cách 2: vẽ cả 2 HCN, xong

- Cách 3: vẽ vời thứ gì đó cho vui rồi ngồi đợi thiên thu.

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

×