Đến nội dung


Hình ảnh
- - - - -

Chuyển từ text số thành text chữ tiếng Việt.


  • Please log in to reply
19 replies to this topic

#1 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1434 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 05 January 2012 - 03:11 PM

Ứng dụng của AutoCAD .NET API thực hiện việc Chuyển từ text số thành text chữ tiếng Việt.

Sử dụng thư viện Chuyển số thành chữ bên caulacbovb.net : LInk

Cách sử dụng :
1. giải nén và copy file "Number2String.dll" vào hệ thống(đĩa cứng, USB, ...).
2. Khởi động AutoCAD, open file Cad cần chuyển .
3. Tại dấu nhắc (Command ) của CAD gõ lệnh NETLOAD và chỉ đến vị trí file "Number2String.dll" vừa copy ở buớc 1, chọn OPEN để hoàn thành lệnh NETLOAD .
4. gõ lệnh n2s để bắt đầu ...
(Nếu bạn đã quen với AutoLisp, các buớc 1-2-4 tuơng tự như cách load 1 ứng dụng AutoLisp, chỉ thay lệnh APPLOAD bằng lệnh NETLOAD ở buớc 3.)

Ngoài ra "Number2String.dll" còn cùng cấp hàm LISP Number2String để ứng dụng trong Lập trình LISP.
Cách sử dụng :
1. Cú pháp : (Number2String str)
- trong đó str là kiểu chuỗi (string)
Chú ý : kí hiệu thập phân chỉ chấp nhận hoăc là dấu phấy "," hoặc dấu chấm "." (không chấp nhận vừa dấu phẩy vừa dấu chấm, VD: 123.456,8 )
- giá trị trả về là lisp chứa kết quả tiếng Việt (bảng mã Unicode) hoặc NIL

2.VD :
- (car(Number2String "13964.8")) -> Mười ba nghìn chín trăm sáu mươi bốn phảy tám
- (car(Number2String "237,5")) -> Hai trăm ba mươi bảy phảy năm
- (Number2String "4.237,5") -> nil

Hàm Lisp tham khảo :
Nhớ chép file "Number2String.dll" vào đuờng dẫn Autocad Support file search Path.

(defun C:test1(/ ds e fil i res ss str);
(if (and (setq fil (findfile "Number2String.dll"))
(vl-cmdf "_.netLoad" fil)
(setq ss (ssget "_:L" (list (cons 0 "Text")))) )
(progn
(setq i -1)
(while (setq e (ssname ss (setq i (1+ i))))
(setq ds (entget e)
str (cdr (assoc 1 ds)))
(if (setq res (Number2String str) )
(entmod (subst (cons 1 (strcat str " (" (car res ) ")") )(assoc 1 ds) ds)) ) ))
(princ "\nError found."))
(princ))
(defun C:test(/ ss res fil)
(if (and (setq fil (findfile "Number2String.dll"))
(vl-cmdf "_.netLoad" fil) )
(while (setq ss (ssget "_+.:S:E" (list (cons 0 "Text"))))
(if (setq res (Number2String (cdr (assoc 1 (entget (ssname ss 0))))) )
(princ (car res ))
(princ "\nKhong phai so!")))
(princ "\nFile not found.") )
(princ))


Link bao gồm SourceCode : click here
  • 4

#2 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 05 January 2012 - 04:03 PM

Ứng dụng của AutoCAD .NET API thực hiện việc Chuyển từ text số thành text chữ tiếng Việt.

Sử dụng thư viện Chuyển số thành chữ bên caulacbovb.net : LInk

Cách sử dụng :
1. giải nén và copy file "Number2String.dll" vào hệ thống(đĩa cứng, USB, ...).
2. Khởi động AutoCAD, open file Cad cần chuyển .
3. Tại dấu nhắc (Command ) của CAD gõ lệnh NETLOAD và chỉ đến vị trí file "Number2String.dll" vừa copy ở buớc 1, chọn OPEN để hoàn thành lệnh NETLOAD .
4. gõ lệnh n2s để bắt đầu ...
(Nếu bạn đã quen với AutoLisp, các buớc 1-2-4 tuơng tự như cách load 1 ứng dụng AutoLisp, chỉ thay lệnh APPLOAD bằng lệnh NETLOAD ở buớc 3.)

