Chuyển đến nội dung
Diễn đàn CADViet
Duong Nhat Duy

Lisp Insert Block, đối tượng hàng loạt

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

Gửi đến các bạn 1 lisp chèn Block hàng loạt (hoặc nhiều đối tượng bất kỳ không phải Block), xử lý được rất nhiều các đề bài đặt ra.


Tên lệnh:
   ITL - Thiết lập
   IPL - Chèn Block lên các đối tượng bất kỳ
   IDT - Chèn Block trên 1 đối tượng (Pline, Arc,...) theo pick điểm hoặc nhập khoảng cách

   IAX - Chèn Block từ các đối tượng gióng vuông góc lên đường dẫn
   ME1 - Rải Block lên nhiều đối tượng cùng lúc
   ME2 - Rải Block trên 1 đoạn bất kỳ của 1 đối tượng


Cách dùng:
   - TL: Thiết lập các thông số: chèn block hay 1 nhóm đối tượng bất kỳ, khoảng cách, offset,...


   - IPL: Chèn Block lên điểm đặt của các đối tượng, ví dụ: đỉnh pline, giao cắt các pline, trọng tâm hình học,...

2068492830_InsertIPL.gif.d44f2dc75f0eeb90b20ead7b45ae100b.gif


   - IDT: Chèn Block trên 1 đối tượng theo pick điểm hoặc nhập khoảng cách

458991228_InsertIDT(1).gif.b4abf1890390db9d190d3d2fb036cf25.gif


(bonus: có thể chèn cả 2 bên pline, chèn text thể hiện khoảng cách, cài đặt trong lệnh TL)

1241855328_InsertIDT(2).gif.2a0026a7a3a5672c04a27ee051a90f75.gif

 

(bonus: có thể chèn theo khoảng cách nhập trong Clipboard - copy từ excel, word, notepad, ...)

1576450151_InsertIDT(3).gif.80f0d53f5ac942a6c8eb44461a046246.gif

 

   - IAX: Chèn Block từ các đối tượng gióng vuông góc lên đường dẫn

566816043_InsertIAX.gif.5983ed4046fbde9dc67da91dc363a557.gif


   - ME1: Rải Block lên nhiều đối tượng cùng lúc. Cách dùng tương tự lệnh ME của CAD nhưng khai báo linh hoạt hơn và có thể chọn nhiều pline cùng lúc

1467257233_InsertME1.gif.2c8e0e73b89d9fc49a5da5a185634566.gif


   - ME2: Rải Block trên 1 đoạn bất kỳ (chọn điểm đầu, cuối)

(bonus: ME1 và ME2 có thể rải Block theo cấp số cộng, cài đặt trong lệnh TL)

319664739_InsertME2.gif.8fe14dde9d3af238e6137bce4b463b82.gif
 

Cập nhật:

- v1.00 (12/05/23): Phiên bản đầu tiên

- v1.01 (31/10/23): Sửa 1 số lỗi với text lý trình

- v1.02 (27/06/24): Lệnh IDT: Thêm option rải đối tượng theo Clipboard

- v1.03 (30/08/24):

   + Thêm lệnh IAX: Chèn Block từ các đối tượng gióng vuông góc lên đường dẫn

   + Sửa tên lệnh thiết lập: TL=> ITL

   + Thêm option điền trực tiếp text lý trình vào Block (khi chèn Block Att)

 

Link download phiên bản cuối:

https://drive.google.com/drive/u/1/folders/1lLMMCh_-kdHHA3ew1P-ogNED89A_RBPV

 

Chúc các bạn thành công :)))

  • Like 25
  • Vote tăng 8

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

Vote + cho bác Duy, lâu nay chỉ còn thấy bác chịu khó viết lisp free cho mọi người xài thoải mái, còn bảo hành nữa chứ! 

  • Like 2

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

