Đến nội dung


Hình ảnh
* * * - - 17 Bình chọn

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


  • Please log in to reply
2848 replies to this topic

#881 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 18 September 2011 - 04:27 PM

- Cách tạo dimstyle trên diễn đàn có kha khá rồi, bạn cố gắng tìm nhé :)
- Cách tạo 1 đối tượng Dimension mới : Có 3 cách mà mọi người cũng vẫn đang bàn luận,mình nói sơ qua với cách tạo Dimlinear, tạm thời các vấn đề rắc rối ta bỏ qua, bạn có thể dần dần tìm thấy cách ưa thích cho mình.
- Cách 1 : Dùng command : Đặc điểm là dễ xài, gõ lệnh như nào thì ta làm như vậy.
Command phụ thuộc vào các giá trị sysvar hiện hành và chế độ bắt điểm, các chế độ thiết đặt thao tác..
Sử dụng : truyền đối số cho lệnh command

(command ".dimlinear" p1 p2 p3)
p1 : điểm đo đầu
p2 : điểm đo cuối
p3 : điểm đặt đường gióng

VD : (command ".dimlinear" (getpoint) (getpoint) (getpoint))
(command "dimlinear" '(540.685 -82.53 0.0) '(248.773 92.47 0.0) '(-43.14 -15.87 0.0))

Hoặc đơn giản sử dụng (command ".dimlinear") (không truyền đối số)
Sau khi thực hiện xong câu lệnh trên, bạn có 1 đối tượng Dimension trên bản vẽ. Các thiết đặt của đối tượng này (tức chiều cao text, layer...) sẽ được lấy theo các giá trị sysvar hiện hành
Ví dụ : layer : "clayer" ; chiều cao Text : "dimtxt".....
Từ đây, bạn có 2 hướng để đạt được kết quả :
1- Sửa đổi các thông tin đối tượng Dimension sau khi đã tạo ra nó (entlast)
2- Đặt các sysvar theo ý đồ trước khi tạo ra nó
Thường cách thứ 2 sẽ dễ dàng hơn (nhưng có nhược điểm là bạn phải trả lại giá trị cũ cho sysvar đó), nên mình sẽ đi vào vấn đề này :
-Giả sử bạn muốn dim mới tạo có layer "1" ?
=> (setvar "clayer" "1")
Muốn text height = 10 ? => (setvar "dimtxt" 10)
Muốn màu text =3 ? => (setvar "dimclrt" 3)
....
Cứ thế, bạn nhét các dòng này vào trước dòng command dimlinear ^^ (tất nhiên, các thiết đặt này phải khác các thiết đặt của dimstyle hiện hành, nếu giống thì bạn không phải làm nữa, vì tự nó đã theo thiết đặt của dim hiện hành rồi)

- TÌm các sysvar đó ở đâu ?
Có 3 cách :
+ Nhảy vào Help, mục System Variables > D System Variables > và lục tung những thằng có tiền tố DIM ra đọc
+ Dùng lệnh -Dimstyle -> Status -> Hiện ra bảng các giá trị sysvar liên quan đến Dim (hầu hết) và giải thích nghĩa
+ Chọn 1 đối tượng Dim, nhấn Ctrl 1, sau đó bạn kích vào property nào thì nhìn xuống dưới cùng, sẽ thấy biến hệ thống tương ứng :)

- Cách 2 : tạo bằng entmake
- Cách 3 : tạo bằng ActiveX (vlisp)
..... (nhiều lắm, nói k xuể ^^)
  • 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


#882 mr.nguyen08ql

mr.nguyen08ql

    biết lệnh text

  • Members
  • PipPipPipPip
  • 279 Bài viết
Điểm đánh giá: 59 (tàm tạm)

Đã gửi 18 September 2011 - 06:54 PM

Bác xem giúp em đoạn code này sai chỗ nào mà chạy không được ahm:

(defun c:ttt ()
(setq
a(getpoint "\nDiem dat.: ")
b (getpoint "\nDiem 2:"))
(setvar "DIMADEC" 0)
(setvar "DIMALTU" 2)
(setvar "DIMASO" on)
(setvar "DIMTSZ" 2)
(setvar "DIMAUNIT" 0)
(setvar "DIMCEN" 1)
(setvar "DIMCLRD" 8)
(setvar "DIMCLRT" 6)
(setvar "DIMDIMDEC" 0)
(setvar "DIMDLE" 1)
(setvar "DIMLI" 5)
(setvar "DIMEXE" 1.5)
(setvar "DIMEXO" 2)
(setvar "DIMGAP" 2)
(setvar "DIMJUST" 0)
(setvar "DIMLFAC" 1)
(setvar "DIMSHA" OFF)
(setvar "DIMTAD" 1)
(setvar "DIMTIH" OFF)
(setvar "DIMTIX" OFF)
(setvar "DIMTSZ" 2)
(setvar "DIMTXT" 4)
(command ".dimlinear" a B)
(princ)
)

  • 0