Ngoài ra "Number2String.dll" còn cùng cấp hàm LISP Number2String để ứng dụng trong Lập trình LISP.
Cách sử dụng :
1. Cú pháp : (Number2String str)
- trong đó str là kiểu chuỗi (string)
Chú ý : kí hiệu thập phân chỉ chấp nhận hoăc là dấu phấy "," hoặc dấu chấm "." (không chấp nhận vừa dấu phẩy vừa dấu chấm, VD: 123.456,8 )
- giá trị trả về là lisp chứa kết quả tiếng Việt (bảng mã Unicode) hoặc NIL

2.VD :
- (car(Number2String "13964.8")) -> Mười ba nghìn chín trăm sáu mươi bốn phảy tám
- (car(Number2String "237,5")) -> Hai trăm ba mươi bảy phảy năm
- (Number2String "4.237,5") -> nil

Hàm Lisp tham khảo :
Nhớ chép file "Number2String.dll" vào đuờng dẫn Autocad Support file search Path.


(defun C:test1(/ ds e fil i res ss str);
(if (and (setq fil (findfile "Number2String.dll"))
(vl-cmdf "_.netLoad" fil)
(setq ss (ssget "_:L" (list (cons 0 "Text")))) )
(progn
(setq i -1)
(while (setq e (ssname ss (setq i (1+ i))))
(setq ds (entget e)
str (cdr (assoc 1 ds)))
(if (setq res (Number2String str) )
(entmod (subst (cons 1 (strcat str " (" (car res ) ")") )(assoc 1 ds) ds)) ) ))
(princ "\nError found."))
(princ))
(defun C:test(/ ss res fil)
(if (and (setq fil (findfile "Number2String.dll"))
(vl-cmdf "_.netLoad" fil) )
(while (setq ss (ssget "_+.:S:E" (list (cons 0 "Text"))))
(if (setq res (Number2String (cdr (assoc 1 (entget (ssname ss 0))))) )
(princ (car res ))
(princ "\nKhong phai so!")))
(princ "\nFile not found.") )
(princ))


Link bao gồm SourceCode : click here

Code chạy tốt lắm. Tuy nhiên, có 1 số trường hợp anh ạ:
2002 : Chương trình đọc là : Hai nghìn hai
-> Đúng phải là : Hai nghìn không trăm lẻ hai
2002,002 Chương trình đọc là : Hai nghìn hai phảy không không hai
-> Đúng phải là : Hai nghìn không trăm lẻ hai phẩy không trăm lẻ hai

Cảm ơn anh gia_bach rất nhiều. Chúc anh luôn khoẻ
  • 1

#3 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1434 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 05 January 2012 - 04:10 PM

Code chạy tốt lắm. Tuy nhiên, có 1 số trường hợp anh ạ:
2002 : Chương trình đọc là : Hai nghìn hai
-> Đúng phải là : Hai nghìn không trăm lẻ hai
2002,002 Chương trình đọc là : Hai nghìn hai phảy không không hai
-> Đúng phải là : Hai nghìn không trăm lẻ hai phẩy không trăm lẻ hai

Cảm ơn anh gia_bach rất nhiều. Chúc anh luôn khoẻ

Thanks Tuệ đã góp ý.
Anh cũng thấy 1 số t/hợp không đúng lắm, nhưng cái này sử dụng thư viện của người khác nên có sao dùng vậy.
  • 0

#4 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 06 January 2012 - 09:05 AM

Thanks Tuệ đã góp ý.
Anh cũng thấy 1 số t/hợp không đúng lắm, nhưng cái này sử dụng thư viện của người khác nên có sao dùng vậy.