Kính Nhờ Các Bác chỉnh sửa giúp em lệnh IPL sao cho chèn Block song song với đường dẫn line , Polyline (trong khung nhìn 3D) sao điểm chèn đầu hoặc cuối  từ ngoài vào trong line hoặc Polyline Như VD sau:

Cám Ơn Các Bác

Chen Block song song.dwg

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
Vào lúc 1/4/2023 tại 09:47, pdhuyxn2 đã nói:

Kính Nhờ Các Bác chỉnh sửa giúp em lệnh IPL sao cho chèn Block song song với đường dẫn line , Polyline (trong khung nhìn 3D) sao điểm chèn đầu hoặc cuối  từ ngoài vào trong line hoặc Polyline Như VD sau:

Cám Ơn Các Bác

Chen Block song song.dwg

Bạn thông cảm, trình mình gà nên ko thể viết lisp dùng cho 3D đc :(

  • Like 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
Vào lúc 1/4/2023 tại 09:47, pdhuyxn2 đã nói:

Kính Nhờ Các Bác chỉnh sửa giúp em lệnh IPL sao cho chèn Block song song với đường dẫn line , Polyline (trong khung nhìn 3D) sao điểm chèn đầu hoặc cuối  từ ngoài vào trong line hoặc Polyline Như VD sau:

Cám Ơn Các Bác

Chen Block song song.dwg

Cái này thì tôi đã viết và đăng youtube, khá đồ sộ và là soft thương mại cho KS thiết kế đường dây điện
https://youtu.be/nK29WEKm4XQ

  • Like 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

Block xịn sò. Bác Duy có thể cải tiến lệnh IPL chèn Block có Atribute là số, và số thứ tự nó tăng dần từ đầu đến cuối Pline ko bác?

Ví dụ tăng dần từ 1A => 15A

Thanks bác nhiều 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
6 giờ trước, coldboy_at49 đã nói:

Block xịn sò. Bác Duy có thể cải tiến lệnh IPL chèn Block có Atribute là số, và số thứ tự nó tăng dần từ đầu đến cuối Pline ko bác?

Ví dụ tăng dần từ 1A => 15A

Thanks bác nhiều nhiều !

Lisp về đánh STT mình để 1 lisp riêng, bạn tham khảo trong này, khi nào có time mình sẽ đăng 1 bài riêng sau.

 

  • Like 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
Vào lúc 30/10/2023 tại 08:48, Duong Nhat Duy đã nói:

Lisp về đánh STT mình để 1 lisp riêng, bạn tham khảo trong này, khi nào có time mình sẽ đăng 1 bài riêng sau.

 

Đa tạ bác nhiều nhé. E dùng thêm lisp đánh stt cũng dc. Nhưng kể ra bác tích hợp tự nhảy số thứ tự được luôn vào lệnh IPL của lisp insert này thì tuyệt vờ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
1 giờ} trướ}c, coldboy_at49 đã nói:

Đa tạ bác nhiều nhé. E dùng thêm lisp đánh stt cũng dc. Nhưng kể ra bác tích hợp tự nhảy số thứ tự được luôn vào lệnh IPL của lisp insert này thì tuyệt vời ^^

Không bạn nhé, nếu như bạn ngại dùng thêm 1 lệnh thì cũng có rất nhiều người khác dùng lisp này nhưng lại không có nhu cầu đánh số thứ tự, họ phải enter vài lần để bỏ qua các thao tác đánh số thứ tự, như vậy là làm lisp rối rắm hơn chứ không phải tuyệt vời đâu, cái gì tách được thì mình nên tách ra

  • Like 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
Vào lúc 24/2/2023 tại 15:10, Duong Nhat Duy đã nói:

Gửi đến các bạn 1 lisp chèn Block hàng loạt (hoặc nhiều đối tượng bất kỳ không phải Block), xử lý được rất nhiều các đề bài đặt ra.
Tên lệnh:
   TL - Thiết lập
   IPL - Chèn Block lên các đối tượng bất kỳ
   IDT - Chèn Block trên 1 đối tượng (Pline, Arc,...) theo pick điểm hoặc nhập khoảng cách

   IAX - Chèn Block từ các điểm ánh xạ từ 1 nhóm đối tượng lên đường dẫn
   ME1 - Rải Block lên nhiều đối tượng cùng lúc
   ME2 - Rải Block trên 1 đoạn bất kỳ của 1 đối tượng (Pline, Arc,...)
Cách dùng:
   - TL: Thiết lập các thông số: chèn block hay 1 nhóm đối tượng bất kỳ, khoảng cách, offset,...


   - IPL: Chèn Block lên điểm đặt của các đối tượng, ví dụ: đỉnh pline, giao cắt các pline, trọng tâm hình học,...

2068492830_InsertIPL.gif.d44f2dc75f0eeb90b20ead7b45ae100b.gif


   - IDT: Chèn Block trên 1 đối tượng theo pick điểm hoặc nhập khoảng cách

458991228_InsertIDT(1).gif.b4abf1890390db9d190d3d2fb036cf25.gif


(bonus: có thể chèn cả 2 bên pline, chèn text thể hiện khoảng cách, cài đặt trong lệnh TL)

1241855328_InsertIDT(2).gif.2a0026a7a3a5672c04a27ee051a90f75.gif


   - ME1: Rải Block lên nhiều đối tượng cùng lúc. Cách dùng tương tự lệnh ME của CAD nhưng khai báo linh hoạt hơn và có thể chọn nhiều pline cùng lúc

1467257233_InsertME1.gif.2c8e0e73b89d9fc49a5da5a185634566.gif


   - ME2: Rải Block trên 1 đoạn bất kỳ (chọn điểm đầu, cuối)

(bonus: ME1 và ME2 có thể rải Block theo cấp số cộng, cài đặt trong lệnh TL)

319664739_InsertME2.gif.8fe14dde9d3af238e6137bce4b463b82.gif
 

File lisp:

12/05/2023: Insert+.lsp

31/10/2023: Insert+ v1.01.lsp (Thêm lệnh IAX, sửa 1 số lỗi với text lý trình)

 

Chúc các bạn thành công :)))

TUYỆT QUÁ ANH ƠI !!! 1000 ĐIỂ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

anh ơi, thêm cho em 1 dòng trong thiết lập là cách điểm đầu 1 đoạn bao nhiêu được không anh. Bình thường em phải nhập lệnh tk để nhập khoảng cách hơi tốn cơ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
1 giờ trước, Xuân Lộc đã nói:

anh ơi, thêm cho em 1 dòng trong thiết lập là cách điểm đầu 1 đoạn bao nhiêu được không anh. Bình thường em phải nhập lệnh tk để nhập khoảng cách hơi tốn cơm

Lisp đã có option nhập Lý trình + thêm rồi bạn (chỉ cộng vào Text, lý trình thực tế không ảnh hưởng)

Hay ý bạn đang nói khi muốn insert text lý trình ví dụ Km20+150 nhưng lại lười nhập 20150 mà chỉ muốn nhập 150 ?

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
57 phút trước, Duong Nhat Duy đã nói:

Lisp đã có option nhập Lý trình + thêm rồi bạn (chỉ cộng vào Text, lý trình thực tế không ảnh hưởng)

Hay ý bạn đang nói khi muốn insert text lý trình ví dụ Km20+150 nhưng lại lười nhập 20150 mà chỉ muốn nhập 150 ?

Không ạ, anh hiểu nhầm ý em rồi.Vd: khi em dùng lệnh ME2, khi thực hiện lệnh nó hỏi chọn điểm đầu tiên để inset block tại vị trí điểm đầu tiên đó, em muốn nó cách điểm đầu tiên ấy 1 khoản cho trước. vì em áp vào đề bài vẽ tường rào, chèn cột tường rào thì cách 20m có 1 khe lún rộng 50mm

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
1 giờ trước, Xuân Lộc đã nói:

