Chuyển đến nội dung
Diễn đàn CADViet
Nguyen Hoanh

Viết Lisp theo yêu cầu

Các bài được khuyến nghị

Mọi ng ko "quan tâm" đến vấn đề của bạn vì nhiều lý do. Thứ nhất: việc gộp lệnh trên ko làm giảm tg thao tác là bao nhiêu. Thứ 2: lệnh OM như bạn nói ko được dùng phổ biến cho lắm. Thứ 3: Yêu cầu này ko "hấp dẫn" lắm đối với những ng yêu thích lisp - vì yêu cầu của bạn chỉ là thay 2 thao tác nhàm chán bằng 1 thao tác ít nhàm chán hơn mà thôi (cái này có thể chỉ là ý kiến chủ quan của tôi -_- ).

Đây là đoạn code bạn cần, (post lên để bạn thấy rằng để viết gộp 2 lệnh thành 1 thôi, nhưng để nó "dễ dùng" và "thân thiện" cũng phải...dài dòng văn tự thế nào)

(defun c:OM ( / Osmode obj Me_obj)
   (command "undo" "begin")
 (setvar "cmdecho" 0)
 (setq osmode (getvar "OSMODE"))

 (command "Ucs" "w")
 (princ "\nChon doi tuong offset")
 (setq obj (car (entsel))
)
 (if	dist
     (if (setq	dist1 (getreal (strcat "\nKhoang cach offset <"
			       (rtos dist 2)
			       "> : "
		       )
	      )
  )
(setq dist dist1)
     )
     (setq dist (getreal "\nKhoang cach offset : ")
     )
   )
 (setq
Poff (getpoint "\nChon phia offset")
)
 (if	Me_dist
     (if (setq	dist1 (getreal (strcat "\nKhoang cach rai block <"
			       (rtos Me_dist 2)
			       "> : "
		       )
	      )
  )
(setq Me_dist dist1)
     )
     (setq Me_dist (getreal "\nKhoang cach rai block : ")
     )
   )
  (if	Block
     (if (setq	Block1 (getstring (strcat "\nTen block can rai <"
			       Block
			       "> : "
		       )
	      )
  )
(setq Block Block1)
     )
     (setq Block (getstring "\nTen block can rai: ")
     )
   )

 (command "offset" dist obj Poff "")
 (setq Me_obj (entlast))
 (command "measure" Me_obj "b"  Block "Y" Me_dist)
 (command "Ucs" "P")
   (setvar "OSMODE" osmode)
 (command "undo" "end")
 (setvar "cmdecho" 1)
 (princ)

 )

thật ngại wa, cảm ơn snowmen tại mình kô bít viết nên kô bít cái nào nên viết

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 Hoành trách oan em rồi -_- Lisp của em ko sai, chỉ "bỏ lọt" đối tượng thôi mà. Trước đây viết cũng ko để ý kỹ, dùng cũng chẳng thấy vấn đề j. Hôm nay mới giở help ra xem lại thì thấy đoạn này:

11 Second alignment point (in OCS) (optional)

 

DXF: X value; APP: 3D point

 

This value is meaningful only if the value of a 72 or 73 group is nonzero (if the justification is anything other

than baseline/left)

Đoạn lisp bỏ sót trường hợp text ở dạng mặc định (như các bác đã test) (left : mã 72 và 73 = 0)

Đây là lisp đã sửa lại.

Cám ơn Snowman rất nhiều.

Anh có thể giúp tôi thêm 1 vấn đề này được không. Giá sử tôi có các text nằm quá sát nhau (gần trùng nhau), khi in sẽ không đọc được. Nếu mình move từng text ra để khi in đọc được sẽ mất rất nhiều thời gian. Có cách nào khi mình chọn các text, lệnh thực hiện sẽ giãn các text ra đều nhau theo hàng, cột tùy ý không ? Tâm của các text do user chọn. Cám ơn Snowman trước.

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ám ơn Snowman rất nhiều.

Anh có thể giúp tôi thêm 1 vấn đề này được không. Giá sử tôi có các text nằm quá sát nhau (gần trùng nhau), khi in sẽ không đọc được. Nếu mình move từng text ra để khi in đọc được sẽ mất rất nhiều thời gian. Có cách nào khi mình chọn các text, lệnh thực hiện sẽ giãn các text ra đều nhau theo hàng, cột tùy ý không ? Tâm của các text do user chọn. Cám ơn Snowman trước.

 

Bạn tìm trong topic này cái lisp sắp dim sd.lsp của NguyenHoanh có đó

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 trong topic này cái lisp sắp dim sd.lsp của NguyenHoanh có đó