Nói chung là tốt bác ạ! Nhưng nói riêng cũng hơi... say xỉn tí. Nhưng bác sử dụng thư viện của người khác nên có sao dùng vậy thôi. Ngoài việc lùng bùng vì các con số 0 thì nó xài tiền Zămbuê không rành lắm.
Ví dụ: 1111111111111
Người Zămbuê đọc: Một nghìn một trăm mười một tỷ một trăm mười một triệu một trăm mười một nghìn một trăm mười một.
Nó đọc: Một nghìn tỷ một trăm mười một tỷ một trăm mười một triệu một trăm mười một nghìn một trăm mười một
  • 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.


#5 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 06 January 2012 - 09:16 AM

Hê.. Thú thực với bác gia_bach hôm qua e cũng bookmark cái này về định xài LateBinding, không ngờ bác đã chiến rồi ^^
Nói chung là có rất nhiều phương án để lựa chọn. Tks bác rất nhiều.

P/s : E có 1 câu hỏi ngoài lề chưa biết để đâu, tiện đây e hỏi luôn, k hiểu sao các bước tạo lispfunction của e toàn bị lỗi (báo lỗi chưa nhận lệnh), kể cả đơn giản nhất, k biết có phải thao tác cần gì đó k?? Hoặc bác cho e xin 1 ví dụ đơn giản như 1 file dll lispfunction alert ra màn hình + trả về string alert ?
Nếu được bác post ở bên Hướng dẫn LT thì e xóa bài này đi cho đỡ loãng ^^
  • 0

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


#6 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1434 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 06 January 2012 - 10:08 AM

.....
Ví dụ: 1111111111111
Người Zămbuê đọc: Một nghìn một trăm mười một tỷ một trăm mười một triệu một trăm mười một nghìn một trăm mười một.
Nó đọc: Một nghìn tỷ một trăm mười một tỷ một trăm mười một triệu một trăm mười một nghìn một trăm mười một

Nói chung các open source-code chỉ là ví dụ tham khảo thêm, muốn sử dụng tốt cần phải đầu tư thêm nhiều thời gian và test cẩn thận.

...
Hoặc bác cho e xin 1 ví dụ đơn giản như 1 file dll lispfunction alert ra màn hình + trả về string alert ?

Ket tham khảo trong code nhé.
  • 1

#7 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 06 January 2012 - 04:24 PM

Nói chung các open source-code chỉ là ví dụ tham khảo thêm, muốn sử dụng tốt cần phải đầu tư thêm nhiều thời gian và test cẩn thận.
......

Em định tận dụng cái Add-on có sẳn trong Excel -> khỏi phải đầu tư nhiều thời gian anh ạ
Ý tưởng của em là :
1./ Tạo 1 Bảng Excel có sẳn trong đó chứa các công thức xử lý chuỗi -> Cho ra kết quả như mình mong muốn.
2./ Vào CAD chọn 1 Text số -> Ghi số đã chọn vào ô Cell để Excel xử lý -> Có kết quả
3./ Khi có kết quả từ Excel rồi -> Lấy kết quả đó nhập vào CAD
- Ở bước 1 em đã làm được rồi. Excel đọc số sang chữ ngon lành.
- Bước 2 : Em đã sử dụng Lisp WriteToExcel của anh ghi vào Excel. Tuy nhiên, Lisp WriteToExcel luôn tạo ra 1 file Excel mới. Có cách nào ghi data vào 1 file Excel có sẵn không anh?
- Nếu xử lý được bước 2, em hoàn toàn có thể xử lý được bước 3
File WriteToExcel của anh ở đây : http://www.cadviet.c...opic=407&st=140
Nếu có thể, anh có thể giúp em vấn đề trên ở topic AutoCAD với ExCel, nếu không lạc topic mất
Chân thành cảm ơn anh.
  • 0

#8 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 06 January 2012 - 04:35 PM

Sao k đảo bước 1 và bước 2 với nhau bác nhỉ :o
  • 0

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


#9 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 06 January 2012 - 04:46 PM