Không ạ, anh hiểu nhầm ý em rồi.Vd: khi em dùng lệnh ME2, khi thực hiện lệnh nó hỏi chọn điểm đầu tiên để inset block tại vị trí điểm đầu tiên đó, em muốn nó cách điểm đầu tiên ấy 1 khoản cho trước. vì em áp vào đề bài vẽ tường rào, chèn cột tường rào thì cách 20m có 1 khe lún rộng 50mm

Để biết điểm có lý trình 20 25m ... ở đâu trên pline bạn dùng lệnh IDT nhé, thêm có 1 lệnh chứ mấ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

Bạn có thể thử cái này với hình 3D

 

(defun c:test (/ ent p1 p2 p3 p4 a1)
  (setq 
    ent (entget (car (entsel)))
    p1 (cdr (assoc 10 ent))
    p2 (cdr (assoc 11 ent))
    p3 (list (- (cadr p1) (cadr p2)) (- (car p2) (car p1)) 0)
    a1 (atan 
         (- (last p1) (last p2)) 
         (sqrt 
           (+ 
             (expt (- (car p1) (car p2)) 2) 
             (expt (- (cadr p1) (cadr p2)) 2)
           )
         )
       )
    ent (vlax-ename->vla-object (car (entsel)))
    p4 (vlax-get ent 'insertionpoint)
    p3 (mapcar '+ p3 p4)
  )
  (vla-rotate3d ent (vlax-3d-point p4) (vlax-3d-point p3) a1)
  (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
Vào lúc 24/2/2023 tại 15:10, Duong Nhat Duy đã nói:

Gửi đến các bạn 1 lisp chèn Block hàng loạt (hoặc nhiều đối tượng bất kỳ không phải Block), xử lý được rất nhiều các đề bài đặt ra.
Tên lệnh:
   TL - Thiết lập
   IPL - Chèn Block lên các đối tượng bất kỳ
   IDT - Chèn Block trên 1 đối tượng (Pline, Arc,...) theo pick điểm hoặc nhập khoảng cách

   IAX - Chèn Block từ các điểm ánh xạ từ 1 nhóm đối tượng lên đường dẫn
   ME1 - Rải Block lên nhiều đối tượng cùng lúc
   ME2 - Rải Block trên 1 đoạn bất kỳ của 1 đối tượng (Pline, Arc,...)
Cách dùng:
   - TL: Thiết lập các thông số: chèn block hay 1 nhóm đối tượng bất kỳ, khoảng cách, offset,...


   - IPL: Chèn Block lên điểm đặt của các đối tượng, ví dụ: đỉnh pline, giao cắt các pline, trọng tâm hình học,...

2068492830_InsertIPL.gif.d44f2dc75f0eeb90b20ead7b45ae100b.gif


   - IDT: Chèn Block trên 1 đối tượng theo pick điểm hoặc nhập khoảng cách

458991228_InsertIDT(1).gif.b4abf1890390db9d190d3d2fb036cf25.gif


(bonus: có thể chèn cả 2 bên pline, chèn text thể hiện khoảng cách, cài đặt trong lệnh TL)

1241855328_InsertIDT(2).gif.2a0026a7a3a5672c04a27ee051a90f75.gif


   - ME1: Rải Block lên nhiều đối tượng cùng lúc. Cách dùng tương tự lệnh ME của CAD nhưng khai báo linh hoạt hơn và có thể chọn nhiều pline cùng lúc

1467257233_InsertME1.gif.2c8e0e73b89d9fc49a5da5a185634566.gif


   - ME2: Rải Block trên 1 đoạn bất kỳ (chọn điểm đầu, cuối)

(bonus: ME1 và ME2 có thể rải Block theo cấp số cộng, cài đặt trong lệnh TL)

319664739_InsertME2.gif.8fe14dde9d3af238e6137bce4b463b82.gif
 

File lisp:

12/05/2023: Insert+.lsp

31/10/2023: Insert+ v1.01.lsp (Thêm lệnh IAX, sửa 1 số lỗi với text lý trình)

 

Chúc các bạn thành công :)))

Bác cho e xin lisp với B, Link không còn, cảm ơn B

 

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

Update 27/06/2024:

Thêm option rải đối tượng theo Clipboard trong lệnh IDT

(Clipboard: bộ nhớ đệm lưu trữ văn bản từ thao tác Copy, Cut trong Windows, giả sử: Excel, Word, Notepad, ...)

1576450151_InsertIDT(3).gif.80f0d53f5ac942a6c8eb44461a046246.gif

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

Update v1.03 (30/08/24):

   + Sửa tên lệnh thiết lập: TL=> ITL

   + Thêm option điền trực tiếp text lý trình vào Block (khi chèn Block Att)

   + Thêm lệnh IAX: Chèn Block từ các đối tượng gióng vuông góc lên đường dẫn

566816043_InsertIAX.gif.5983ed4046fbde9dc67da91dc363a557.gif

 

Vào lúc 30/8/2024 tại 13:52, conghoa đã nói:

@Duong Nhat Duy Bác xem lại giúp cái lệnh IPL, khi chèn block có text ATT sử dụng Field thì sau khi chèn các giá field của text đều bị biến mất.

Lệnh chèn Block của lisp nó tương tự lệnh Insert của cad bạn nhé, khi insert 1 block att, các giá trị att sẽ là giá trị mặc định như trong Block Editor.

Để chèn block att, giữ nguyên các nội dung att ban đầu, bạn hãy coi nó như là 1 đối tượng. Trong thiết lập (ITL), bạn bỏ chọn ô Block và tick vào ô Object là được !

  • Like 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

Dear bạn Nhất, Lisp bạn rất hay nhưng không chèn được các block phụ kiện nước như hình bên dưới, mình có sưu tầm được Lisp này nhưng phụ kiện tạo ra không phải  block mà là poline (cũng tạm xài được). Nhưng phụ kiện tạo ra hơi lớn và lisp cũng hay bị lỗi tạo ra các fitting không đúng như hình mong muốn, mình không rành lisp lắm nhờ bạn hỗ trợ cách chỉnh to nhỏ phụ kiện này được không, cảm bạn ơn nhé.

 

(defun c:test ( / DrawRect line1 line2 len width fuzz line1Start line1End line2Start line2End intersPt line1Ang line2Ang p1 p2 p3 p4 sel regions lastEnt ctr ctr2 ss lines)

(defun DrawRect (lst)
(entmake (append (list (cons 0 "LWPOLYLINE")
(cons 100 "AcDbEntity")
(cons 100 "AcDbPolyline")
(cons 90 (length lst))
(cons 70 1))
(mapcar (function (lambda (p) (cons 10 p))) lst)))
);defun

(prompt "\nSelect lines: ")
(if (setq ss (ssget '((0 . "LINE"))))
(progn

(command "_.undo" "_begin")

(setq len 80)
(setq width 20)
(setq fuzz 0.01)
(setq sel (ssadd) regions (ssadd))

(setq ctr 0)
(repeat (sslength ss)
(setq line1 (ssname ss ctr))
(setq ctr2 0)
(repeat (sslength ss)
(setq line2 (ssname ss ctr2))

(setq line1Start (cdr (assoc 10 (entget line1))))
(setq line1End (cdr (assoc 11 (entget line1))))
(setq line2Start (cdr (assoc 10 (entget line2))))
(setq line2End (cdr (assoc 11 (entget line2))))

;If the 2 lines intersect
(if (and (/= line1 line2) (setq intersPt (inters line1Start line1End line2Start line2End)))
(progn

(setq line1Ang (angle line1Start line1End))
(setq line2Ang (angle line2Start line2End))
(setq lines (cons (list (list line1Start line1End line1Ang line1) (list line2Start line2End line2Ang line2) intersPt) lines))
))
(setq ctr2 (1+ ctr2))
)
(setq ctr (1+ ctr))
)

(mapcar '(lambda (linePair)

(setq line1 (car linePair))
(setq line2 (cadr linePair))
(setq line1Start (car line1))
(setq line1End (cadr line1))
(setq line1Ang (caddr line1))
(setq line2Start (car line2))
(setq line2End (cadr line2))
(setq line2Ang (caddr line2))
(setq intersPt (caddr linePair))

(mapcar '(lambda (line / lineStart lineEnd lineAng lineEnt)

(setq lineStart (car line) lineEnd (cadr line) lineAng (caddr line) lineEnt (cadddr line))

(cond
;Intersection point is on the start point of the line
((equal intersPt lineStart fuzz)
(setq p1 (polar intersPt (- (- line1Ang (/ pi 2)) (/ (- line1Ang line2Ang) 2)) (/ (/ width 2) (cos (/ (- line1Ang line2Ang) 2)))))
(setq p2 (polar (polar intersPt lineAng len) (- lineAng (/ pi 2)) (/ width 2)))
(setq p3 (polar (polar intersPt lineAng len) (+ lineAng (/ pi 2)) (/ width 2)))
(setq p4 (polar intersPt (- (+ line1Ang (/ pi 2)) (/ (- line1Ang line2Ang) 2)) (/ (/ width 2) (cos (/ (- line1Ang line2Ang) 2)))))
(DrawRect (list p1 p2 p3 p4))
(ssadd (entlast) sel)
(command "break" lineEnt intersPt (polar intersPt lineAng len))
)

;Intersection point is on the end point of the line
((equal intersPt lineEnd fuzz)
(setq p1 (polar intersPt (- (- line1Ang (/ pi 2)) (/ (- line1Ang line2Ang) 2)) (/ (/ width 2) (cos (/ (- line1Ang line2Ang) 2)))))
(setq p2 (polar (polar intersPt (+ lineAng pi) len) (- lineAng (/ pi 2)) (/ width 2)))
(setq p3 (polar (polar intersPt (+ lineAng pi) len) (+ lineAng (/ pi 2)) (/ width 2)))
(setq p4 (polar intersPt (- (+ line1Ang (/ pi 2)) (/ (- line1Ang line2Ang) 2)) (/ (/ width 2) (cos (/ (- line1Ang line2Ang) 2)))))
(DrawRect (list p1 p2 p3 p4))
(ssadd (entlast) sel)
(command "break" lineEnt intersPt (polar intersPt (+ lineAng pi) len))
)

;Intersection point is in the middle of the line
(T
(setq p1 (polar (polar intersPt lineAng len) (- lineAng (/ pi 2)) (/ width 2)))
(setq p2 (polar (polar intersPt (+ lineAng pi) len) (- lineAng (/ pi 2)) (/ width 2)))
(setq p3 (polar (polar intersPt (+ lineAng pi) len) (+ lineAng (/ pi 2)) (/ width 2)))
(setq p4 (polar (polar intersPt lineAng len) (+ lineAng (/ pi 2)) (/ width 2)))
(DrawRect (list p1 p2 p3 p4))
(ssadd (entlast) sel)
(command "break" lineEnt (polar intersPt lineAng len) (polar intersPt (+ lineAng pi) len))
)
);cond

)
(list line1 line2)
);mapcar

)
lines
);mapcar

(setq lastEnt (entlast))
(command "region" sel "")
(command "erase" sel "")
(while (setq lastEnt (entnext lastEnt))
(ssadd lastEnt regions))
(command "union" regions "")
(command "_.undo" "_end")

));if ss

(princ)
);defun

 

 

image.png.359fbbacae649e5925cca6bf33585547.png

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

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

×