#883 npham

npham

    biết lệnh rotate

  • Members
  • PipPipPip
  • 136 Bài viết
Điểm đánh giá: 75 (tàm tạm)

Đã gửi 18 September 2011 - 07:46 PM

Bạn thay giá trị off bằng giá trị 0
  • 1

#884 mr.nguyen08ql

mr.nguyen08ql

    biết lệnh text

  • Members
  • PipPipPipPip
  • 279 Bài viết
Điểm đánh giá: 59 (tàm tạm)

Đã gửi 18 September 2011 - 08:10 PM

Vẩn không được bác ahm, khi load nó báo lỗi đử thứ, mặc dù các biến này em đã xem kỹ lại roai, mong bác sữa giúp !
thank
  • 0

#885 master_worse

master_worse

    biết lệnh offset

  • Advance Member
  • PipPipPip
  • 170 Bài viết
Điểm đánh giá: 87 (tàm tạm)

Đã gửi 18 September 2011 - 08:27 PM

Vẩn không được bác ahm, khi load nó báo lỗi đử thứ, mặc dù các biến này em đã xem kỹ lại roai, mong bác sữa giúp !
thank


Bạn thay giá trị off bằng giá trị 0

Bạn thay giá trị on bằng giá trị 1
"DIMDIMDEC" -> "DIMDEC"
"DIMLI" -> "DIMDLI"
"DIMSHA" -> "DIMSAH"
  • 1

Ngu dốt không đáng thẹn bằng thiếu ý chí học hỏi


Tri thức làm người ta khiêm tốn, ngu si làm người ta kiêu ngạo (Ngạn ngữ Anh)


#886 mr.nguyen08ql

mr.nguyen08ql

    biết lệnh text

  • Members
  • PipPipPipPip
  • 279 Bài viết
Điểm đánh giá: 59 (tàm tạm)

Đã gửi 18 September 2011 - 08:42 PM



Bạn thay giá trị on bằng giá trị 1
"DIMDIMDEC" -> "DIMDEC"
"DIMLI" -> "DIMDLI"
"DIMSHA" -> "DIMSAH"

Em thấy trong đó tác giả có viết các biến đó : ON/OFF mà, mình cho đối số : 1 và 0 nó có nghĩa gì vậy bác, khi thay thì em đã làm ddc roay.
Và bác chỉ giúp em biến : chọn khoảng hở từ chân Dim tới đối tượng đo.
  • 0

#887 npham

npham

    biết lệnh rotate

  • Members
  • PipPipPip
  • 136 Bài viết
Điểm đánh giá: 75 (tàm tạm)

Đã gửi 18 September 2011 - 09:10 PM

Em thấy trong đó tác giả có viết các biến đó : ON/OFF mà, mình cho đối số : 1 và 0 nó có nghĩa gì vậy bác, khi thay thì em đã làm ddc roay.
Và bác chỉ giúp em biến : chọn khoảng hở từ chân Dim tới đối tượng đo.


DIMEXO

Muốn check lỗi, bạn phải cho chạy từng đoạn hoặc từng dòng để phát hiện ra nó lỗi chổ nào, tìm lý do vì sao.....
Bạn load hết 1 lần, lỗi ùm bà lằn thì biết đâu mà mần hả bạn
  • 1

#888 master_worse

master_worse

    biết lệnh offset

  • Advance Member
  • PipPipPip
  • 170 Bài viết
Điểm đánh giá: 87 (tàm tạm)

Đã gửi 18 September 2011 - 09:17 PM

Em thấy trong đó tác giả có viết các biến đó : ON/OFF mà, mình cho đối số : 1 và 0 nó có nghĩa gì vậy bác, khi thay thì em đã làm ddc roay.
Và bác chỉ giúp em biến : chọn khoảng hở từ chân Dim tới đối tượng đo.

tác giả có viết các biến đó : ON/OFF cho dễ hiểu thôi. còn kiểu dữ liệu của biến đó là số nguyên, nên phải là 0 và 1
biến khoảng hở từ chân Dim tới đối tượng đo DIMEXO