Sao k đảo bước 1 và bước 2 với nhau bác nhỉ :o

Bước 1 và bước 2 thực ra có đảo hay không đảo cũng như nhau thôi.

Cái Add-on đấy mình lấy trên CADVIET mình, chỉ dành cho dân dự toán và kế toán, đọc ra chỉ tới hàng đơn vị thôi, phần thập phân thì không đọc. Cho nên, đã xử lý bằng hàm chuỗi và số trong Excel (cũng hơi dài), kết quả đọc OK. Tuy nhiên chỉ đọc tới hàng trăm tỷ thôi, hàng nghìn tỷ (chưa có đơn vị) nên không đọc được. Mình thấy đó cũng hợp lý (vì chắc chi đã sài đến hàng nghìn tỷ. hì hì)
Ghi số vào Excel sẵn có cũng là vì thế ^ ^.
Có Excel để Excel xử lý kết quả luôn. Mình chỉ lấy kết quả là xong.
  • 0

#10 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 06 January 2012 - 04:53 PM

Tức là nếu sử dụng thành 1 add-on viết bằng VBA hoàn chỉnh thì cứ xuất chuỗi rồi add cái xla vào cũng có sao đâu ạ ^^ Như bác nói thì e Dự là bác đang xử lý trực tiếp bằng công thức trong các ô, chứ k còn là Add In add on gì nữa ^^ Đúng k ạ ^^

P/s : luôn ghi theo 1 cột và là cột đầu, hay là phải chỉ định tọa độ Cell ạ ?
  • 0

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


#11 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 06 January 2012 - 04:57 PM

Tức là nếu sử dụng thành 1 add-on viết bằng VBA hoàn chỉnh thì cứ xuất chuỗi rồi add cái xla vào cũng có sao đâu ạ ^^
Như bác nói thì e Dự là bác đang xử lý trực tiếp bằng công thức trong các ô, chứ k còn là Add In add on gì nữa ^^ Đúng k ạ ^^
P/s : luôn ghi theo 1 cột và là cột đầu, hay là phải chỉ định tọa độ Cell ạ ?

Tại mình không rành VBA nên mới đi lòng vòng thế. Nếu để 1 người là tác giả của bản add-on trên xử lý luôn thì tuyệt quá.
Với lại, sẽ mất khá nhiều thời gian để viết chương trình này hoàn chỉnh đấy (Lisp hay VBA gì cũng thế). Cái cần là hiệu quả công việc, phải không bạn?
Dầu sao đến được đích là OK.

* Đúng rồi KetXu à. Có dữ liệu số nhập vào, ta xử lý các Cell còn lại. Cái mình lấy là 1 Cell chứa kết quả là chữ cần đọc ra. Tuy nhiên, vẫn dựa vào add-ins đọc số thành chữ trong Excel để xử lý, vì add-ins chỉ đọc tới hàng đơn vị mà thôi.

P/S: Mình chỉ định tọa độ Cell. Có thể lấy luôn Column đầu tiên là Cột chứa dữ liệu Input, các cell chứa dữ liệu trung gian và cả cell chứa kết quả
  • 0

#12 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 06 January 2012 - 10:35 PM

Bác lấy cái này của TC được ạ
http://web2.iadfw.ne...SP/GetExcel.lsp
  • 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


#13 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 07 January 2012 - 09:27 AM

Bác lấy cái này của TC được ạ
http://web2.iadfw.ne...SP/GetExcel.lsp

Thanks KetXu!
Hôm qua, Tue_NV cũng lọ mọ thử cái này trong topic AutoCAD với Excel.
Sử dụng hàm PutCell mãi không được. Nó cứ trả về ; error: bad argument type: VLA-OBJECT nil
Chỉ vì lý do là file Excel đó chưa open
Chừ thì ổn rồi.. Ý tưởng đã có, Add-ins đọc số sang chữ thì OK rồi. Giờ chỉ còn mong có thời gian rỗi -> bắt tay làm 1 ứng dụng này nữa thôi.
Thanks
  • 1

