Đến nội dung


Hình ảnh
- - - - -

[Đã xong] lisp-Làm thế nào để tìm số đối tượng sinh ra bởi lệnh Boundary


  • Please log in to reply
22 replies to this topic

#1 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 25 March 2009 - 08:00 AM

Tue_NV có một vấn đề mong các bác trên diễn đàn giúp đỡ.
Mình đã có một bài viết về tính diện tích của một hình đa giác kín và bị khoét n lỗ ở trong.
Tức là có một đa giác bị khoét n đa giác bên trong.
Bài viết đó ở đây : lisp tính diện tích 1 hình vẽ kín mà mình chỉ cần pick
Số lượng đa giác mẹ và n đa giác khoét lỗ bên trong tạo bởi lệnh boundary.
Đây là đoạn Code tính diện tích của đa giác mẹ bị khoét lỗ bởi n đa giác con :
(defun C:ARE()
(setq p (getpoint "\nPick a internal point:"))
(command "boundary" p "" "Y")
(setq n (getint "\n So luong hinh khoet rong :") i 0 S 0)

(if (= n 0)
(progn
(command "boundary" p "" "Y")
(command "area" "o" (entlast))
(setq
S (getvar "area")
Pe (getvar "perimeter")
)
(command "erase" (entlast) "")
(alert (strcat "Area = " (rtos S)))
)
)
(if (> n 0)
(progn
(setq ela (entlast))
(setq entla (entget ela))
(command "erase" ela "")


(while (< i n)

(setq ela1 (entlast))
(command "area" "S" "O" ela1 "" "")
(Command "erase" "L" "")
(setq t (getvar "area"))
(setq S (+ S t))
(setq i (+ i 1))
)

(entmake entla)


(command "area" "A" "O" "L" "" "")

(setq tr (getvar "area"))

(alert (strcat "Area = " (rtos (+ tr S) 2 2)))
)
)

(Princ)
)
Làm sao để tìm số đối tượng đa tuyến tạo bởi lệnh boundary?
Mong các bác trợ giúp cho Tue_NV
Cảm ơn các bác thật nhiều.
  • 0

#2 tdvn

tdvn

    biết lệnh rotate

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

Đã gửi 25 March 2009 - 08:26 AM

Tue_NV có một vấn đề mong các bác trên diễn đàn giúp đỡ.

Làm sao để tìm số đối tượng đa tuyến tạo bởi lệnh boundary?
Mong các bác trợ giúp cho Tue_NV
Cảm ơn các bác thật nhiều.

Mình chưa nghiên cứu lisp của bạn. nhưng để tìm số lượng đối tượng được tạo bởi boundary. bạn có thể làm như sau :
Trước khi dùng lệnh boundary. Bạn cho nhớ đối tượng cuối cùng và một biến. Ví dụ (setq n1 (entlast))
Sau khi dùng lệnh boundary, bạn lại nhớ đối tượng cuối cùng (setq n2 (entlast))
Sau đó bạn lập vòng lặp để lấy đối tượng tiếp theo của n1 (ví dụ ni). cho đến lúc nào ni bằng n2. Ví dụ
(While (not (equal (setq ni (entnext n1)) n2))
...
(setq n1 ni)
)
Mình chi đưa ra ý tưởng, chưa viết thành lisp. bạn làm tiếp nhé
  • 1

#3 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 25 March 2009 - 11:58 AM

chi tiết code như sau:

(defun c:gb( / ss from to cur)
(setq frome (entlast)) ;; chon doi tuong cuoi cung truoc khi boundary
(command ".boundary" pause "") ;; boundary
(setq toe (entlast)) ;; chon doi tuong cuoi cung sau khi boundary

(setq cur frome ; khoi tao
ss (ssadd)
)
(while (not (eq cur toe)) ;; chon cac doi tuong tu frome den toe
(setq
cur (entnext cur)
ss (ssadd cur ss)
)
)

(sssetfirst ss ss) ;; highlight ket qua
(princ)
)

  • 2

#4 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 27 March 2009 - 02:31 PM

chi tiết code như sau:


(defun c:gb( / ss from to cur)
(setq frome (entlast)) ;; chon doi tuong cuoi cung truoc khi boundary
(command ".boundary" pause "") ;; boundary
(setq toe (entlast)) ;; chon doi tuong cuoi cung sau khi boundary

(setq cur frome ; khoi tao
ss (ssadd)
)
(while (not (eq cur toe)) ;; chon cac doi tuong tu frome den toe
(setq
cur (entnext cur)
ss (ssadd cur ss)
)
)

(sssetfirst ss ss) ;; highlight ket qua
(princ)
)