PS: bạn tạo 2 dimstyle giống nhau rồi giữ 1 cái làm chuẩn, sửa cái còn lại (cái cần xác định biến gì?) rồi chọn so sánh 2 dimstyle này sẽ rõ hơn về các biến này
(khi bạn gõ lệnh dimstyle sẽ thấy có Compare)
  • 1

Ngu dốt không đáng thẹn bằng thiếu ý chí học hỏi


Tri thức làm người ta khiêm tốn, ngu si làm người ta kiêu ngạo (Ngạn ngữ Anh)


#889 hugo75

hugo75

    biết vẽ polygon

  • Members
  • PipPip
  • 72 Bài viết
Điểm đánh giá: -4 (bình thường)

Đã gửi 19 September 2011 - 10:24 PM

Chào các bác,e đang tìm hiểu về lisp,e hiểu code sau như thế này:
a1 (list (+ (car p1) a) (+ (cadr p1)) là tọa độ điểm a1 theo phương X là p1+a,theo phương Y là p1+b Nhứng khi viết như thế này thì hiểu ra sao:
(command ".rectangle" p1 (list (+ (car p1) a) (+ (cadr p1) ))
Cảm ơn các bác.
  • 0

#890 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 19 September 2011 - 10:30 PM

Chào các bác,e đang tìm hiểu về lisp,e hiểu code sau như thế này:
a1 (list (+ (car p1) a) (+ (cadr p1) c) là tọa độ điểm a1 theo phương X là p1+a,theo phương Y là p1+c Nhứng khi viết như thế này thì hiểu ra sao:
(command ".rectangle" p1 (list (+ (car p1) a) (+ (cadr p1) c)))
Cảm ơn các bác.

Cái ký hiệu "b" và ")" nó trùng với "mặt người" B)nên tôi thay b bởi c cho dễ đọc nhé:
(command ".rectangle" p1 (list (+ (car p1) a) (+ (cadr p1) c)))
  • 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.


#891 mr.nguyen08ql

mr.nguyen08ql

    biết lệnh text

  • Members
  • PipPipPipPip
  • 279 Bài viết
Điểm đánh giá: 59 (tàm tạm)

Đã gửi 21 September 2011 - 10:57 AM

Các bác cho em hỏi có khi nào mình sử dụng các hàm toán học bình thường mà kết quả thu được ở dạng chuổi không ! để chuyển về số thực thì mình dùng hàm gì !?
thank :)
  • 0

#892 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 21 September 2011 - 11:27 AM

Các bác cho em hỏi có khi nào mình sử dụng các hàm toán học bình thường mà kết quả thu được ở dạng chuổi không ! để chuyển về số thực thì mình dùng hàm gì !?
thank Hình đã gửi

Để để chuyển về số thực
-> Thực hiện hàm rtos để chuyển về chuỗi
Bạn Xem thêm help nhé
  • 1

#893 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 21 September 2011 - 11:32 AM

Các bác cho em hỏi có khi nào mình sử dụng các hàm toán học bình thường mà kết quả thu được ở dạng chuổi không ! để chuyển về số thực thì mình dùng hàm gì !?
thank Hình đã gửi

Bạn phải nói rõ là hàm nào chứ ^^. Nếu +,-,*,/ thì chắc k có chuỗi đâu ^^
Còn chuyển từ chuỗi sang số, bạn có thể tham khảo các hàm sau :atoi, atof, read
  • 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


#894 mr.nguyen08ql

mr.nguyen08ql

    biết lệnh text

  • Members
  • PipPipPipPip
  • 279 Bài viết
Điểm đánh giá: 59 (tàm tạm)

Đã gửi 21 September 2011 - 01:46 PM

Bạn phải nói rõ là hàm nào chứ ^^. Nếu +,-,*,/ thì chắc k có chuỗi đâu ^^
Còn chuyển từ chuỗi sang số, bạn có thể tham khảo các hàm sau :atoi, atof, read

hihi,anh xem giúp em cái code :

(defun c:vm (/ a1 a2 a3 b L1 L2 B Htn Hdm sb btc hdtc hbtl m S1 S2 L0 B0 L01 B01 Vdcg Vdtc1
Vdtc2 )
( setq a1(getdist "\n nhap chieu dai canh a1:")
a2(getdist "\n nhap chieu dai canh a2:")
a3(getdist "\n nhap chieu dai canh a3:")
b(getdist "\n nhap chieu rong canh b:")
L1(getdist "\n nhap khoang cach L1:")
L2(getdist "\n nhap khoang cach L2:")
B(getdist "\n nhap khoang cach B:")
Htn(getdist "\n nhap cao do tu nhien Htn:")
Hdm(getdist "\n nhap cao do day mong Hdm:")
sb(getdist "\n nhap so buoc mong:")
btc(getdist "\n nhap khoang cach b thi cong:")
hdtc(getdist "\n nhap chieu cao dao thu cong Hdtc:")
hbtl(getdist "\n nhap chieu day be tong lot Hbtl:")
m(getdist "\n nhap do soai cua dat m:")
)
(setq bx(* m 2 (- (+ (- Htn Hdm) Hbtl) hdtc))
S1(- L2 (+ a2 (/ a3 2) (* btc 2) (* bx 2)))
S2(- B (+ b (* btc 2) (* bx 2)))
Hdcg(- (+ (- Htn Hdm) Hbtl) hdtc))
(cond
((and (<= S1 0) (<= S2 0))
(setq L0(+ (* L1 2) (* L2 2) (* a1 2) (* btc 2))
B0(+ (* B sb) b (* btc 2))
L01(+ L0 (* bx 2))
B01(+ B0 (* bx 2))
Vdcg(/ (* (+ (* L0 B0) (* L01 B01) (* (+ L0 B0) (+ L01 B01))) Hdcg) 6)
Vdtc1(* (+ sb 1) 2 (* (+ L1 a1 a2 (* btc 2)) hdtc (+ b (* btc 2))))
Vdtc2(* (+ sb 1) (+ a3 (* btc 2)) (+ b (* btc 2)) hdtc)
Vdtc(+ Vdtc1 Vdtc2)
V(+ Vdtc Vdcg))
(princ "\n Khoang cach S1:")
(princ S1)
(princ "\n Khoang cach S2:")
(princ S1)
(princ "\n The tich dat dao thu cong:")
(princ Vdtc)
(princ "\n The tich dat dao bang co gioi:")
(princ Vdcg)
(princ "\n The tich dat dao Toan bo mong:")
(princ V)
)
((and (> S1 0) (<= S2 0))
(setq L0(+ L1 (+ a1 a2) (* btc 2))
L1(+ a3 (* btc 2))
L01(+ L0 (* bx 2))
L11(+ L1(* bx 2))
B0(+ (* sb B) b (* btc 2))
B01(+ B0 (* bx 2))
Vdcg1(* 2 (/ (* (+ (* L1 B0) (* L01 B01) (* (+ L1 B0) (+ L01 B01))) Hdcg) 6))
Vdcg2(/ (* (+ (* L01 B0) (* L11 B01) (* (+ L01 B0) (+ L11 B01))) Hdcg) 6)
Vdcg(+ Vdcg1 Vdcg2)
Vdtc1(* (+ sb 1) 2 (* (+ L1 a1 a2 (* btc 2)) hdtc (+ b (* btc 2))))
Vdtc2(* (+ sb 1) (+ a3 (* btc 2)) (+ b (* btc 2)) hdtc)
Vdtc(+ Vdtc1 Vdtc2)
V(+ Vdtc Vdcg))
(princ "\n Khoang cach S1:")
(princ S1)
(princ "\n Khoang cach S2:")
(princ S1)
(princ "\n The tich dat dao thu cong Vdtc:")
(princ Vdtc)
(princ "\n The tich dat dao bang co gioi Vdcg:")
(princ Vdcg)
(princ "\n The tich dat dao Toan bo mong:")
(princ V)
)
((and (<= S1 0) (> S2 0))
(setq L0(+ (* L1 2) (* L2 2) (* a1 2) (* btc 2))
B0(+ b (* btc 2))
L01(+ L0 (* bx 2))
B01(+ B0 (* bx 2))
Vdcg(* (/ (* (+ (* L0 B0) (* L01 B01) (* (+ L0 B0) (+ L01 B01))) Hdcg) 6) (+ sb 1))
Vdcg1(* 2 (/ (* (+ (* L1 B0) (* L01 B01) (* (+ L1 B0) (+ L01 B01))) Hdcg) 6))
Vdcg2(/ (* (+ (* L01 B0) (* L11 B01) (* (+ L01 B0) (+ L11 B01))) Hdcg) 6)
Vdtc(+ Vdtc1 Vdtc2)
V(+ Vdtc Vdcg))
(princ "\n Khoang cach S1:")
(princ S1)
(princ "\n Khoang cach S2:")
(princ S1)
(princ "\n The tich dat dao thu cong Vdtc:")
(princ Vdtc)
(princ "\n The tich dat dao bang co gioi Vdcg:")
(princ Vdcg)
(princ "\n The tich dat dao Toan bo mong:")
(princ V)
))
(princ)
)





sau khi nhập số liệu :

nhap chieu dai canh a1:800

nhap chieu dai canh a2:900

nhap chieu dai canh a3:2600

nhap chieu rong canh b:1400

nhap khoang cach L1:6600

nhap khoang cach L2:7200

nhap khoang cach B:4500

nhap cao do tu nhien Htn:-300

nhap cao do day mong Hdm:-2450

nhap so buoc mong:24

nhap khoang cach b thi cong:100

nhap chieu cao dao thu cong Hdtc:100

nhap chieu day be tong lot Hbtl:100

nhap do soai cua dat m:0.67

Khoang cach S1:-962.0
Khoang cach S2:-962.0
The tich dat dao thu cong:2.3265e+011
The tich dat dao bang co gioi:1.05023e+013
The tich dat dao Toan bo mong:1.07349e+013


  • 0

#895 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 21 September 2011 - 01:58 PM

Ô, mr đùa ketxu à ^^ Đó là cách thể hiện số 10e^... Muốn hiển thị nguyên bản bạn thực hiện rtos 2 trước khi princ 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


#896 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 21 September 2011 - 02:00 PM

hihi,anh xem giúp em cái code :
sau khi nhập số liệu :

Mới xem qua thì thấy bạn bị nhầm khi (setq b...) và (setq B...). Biến sau đã thay biến trước mất rồi, dù "b" hay "B" cũng vậy.
  • 1

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


#897 mr.nguyen08ql

mr.nguyen08ql

    biết lệnh text

  • Members
  • PipPipPipPip
  • 279 Bài viết
Điểm đánh giá: 59 (tàm tạm)

Đã gửi 21 September 2011 - 02:19 PM

Ô, mr đùa ketxu à ^^ Đó là cách thể hiện số 10e^... Muốn hiển thị nguyên bản bạn thực hiện rtos 2 trước khi princ nhé :)

