Đến nội dung


Hình ảnh
- - - - -

[Thảo luận] Viết lại các hàm Express


  • Please log in to reply
194 replies to this topic

#61 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 24 November 2011 - 02:44 PM

Em đang lọ mọ tìm cách view cái bảng như Excel lên bài post đầu , r tick dấu vô như bác hochoaivandot góp ý, nhưng không được. Mà ngồi link lại lâu hơn hẳn, do dạo này cơ chế làm việc của 4room nó hiện đại nhưng mà cứ khó khó . Như phần pót link thì k thấy chỗ add title cho link nữa ^^
  • 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


#62 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 24 November 2011 - 03:57 PM


P/s : Bác Bình test thử với '(0 0 0) '(1 1 1) chưa ạ ^^ (lỗi chia số nguyên 1 / 2)
Theo em thì :


(defun CV:Geom-Midpoint (p1 p2 )(mapcar '(lambda (x y) (* (+ x y) 0.5)) p1 p2))

Hề hề hề,
May quá bác Ketxu lại giúp mình chữa thêm được một lỗi ngớ ngẩn nữa. Đúng là cái thằng / này nó có cái đặc tính quái dị đó mà lâu lâu lại quên béng đi mất.
Thôi thì đền cho bác một thằng sắp ngớ ngẩn nữa vậy. Hàm CV:layer-locked
Hàm này kiểm tra xem layer lay có bị khóa hay không, nếu bị khóa thì trả về tên layer theo như thằng acet nó bảo thế. Mình bổ sung thêm hai tí nhau nữa là thông báo ra màn hình cho người dùng nhòm thấy và chuyển layer bị khóa này về hiện hành để người dùng biết mà xử trảm nó. Còn nếu không bị khóa thì nó hàm sẽ trả về nil y như thằng acet. các bác cứ xem nếu thấy chưa ưng tí nhau nào thì trảm tí nhau đó đi là Ok hỉ.


(defun CV:layer-locked (lay)
(if (= 4 (logand 4 (cdr (assoc 70 (entget(tblobjname "layer" lay))))))
;;;;; (progn
;;;;; (setvar "clayer" lay)
;;;;; (alert (strcat "\n Layer " lay " dang bi khoa"))
lay
;;;;; )
;;;; (progn
(setq lay nil)
;;;;; )
)

)
À mà nói thêm một tí là cái thằng hàm kiểm tra layer có bị khóa hay không là mình nhót của bác Ketxu đấy. Ở ngay cái hàm CV:ss-visible ấy mà.
Hề hề hề.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#63 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 24 November 2011 - 03:59 PM

Em đang lọ mọ tìm cách view cái bảng như Excel lên bài post đầu , r tick dấu vô như bác hochoaivandot góp ý, nhưng không được. Mà ngồi link lại lâu hơn hẳn, do dạo này cơ chế làm việc của 4room nó hiện đại nhưng mà cứ khó khó . Như phần pót link thì k thấy chỗ add title cho link nữa ^^

Hề hề hề,
Bác mà còn thấy khó thì biết nhờ cậy ai đây.???
Thôi thì "Khó cũng mần" vậy.
Hề hề hề....
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#64 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 24 November 2011 - 04:04 PM

Hề hề hề,
Bác ketxu nên lưu ý cập nhật thêm các hàm CV:..... đã được thẩm định vô danh sách nghen.
Xin bổ sung một thằng ngớ ngẩn nữa. Hàm CV:geom-midpoint:


(defun CV:geom-midpoint (p1 p2 )
(setq mp (mapcar '(lambda (x y) (/ (+ x y) 2)) p1 p2))
mp
)
P/s : Bác Bình test thử với '(0 0 0) '(1 1 1) chưa ạ ^^ (lỗi chia số nguyên 1 / 2)
Theo em thì :

(defun CV:Geom-Midpoint (p1 p2 )(mapcar '(lambda (x y) (* (+ x y) 0.5)) p1 p2))

Sẵn, các bác làm cho trường hợp tổng quát hơn 1 tí nữa luôn đi: tìm điểm trên curve cách điểm đầu 1 đoạn có chiều dài là a và cách điểm cuối 1 đoạn có chiều dài là b (có 1 lệnh CAL tương tự như thế)
VD: (defun CV:geom-scapoint p1 p2 k), trong đó k=a/l.
Thân thương!
  • 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.


#65 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 24 November 2011 - 04:13 PM

Mình bổ sung thêm hai tí nhau nữa là thông báo ra màn hình cho người dùng nhòm thấy và chuyển layer bị khóa này về hiện hành để người dùng biết mà xử trảm nó. Còn nếu không bị khóa thì nó hàm sẽ trả về nil y như thằng acet. các bác cứ xem nếu thấy chưa ưng tí nhau nào thì trảm tí nhau đó đi là Ok hỉ.

Cái dở của bác chính là chỗ này bác ạ. bởi nếu đưa hàm này vào 1 chương trình, khi gặp layer bị khóa quá trình chạy sẽ bị gián đoạn. người dùng bắt buộc phải nhấn ok để chương trình chạy tiếp. Nhỡ mà nó chạy trong vòng lặp gặp vài layer bị khóa như vậy là mệt rồi. VD: bác sử dụng hàm này để viết 1 lệnh đếm số layer bị khóa của bản vẽ. chương trình đếm được bao nhiêu layer bị khóa là bấy nhiêu lần ta phải nhấn OK.
Theo quan điểm của em, bất kì hàm kiểm tra điều kiện nào, chỉ cần trả về T hoặc nil. còn ứng xử sau đó thế nào tùy thuộc vào mục đích ta dùng nó bác ạ.

@DVH: Bác diễn đạt sai rồi. trong cái hàm của bác thì P1 và P2 liên quan gì đến thằng Curve mà bác nhắc đến.
Mình hiểu ý bác là viết 1 hàm lấy tọa độ 1 điểm nằm trên đường thẳng nối 2 điểm sao cho khoảng cách từ điểm đó đến 2 điểm kia có tỷ lệ a/b
  • 1

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#66 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 24 November 2011 - 04:21 PM

Cái dở của bác chính là chỗ này bác ạ. bởi nếu đưa hàm này vào 1 chương trình, khi gặp layer bị khóa quá trình chạy sẽ bị gián đoạn. người dùng bắt buộc phải nhấn ok để chương trình chạy tiếp. Nhỡ mà nó chạy trong vòng lặp gặp vài layer bị khóa như vậy là mệt rồi. VD: bác sử dụng hàm này để viết 1 lệnh đếm số layer bị khóa của bản vẽ.
Theo quan điểm của em, bất kì hàm kiểm tra điều kiện nào, chỉ cần trả về T hoặc nil. còn ứng xử sau đó thế nào tùy thuộc vào mục đích ta dùng nó bác ạ.

Hề hề hề,
Vậy thì ta trảm luôn thôi chứ còn lăn tăn chi nữa.
Hề hề hề,
Mình trảm luôn vào bài post trước cho đỡ tốn đất hè.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#67 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 24 November 2011 - 04:29 PM

@DVH: Bác diễn đạt sai rồi. trong cái hàm của bác thì P1 và P2 liên quan gì đến thằng Curve mà bác nhắc đến.
Mình hiểu ý bác là viết 1 hàm lấy tọa độ 1 điểm nằm trên đường thẳng nối 2 điểm sao cho khoảng cách từ điểm đó đến 2 điểm kia có tỷ lệ a/b

Srr vì chữ curve, ý tôi là như vậy đó, vì CAL cũng có lệnh này, cho nó tổng quát luôn mà.
  • 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.


#68 lp_hai

lp_hai

    biết lệnh measure

  • Members
  • PipPipPipPipPipPip
  • 456 Bài viết
Điểm đánh giá: 202 (khá)

Đã gửi 24 November 2011 - 04:37 PM

Hàm CV:layer-locked Hàm này kiểm tra xem layer lay có bị khóa hay không, nếu bị khóa thì trả về tên layer theo như thằng acet nó bảo thế.

Em dang thử ứng dụng cái hàm của bác để kiểm tra các layer trong bản vẽ đây! Theo em nghĩ thì muốn kiểm tra phải có list tên các layer trong BV. Em ngu muội ko biết cách lấy, mong các bác chỉ giùm àh! :)
  • 0
Hình đã gửi

#69 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 24 November 2011 - 04:42 PM

Em dang thử ứng dụng cái hàm của bác để kiểm tra các layer trong bản vẽ đây! Theo em nghĩ thì muốn kiểm tra phải có list tên các layer trong BV. Em ngu muội ko biết cách lấy, mong các bác chỉ giùm àh! :)


Em dang thử ứng dụng cái hàm của bác để kiểm tra các layer trong bản vẽ đây! Theo em nghĩ thì muốn kiểm tra phải có list tên các layer trong BV. Em ngu muội ko biết cách lấy, mong các bác chỉ giùm àh! :)

Hề hề hề,
bạn có thể dùng vòng lặp với hàm (tblnext "layer") để tạo ra cái danh sách tên của các layer có trong bản vẽ bạn ạ.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#70 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 24 November 2011 - 04:54 PM

Srr vì chữ curve, ý tôi là như vậy đó, vì CAL cũng có lệnh này, cho nó tổng quát luôn mà.

Hề hề hề,
Ý bác DoanVanHa có phải thế này không nhỉ???

(defun CV:Geom-divpoint (p1 p2 k)
(mapcar '(lambda (x y) (+ (* (- 1 k) x) (* k y))) p1 p2)
)
Ở đây lưu ý rằng k>0 khi điểm chia nằm về cùng phía của p2 khi so với p1

Bài viết đã được chỉnh sửa nội dung bởi phamthanhbinh: 24 November 2011 - 05:25 PM
Sửa lisp

  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#71 hochoaivandot

hochoaivandot

    biết dimradius

  • Members
  • PipPipPipPipPip
  • 310 Bài viết
Điểm đánh giá: 106 (tàm tạm)

Đã gửi 24 November 2011 - 08:33 PM

Hề hề hề,
Ý bác DoanVanHa có phải thế này không nhỉ???


(defun CV:Geom-divpoint (p1 p2 k)
(mapcar '(lambda (x y) (+ (* (- 1 k) x) (* k y))) p1 p2)
)
Ở đây lưu ý rằng k>0 khi điểm chia nằm về cùng phía của p2 khi so với p1



(defun CV:Geom-divpoint (p1 p2 k)
(polar p1 (angle p1 p2) (* (distance p1 p2) k))
)
Hình như viết như trên thì tốc độ nhanh hơn code của bác phamthanhbinh (Em check bằng cái hàm sosanh thấy vậy)
  • 3

Dương Bá Diệp

 

www.cadonline.duyxuyen.vn 

 

Thành viên nhóm CADMAGIC

 


#72 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 24 November 2011 - 08:42 PM



(defun CV:Geom-divpoint (p1 p2 k)
(polar p1 (angle p1 p2) (* (distance p1 p2) k))
)
Hình như viết như trên thì tốc độ nhanh hơn code của bác phamthanhbinh (Em check bằng cái hàm sosanh thấy vậy)


Bàn thêm 1 chút về tốc độ nhân bạn "Hochoaihetdot" đưa ra một cách mới: tôi đã gặp một số hàm viết mà dùng mấy hàm như reverse, mapcar, lambda, apply thường chạy chậm so với cách viết khác không dùng chúng. Tôi không hiểu tại sao nhưng đã gặp như thế nên đưa lên để các bác ngâm cứu, nhất là khi chúng ta đang nhận 1 nhiệm vụ cực kỳ nặng nề: viết các hàm cơ bản.
Thân thương!
  • 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.


#73 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 25 November 2011 - 09:06 AM

Em đang hỏi về hàm chia đoạn thẳng theo hệ số k ấy ạ, để e lên list ^^


Tôi chưa test, nhưng nghe HHVD nói, và theo nhận định chủ quan của tôi thì đoán là hàm của HHVD nhanh hơn.
  • 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.


#74 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 25 November 2011 - 09:21 AM

Em xin phép trình bày lại câu hỏi cho rõ, và xóa 2 câu trước cho đỡ loãng : Hàm mà bác đề cập, bác PTB và HHVD viết, nó tương đương với hàm nào của ACET, để e biết đặng còn lên list cho top chủ đề của topic
  • 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


#75 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 25 November 2011 - 09:26 AM

Em xin phép trình bày lại câu hỏi cho rõ, và xóa 2 câu trước cho đỡ loãng : Hàm mà bác đề cập, bác PTB và HHVD viết, nó tương đương với hàm nào của ACET, để e biết đặng còn lên list cho top chủ đề của topic


Thống nhất xoá tất cả những bài trung gian để bớt loãng (kể cả bài này). Bác PTB viết thay (acet-geom-midpoint), sau đó tôi đề nghị tổng quát là thay mid bằng 1 điểm xác định bởi k (nên mới có cái từ div), nên nếu nói thay hàm nào của acet thì chịu. Ket thấy nó cần đưa vào list thì đưa, còn vì lý do hàm này không thay hàm nào của acet cả nên không đưa vào cũng đượ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.


#76 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 25 November 2011 - 09:53 AM

Thống nhất xoá tất cả những bài trung gian để bớt loãng (kể cả bài này). Bác PTB viết thay (acet-geom-midpoint), sau đó tôi đề nghị tổng quát là thay mid bằng 1 điểm xác định bởi k (nên mới có cái từ div), nên nếu nói thay hàm nào của acet thì chịu. Ket thấy nó cần đưa vào list thì đưa, còn vì lý do hàm này không thay hàm nào của acet cả nên không đưa vào cũng được.

Vì e chưa biết nên hỏi, và là hỏi thật, chứ bất kỳ hàm nào của người nào viết ra cũng đáng trân trọng và đều có ích cả, và việc lên list khi sửa bài của e cũng không thay đổi việc hàm nào đó nằm trong CSDL của web :D
  • 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


#77 hochoaivandot

hochoaivandot

    biết dimradius

  • Members
  • PipPipPipPipPip
  • 310 Bài viết
Điểm đánh giá: 106 (tàm tạm)

Đã gửi 25 November 2011 - 01:47 PM

(defun Cv-explode (ss / el kq qa en)

(setq el (entlast) kq (ssadd))
(setq qa (getvar 'QAFLAGS))
(setvar 'QAFLAGS 1)
(command "explode" ss "")
(setvar 'QAFLAGS qa)
(while (setq en (entnext el))
(ssadd en kq)
(setq el en)
)
kq
)
Code trên kết quả thì giống hàm acet-explode nhưng mà thấy dài nhèn nhèn. Bác nào sửa giúp cho gọn đẹp với.
P/S: Sao trong thẻ code lúc nào cũng có chữ bbc,,,, gì đó không biết.
  • 1

Dương Bá Diệp

 

www.cadonline.duyxuyen.vn 

 

Thành viên nhóm CADMAGIC

 


#78 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 25 November 2011 - 02:06 PM

(defun Cv-explode (ss / el kq qa en)

(setq el (entlast) kq (ssadd))
(setq qa (getvar 'QAFLAGS))
(setvar 'QAFLAGS 1)
(command "explode" ss "")
(setvar 'QAFLAGS qa)
(while (setq en (entnext el))
(ssadd en kq)
(setq el en)
)
kq
)
Code trên kết quả thì giống hàm acet-explode nhưng mà thấy dài nhèn nhèn. Bác nào sửa giúp cho gọn đẹp với.
P/S: Sao trong thẻ code lúc nào cũng có chữ bbc,,,, gì đó không biết.


Dài ngắn cũng không quan trọng lắm, nhưng có cách gì không sử dụng hàm (command...) không nhỉ? Dùng (vlax-invoke obj 'Explode) được không nhỉ?
  • 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.


#79 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 25 November 2011 - 03:08 PM

Hoàn toàn được chứ bác, hàm trả về list Vla-Object, và ngoài ra phải catch trường hợp Obj không có method Explode ^^
  • 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


#80 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 25 November 2011 - 03:16 PM

(defun Cv-explode (ss / el kq qa en)

(setq el (entlast) kq (ssadd))
(setq qa (getvar 'QAFLAGS))
(setvar 'QAFLAGS 1)
(command "explode" ss "")
(setvar 'QAFLAGS qa)
(while (setq en (entnext el))
(ssadd en kq)
(setq el en)
)
kq
)
Code trên kết quả thì giống hàm acet-explode nhưng mà thấy dài nhèn nhèn. Bác nào sửa giúp cho gọn đẹp với.
P/S: Sao trong thẻ code lúc nào cũng có chữ bbc,,,, gì đó không biết.

Hề hề hề,
Theo mình nghĩ thì có nên đổi tên hàm thành CV:ss-explode không nhể vì như vậy nó sẽ cùng nhóm với các lệnh xủ lý bộ chọn như CV:ss-to-list .....
@ketxu: do đây là topic viết lại các hàm acet theo hướng tiện dụng và bổ sung hoàn thiện nên mình nghĩ nếu như ta có thể bổ sung thêm các lệnh mới mà hữu dụng cho bộ CV:...... set thì cũng là một điều nên bác ạ.
Việc đặt tên hàm nên thống nhất theo mẫu, tỷ như CV: là tiếp đầu bắt buộc, Sau đó là cụm đối tượng của hàm tỷ như ss, list, ent, block...... và cuối cùng là hương xử lý tỳ như explode, copy, .. hay to-.....
Hề hề hề, như vậy có nhẽ nó ra cái dáng Cadviet hơn bác hỉ.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.