Đầu tiên, em xin chân thành cảm ơn bác tdvn và bác Nguyen Hoanh đã trợ giúp cho em.
Lisp của bác Hoành chạy OK. Em đã vận dụng cái Lisp của bác vào việc tính diện tích của một hình đa giác kín và bị khoét n lỗ ở trong.
Lisp đã chạy OK. Nhưng trước khi chạy ra kết quả (hiện ra hộp thoại AutoCAD mesage) thì nó lại hiện ra hộp thoại Question, em phải ấn No. Và số lần em ấn No bằng với số đối tượng do lệnh Boundary tạo ra. Thiết nghĩ nguyên nhân này do lỗi vòng lặp mà em chưa biết lỗi do đâu bác Hoành ạ. Bác và mọi người trên diễn đàn có thể giải thích dùm Tue_NV nguyên nhân được không?
Đây là hình ảnh của hộp thoại question :
Hình đã gửi
Còn đây là đoạn Code mà Tue_NV viết để tính tính diện tích của một hình đa giác kín và bị khoét n lỗ ở trong.
(defun c:gb()
(setq frome (entlast));; chon doi tuong cuoi cung truoc khi boundary
(command ".boundary" pause "");; boundary
(setq toe (entlast));; chon doi tuong cuoi cung sau khi boundary

(setq cur frome; khoi tao
ss (ssadd)
S 0
)
(while (not (eq cur toe));; chon cac doi tuong tu frome den toe
(setq
cur (entnext cur)
ss (ssadd cur ss))
(command "area" "S" "O" ss "" "")
(setq t (getvar "area"))
(setq S (+ S t))
)
(command "area" "A" "O" "L" "" "")
(setq t (getvar "area"))
(setq S (+ S (* t 2)))

(alert (strcat "Area = " (rtos S 2 2)))

(Princ)
)
Cảm ơn mọi người thật nhiều
  • 5

#5 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 27 March 2009 - 03:26 PM

Bạn bị lỗi tại dòng: (setq t (getvar "area"))

Bạn để ý rằng t trong ngôn ngữ autolisp là một hằng số. Bạn sửa tên biến t thành tt hoặc gì gì đó là được.

Ngay trong dòng thông báo:
Gán biến được bảo vệ:
T
Có thoát khỏi vòng lặp không?

  • 3

#6 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 27 March 2009 - 03:40 PM

Bạn bị lỗi tại dòng: (setq t (getvar "area"))

Bạn để ý rằng t trong ngôn ngữ autolisp là một hằng số. Bạn sửa tên biến t thành tt hoặc gì gì đó là được.

Ngay trong dòng thông báo:

Gán biến được bảo vệ:
T
Có thoát khỏi vòng lặp không?

