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ị

chào các bác!

em muốn hỏi dùng lisp để vẽ hình chữ nhật có bo tròn các đỉnh thì viết thế nào?

em nghĩ mãi nhưng chưa viết dc

thanks!

 

(command "rectangle" "f" (getreal "\nRadius:") pause)

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

Hay quá đi thôi cách này học thực tế ví dụ sinh động dễ hiểu cám ơn bác ssg nhé.Bác tiếp tục phát huy nhé.

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

em vừa đọc xong cái file của pác up lên, em thấy bài viết này hay, nó làm cho một người chưa biết gì về lish như em được mở rộng tầm mắt, nhưng quả thật với pác...em còn mơ hồ lắm...giống như đi giữa sương mù trời đà lạt ấy! Pác đã giúp, nay em tham lam xin pác đây hoặc các pác trong diễn đàn, ai biết tên sách hay file nào nói đầy đủ về lish (đầy đủ tức là từ A cho tới Zách đấy các pác à), thì up lên cho mọi người cùng học hỏi.... cám ơn pác đây nhiều 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
em vừa đọc xong cái file của pác up lên, em thấy bài viết này hay, nó làm cho một người chưa biết gì về lish như em được mở rộng tầm mắt, nhưng quả thật với pác...em còn mơ hồ lắm...giống như đi giữa sương mù trời đà lạt ấy! Pác đã giúp, nay em tham lam xin pác đây hoặc các pác trong diễn đàn, ai biết tên sách hay file nào nói đầy đủ về lish (đầy đủ tức là từ A cho tới Zách đấy các pác à), thì up lên cho mọi người cùng học hỏi.... cám ơn pác đây nhiều nhiều !!!

 

Sách và tài liệu về lisp thì khá nhiều. Đây là một trong số đó mà tôi đã đọc và cảm thấy phù hợp với mình. Bạn có thể tham khảo. Trong tài liệu này tôi tự dịch ra tiếng Việt để học nên có thể có nhiều sai sót do trình độ còn kém. Bạn có thể tham khảo bản gốc bằng tiếng Anh mà tôi vẫn giữ nguyên trong đó. Chỗ nào bạn không rõ có thể post lên để cùng trao đổi nhé.

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

  • Vote tăng 5

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
Sách và tài liệu về lisp thì khá nhiều. Đây là một trong số đó mà tôi đã đọc và cảm thấy phù hợp với mình. Bạn có thể tham khảo. Trong tài liệu này tôi tự dịch ra tiếng Việt để học nên có thể có nhiều sai sót do trình độ còn kém. Bạn có thể tham khảo bản gốc bằng tiếng Anh mà tôi vẫn giữ nguyên trong đó. Chỗ nào bạn không rõ có thể post lên để cùng trao đổi nhé.

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

 

Em dow ve rồi pác à! :s_big: để tối nay về em luyện, em cảm ơn pác nhá, em mới nhờ mà đã có người giúp rồi, ôi!sống trên đời quý nhau cái tình người là thế. Bữa nào rảnh em với pác đi làm vài ve nhẩy !!! :cheers:

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 ssp cho em hỏi đoạn code này có nghĩa như thế nào,các hàm if, not ,tblsearch có nghĩa là như thế nào???

(defun layer_style ()

(if (not (tblsearch "layer" "7TEXT_45" ))

(command "-layer" "new" "7TEXT_45" "color" 45 "7TEXT_45" ""))

(if (not (tblsearch "layer" "8THEP_1" ))

(command "-layer" "new" "8THEP_1" "color" 1 "8THEP_1" ""))

(if (not (tblsearch "layer" "1TIM_99" ))

(command "-layer" "new" "1TIM_99" "color" 99 "1TIM_99" "L" "DASHDOT" "1TIM_99" "")))

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 ssp cho em hỏi đoạn code này có nghĩa như thế nào,các hàm if, not ,tblsearch có nghĩa là như thế nào???