Cám ơn, vấn đề của tôi là sắp xếp text chứ không phải là dim

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 mọi người!

Tôi mới tìm hiểu về lisp. Mong mọi người giúp đỡ. Tôi viết một chương trình nhỏ nhưng chạy không được không biết lỗi chỗ nào. Chỉ dùm tôi với:

(defun c:dt()

(command "cicrle")

(setq pt (getpoint "cho tam duong tron:"))

(setq D (getdist "cho ban kinh duong tron:")

(princ)

)

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 mọi người!

Tôi mới tìm hiểu về lisp. Mong mọi người giúp đỡ. Tôi viết một chương trình nhỏ nhưng chạy không được không biết lỗi chỗ nào. Chỉ dùm tôi với:

(defun c:dt()

(command "cicrle") Sai lệnh

(setq pt (getpoint "cho tam duong tron:"))

(setq D (getdist "cho ban kinh duong tron:")

(princ)

)

Thứ nhát là : Bạn viết tên lệnh bị sai. Lệnh vẽ đường tròn là circle chứ không phải là "cicrle")

Thứ hai ở dòng đậm : (setq D (getdist "cho ban kinh duong tron:") bạn thiếu dấu đóng ngoặc , phải viết là :

(setq D (getdist "cho ban kinh duong tron:"))

Thứ ba là dòng thực hiện lệnh : Command bạn phải đưa xuống dưới cùng :

Mình viết lại như sau :

Tên lệnh là : dt

(defun c:dt ()
(prompt "Ve duong tron :")
(setq pt (getpoint "cho tam duong tron:")) (terpri)
(setq D (getdist "cho ban kinh duong tron:"))
(command "circle" pt D)
)

.

Bạn có thắc mắc gì hỏi 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

(defun C:DT (/ DT D)

(prompt "(\n ve duong tron nhap tam pt va duong kinh D ...")

(setq pt (getpoint "\n cho tam duong tron:"))

(setq D (getdist "\n cho ban kinh duong tron:"))

(command ".circle" PT D)

(prompt "\n Donne.\n")

(princ)

)

ĐÂY NÀY BẠN!

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 mọi người.

Trước hết tôi xin cảm ơn mọi người vì đã chỉ cho tôi những chỗ mà tôi còn bị thiếu. Quả thật tôi cũng mới biết lisp và thứ hai nữa là về kiến thức ngôn ngữ lập trình tôi cũng chưa nẵm vững lắm. Kính mong được các anh, chị và các bạn trong diễn đàn giúp đỡ.

Thankyou very much!

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 mọi người.

Trước hết tôi xin cảm ơn mọi người vì đã chỉ cho tôi những chỗ mà tôi còn bị thiếu. Quả thật tôi cũng mới biết lisp và thứ hai nữa là về kiến thức ngôn ngữ lập trình tôi cũng chưa nẵm vững lắm. Kính mong được các anh, chị và các bạn trong diễn đàn giúp đỡ.

Thankyou very much!

Ssg có vài góp ý với bạn:

 

1. Trước hết, bạn phải có 1 cuốn sách về Lisp, đọc và làm theo các bài ví dụ cơ bản của họ. Qua đó, chiêm nghiệm lại phần lý thuyết đã đọc được.

 

2. Tên lệnh lisp bạn có thể đặt tuỳ ý, nhưng không nên trùng tên với 1 trong các lệnh tắt tiêu chuẩn của AutoCAD. Bạn dùng tên "dt" trùng với lệnh tắt "dtext". Sau khi bạn load lisp, lệnh tắt "dt" cho "dtext" sẽ không còn hiệu lực.

 

3. Để có được cùng kết quả như nhau, có nhiều cách viết chương trình khác nhau, tuỳ thói quen và phong cách riêng từng người. Tuy nhiên, điều quan trọng trước tiên là phải đúng cú pháp. Chương trình rất đơn giản và ngắn nhưng bạn sai cú pháp hơi bị nhiều!

 

4. Bạn tham khảo vài đoạn code sau. Chúng đều cho kết quả như nhau (có hơi khác một chút ở VDT3):

;;;-------------------------------------------------
(defun C:VDT1( / p r)
(setq
p (getpoint "\nTam duong tron:")
r (getdist p "\nBan kinh:")
)
(command "circle" p r)
)
;;;-------------------------------------------------
(defun C:VDT2( / p)
(command "circle"
(setq p (getpoint "\nTam duong tron:"))
(getdist p "\nBan kinh:")
)
) 
;;;-------------------------------------------------
(defun C:VDT3()
(command "circle" (getpoint "\nTam duong tron:") (getreal "\nBan kinh:"))
)
;;;-------------------------------------------------

 

5. Tham khảo thêm ở đây:

http://www.cadviet.com/forum/index.php?sho...t=0&start=0

 

và nhiều chỗ khác nữa trên diễn đàn...

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 mọi người!

Có thể viết dùm em lisp với ứng dụng như sau:

1.

- Trong bản vẽ (thiết kế khuôn) có chèn các block cùng tên (vd:epin). Em cần lấy tọa độ của các block này so voi gốc tọa độ chuẩn(tâm block này là tâm của nhiều đường tròn đồng tâm(epin), cũng là điểm chèn của block) sau đó in ra vị trí được chọn trên màn hình.

- Khi thực hiện lệnh thì sử dụng cửa sổ window(kéo chuột), tọa độ được chọn sẽ ưu tiên theo thứ tự từ trái qua phải và từ trên xuống dưới. Ở tâm block được chọn sẽ lần lượt có các text theo thứ tự la :E1,E2.... đến hết..

- Khi thực hiên lệnh sẽ cho chọn tên của Block(cac block nằm trong vùng cửa sổ được chọn có cùng tên sẽ đươc lấy tọa độ)

- Chiều cao text 3.

2.Thêm một lisp nữa:

- Có tác dụng ấn các Block cùng tên và cho hiện lại các block đó( khi chọn vào 1 block và hide ,các block cung tên sẽ ẩn. Sẽ hiện lại khi Unhide).

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 xem lisp CVT ở ngay chính trong chủ đề này: Viết lisp theo yêu cầu

 

Mục này quá nhiều bài viết rồi, nên nhiều người trong chúng ta khó theo dõi. Sắp tới đây có lẽ phải chia nhỏ topic này thành các topic con theo chủ đề cho dễ theo dõi. Nhớ ngày trước, có thành viên hiến 'tối kiến' là nên gộp các lệnh của autocad vào một topic cho dễ đọc, dễ tìm. May mà quản trị đủ thông mình, chứ không thì ốm đòn vì nếu làm theo thì toàn các topic 'khủng' và khó theo dõi như topic này.

 

CVT ko làm đc điều đó Bác Hoành ạh.

Em có ý này bác xem thế nào nhé.

Vẽ pline có độ dày 220.

Vẽ Mline có độ dày đó tại các đỉnh của Pl vừa vẽ.

explode đối tg vừa tạo

và xoá Pl ban đầu.

 

Em chỉ hiểu nôm na quá trình, chảng biết có thiết thựcko nữa.

Mong các Bác chỉ 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
CVT ko làm đc điều đó Bác Hoành ạh.

Em có ý này bác xem thế nào nhé.

Vẽ pline có độ dày 220.

Vẽ Mline có độ dày đó tại các đỉnh của Pl vừa vẽ.

explode đối tg vừa tạo

và xoá Pl ban đầu.

 

Em chỉ hiểu nôm na quá trình, chảng biết có thiết thựcko nữa.

Mong các Bác chỉ giáo

Gửi bạn đoạn lisp multi offset (Off set một đường tim thành các đường đối xứng với khoảng cách tùy chọn) có thể sửa một chút để dùng cho việc của bạn, nhưng tôi nghĩ nên giữ nguyên để fục vụ cho nhiều mục đích khác nhau chẳng hạn vẽ mặt bằng đường GT, vẽ kênh mương ...

Lệnh là QO, lần lượt nhập các khoảng cách offset theo thứ tự (khoảng cách lẻ) rồi chỉ điểm ko thuộc pline.

;;; Quick offset 
(defun C:Qo (/ Offobj Objbase Pbase Ple Pri)  (setq osmode (getvar "osmode"))
 (setvar "CMDecho" 0)

 (initget (+ 2 4))
 (if (not (setq Num_line
	  (getint "\nSè ®­êng cÇn offset mçi bªn (Enter for 1): "
	  )
   )
     )
   (setq Num_line 1)
 )


 (setq	cter 1
Dislist	'()
 )
 (repeat Num_line
   (initget (+ 1 2 4))
   (setq Dis	  (getreal (strcat "\nNhËp kho¶ng c¸ch offset thø "
			   (itoa cter)
			   "[Khoang cach la]: "
		   )
	  )
  Cter	  (1+ cter)
  Dislist (append Dislist (list Dis))
   )
 )

 (Princ "\nChän ®èi t­îng cÇn offset")
 (while (setq Offobj (entsel))
   (setq
     Objbase (car Offobj)
     Poff    (getpoint "\nChØ ®iÓm ngoµi ®èi t­îng")
     Objvba  (vlax-ename->vla-object Objbase)
     Pbase   (vlax-curve-getClosestPointTo Objvba Poff)
   )

   (setvar "OSMODE" 0)
   (command "ucs" "w")
   (setq cter 0
  Dist1	0
   )
   (repeat Num_line
     (setq Dist  (nth cter Dislist)
    Dist1 (+ Dist1 Dist)
    Cter  (1+ cter)
     )
     (command "_offset" Dist1 Objbase Poff "")
     (setq ang	  (+ Pi (angle Pbase Poff))
    Poff1 (polar Pbase ang Dist1)
     )
     (command "_offset" Dist1 Objbase Poff1 "")
   )
   (command "ucs" "p")
   (Princ "\nChän ®èi t­îng cÇn offset tiÕp theo")
 )

 (setvar "OSMODE" OSmode)
 (setvar "CMDecho" 1)
 (princ)
)

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

Add lish báo lỗi Bác ạh. Command: ; error: malformed string on input

Bác xem lại giúp em!

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
Add lish báo lỗi Bác ạh. Command: ; error: malformed string on input

Bác xem lại giúp em!

Mình mới viết xong bạn thừ xem sao. Lệnh OT chọn vùng nó sẽ lọc lấy các pline có độ rộng offset ra mổi bên bằng 1/2 độ rộng. Explode ra thành các đối tượng rời, xóa pline cũ đi. Líp làm được nhiều đối tượng cùng lúc, đúng với cả pline có cung tròn.

Bạn xem muốn thay đổi layer các đối tượng mới hay muốn giử lại đồi tượng cũ thì phản hồi mình sửa luôn 1 lượt.

 

(defun C:OT ( )

(princ "\nPHAM QUOC DUY Binh Son - Quang ngai")

(Princ "\nHay chon doi tuong :")

(setq SS (ssget '((0 . "LWPOLYLINE"))))

 

(setq i 0)

(setq N (sslength ss))

(while (< i N)

(setq TEXTENT (ssname SS i))

 

(setq DTMs (entget textent))

(setq DORONG (cdr (assoc 40 DTMs)))

(if (/= DORONG 0) (PROGN

(setq DIEMDAU (cdr (assoc 10 DTMs)))

(setq diemo1 (polar DIEMDAU (- 0 (/ pi 2)) 100))

(setq diemo2 (polar DIEMDAU (/ pi 2) 100))

 

(command ".OFFSET" (/ DORONG 2) textent diemo2 "")

(command ".EXPLODE" "last" "")

(command ".OFFSET" (/ DORONG 2) textent diemo1 "")

(command ".EXPLODE" "last" "")

(command ".ERASE" textent "")

)

)

(setq i (1+ i))

 

)

(setvar "MODEMACRO" "**CHUC BAN LAM VIEC HIEU QUA** PHAM QUOC DUY - BINH SON - QUANG NGAI")

(Princ)

)

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

Duy kiểm tra lại giúp mình. Lish kolàm đc điều đó

Chọn Pl, ok, thì có phần chúng phá ra thành 1 line nhưng ko offset.

Có phần thì vẫn còn nguyên độ dày của pl đó

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
Duy kiểm tra lại giúp mình. Lish kolàm đc điều đó

Chọn Pl, ok, thì có phần chúng phá ra thành 1 line nhưng ko offset.

Có phần thì vẫn còn nguyên độ dày của pl đó

lisp của Snowman hoạt động tốt mà!

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 đã thử đi thử lai vài lần rồi. Những rõ ràng là đang có vấn đề.

http://www.cadviet.com/upfiles/Drawing1_16.dwg

Đây là kết qua khi em thực hiện lệnh Ot

Anh xem lại giúp em

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ám ơn Snowman rất nhiều.

Anh có thể giúp tôi thêm 1 vấn đề này được không. Giá sử tôi có các text nằm quá sát nhau (gần trùng nhau), khi in sẽ không đọc được. Nếu mình move từng text ra để khi in đọc được sẽ mất rất nhiều thời gian. Có cách nào khi mình chọn các text, lệnh thực hiện sẽ giãn các text ra đều nhau theo hàng, cột tùy ý không ? Tâm của các text do user chọn. Cám ơn Snowman trước.

Có ai giúp tôi vấn đề này nhỉ. A Snowman đâu rồ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
Có ai giúp tôi vấn đề này nhỉ. A Snowman đâu rồi ...

Bạn hãy vận dụng những lệnh CAD có sẵn đi. Scale tất cả nhóm text lên theo khoảng cách các dòng mong muốn rồi đổi lại height các text bằng height ban đầu.

Trên diễn đàn cũng có lisp dãn dòng text rồi (của Nataca) tôi ko nhớ ở đâu, bạn chịu khó tìm vậy.

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
Duy kiểm tra lại giúp mình. Lish kolàm đc điều đó

Chọn Pl, ok, thì có phần chúng phá ra thành 1 line nhưng ko offset.

Có phần thì vẫn còn nguyên độ dày của pl đó

Bạn xem lại thế nào chứ mình thử rồi. (lưu ý bạn tắt chế độ bắt điểm đi nhé)

-Cái mà bạn thấy phá ra thành line thì thực chất nó là 2 line trong đó. Lổi này hình như bị với pline nằm ngang day dọc chi đó. Mình ngại viết offset trong lisp là vì vậy do rất khó xác định điểm chỉ hướng offset nằm ngoài pline.

-Còn phần giữ nguyên độ dày thì mình cũng không hiểu là lổi gì.

@Bạn thử với các pline xiên xem sao nếu được thì nhờ mọi người giúp cách xác định điểm chỉ hường offset. Cách mình làm hiện nay như sau:

+Lấy toạ độ điểm đầu của pline. Dùng hàm polar xác định 1 điểm 2 bên theo hướng vuông góc nên trường hợp pline nằm ngang hay dọc 2 điểm này bị trùng trên pline nên ko offset ra 2 bêb được.

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 các bạn, mong các bạn jup đỡ. mình cần 1 lisp có thể làm như sau : mình hay phải sửa bản vẽ của dân kiến trúc, họ hay vẽ mặt cắt với cỡ chữ rất to.khi mình cho nhỏ lại thì các chữ cách nhau rất xa (6 6) và phải chỉnh cho gan lại (6 6) (có rất nhiều mặt cắt => sửa rất nhiều lần ) các bạn có thể cho mình 1 lisp mỗi khi click vào mặt cắt ( ví dụ 6 6 ) nó sẽ tự cho gần lại với khoảng cách do mình chọn đuợc kô nếu làm được với muti nữa thì tốt wa, cảm ơn các bạn rất nhiều. hình ảnh minh hoạ

http://www.cadviet.com/upfiles/untitled_85.jpg

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 các bạn, mong các bạn jup đỡ. mình cần 1 lisp có thể làm như sau : mình hay phải sửa bản vẽ của dân kiến trúc, họ hay vẽ mặt cắt với cỡ chữ rất to.khi mình cho nhỏ lại thì các chữ cách nhau rất xa (6 6) và phải chỉnh cho gan lại (6 6) (có rất nhiều mặt cắt => sửa rất nhiều lần ) các bạn có thể cho mình 1 lisp mỗi khi click vào mặt cắt ( ví dụ 6 6 ) nó sẽ tự cho gần lại với khoảng cách do mình chọn đuợc kô nếu làm được với muti nữa thì tốt wa, cảm ơn các bạn rất nhiều. hình ảnh minh hoạ

http://www.cadviet.com/upfiles/untitled_85.jpg

Cái này do căn lề của chữ thôi. Dùng lệnh Tjust để chuyển một chữ căn lề trái, một chữ căn lề phải ( mà không bị thay đổi vị trí của text). Sau đó đổi chiều cao chữ bình thườ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
Cái này do căn lề của chữ thôi. Dùng lệnh Tjust để chuyển một chữ căn lề trái, một chữ căn lề phải ( mà không bị thay đổi vị trí của text). Sau đó đổi chiều cao chữ bình thường.

mình thử rồi mà kô đc,sau khi cho chữ nhỏ đi thì còn phải cho 2 chữ gần lại nhau chứ kô chỉ là cùng vị trí như ban đầu đâu :leluoi:(

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 tất cả các thành viên trong diễn đàn. Mình là thành viên mới nóng hỏi luôn. Mình thấy diễn đàn rất hay và hiệu quả

Mình cần có 1 đoạn lisp có yêu cầu thế này: vẽ chi tiết 3d bất kỳ sau đó xuất sang 2d và ghi kich thước cho 3 hình chiếu

Và lập 1 lisp sẵn vẽ 1 hình dạng tấm trên tấm có khoan lỗ số lỗ do mình qui định chỉ când nhập vài thông số là nó tự động sẽ vẽ cho mình 3 hình chiếu và chi kich thước theo đúng tiêu chuẩn việt nam (2D)

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 ơi mình học và làm vơi autoCAD lâu lắm rồi nhưng mình mới làm quen với lisp nên mình thấy lisp khó kiểmt ra lỗi quá các bác đi trước có kinh nghiệm chỉ mình cách sửa lỗi nhanh nhất với xin cảm ơn các bác 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
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×