Thành công rồi bác Hoành ạ. Chạy OK rồi. Vậy là mình đã viết được đoạn Lisp tính diện tích của một hình đa giác kín và bị khoét n lỗ ở trong.
Bác Hoành cho em hỏi luôn là : t trong ngôn ngữ autolisp là một hằng số. Vậy hằng số t bằng bao nhiêu vậy ạ?
Và cho em hỏi thêm một chút nữa là trong đoạn Code của bác :
(defun c:gb( / ss from to cur)
(setq frome (entlast)) ;; chon doi tuong cuoi cung truoc khi boundary
(command ".boundary" pause "") ;; boundary
(setq toe (entlast))
....
Đoạn định nghĩa hàm : biến riêng là from và biến to : (defun c:gb( / ss from to cur)
Khi khởi tạo biến lại là biến frome và bién toe?
em chưa hiểu.
Bác giải thích dùm em tí chút được không?
Cảm ơn bác
  • 0

#7 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 27 March 2009 - 04:41 PM

Chắc nhờ bác Ssg giải thích thì sư phạm hơn, bạn dễ hiểu hơn. Xin lý giải sơ bộ cho bạn hiểu trước, mong bác Ssg giải thích thêm.

1. Hằng số t thuộc kiểu biến đúng sai, kiểu này có 2 giá trị: t là đúng, nil là sai. (Tất nhiên, nil còn có nghĩa là rỗng trong các trường hợp khác).

2. Các số sau dấu ngoặc là biến cục bộ. Bạn xem đoạn code sau:
(defun ham1(/a) (setq a 4))
(defun ham2() (setq a 4))

(setq a 3); gan bien toan cuc a ve gia tri 3
(ham1)
(princ a); gia tri a van la 3

(setq a 5) ; gan bien toan cuc a ve gia tri 5
(ham2)
(princ a); gia tri a hien nay la 4

Bạn sẽ thấy ham1 không làm thay đổi giá trị a toàn cục. còn ham2 thì làm thay đổi biến a toàn cục.
  • 3

#8 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 27 March 2009 - 05:34 PM

Thành công rồi bác Hoành ạ. Chạy OK rồi. Vậy là mình đã viết được đoạn Lisp tính diện tích của một hình đa giác kín và bị khoét n lỗ ở trong.
Bác Hoành cho em hỏi luôn là : t trong ngôn ngữ autolisp là một hằng số. Vậy hằng số t bằng bao nhiêu vậy ạ?
Và cho em hỏi thêm một chút nữa là trong đoạn Code của bác :
(defun c:gb( / ss from to cur)
(setq frome (entlast)) ;; chon doi tuong cuoi cung truoc khi boundary
(command ".boundary" pause "") ;; boundary
(setq toe (entlast))
....
Đoạn định nghĩa hàm : biến riêng là from và biến to : (defun c:gb( / ss from to cur)
Khi khởi tạo biến lại là biến frome và bién toe?
em chưa hiểu.
Bác giải thích dùm em tí chút được không?
Cảm ơn bác

Chào bác Tue_NV,
T nghĩa là true, một hằng số logic luôn nhận giá trị là true bác Tue_NV ạ. Vì vậy trong quá trình tạo lisp cần cố gắng tránh đặt tên biến là T bác ạ.

Còn về biến to và toe trong đoạn líp của bác Hoành, có lẽ bác ấy nhầm nhưng thực ra nó không ảnh hưởng gì vì biến to được khai báo là biến cục bộ, còn biến toe không khai báo có nghĩa là một biến toàn cục. Thực tế biến to trong đoạn líp trên không hề xuất hiện và nếu có xuất hiện cũng sẽ bị trả về nil sau khi líp chạy xong. Còn biến toe do là biến toàn cục nên sau khi chạy líp nó vẫn giữ giá trị cuối cùng mà nó nhận. Bác có thể kiểm tra giá trị này bằng các nhập !toe trên dòng nhắc command của cad.
Chắc bác Hoành định xóa giá trị của biến toe này nên mới định cho nó là biến cục bộ nhưng lại thiếu mất chữ e đây bác Tue_nv ạ. Bác cứ thử đổi to thành toe trong khi khai báo và sau khi chạy líp bác kiểm tra lại theo cách trên sẽ thấy sự khác nhau của nó bác ạ.

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

#9 daotac541

daotac541

    biết vẽ circle

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

Đã gửi 31 March 2009 - 02:08 PM

Em xin chào các bác! Em thấy cái lips của bác Tue_NV rất hay. Bác có thể viết cho em cái lisp ( từ cái lisp của bác) với nội dung :
Khi pick chuột vào một miền ( kể cả miền khoét rỗng) thì lips chuyển miền đó thành 1 region (đã trừ miền).
Em xin cảm ơn các bác !
  • 0

#10 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 31 March 2009 - 02:43 PM

Em xin chào các bác! Em thấy cái lips của bác Tue_NV rất hay. Bác có thể viết cho em cái lisp ( từ cái lisp của bác) với nội dung :
Khi pick chuột vào một miền ( kể cả miền khoét rỗng) thì lips chuyển miền đó thành 1 region (đã trừ miền).
Em xin cảm ơn các bác !

Bạn có thể nói rõ hơn ý của bạn được không?
Nếu có thể, bạn up hình minh hoạ của bạn nhé.
  • 1

#11 daotac541

daotac541

    biết vẽ circle

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

Đã gửi 01 April 2009 - 09:28 AM

Thx bác! em ko biết up vào viết thế nào! Em xin trình bày lại ý của em như sau :

-Ban đầu có 1 hình vuông lớn : H1 và 1 hình vuông nhỏ nằm trong hình vuông lớn : H2 ( H2 nằm trong H1)
-Yêu cầu lisp : 1 pick chuột đưa ra được hình H3 = region(H2) - region(H1)

Em xin up file kem theo ( vì em ko biết up hình minh họa thế nào)
http://www.cadviet.c...iles/region.dwg
Em cảm ơn bác trước !!!!!!!
  • 0

#12 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 01 April 2009 - 02:21 PM

Thx bác! em ko biết up vào viết thế nào! Em xin trình bày lại ý của em như sau :

-Ban đầu có 1 hình vuông lớn : H1 và 1 hình vuông nhỏ nằm trong hình vuông lớn : H2 ( H2 nằm trong H1)
-Yêu cầu lisp : 1 pick chuột đưa ra được hình H3 = region(H2) - region(H1)

Em xin up file kem theo ( vì em ko biết up hình minh họa thế nào)
http://www.cadviet.c...iles/region.dwg
Em cảm ơn bác trước !!!!!!!

Hiểu ý của bạn rồi.
Để tạo thành một region ta có 2 cách :
1. Sử dụng lệnh region
2. Sử dụng lệnh Boundary. Khi sử dụng lệnh này thì có thể tạo thành region hoặc Polyline.
- Ta dùng cách 2 để tạo Region
Đây là đoạn Code viết theo ý của bạn : Tạo thành một region từ một đa giác mẹ bị khoét n lỗ bên trong.
Đoạn Lisp cũng đúng với trường hợp đa giác kín không khoét lỗ.

(defun c:gb(/ po frome toe cur ss st LA CA)
(setq po (getpoint "\n Pick diem :"))
(setq frome (entlast)) ;; chon doi tuong cuoi cung truoc khi boundary
(command "boundary" "A" "O" "R" "" po "") ;; Region
(setq toe (entlast)) ;; chon doi tuong cuoi cung sau khi Region

(setq cur frome ; khoi tao
ss (ssadd)
)
(while (not (eq cur toe)) ;; chon cac doi tuong tu frome den toe
(setq
cur (entnext cur)
ss (ssadd cur ss)
)
)
(setq st (ss2ent ss))
(setq LA (car st))
(setq CA (ssdel LA ss))
(Command "subtract" LA "" CA "")

(princ)
)
;;
(defun ss2ent (ss / sodt index lstent)
(setq
sodt (if ss (sslength ss) 0)
index 0
)
(repeat sodt
(setq ent (ssname ss index)
index (1+ index)
lstent (cons ent lstent)
)
)
(reverse lstent)
)

Nhân đây, các bác trên diễn đàn cho Tue_NV hỏi là sau khi tạo Region thì Region được tạo ra nằm trùng với những đường Polyline cũ thì làm sao có ta có thể xoá được các Polyline này.
Mong các bác trợ giúp cho Tue_NV.
Cảm ơn các bác rất nhiều.
  • 2

#13 daotac541

daotac541

    biết vẽ circle

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

Đã gửi 02 April 2009 - 08:30 AM

Thx bác!!!!!!!!
Em làm được rồi ! Thật là tuyệt!
  • 0

#14 haanh

haanh

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 2875 Bài viết
Điểm đánh giá: 1554 (rất tốt)

Đã gửi 16 July 2009 - 09:21 PM

Nhân đây, các bác trên diễn đàn cho Tue_NV hỏi là sau khi tạo Region thì Region được tạo ra nằm trùng với những đường Polyline cũ thì làm sao có ta có thể xoá được các Polyline này.
Mong các bác trợ giúp cho Tue_NV.
Cảm ơn các bác rất nhiều.

Em ko hiểu ý của anh Tuệ ??? Khi tạo Region từ một hình khép kín vẽ bằng lệnh Line và polyline thì các hình khép kín sẽ bị mất đi.
  • 0

“Sống trong đời sống cần có một tấm lòng / Để làm gì em biết không ? / Để gió cuốn đi, để gió cuốn đi...”


#15 halen

halen

    biết zoom

  • Members
  • Pip
  • 14 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 17 January 2010 - 10:29 AM

Thành công rồi bác Hoành ạ. Chạy OK rồi. Vậy là mình đã viết được đoạn Lisp tính diện tích của một hình đa giác kín và bị khoét n lỗ ở trong.
Bác Hoành cho em hỏi luôn là : t trong ngôn ngữ autolisp là một hằng số. Vậy hằng số t bằng bao nhiêu vậy ạ?
Và cho em hỏi thêm một chút nữa là trong đoạn Code của bác :
(defun c:gb( / ss from to cur)
(setq frome (entlast)) ;; chon doi tuong cuoi cung truoc khi boundary
(command ".boundary" pause "") ;; boundary
(setq toe (entlast))
....
Đoạn định nghĩa hàm : biến riêng là from và biến to : (defun c:gb( / ss from to cur)
Khi khởi tạo biến lại là biến frome và bién toe?
em chưa hiểu.
Bác giải thích dùm em tí chút được không?
Cảm ơn bác

Anh TueNV có thể sửa giúp em cái lisp của anh theo yêu cầu như thế này không ạh: Có 1 hình kín và bên trong có n hình kín khác, lisp của anh chỉ việc tích vào điểm bên trong, là hiện ra kết quả là một text, và vị trí đặt text do người sử dụng chọn. Và khi tích điểm vào trong hình kín đừng hiện ra thông báo "Số lượng hình khoét rỗng". Xin cảm ơn anh. Như thế thì tiện lợi hơn.
  • 0

#16 anhphu88

anhphu88

    biết pan

  • Members
  • Pip
  • 9 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 01 July 2011 - 08:44 AM

các bạn có thể nói rõ hơn cách sử dụng lisp gb không?
mình add lisp rồi nhưng không biết sử dụng thế nào
  • 0

#17 cachisa

cachisa

    Chưa sử dụng CAD

  • Members
  • Pip
  • 1 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 11 July 2012 - 02:50 PM

mình là dân ngoại đạo, chỉ vào học mót mấy ae trong cadviet thoi. vì thế mình hay chọc ngoáy vào cad lắm. (bây giờ chuyển hướng vào solit) nên mình nói sai các ae đừng chửi nhé. khi bạn đã copy file gb.lsp rồi thì bạn vao công cụ Tool ->AutoLISP -> loadApp rồi chọn file gb vừa copy. Mình cứ hiểu nôm na là file LSP là file auto (tự động) khi mình load rồi thì nó sẽ tự động làm cho mình những gì mà người lập trình viết công việc cho nó 1 cách chủ động.
  • 0

#18 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 11 July 2012 - 04:16 PM

topic nay là để trao đổi thuật toán viết lisp. các bạn không cần dùng các lisp trong topic này làm gì cả. cách sử dụng lisp đã có 1 topic hướng dẫn ngay đầu box này.
  • 0

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


#19 hoangkimoanh

hoangkimoanh

    biết vẽ spline

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

Đã gửi 03 August 2014 - 01:20 AM

Hiểu ý của bạn rồi.
Để tạo thành một region ta có 2 cách :
1. Sử dụng lệnh region
2. Sử dụng lệnh Boundary. Khi sử dụng lệnh này thì có thể tạo thành region hoặc Polyline.
- Ta dùng cách 2 để tạo Region
Đây là đoạn Code viết theo ý của bạn : Tạo thành một region từ một đa giác mẹ bị khoét n lỗ bên trong.
Đoạn Lisp cũng đúng với trường hợp đa giác kín không khoét lỗ.

(defun c:gb(/ po frome toe cur ss st LA CA)(setq po (getpoint "\n Pick diem :"))(setq frome (entlast)) ;; chon doi tuong cuoi cung truoc khi boundary(command "boundary" "A" "O" "R" "" po "") ;; Region(setq toe (entlast)) ;; chon doi tuong cuoi cung sau khi Region(setq cur frome ; khoi taoss (ssadd))(while (not (eq cur toe)) ;; chon cac doi tuong tu frome den toe(setqcur (entnext cur)ss (ssadd cur ss)))(setq st (ss2ent ss))(setq LA (car st))(setq CA (ssdel LA ss))(Command "subtract" LA "" CA "")(princ));;(defun ss2ent (ss / sodt index lstent)(setqsodt (if ss (sslength ss) 0)index 0)(repeat sodt(setq ent (ssname ss index)index (1+ index)lstent (cons ent lstent)))(reverse lstent))
Nhân đây, các bác trên diễn đàn cho Tue_NV hỏi là sau khi tạo Region thì Region được tạo ra nằm trùng với những đường Polyline cũ thì làm sao có ta có thể xoá được các Polyline này.
Mong các bác trợ giúp cho Tue_NV.
Cảm ơn các bác rất nhiều.

anh tue ơi, anh sửa giúp em đoạn code trên cho nó ngắt đúng đoạn, không bị tất cả 1 dòng vì những đoạn có dấu ;;;em không biết ngắt đoạn chỗ nào cho đúng nữa! và có thể tính diện tích xong và sửa vào text sẵn có với ạ!


  • 0

#20 hoangkimoanh

hoangkimoanh

    biết vẽ spline

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

Đã gửi 04 August 2014 - 09:26 AM

nhờ các anh giúp em với


  • 0