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

Hỏi về Lisp (thuật toán, ý tưởng, coding,...)

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

ồ xin lỗi về chỗ tên layer, vần đề là có thêm hàm (cons 0 "mtext") cái này không giống cái bạn = (0 . "MTEXT")

mình kg hiểu lắm

Chào bạn Binharch77 hề hề,

Cái hàm (cons 0 "mtext") của bạn là hàm nối hai đối tượng đơn thành một association_list nghĩa là một danh sách tương tác. Kết quả của nó là một list có giá trị là '(0 . "mtext"). Còn cái hàm của bác Tue_NV là gọi đích danh cái thằng cu association_list ấy ra mà chả phải nối niếc gì cả.

Thực chất kết quả của hai thằng là như nhau nhưng chẳng qua là khác cách gọi nó ra mà thôi. Bạn gọi nó ra theo kiểu "Ới Tèo ơi" còn bác Tue_Nv thì "Tèo" thế thôi. hề hề.

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
Thực chất kết quả của hai thằng là như nhau nhưng chẳng qua là khác cách gọi nó ra mà thôi. Bạn gọi nó ra theo kiểu "Ới Tèo ơi" còn bác Tue_Nv thì "Tèo" thế thôi. hề hề.

(setq em "em_day")

nếu:

(setq timkiem (ssget "X" '((0 . "em_day")))) ->9 xác :(

nếu:

(setq timkiem (ssget "X" '((0 . em )))) -> em đâu rồi? :lol:

nếu:

(setq timkiem (ssget "X" (list (0 ."em_day")))) -> lạc mất em rồi :(

nếu:

(setq timkiem (ssget "X" (list (0 . em )))) -> lạc mất em thật rồi :(

nếu:

(setq timkiem (ssget "X" (list '(0 ."em_day")))) -> may quá tìm thấy em rỗi :cheers:

nếu:

(setq timkiem (ssget "X" '( (cons 0 "em_day")))) -> chán anh quá cơ :(

nếu:

(setq timkiem (ssget "X" '( (cons 0 em)))) -> hu hu lần tiếp mà không được nữa là em .... :cheers:

nếu:

(setq timkiem (ssget "X" (list (cons 0 em )))) -> có...có ...phải em không ... :gun: 9 xác :gun:

nếu:

(setq timkiem (ssget "X" (list (cons 0 "em_day")))) -> anh thật là tài :(

 

Hy vọng ví dụ vui trên giúp mọi người hiểu rõ hơn về sự khác nhau giữa hàm quote (chính là ') và hàm list. Đồng thời giải thích tại sao có trường hợp ta lại phải dùng làm cons và các ý nghĩa của 1 list trong hàm ssget

 

- Hàm '(....) : luôn trả về giá trị cố định, hằng số. Không thực hiện phép toán nào trong hàm này được

- Hàm (list .....): cho thực hiện phép toán, có thể chứa biến trong hàm này. Giá trị trả về giá trị cuối cùng của biến.

Nhưng chú ý trường hợp này là không đúng: (list (0 . em )) và (list (0 . "em_day" ))

Mà phải là (list (cons 0 em )) hoặc (list '(0 . "em_day" ))

Hàm (cons ...): nối một đối tượng vào 1 list. Nếu đối tượng sau không phải là list thì sẽ có dạng ( a . b ) . Hàm này có thể chứa biến (trả về giá trị của biến) hoặc hằng số cố định

  • 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
hỏi cái nữa hề hề

nếu mtext đó có nhiều hàng, vậy có cách nào chọn hàng được kg ? vd hàng thứ 3 chẳng hạn???

Có. Nếu lấy list dữ liệu của Mtext thì mỗi hàng ngăn với nhau bởi dấu "\\". Muốn lấy hàng nào thì phải đặt ra bài toán lọc text theo điều kiện. Hề hề

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
(setq em "em_day")

nếu:

(setq timkiem (ssget "X" '((0 . "em_day")))) ->9 xác :(

nếu:

(setq timkiem (ssget "X" '((0 . em )))) -> em đâu rồi? ;)

nếu:

(setq timkiem (ssget "X" (list (0 ."em_day")))) -> lạc mất em rồi :lol:

nếu:

(setq timkiem (ssget "X" (list (0 . em )))) -> lạc mất em thật rồi :(

nếu:

(setq timkiem (ssget "X" (list '(0 ."em_day")))) -> may quá tìm thấy em rỗi :cheers:

nếu:

(setq timkiem (ssget "X" '( (cons 0 "em_day")))) -> chán anh quá cơ :cheers:

nếu:

(setq timkiem (ssget "X" '( (cons 0 em)))) -> hu hu lần tiếp mà không được nữa là em .... :gun:

nếu:

(setq timkiem (ssget "X" (list (cons 0 em )))) -> có...có ...phải em không ... :( 9 xác :(

nếu:

(setq timkiem (ssget "X" (list (cons 0 "em_day")))) -> anh thật là tài :(

 

Hy vọng ví dụ vui trên giúp mọi người hiểu rõ hơn về sự khác nhau giữa hàm quote (chính là ') và hàm list. Đồng thời giải thích tại sao có trường hợp ta lại phải dùng làm cons và các ý nghĩa của 1 list trong hàm ssget

ô hô hay quá hehhe he he

bác nataca đưa ra ví dụ vui thật

À, BÂY GIỜ THÌ EM ĐÃ HIỂU

 

:gun:

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
sau khi lấy tên của thằng block, có cách nào gọi tên một thằng attribute trong block đó với Tag định sẵn không?

 

cứu cứu cứu với

Chào bạn Binharch77,

Có đấy bạn ạ. Hãy đọc thử đoạn này bạn nhé. Cái này là mình mót của cụ JeffySander về dịch chơi để học thôi. Sai đâu bạn sửa đó nhé

http://www.cadviet.com/upfiles/Attribute.doc

 

Hề hề, hơi củ chuối phải không bạn. Dùng tạm trong lúc cứu cứu vậy.

  • 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 bạn Binharch77,

Có đấy bạn ạ. Hãy đọc thử đoạn này bạn nhé. Cái này là mình mót của cụ JeffySander về dịch chơi để học thôi. Sai đâu bạn sửa đó nhé

http://www.cadviet.com/upfiles/Attribute.doc

 

Hề hề, hơi củ chuối phải không bạn. Dùng tạm trong lúc cứu cứu vậy.

hay thật, bác có link đủ tập khg, cho tôi với.

 

thank you bạn nhiều nhiều

 

: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
hay thật, bác có link đủ tập khg, cho tôi với.

 

thank you bạn nhiều nhiều

 

:mellow: :mellow:

Chào bạn Binharch77,

Đủ tập thì mình chả biết có đủ không nhưng đây là tất cả cái mà minh mót được của cụ JeffySander. Bạn xài thử coi nhé.

Không hiểu sao bữa nay không upload được qua diễn đàn. Bạn cho mình địa chỉ yahoo, mình sẽ gửi cho bạn.

Chúc bạn vui.

May quá upload được rồi. Nó đây bạn :

http://www.cadviet.com/upfiles/Gio_trnh_Au...sp_tu_hoc_3.doc

 

Mình đã load cái này hai lần rồi nhưng ngại tìm quá nên lại load lại. Vì thế nó mới mang số 3 bạ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
Bác làm ơn chỉ mình cad với. Mình biết cad căn bản rồi, nhưng lúc khai triển các đồ vật, hình dung các mặt cắt mình hình dung chưa wuen. Mình sin hậu tạ. anh_ldesign@yahoo.com, có jì l/l với mình nhe! Mình chờ tin Bạn!

Chào bạn Anh_ldésign,

Thế này nhé:

1/- Để có thể thành thạo việc vẽ khai triển các hình chiếu của vật thể cũng như các mặt cắt của nó, bạn cần phải thực hành nhiều nhiều thì nó sẽ quen mà thôi. Việc chỉ thêm cho bạn chỉ có thể được khi bạn post các bản vẽ cụ thể của bạn lên để mọi người góp ý. Lý thuyết căn bản chắc chắn mọi người cũng chỉ đều được học giống y sì như bạn đã học mà thôi. Chỉ có thực hành là mỗi người có khác nhau tí chút bạn ạ. Vì vậy bạn hãy yên tâm thực hành nhiều nhiều là sẽ giỏi ngay thôi.

2/- Đây là topic Hỏi về lisp nên bạn post câu hỏi sai chỗ rối. Bạn nên post các câu hỏi vào đúng topic của nó sẽ có được sự trả lời nhanh hơn và đúng hơn bạn nhé. Diễn đàn đã có khá nhiều các topic về CAD, bạn hãy vào đó để tìm hiểu thêm nhé.

Chúc bạn vui.

  • 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
các bác ơi, cho mình hỏi.

mình có đọc chi tiết 1 cái lisp, có hàm tblsearch . vậy hàm này là gì và cách thực hiện ra sao ???

:mellow:

 

Chào bạn Binharch77,

Bạn tham khảo cái này nhé:

tblsearch Function

 

 

 

 

Searches a symbol table for a symbol name

 

(tblsearch table-name symbol [setnext])

 

Arguments

 

table-name

 

A string that identifies the symbol table to be searched. This argument is not case sensitive.

 

symbol

 

A string identifying the symbol name to be searched for. This argument is not case sensitive.

 

setnext

 

If this argument is supplied and is not nil, the tblnext entry counter is adjusted so the following tblnext call returns the entry after the one returned by this tblsearch call. Otherwise, tblsearch has no effect on the order of entries retrieved by tblnext.

 

Return Values

 

If tblsearch finds an entry for the given symbol name, it returns that entry in the format described for tblnext. If no entry is found, tblsearch returns nil.

 

Examples

 

The following command searches for a text style named "standard":

 

Command: (tblsearch "style" "standard")

 

((0 . "STYLE") (2 . "STANDARD") (70 . 0) (40 . 0.0) (41 . 1.0) (50 . 0.0) (71 . 0) (42 . 0.3) (3 . "txt") (4 . ""))

 

Cái này mình lấy trong Help Developer của Cad2004 bạn ạ. Trong đó có hầu hết các hàm cơ bản có trong Autolisp. Bạn vào đó tham khảo thử xem nhé.

Chúc bạn vui.

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 bạn Binharch77,

Bạn tham khảo cái này nhé:

tblsearch Function

 

Cái này mình lấy trong Help Developer của Cad2004 bạn ạ. Trong đó có hầu hết các hàm cơ bản có trong Autolisp. Bạn vào đó tham khảo thử xem nhé.

Chúc bạn vui.

ồ, vậy à, thế mà tớ lại đọc trong giáo trình không có cơ đấy.

thank bác phamthanhbinh nhiều nhá (sorry không gọi bác tên Bình được vì trùng tên mà :mellow: :mellow: )

bác ở trong N hay ngòai B vậ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
ồ, vậy à, thế mà tớ lại đọc trong giáo trình không có cơ đấy.

thank bác phamthanhbinh nhiều nhá (sorry không gọi bác tên Bình được vì trùng tên mà :mellow: :mellow: )

bác ở trong N hay ngòai B vậy??

Hề hề, không có chi là không có chi.

Mình là trong Bắc mà ngoài Nam bạn ơi. Hề hề. Cái ni là do các bác trên diễn đàn dạy mình chớ lúc đầu mình cũng có biết chi mô. Nay thấy bạn hỏi thì mình bắt chước các bác ấy pót lên cho bạn thôi mà. Không có chi là không có chi, Hề hề.

Chúc bạn luôn vui như Tết nha, hề hề.

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 có 1 vấn đề muốn hỏi, trong lisp hàm nào để xác định được điểm đầu hoặc điểm cuối trên đọan thẳng vậy. Mong được hướng dẫ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
-Mình có 1 vấn đề muốn hỏi, trong lisp hàm nào để xác định được điểm đầu hoặc điểm cuối trên đọan thẳng vậy. Mong được hướng dẫn.

Có 2 cách :

Cách 1 :

Điểm đầu : (cdr(assoc 10 (entget(car(entsel)))))

Điểm cuối : (cdr(assoc 11 (entget(car(entsel)))))

 

Cách 2 : Tổng quát nhất : áp dụng cho Line, Pline, Spline..

 

Điểm đầu : (vlax-curve-getStartPoint (car(entsel)))

Điểm cuối : (vlax-curve-getendPoint (car(entsel)))

  • 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 có 1 vấn đề muốn hỏi, trong lisp hàm nào để xác định được điểm đầu hoặc điểm cuối trên đọan thẳng vậy. Mong được hướng dẫn.

Chào bạn Minhtu2004,

Vấn đề phụ thuộc ở chỗ đoạn thẳng của bạn được vẽ bằng lệnh gì bạn ạ. Nếu bạn dùng lisp thì nhìn chung là bạn phải hiểu được các mã DXF của các đối tượng trong CAD. Mỗi loại đối tượng sẽ có các mã DXF khác nhau. Căn cứ vào đó bạn sẽ có thể lấy được các thông số bạn muốn của đối tượng bạn ạ.

Bạn hãy bình tâm đọc kỹ tài liệu mình đã gửi cho bạn qua tin nhắn. Nếu chưa nhận được thì báo lại để mình gửi lại hay bạn tự download về ở đây nhé

 

http://www.cadviet.com/upfiles/Gio_trnh_Au...sp_tu_hoc_3.doc

 

Chúc bạn vui và hãy nhớ rằng Dục tốc bất đạt bạ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
Có 2 cách :

Cách 1 :

Điểm đầu : (cdr(assoc 10 (entget(car(entsel)))))

Điểm cuối : (cdr(assoc 11 (entget(car(entsel)))))

 

Cách 2 : Tổng quát nhất : áp dụng cho Line, Pline, Spline..

 

Điểm đầu : (vlax-curve-getStartPoint (car(entsel)))

Điểm cuối : (vlax-curve-getendPoint (car(entsel)))

Bác Tue_NV ơi,

Ở cách 2 bác phải dùng hàm (vl-load-com) trước đã phải không bá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
Có 2 cách :

Cách 1 :

Điểm đầu : (cdr(assoc 10 (entget(car(entsel)))))

Điểm cuối : (cdr(assoc 11 (entget(car(entsel)))))

 

Cách 2 : Tổng quát nhất : áp dụng cho Line, Pline, Spline..

 

Điểm đầu : (vlax-curve-getStartPoint (car(entsel)))

Điểm cuối : (vlax-curve-getendPoint (car(entsel)))

 

Bạn Tue cho mình hỏi bạn có cách lấy thông tin góc của 1 đoạn thẳng hay không.

Ví dụ : Mình vẽ tạm đoạn thẳng này -------------- , đoạn này góc là 0 hoặc 180 độ.

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 Tue cho mình hỏi bạn có cách lấy thông tin góc của 1 đoạn thẳng hay không.

Ví dụ : Mình vẽ tạm đoạn thẳng này -------------- , đoạn này góc là 0 hoặc 180 độ.

Cái này đơn giản mà bạn. Học hồi phổ thông. Hình học giải tích

Cho 1 đoạn thẳng AB .

Điểm A có tọa độ A(xa,ya)

Điểm B có tọa độ B(xb,yb)

Vậy thì góc AB sẽ là :

tan a = |(yb-ya)|/|(xb-xa)|

 

Bạn sử dụng Code theo ý mình xây dựng thử xem

Chú ý : Lisp không có hàm tan . Bạn sử dụng hàm sin và cos => tan = sin/cos

 

Hoặc nhanh hơn bạn sử dụng hàm

(angle pt1 pt2)

  • 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
Cái này đơn giản mà bạn. Học hồi phổ thông. Hình học giải tích

Cho 1 đoạn thẳng AB .

Điểm A có tọa độ A(xa,ya)

Điểm B có tọa độ B(xb,yb)

Vậy thì góc AB sẽ là :

tan a = |(yb-ya)|/|(xb-xa)|

 

Bạn sử dụng Code theo ý mình xây dựng thử xem

Chú ý : Lisp không có hàm tan . Bạn sử dụng hàm sin và cos => tan = sin/cos

 

Hoặc nhanh hơn bạn sử dụng hàm

(angle pt1 pt2)

 

Bạn Tue cho mình hỏi thêm tí nha.

Mình đang muốn giải quyết vấn đề chèn block mũi tên vào 1 Polyline. Mình dùng lệnh Insert.

Lisp sẽ quét vào Polyline và tìm được góc Polyline đó.

Nếu Polyline có 1 đầu tiếp xúc với 1 hình khác vậy có cách nào làm lisp hiểu và chỉ chèn block vào phía đầu Polyline chưa tiếp xúc với hình nào hay không?

 

http://www.cadviet.com/upfiles/Drawing2_20.dwg

 

Vấn đề tìm góc mình sẽ tìm hiểu về hàm sin và cos, vì mấy lệnh này mình chưa bao giờ dùng cả. :mellow:

 

 

http://www.cadviet.com/upfiles/Drawing2_20.

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 Tue cho mình hỏi thêm tí nha.

Mình đang muốn giải quyết vấn đề chèn block mũi tên vào 1 Polyline. Mình dùng lệnh Insert.

Lisp sẽ quét vào Polyline và tìm được góc Polyline đó.

Nếu Polyline có 1 đầu tiếp xúc với 1 hình khác vậy có cách nào làm lisp hiểu và chỉ chèn block vào phía đầu Polyline chưa tiếp xúc với hình nào hay không?

 

http://www.cadviet.com/upfiles/Drawing2_20.dwg

 

Vấn đề tìm góc mình sẽ tìm hiểu về hàm sin và cos, vì mấy lệnh này mình chưa bao giờ dùng cả. :mellow:

http://www.cadviet.com/upfiles/Drawing2_20.

Lisp thì có thể hiểu được Nếu Polyline có 1 đầu tiếp xúc với 1 hình khác

"và chỉ chèn block vào phía đầu Polyline chưa tiếp xúc,"

 

đầu Pline chưa tiếp xúc có thể là điểm đầu và điểm cuối. Nếu hiểu thì Lisp sẽ hiểu cả điểm đầu và điểm cuối đều không tiếp xúc đấy bạn Tuanthietkedien à. Bạn muốn chèn vào đầu nào. Bạn hãy nói rõ ý

  • 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 bạn Minhtu2004,

Vấn đề phụ thuộc ở chỗ đoạn thẳng của bạn được vẽ bằng lệnh gì bạn ạ. Nếu bạn dùng lisp thì nhìn chung là bạn phải hiểu được các mã DXF của các đối tượng trong CAD. Mỗi loại đối tượng sẽ có các mã DXF khác nhau. Căn cứ vào đó bạn sẽ có thể lấy được các thông số bạn muốn của đối tượng bạn ạ.

Bạn hãy bình tâm đọc kỹ tài liệu mình đã gửi cho bạn qua tin nhắn. Nếu chưa nhận được thì báo lại để mình gửi lại hay bạn tự download về ở đây nhé

 

http://www.cadviet.com/upfiles/Gio_trnh_Au...sp_tu_hoc_3.doc

 

Chúc bạn vui và hãy nhớ rằng Dục tốc bất đạt bạn ạ.

Xin lỗi ban ThanhBinh gì đó nha. Nếu như xem tài liệu mà hiểu được vấn đề thì mình không lên diễn đàn này để nhờ giúp đỡ, có những cái đơn giản với người này nhưng không đơn giản với người khác. Giống bạn lúc mới bắt đầu viết lisp thôi đúng hok.

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

×