hi,số : đỏ này hả anh
The tich dat dao thu cong:2.3265e+011
The tich dat dao bang co gioi:1.05023e+013
The tich dat dao Toan bo mong:1.07349e+013

tại em đang còn lơ mơ lắm, anh nói rõ hơn được không ! thank :)


Mới xem qua thì thấy bạn bị nhầm khi (setq b...) và (setq B...). Biến sau đã thay biến trước mất rồi, dù "b" hay "B" cũng vậy.


Em quên hihi,
  • 0

#898 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 21 September 2011 - 02:38 PM

Bạn thay (princ V) bằng (princ (rtos V 2 1)) thôi :) Số 2 là cách hiển thị decimal bình thường, số 1 là số chữ số sau dấu ,
  • 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


#899 mr.nguyen08ql

mr.nguyen08ql

    biết lệnh text

  • Members
  • PipPipPipPip
  • 279 Bài viết
Điểm đánh giá: 59 (tàm tạm)

Đã gửi 21 September 2011 - 03:47 PM

Bạn thay (princ V) bằng (princ (rtos V 2 1)) thôi :) Số 2 là cách hiển thị decimal bình thường, số 1 là số chữ số sau dấu ,

Được roay anh ah.Em cảm hơn các bác nhé ! hàm rtos chuyển từ 1 số thành chuổi đúng không anh, mà sao mình chuyển từ cái chuổi đó về số vẫn đc nhĩ, sao mình không dùng được hàm Atof ạ !
hi :)
  • 0

#900 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 21 September 2011 - 04:41 PM

2.3265e+011 bản thân nó là 1 số thực và bằng 2.3265 x 10^11
Để in ra màn hình thì chuyển nó về string dạng Decimal với hàm rtos (real to string)
Hàm atof thì ngược lại, chuyển từ string về số thực, đối số là 1 string. Vì vậy
(atof (rtos 2.3265e+011 2 2)) vẫn bằng 2.3265e+011.
Viết lisp rất quan trọng đối số, type của đối số. Vì vậy khi gặp lỗi, bạn chịu khó dùng (type a) để kiểm tra đối số a đúng loại mình cần chưa
  • 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