#14 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 07 January 2012 - 10:56 AM

Em cũng góp vui 1 cái (bao gồm source code)
Download Here
Thanks!
  • 2

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#15 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 07 January 2012 - 11:35 AM

Em cũng góp vui 1 cái (bao gồm source code)
Download Here
Thanks!

Chào Detail
Tue_NV Test một số trường hợp thì thấy chưa đúng :
15100 : Chương trình đọc là : một trăm năm mươi mốt
15000 : Chương trình đọc là : Mười lăm
15000.90 : Chương trình đọc là : mười lăm ngàn không trăm phẩy chín
15000000 : Chương trình đọc là : Mười lăm
15100.902 : Chương trình đọc là : mười lăm ngàn một trăm phẩy chín
..........
Chương trình bạn hình như chỉ đọc được số số lẻ thập phân tối đa là 2.
3 số lẻ thập phân thì chịu rồi
  • 1

#16 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 07 January 2012 - 12:15 PM

Chào Detail
Tue_NV Test một số trường hợp thì thấy chưa đúng :
15100 : Chương trình đọc là : một trăm năm mươi mốt
15000 : Chương trình đọc là : Mười lăm
15000.90 : Chương trình đọc là : mười lăm ngàn không trăm phẩy chín
15000000 : Chương trình đọc là : Mười lăm
15100.902 : Chương trình đọc là : mười lăm ngàn một trăm phẩy chín
..........
Chương trình bạn hình như chỉ đọc được số số lẻ thập phân tối đa là 2.
3 số lẻ thập phân thì chịu rồi

Thanks Tue_NV
$$ thì ít khi nào tới 3 số lẻ nên mình chỉ để 2 số thôi
Đã update lại link ở post trên.
  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#17 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 09 January 2012 - 10:29 PM

Bình thường số 0,00007 thì đọc ntn ? 0,00000000000001 thì máy đọc là gì nhỉ ^^
  • 0

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


#18 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 10 January 2012 - 08:02 AM

Bình thường số 0,00007 thì đọc ntn : không phẩy không không không không bảy
0,00000000000001 thì máy đọc là gì nhỉ ^^ : không phẩy không .. ... một

Cách đơn giản nhất
  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#19 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1434 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 10 January 2012 - 12:25 PM

Update :
Vẫn còn 2 vấn đề chưa hài lòng :
- t/hợp phần nguyên lớn hơn 18 chữ số (tỉ tỉ) : chưa biết cách biểu diễn
- với phần thập phân chọn cách đọc đơn giản nhất :
+ 0,00007 -> không phẩy không không không không bảy
+ 0,00000000000001-> không phẩy không .. ... một

Mời mọi nguời test và góp ý : NumberToString.zip
  • 1

#20 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 10 January 2012 - 02:20 PM

Cái Add-on đấy mình lấy trên CADVIET mình, chỉ dành cho dân dự toán và kế toán, đọc ra chỉ tới hàng đơn vị thôi, phần thập phân thì không đọc. Cho nên, đã xử lý bằng hàm chuỗi và số trong Excel (cũng hơi dài), kết quả đọc OK. Tuy nhiên chỉ đọc tới hàng trăm tỷ thôi, hàng nghìn tỷ (chưa có đơn vị) nên không đọc được. Mình thấy đó cũng hợp lý (vì chắc chi đã sài đến hàng nghìn tỷ. hì hì)
Ghi số vào Excel sẵn có cũng là vì thế ^ ^.
Có Excel để Excel xử lý kết quả luôn. Mình chỉ lấy kết quả là xong.
______________________________

screen doors retractable|4life transfer factor tri-factor

Sau 1 hồi nghiên cứu và quá trình lâu dài theo dõi, phát hiện đồng chí này chuyên re-post lại những bài rl trước đó - Nhiều khi không hề ăn nhập với chuyện đang nói => Khả năng là 1 acc spam công nghệ cao => Ketxu mời nick này vào spam list ^^
  • 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