Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Nguyen Hoanh

Viết Lisp theo yêu cầu

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

Nguyen Hoanh    4.524
Bác hoanh ơi cái lisp này chạy ngon mỗi tội khi phép tính có những

dấu ngoặc "()" thì không chạy bác à?

Có dấu ngoặc vẫn chạy tốt, miễn là đúng cú pháp toán họ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
xaydung    12

Các bác ơi em đang cần tìm 1 lisp có nội dung giống lisp joint

(nối các đường line rời thành 1 đường liền) đã có trên diễn đàn

nhưng ở đây là không gian 3D, có bác nào biết không giúp em chút nha?!

Thanks!

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
Nguyen Hoanh    4.524
Các bác giúp em tên của 1 kiểu dim , ví dụ như em đang đúng kieu dim abc , em thu hiền 1 lenh nào đó bằng autolíp , thị tên abc đó được gần cho 1 biên nào đó ! Mong các bác giúp đỡ !

style của dim hiện hành được lưu trong biến "DIMSTYLE", muốn lấy nó bạn dùng lệnh (getvar "DIMSTYLE").

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
Nguyen Hoanh    4.524
Các bác việt cho em đoán líp lấy đường dẫn của 1 file lisp mà mình vừa load len (trong file đó có chưa cái đoạn mã này ), ví dụ như em vừa load len file 123 .lsp thi doan líp đó sẽ lấy đường dẫn và gần cho 1 biên nào đó , và đưa ra thông báo này khi mình load file

Và 1 doan líp dùng để xoá 1 file líp nguy hiểm nào đó , ví dụ như em cần biết đường dẫn file 123 .lsp để xoa nó khi nó vừa được load len , xoa vinh viện luôn !

Các bác có cách nào để lấy được số mã của o cũng không , lấy bằng 1 mà nào đó của autolisp thoi , sau khi lấy được nó sẽ lập tức gán cho 1 biên nào đó !

Mong các bac giúp đỡ em , em rất can !

Cái này trước đây bàn một lần rồi, kết quả là vô phương cứu chữa!

Không có cách nào 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
Nguyen Hoanh    4.524
Các bác ơi em đang cần tìm 1 lisp có nội dung giống lisp joint

(nối các đường line rời thành 1 đường liền) đã có trên diễn đàn

nhưng ở đây là không gian 3D, có bác nào biết không giúp em chút nha?!

Thanks!

Lệnh là JL3D.

Lệnh này sẽ lấy đường thẳng đầu tiên trong tập chọn làm gốc, và từ đó phát triển dần đường 3DPolyLine. Vì thế, nếu tập line được chọn không liền, những line nào "dính" với line đầu tiên trong tập chọn sẽ được xử lý.