(defun layer_style ()

(if (not (tblsearch "layer" "7TEXT_45" ))

(command "-layer" "new" "7TEXT_45" "color" 45 "7TEXT_45" ""))

Nghĩa cả đoạn lệnh này như sau:

-tblsearch là tìm tất cả các bảng, "layer" là bảng layer, "7TEXT_45" là tên layer -> tức là tìm layer "7TEXT_45" trong tất cả các layer. Nếu thấy thỏa mãn thì kết quả trả về "T" và nếu không tìm thấy thì kết quả trả về "nil"

-not là lấy phủ định lại kết quả vừa ra

- if là lệnh rẽ nhánh nếu đúng thì thực hiện lệnh (command "-layer" "new" "7TEXT_45" "color" 45 "7TEXT_45" "") còn nếu sai thì bỏ qua

=> Túm lại dịch đoạn này theo "văn học" như sau: tìm layer 7TEXT_45 trong số các layer trên bản vẽ, nếu không thấy ( (tblsearch "layer" "7TEXT_45" ) trả về nil và (not nil)=T ) thì thực hiện lệnh tạo mới layer 7TEXT_45 và gán cho nó màu số 45.

(if T ->(command "-layer" "new" "7TEXT_45" "color" 45 "7TEXT_45" "")

nil -> bỏ qua

)

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
Nghĩa cả đoạn lệnh này như sau:

-tblsearch là tìm tất cả các bảng, "layer" là bảng layer, "7TEXT_45" là tên layer -> tức là tìm layer "7TEXT_45" trong tất cả các layer. Nếu thấy thỏa mãn thì kết quả trả về "T" và nếu không tìm thấy thì kết quả trả về "nil"

-not là lấy phủ định lại kết quả vừa ra

- if là lệnh rẽ nhánh nếu đúng thì thực hiện lệnh (command "-layer" "new" "7TEXT_45" "color" 45 "7TEXT_45" "") còn nếu sai thì bỏ qua

=> Túm lại dịch đoạn này theo "văn học" như sau: tìm layer 7TEXT_45 trong số các layer trên bản vẽ, nếu không thấy ( (tblsearch "layer" "7TEXT_45" ) trả về nil và (not nil)=T ) thì thực hiện lệnh tạo mới layer 7TEXT_45 và gán cho nó màu số 45.

(if T ->(command "-layer" "new" "7TEXT_45" "color" 45 "7TEXT_45" "")

nil -> bỏ qua

)

hi hi, mình cũng bắt đầu lơ tơ mơ hiểu dần rồi,mong các bro chỉ trỏ nhiều hơn,thanks nataca nhé.

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

nataca ơi cho mình hỏi mình viết lại đoạn lisp này

(defun layer_style ()

(if (not (tblsearch "layer" "1text_23" ))

(command "-layer" "new" "1text_23" "color" 1 "1text_23" "")))

appload được rồi mà khi bật hộp thoại layer properties manager sao trong hộp thoại không tạo được layer 1text_23 với color là 1 được nhỉ.

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
nataca ơi cho mình hỏi mình viết lại đoạn lisp này

(defun layer_style ()

(if (not (tblsearch "layer" "1text_23" ))

(command "-layer" "new" "1text_23" "color" 1 "1text_23" "")))

appload được rồi mà khi bật hộp thoại layer properties manager sao trong hộp thoại không tạo được layer 1text_23 với color là 1 được nhỉ.

- Một là bỏ hàm defun đi, chỉ để :

(if (not (tblsearch "layer" "1text_23" ))

(command "-layer" "new" "1text_23" "color" 1 "1text_23" ""))

- Hai là để nguyên nhưng khi ap xong phải đánh dòng lệnh (layer_style)

- Ba là đổi (defun layer_style () thành (defun C:layer_style () sau đó đánh lệnh layer_style

=> Đoạn lisp bạn làm có ý nghĩa là tạo ra hàm con với tên hàm là layer_style . Nhưng để hàm con này chạy bạn phải thêm C: trước tên hàm để chuyển tên hàm đó thành lệnh đánh trên dòng command. Còn nếu bạn muốn chỉ cần ap lisp trên vào là tự động chạy (tức là tạo ra layer 1text_23 và gán màu 1) thì bạn bỏ dòng (defun layer_style () và bỏ dấu ) cuối cùng đ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

hi hi, 1 câu hỏi mà có 3 đáp án được đưa ra,đáp án nào cũng đúng,xin phép cho nataca 9,5 nhé,thanks ,có gì lai xin được thỉnh giá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
Em dow ve rồi pác à! :cheers: để tối nay về em luyện, em cảm ơn pác nhá, em mới nhờ mà đã có người giúp rồi, ôi!sống trên đời quý nhau cái tình người là thế. Bữa nào rảnh em với pác đi làm vài ve nhẩy !!! :cheers:

hic sao em kô down đc vậy bác ơi, nhờ bác nào up lại cho e với :s_big:

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

Xin các bác pro chỉ giáo nếu mình sử dụng SSget thì mình sẽ chọn được 1 tập hợp đủ thứ như Line, Text, Circle,... Vậy mình sử dụng vòng lặp thế nào để mình xét từng thằng Line, Text, Circle và tiếp đó là xét từng thằng con của nó như Color Line, Color Text, Color Circle,...

Xin cám ơn rất 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
Xin các bác pro chỉ giáo nếu mình sử dụng SSget thì mình sẽ chọn được 1 tập hợp đủ thứ như Line, Text, Circle,... Vậy mình sử dụng vòng lặp thế nào để mình xét từng thằng Line, Text, Circle và tiếp đó là xét từng thằng con của nó như Color Line, Color Text, Color Circle,...

Xin cám ơn rất nhiều.

Chào bạn Tuan_thietkedien,

Chưa rõ ý bạn hỏi lắm.

1/- Nếu bạn muốn chọn tập hợp các line, Text, circle, arc .... riêng rẽ thì bạn sử dụng lệnh (ssget "x" (filter list)) trong đó filter list là một association list trong list các mã dxf của các đối tượng bạn chọn. Ví dụ : hàm (ssget "x" '( 0. "LINE")) sẽ cho bạn tất cả các line có trên bản vẽ.

2/- Nếu bạn muốn tách riêng các line, text, circle, arc,... có trong một tập hợp các đối tượng đã có để xử lý tiếp thì bạn có thể sử dụng các hàm điếu kiện như if, while, ... Ví dụ bạn muốn tách các line trong một tập hợp các đối tượng có sẵn ss chẳng hạn, sử dụng hàm while như sau: (while (= (cdr (assoc 0 (entget (ssname ss i)))) "LINE") (....................) (setq i (1+ i))) trong đó (....) là hàm mà bạn định dùng để xử lý. Và tất nhiên trước khi dùng hàm while bạn phải xác định biến i (setq i 0)

3/- Để xử lý các thuộc tính của các đối tượng này bạn cần biết rõ các mã DXF của chúng. Điều này không hề dễ vì rất hay nhầm lẫn. Cách tốt nhất là bạn nên có một bảng mã DXF của các đối tượng này để tham khảo khi cần xử lý bạn ạ. Mình vẫn phải xài như vậy thôi chứ nhớ thì không xuể được. Ví dụ mã DXF thể hiện màu của line là 62, tuy nhiên nếu line có màu là bylayer thì mã này sẽ không xuất hiện trong list mã dxf của nó.

4/- Bạn nên thực hành dần dần từng bước một , từng nhiệm vụ cụ thể cho từng đối tượng cụ thể để hiểu rõ hơn các bước xử lý, đừng gộp cả lại sẽ rất khó thấy được vấn đề. Sau khi đã giải quyết tốt từng vấn đề hãy tiến hành ghép các nhiệm vụ với nhau bạn ạ.

 

Chúc bạn vui và thành công.

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

Chưa rõ ý bạn hỏi lắm.

1/- Nếu bạn muốn chọn tập hợp các line, Text, circle, arc .... riêng rẽ thì bạn sử dụng lệnh (ssget "x" (filter list)) trong đó filter list là một association list trong list các mã dxf của các đối tượng bạn chọn. Ví dụ : hàm (ssget "x" '( 0. "LINE")) sẽ cho bạn tất cả các line có trên bản vẽ.

2/- Nếu bạn muốn tách riêng các line, text, circle, arc,... có trong một tập hợp các đối tượng đã có để xử lý tiếp thì bạn có thể sử dụng các hàm điếu kiện như if, while, ... Ví dụ bạn muốn tách các line trong một tập hợp các đối tượng có sẵn ss chẳng hạn, sử dụng hàm while như sau: (while (= (cdr (assoc 0 (entget (ssname ss i)))) "line") (....................) (setq i (1+ i))) trong đó (....) là hàm mà bạn định dùng để xử lý. Và tất nhiên trước khi dùng hàm while bạn phải xác định biến i (setq i 0)

3/- Để xử lý các thuộc tính của các đối tượng này bạn cần biết rõ các mã DXF của chúng. Điều này không hề dễ vì rất hay nhầm lẫn. Cách tốt nhất là bạn nên có một bảng mã DXF của các đối tượng này để tham khảo khi cần xử lý bạn ạ. Mình vẫn phải xài như vậy thôi chứ nhớ thì không xuể được. Ví dụ mã DXF thể hiện màu của line là 62, tuy nhiên nếu line có màu là bylayer thì mã này sẽ không xuất hiện trong list mã dxf của nó.

4/- Bạn nên thực hành dần dần từng bước một , từng nhiệm vụ cụ thể cho từng đối tượng cụ thể để hiểu rõ hơn các bước xử lý, đừng gộp cả lại sẽ rất khó thấy được vấn đề. Sau khi đã giải quyết tốt từng vấn đề hãy tiến hành ghép các nhiệm vụ với nhau bạn ạ.

 

Chúc bạn vui và thành công.

 

Chào bạn phamthanhbinh

Ý của mình như số 2 và 3 bạn đã nêu đó, số 1 mình đã hiểu cách lọc rồi còn cách lọc rắc rối hơn thì mình chưa làm được nên mới hỏi mọi người. Để mình thử làm theo hướng dẫn của bạn ha, nếu khó quá mình sẽ phải làm từ từ như ý số 4 bạn đã nêu.

Cám ơn thanhbinh nhiều nha.

Chúc bạn cuối tuần vui vẻ.

:undecided:

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 phamthanhbinh

Ý của mình như số 2 và 3 bạn đã nêu đó, số 1 mình đã hiểu cách lọc rồi còn cách lọc rắc rối hơn thì mình chưa làm được nên mới hỏi mọi người. Để mình thử làm theo hướng dẫn của bạn ha, nếu khó quá mình sẽ phải làm từ từ như ý số 4 bạn đã nêu.

Cám ơn thanhbinh nhiều nha.

Chúc bạn cuối tuần vui vẻ.

:undecided:

Bạn Tuan_thietkedien ơi,

Mình sai rồi. Trong hàm While mình đã ví dụ ở trên, bạn phải đổi chuỗi "line" thành chuỗi "LINE" mới đúng vì hàm (= ..... ) so sánh các chuỗi phải giống hệt nhau cả về case của nó. Hàm (cdr (assoc 0 (.......))) sẽ trả về chuỗi toàn ký tự in hoa thôi bạn ạ.

Xin lỗi bạn vì mình cũng mới phát hiện ra lỗi này.

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

trong bài của bác có cái hàn polar em ko hiểu bác có thể giải thích nó được ko??

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
trong bài của bác có cái hàn polar em ko hiểu bác có thể giải thích nó được ko??

 

*Có 2 phương thức nhập toạ độ điểm trong Cad:

 

-Nhập toạ độ theo hệ toạ độ Đêcac,nhập theo toạ độ X,Y(trong mặt phẳng),hoặc X,Y,Z (trong không gian)

 

-Nhập theo toạ độ cực:toạ độ của 1 điểm xác định theo khoảng cách từ điểm đó đến gốc toạ độ (0,0) và góc quay từ điểm đó so với trục X.Và hàm Polar là hàm xác định toạ độ của điểm theo toạ độ cực

 

Ví dụ :M ( a b ) thì a:khoảng cách từ điểm M đến gốc toạ độ (0,0)

b:góc xoay của điểm M so với trục X

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
trong bài của bác có cái hàn polar em ko hiểu bác có thể giải thích nó được ko??

(setq p2 (polar p1 a r)) -> trả về điểm p2, có:

- Góc định hướng của p1p2 so với phương ngang là a (radian)

- Khoảng cách p1p2 = r

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 pro xin hướng dẫn em làm cái lísp sau

Em muốn số hóa nội dung trong text, cụ thể như A thành 1, B thành 2, C thành 3, D thành 4, E thành 5.

Đầu tiên mình chọn text

Lấy nội dung text

N : lấy số lượng chữ trong text

 

Vậy làm thế nào để mình xét từng chữ trong N, và cứ gặp ABCDE sẽ chuyển thành 12345.

 

Ví dụ : Text nội dung là CAD-2008 sau khi chạy lisp chuyển thành 314-2008.

 

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
Các bác pro xin hướng dẫn em làm cái lísp sau

Em muốn số hóa nội dung trong text, cụ thể như A thành 1, B thành 2, C thành 3, D thành 4, E thành 5.

Đầu tiên mình chọn text

Lấy nội dung text

N : lấy số lượng chữ trong text

 

Vậy làm thế nào để mình xét từng chữ trong N, và cứ gặp ABCDE sẽ chuyển thành 12345.

 

Ví dụ : Text nội dung là CAD-2008 sau khi chạy lisp chuyển thành 314-2008.

 

Xin cám ơn nhiều.

Bác thử sài lệnh Find(Find and Replace) của Cad xem sao?

:undecided:

  • 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
Các bác pro xin hướng dẫn em làm cái lísp sau

Em muốn số hóa nội dung trong text, cụ thể như A thành 1, B thành 2, C thành 3, D thành 4, E thành 5.

Đầu tiên mình chọn text

Lấy nội dung text

N : lấy số lượng chữ trong text

 

Vậy làm thế nào để mình xét từng chữ trong N, và cứ gặp ABCDE sẽ chuyển thành 12345.

 

Ví dụ : Text nội dung là CAD-2008 sau khi chạy lisp chuyển thành 314-2008.

 

Xin cám ơn nhiều.

Bạn tìm hiểu function vl-string-translate (lật Help ra xem) sẽ có câu trả lời.

Muốn cho code hay hơn, tìm hiểu thêm functions asciichr

 

@tucdrom

Bạn Tuấn muốn hỏi về lập trình chứ không phải dùng lệnh CAD, hai việc ấy khác nhau nhiều lắm.

Lệnh CAD: Find và Replace xong rồi thôi

Lisp: Trước và sau khi Find and Replace, chương trình có thể thực hiện tự động nhiều việc khác nữa, tuỳ ý đồ người lập trình...

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
Muốn cho code hay hơn, tìm hiểu thêm functions asciichr

Chào bạn TuanThietkedien

Mình gợi ý thế này, bạn xây dựng chương trình thử xem nhé :

1. Đọc chuỗi (dùng getstring và strcase)

2. Dùng strlen tính số chữ trong chuỗi. (biến n)

3. Khởi tạo biến đếm i=1

3. Dùng vòng lặp while (:undecided:

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 tìm hiểu function vl-string-translate (lật Help ra xem) sẽ có câu trả lời.

Muốn cho code hay hơn, tìm hiểu thêm functions asciichr

 

@tucdrom

Bạn Tuấn muốn hỏi về lập trình chứ không phải dùng lệnh CAD, hai việc ấy khác nhau nhiều lắm.

Lệnh CAD: Find và Replace xong rồi thôi

Lisp: Trước và sau khi Find and Replace, chương trình có thể thực hiện tự động nhiều việc khác nữa, tuỳ ý đồ người lập trình...

 

Chào anh SSG

Trước tiên em đã dùng thử vl-string-translate, và viết được 2 cái lisp sau

1. Lisp chuyển ABC thành 123

(defun c:hk ( / e d nd td )
(setq
e (car(entsel))
d (entget e)
nd (cdr(assoc 1 d))
td (vl-string-translate "ABC" "123" nd)
d (subst (cons 1 td) (assoc 1 d) d)
)
(entmod d)
(princ)
)

 

2. Lisp chuyển ABC tiếng Anh thành ABC tiếng Nhật.

(defun c:hk ( / e d nd td )
(setq
e (car(entsel))
d (entget e)
nd (cdr(assoc 1 d))
td (vl-string-translate "ABC" "ABC" nd)
d (subst (cons 1 td) (assoc 1 d) d)
)
(entmod d)
(princ)
)

 

Lúc đầu em nghĩ nếu chuyển được ABC thành 123 thì cũng có thể chuyển được ABC tiếng Anh thành ABC tiếng Nhật. Nhưng cái lisp thứ 2 không dùng được. Xin bác cho em thêm ý kiến.

Tham khảo 2 kiểu chữ tiếng Anh và tiếng Nhật

http://www.cadviet.com/upfiles/Drawing2_12.dwg ( 3 chữ CAD nhỏ là kiểu tiếng Nhật )

 

@Tue_NV : mình cám ơn bạn đã góp ý nhé.

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

Trước tiên em đã dùng thử vl-string-translate, và viết được 2 cái lisp sau

1. Lisp chuyển ABC thành 123

(defun c:hk ( / e d nd td )
(setq
e (car(entsel))
d (entget e)
nd (cdr(assoc 1 d))
td (vl-string-translate "ABC" "123" nd)
d (subst (cons 1 td) (assoc 1 d) d)
)
(entmod d)
(princ)
)

 

2. Lisp chuyển ABC tiếng Anh thành ABC tiếng Nhật.

(defun c:hk ( / e d nd td )
(setq
e (car(entsel))
d (entget e)
nd (cdr(assoc 1 d))
td (vl-string-translate "ABC" "ABC" nd)
d (subst (cons 1 td) (assoc 1 d) d)
)
(entmod d)
(princ)
)

 

Lúc đầu em nghĩ nếu chuyển được ABC thành 123 thì cũng có thể chuyển được ABC tiếng Anh thành ABC tiếng Nhật. Nhưng cái lisp thứ 2 không dùng được. Xin bác cho em thêm ý kiến.

Tham khảo 2 kiểu chữ tiếng Anh và tiếng Nhật

http://www.cadviet.com/upfiles/Drawing2_12.dwg ( 3 chữ CAD nhỏ là kiểu tiếng Nhật )

 

@Tue_NV : mình cám ơn bạn đã góp ý nhé.

Bạn tuan_thietkedien ơi,

Bạn suy luận vậy là hơi máy móc rồi. Bạn nhớ rằng hàm vl-string-translate là hàm dịch theo chuỗi ký tự một cách máy móc thôi. Nghĩa là cái gì bạn đã liệt kê trong chuỗi mẫu sẽ được dịch thành chuỗi kết quả tương ứng trong chuỗi đích và chỉ có vậy. Các ký tự khác không được liệt kê ra là nó mù tịt chả hiểu đâu và sẽ giữ nguyên như bản gốc, chả dịch diếc gì sốt.

Mình chả biết cái font tiếng Nhật nó tròn méo ra răng, nhưng chắc hẳn là nó cũng khá củ chuối vì nó thuộc loại chữ tượng hình mà. Có khi một chữ cái của nó lại phải gõ tới dăm ba ký tự ấy chứ, thế thì chắc là cái hàm vl-string-translate nó ngoẻo là đúng thôi bạn ạ. Ấy là cái cách nghĩ hơi cùn của mình có gì bạn đừng giận nha.

  • 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

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

×