(defun c:jl3d ()
 (defun timpointketiep	(p / kq)
   (setq pp t
  i  -1
   )
   (while (and	(not kq)
	pp
   )
     (setq i  (1+ i)
    pp (nth i lstline)
     )
     (if (= (car pp) p)
(if (not (member (cdr pp) lstkq))
  (setq	kq	(cdr pp)
  )
)
(if (not (member (car pp) lstkq))
  (if (= (cdr pp) p)
    (setq kq	  (car pp)
    )
  )
)
     )
   )
   kq
 )
 (defun pindex	(point / pp kq)
   (foreach pp	lstpoint
     (if (	(setq kq (car pp))
     )
   )
   (cond
     (kq kq)
     (t
      (setq lstpoint (append lstpoint
		      (list (cons (1+ (length lstpoint)) point))
	      )
     kq	      (length lstpoint)	     
      )
     )
   )
 )
 (defun ent2ln	(ent / tt)
   (setq tt (entget ent)
  p1 (cdr (assoc 10 tt))
  p2 (cdr (assoc 11 tt))
   )
   (cons (pindex p1) (pindex p2))
 )
 (princ "\nJoint multi Line to 3DPolyline © CADViet.com")
 (setq	ssl	 (ssget '((0 . "LINE")))
lstent	 (ss2ent ssl)
lstpoint nil
lstline	 (mapcar 'ent2ln lstent)	
lstkq	 nil
 )
 (setq pht	 (car (car lstline)))
 (while (setq pht (timpointketiep pht))
   (setq lstkq (append lstkq (list pht)))
 )
 (setq pht	 (cdr (car lstline)))
 (while (setq pht (timpointketiep pht))
   (setq lstkq (append (list pht) lstkq))
 )
 (luuos)
 (setvar "osmode" 0)
 (command ".3dpoly")
 (foreach pp lstkq
   (command  (cdr (assoc pp lstpoint)))
 )
 (command "")
 (traos)
 (princ)
)

(defun luuos ()
 (setq
   HOANH_OSMODE   (getvar "OSMODE")
   HOANH_AUTOSNAP (getvar "AUTOSNAP")
 )
)
(defun traos ()
 (if HOANH_OSMODE
   (setvar "OSMODE" HOANH_OSMODE)
 )
 (if HOANH_AUTOSNAP
   (setvar "AUTOSNAP" HOANH_AUTOSNAP)
 )
)

(defun ss2ent(ss / sodt index lstent)
 (setq
   sodt (cond
   (ss (sslength ss))
   (t 0)
 )
   index 0
 )
 (repeat sodt
   (setq ent (ssname ss index)
  index (1+ index)
  lstent (cons ent lstent)
   )
 )
 (reverse lstent)
)

(princ "\nJoint multi Line to 3DPolyline - free lisp from www.cadviet.com")
(princ "\nType JL3D to start!")
(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
xaydung    12

Thanks bác Hoanh, em đang cần 1 lisp nữa có nội dung như sau:

khi chạy lisp chọn đối tượng muốn copy array, chọn điểm cơ sở

nhập số lượng cần copy (mặc định là quay 360 độ)

 

tức là giống như lệnh array polar nhưng không muốn hiện lên 1

cái bảng lằng nhằng của cad cao mà nhập ở dòng lệnh như cad

R14 đó. bác nào biết giúp em nha, thanks!

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
ssg    1.088
Thanks bác Hoanh, em đang cần 1 lisp nữa có nội dung như sau:

khi chạy lisp chọn đối tượng muốn copy array, chọn điểm cơ sở

nhập số lượng cần copy (mặc định là quay 360 độ)

 

tức là giống như lệnh array polar nhưng không muốn hiện lên 1

cái bảng lằng nhằng của cad cao mà nhập ở dòng lệnh như cad

R14 đó. bác nào biết giúp em nha, thanks!

Không hiểu tại sao bạn lại có yêu cầu như vậy?! Thích thì chiều:

(command "array" (ssget) "" "P" pause)

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
xaydung    12

Cám ơn SSg, tui đang cần 1 lisp nữa có nội dung như sau:

trên màn hình 3D có 2 rectang như nhau nhưng 1 cái nằm trong mặt phẳng XY

1 cái song song với mặt phẳng XY nhưng có toạ độ Z.

khi chạy lisp hỏi chọn các hình vẽ, lisp sẽ tự động vẽ các đường line nối 4 góc

của các rectang tạo thành 1 hình hộp dạng mô hình 3D khung dâ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
kts.ngocquan    37

NH ơi

Ông xem lại cái này tý nhé

http://www.cadviet.com/forum/index.php?showtopic=1544

Lệnh chuyển Layer mà ông viết phải nhập tên Layer , sao không pick luôn vào đối tượng nhỉ :unsure:

Đề nghị chuyển lại ngay nhé :unsure:

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
xaydung    12
Cac bac oi, cai lenh mcaltext nay bi loi, toi dung CAD 2004, khi copy ma lenh ve va ghi ra file lisp, sau do load file va thuc thi thi truong trinh thong bao:

mcaltext

; error: bad character read (octal): 0

Cac bac giup em voi !

 

trước khi chạy lisp bạn gõ lệnh CAL là OK mà

Công trình thủy Đại Học Hàng Hải À- làm quen đê!

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
xaydung    12

mình đang cần 1 lisp có nội dung như sau:

trên màn hình 3D có 2 rectang như nhau nhưng 1 cái nằm trong mặt phẳng XY

1 cái song song với mặt phẳng XY nhưng có toạ độ Z.

khi chạy lisp hỏi chọn các hình vẽ, lisp sẽ tự động vẽ các đường line nối 4 góc

của các rectang tạo thành 1 hình hộp dạng mô hình 3D khung dâ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
ssg    1.088
Cám ơn SSg, tui đang cần 1 lisp nữa có nội dung như sau:

trên màn hình 3D có 2 rectang như nhau nhưng 1 cái nằm trong mặt phẳng XY

1 cái song song với mặt phẳng XY nhưng có toạ độ Z.

khi chạy lisp hỏi chọn các hình vẽ, lisp sẽ tự động vẽ các đường line nối 4 góc

của các rectang tạo thành 1 hình hộp dạng mô hình 3D khung dây.

 

;;;---------------------------------------------
(defun comp2 (p1 p2 / x1 y1 x2 y2)
(setq
     x1 (car p1) y1 (cadr p1)
     x2 (car p2) y2 (cadr p2)
)
(or (< x1 x2) (and (= x1 x2) (< y1 y2)))
)
;;;---------------------------------------------
(defun GetP(Rec / Dat Z L p)
(setq
   Dat (entget Rec)
   Z (cdr (assoc 38 Dat))
   L nil
)
(while (setq Item (assoc 10 Dat))
   (setq
p (append (cdr item) (list Z))
   	L (append L (list p))
   	Dat (vl-remove Item Dat)
   )
)
(vl-sort L 'comp2)
)
;;;-=========================
(defun C:JRE(/ L1 L2 i)
(setq
    L1 (getP (car (entsel "\nSelect rectangle 1:")))
    L2 (getP (car (entsel "\nSelect rectangle 2:")))
    i 0
)
(repeat 4
   (entmake (list (cons 0 "LINE") (cons 10 (nth i L1)) (cons 11 (nth i L2))))
   (setq i (1+ i))
)
)
;;;-=========================

 

Lệnh JRE (joint rectangle)

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
xaydung    12

Cám ơn ssg nhưng bạn ơi, rectang chỉ là mình ví dụ thôi

chứ thực tế chẳng may explode ra line thì có làm được không bác?

tức là lisp sẽ nhận ra điểm tại đó có 2 line(hoặc 3 line) giao nhau

rồi nối chúng lại theo trục z đó.

ví dụ: có 2 hình chữ thập 1 trên, 1 dưới(chữ thập dưới trong mặt phẳng XY)

có nghĩa là lấy ra điểm giao của chữ thập rồi nối lại thành 1 line

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
kts.ngocquan    37

NH ơi

Ông xem lại cái này tý nhé

http://www.cadviet.com/forum/index.php?showtopic=1544

Lệnh chuyển Layer mà ông viết phải nhập tên Layer , sao không pick luôn vào đối tượng nhỉ :unsure:

Đề nghị chuyển lại ngay nhé :unsure:

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
admin    484
Cám ơn ssg nhưng bạn ơi, rectang chỉ là mình ví dụ thôi

chứ thực tế chẳng may explode ra line thì có làm được không bác?

tức là lisp sẽ nhận ra điểm tại đó có 2 line(hoặc 3 line) giao nhau

rồi nối chúng lại theo trục z đó.

ví dụ: có 2 hình chữ thập 1 trên, 1 dưới(chữ thập dưới trong mặt phẳng XY)

có nghĩa là lấy ra điểm giao của chữ thập rồi nối lại thành 1 line

Nếu chỉ là ví dụ thì bạn hãy nói rõ từ đầu! Đừng để Ssg mất bao công viết xong lisp rồi mới nói. Việc bạn nói muộn sẽ làm người khác mất công gấp 2. Đừng bao giờ đưa ra những yêu cầu thiếu cân nhắc như vậy nữa.

 

Nhắn chung mọi người: Việc viết lisp theo yêu cầu là một hành động rất tốt đẹp của diễn đàn. Nhưng không vì thế mà một số thành viên đưa ra những yêu cầu rất bâng quơ, làm người trợ giúp tốn bao công viết xong thì họ bảo là không đúng, đó chỉ là ví dụ,... và lại đưa ra yêu cầu khác.

 

Để topic này vẫn giữ được sự tốt đẹp trong sáng vốn có của nó, yêu cầu mọi người cần phải tuân thủ những nguyên tắc sau:

- Hãy cân nhắc thật kỹ, thật kỹ, thật kỹ trước khi đưa ra yêu cầu để đảm bảo người trợ giúp sẽ hiểu đúng mục đích của bạn.

- Mỗi khi người trợ giúp đã mất công viết lisp, họ sẽ không được viết lại (cho dù họ muốn). Sự thay đổi code nếu có chỉ là hiệu chỉnh code sai hoặc cải tiến code để đáp ứng một yêu cầu mới của người khác.

- Bài viết nào vi phạm một trong hai điều trên sẽ bị xoá!

 

Cảm ơn mọi ngườ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
vndesperados    253
Nếu chỉ là ví dụ thì bạn hãy nói rõ từ đầu! Đừng để Ssg mất bao công viết xong lisp rồi mới nói. Việc bạn nói muộn sẽ làm người khác mất công gấp 2. Đừng bao giờ đưa ra những yêu cầu thiếu cân nhắc như vậy nữa.

 

Nhắn chung mọi người: Việc viết lisp theo yêu cầu là một hành động rất tốt đẹp của diễn đàn. Nhưng không vì thế mà một số thành viên đưa ra những yêu cầu rất bâng quơ, làm người trợ giúp tốn bao công viết xong thì họ bảo là không đúng, đó chỉ là ví dụ,... và lại đưa ra yêu cầu khác.

 

Để topic này vẫn giữ được sự tốt đẹp trong sáng vốn có của nó, yêu cầu mọi người cần phải tuân thủ những nguyên tắc sau:

- Hãy cân nhắc thật kỹ, thật kỹ, thật kỹ trước khi đưa ra yêu cầu để đảm bảo người trợ giúp sẽ hiểu đúng mục đích của bạn.

- Mỗi khi người trợ giúp đã mất công viết lisp, họ sẽ không được viết lại (cho dù họ muốn). Sự thay đổi code nếu có chỉ là hiệu chỉnh code sai hoặc cải tiến code để đáp ứng một yêu cầu mới của người khác.

- Bài viết nào vi phạm một trong hai điều trên sẽ bị xoá!

 

Cảm ơn mọi người.

 

Chính xác, cảm ơn ban Quản trị đã gãi đúng chỗ ngứa.

Trước đây mình cũng tham gia và hay viết code cùng mọi người song thời gian sau này thấy nhiều người hay đưa ra những yêu cầu không đáng để phải bận tâm nên thôi không viết nữa. Diễn đàn là nơi giao lưu và học hỏi chứ không phải là một "kho công cụ" mà nhiều người cứ lên đây "lục lọi" và nhờ vả...

Có thể nhiều người cho rằng mình không biết thì nhờ người khác giúp, OK, điều này là bình thường nhưng hãy nên dừng lại ở mức học hỏi chứ đừng yêu cầu người khác đến mức phải làm thay mình...

Các bạn không có thời gian thì người khác cũng không có...

Ngay cả bác NguyenHoanh và ssg mình cũng sure là các bác ấy không thể không cần suy nghĩ khi viết code giúp các bạn... Có thể các bác ấy vô tư nhưng các bạn cũng đừng nên vô tâm như thế.

  • Vote tăng 1

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
congtrinh5    0

Xin lisp có nội dung như sau:

Fillet (hoặc chamfer) hàng loạt vật thể 3 chiều.

cụ thể, ví dụ trên màn hình là 1 box 3D dạng khối đặc

lisp sẽ hỏi chọn 1 cạnh , sau đó chương trình sẽ nhận ra các cạnh còn

lại nằm trong cùng mặt phẳng song song với mf XY rồi tự động fillet

hàng loạt. (như chức năng cộng thêm Chain nhưng ở đây vừa cộng thêm

vừa phải các cạch cùng 1 mặt phẳng // với XY)

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
conghoa    93

@Admin & vndesperados

 

Cảm ơn hai bác góp ý, nhưng nói chuyện trong này không tiện, tốt nhất Mod NguyenHoanh nên gom các bài như thế này ra một mục khác để anh em tiện theo dõi.

 

Mình thấy chương trình CADViet Utility mình thấy rất hay, và topic này là một bước quan trọng để có thể thực hiện được chương trình đó. Đây là nơi đem lại cho người điều hành dự án có thể nắm bắt tốt hơn về nhu cầu của người sử dụng chương trình CVU.

 

Để chuyên nghiệp hoá CVU (có thể phục vụ được tất cả các lĩnh vực có liên quan tới CAD) mình nghĩ nó mất nhiều thời gian và công sức. Chi bằng chúng ta nên xây dựng 1 cái vừa đủ để ứng dụng (cơ bản, những cái cần thiết giúp mọi người rút ngắn thời gian khi sử dụng CAD mà vẫn đạt hiệu quả mong muốn).

Kiến trúc, điện, kết cấu, PCCC, thoát nước... cần những thao tác gì trong bản vẽ, dựa trên những thao tác nào phải lặp đi lặp lại nhiều lần thì nên có lisp trong chương trình CVU.

Ví dụ:

Trong kiến trúc: Chèn cửa sổ, cửa đi, vẽ bậc cầu thang, chèn cây trong bản quy hoạch...

Trong kết cấu: thống kê lanh tô, vẽ thép đai ...

Trong điện nước, PCCC: Chủ yếu là chèn block, nếu quy định được tên lệnh trùng với tên block (đèn, quạt, ổ cắm, vòi cứu hoả...) thì việc chèn sẽ rất nhanh chóng, thuận tiện.

 

 

Ps: Nên có một bài tổng hợp các lisp có trong topic này vì trong này toàn những cái cần thiết cho mọi người cả. Nó sẽ là nơi thu hút mem tới CadViet.

Thanks!

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
Nguyen Hoanh    4.524
Ps: Nên có một bài tổng hợp các lisp có trong topic này vì trong này toàn những cái cần thiết cho mọi người cả. Nó sẽ là nơi thu hút mem tới CadViet.

Thanks!

Đã có, bạn thử xem: http://www.cadviet.com/sub/hdownload.php?id=lisp

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
xaydung    12
Van loi bac a (; error: bad argument type: numberp: nil)khi em go CAl rui, sau do chay lisp, nhung van ko dc

Bac cung hoc cong trinh thuy u, bac chu yeu ve van de gi, em lam chu yeu ve xay dung thuy loi thuy dien thui !

thế là do bác tạo file lisp sai rồi, chú ý các khoảng xuống dòng đó, phải chính xá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
xaydung    12
;Scale the mot chieu
(DEFUN EXCUTE()
 (setq oldvalue (getvar "CMDECHO"))
 (setvar "CMDECHO" 0)
 (princ "Chon doi tuong can scale: ")
 (setq ss (ssget))
 (setq P0 (getpoint "\nChon diem goc: "))
 (initget 1 "X Y X S")
 (setq C (getkword "\nScale theo [X,Y,Z,Scale]?<X/Y/Z/S> :"))
 (setq hs (getreal "Cho biet he so scale: "))
 (DELBLOCK "vkc_temp")
 (CREATEBLOCK ss P0)  
 (Command "-Insert" "vkc_temp" C hs P0 "")  
 (setq dt (entlast))
 (Command "Explode" dt)
 (setvar "CMDECHO" oldvalue)
 (princ)
)
(DEFUN CREATEBLOCK(ss P)
 (command "-Block" "vkc_temp" P ss "")
)

(DEFUN DELBLOCK (bname)
 (if (IsExistBlock bname)
   (Command "-Purge" "B" bname "Y" "Y")    
 )
)
(DEFUN IsExistBlock(bname / kq)
 (setq kq Nil)
 (setq n (length LiBlk))
 (setq i 0)
 (while (< i n)
   (if (= bname (nth i LiBlk))
     (progn
   (setq i n)
   (setq kq T)
     )    
   )
   (setq i (1+ i))
 )
 kq
)
(DEFUN CREALIBLK (/ NL)
 (setq LiBlk (List))
 (setq NL (tblnext "BLOCK" T))  
 (while NL    
   (setq LiBlk (append LiBlk (list (cdr (assoc 2 NL)))))
   (setq NL (tblnext "BLOCK"))
 )
 (setq LiBlk (Acad_strlsort LiBlk))
)
(DEFUN C:XSCALE()
 (CREALIBLK)
 (EXCUTE)
)
(DEFUN C:XSC()
 (CREALIBLK)
 (EXCUTE)
)
(princ "\nfree lisp from www.cadviet.com")
(princ)

 

 

Các bác ơi cho em hỏi 1 chút, cái lisp scale đối tượng theo 1 trục này

sao không dùng được lần thứ hai nhỉ. tức là khi scale đối tượng đó cảm thấy chưa vừa ý muốn scale lại thì không được nữa(vì đã tạo thành cái khối gì gì đó)?các bác xem hộ em chút nha?

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
ts088    4

Các pác giúp em một đoạn lisp để khi vẽ một line (hay PLine) cắt qua các đối tượng (là Line) thì nó sẽ lần lượt chọn các đối tượng đó (theo thứ tự) và gán vào một biến. Thank các pác nhì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
Nguyen Hoanh    4.524
Các pác giúp em một đoạn lisp để khi vẽ một line (hay PLine) cắt qua các đối tượng (là Line) thì nó sẽ lần lượt chọn các đối tượng đó (theo thứ tự) và gán vào một biến. Thank các pác nhìu.

Hàm fselect dưới đây đáp ứng yêu cầu của bạn. lệnh test đi kèm là 1 ví dụ để gọi hàm fselect.

 

Cách dùng: (fselect ent)

tham số ent là ename của đối tượng PLINE hoặc LINE.

trả về: tập chọn như bạn yêu cầu.

 

(defun fselect(ent)
 (vl-load-com)
 (setq tt (entget ent)
tt (vl-remove-if '(lambda (x)
		   (and (/= (car x) 10)
			(/= (car x) 11)
		   )
		 )
     tt)
tt (mapcar '(lambda (x) (cdr x)) tt)
 )  
 (ssdel ent (ssget "F" tt))
)

(defun c:test()
 (setq ss (fselect (car (entsel "\nHay chon doi tuong: "))))
 (sssetfirst ss ss)
)

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.

×