Đến nội dung


Hình ảnh
* * * - - 2 Bình chọn

Viết Lisp theo yêu cầu


  • Chủ đề bị khóa Chủ đề bị khóa
2780 replies to this topic

#1941 minhtu2004

minhtu2004

    biết lệnh chamfer

  • Members
  • PipPipPipPip
  • 219 Bài viết
Điểm đánh giá: 34 (tàm tạm)

Đã gửi 05 May 2009 - 04:50 PM

Đọan code của mình:
(DEFUN C:BII()
(setq od (getvar "dimzin"))
(setvar "dimzin" 0)
(setq
BT (getint "\n Buoc @:")
)
(while (setq
DIM (car(entsel "\n Chon kich thuoc dim:"))
ENT (cdr(assoc 42 (entget DIM)))
entc (/ ENT BT)
sodu (- entc (fix entc))
)
(if (/= (equal sodu 0.00000001 0.01) nil)
(command "dimedit" "n" (strcat (rtos entc 2 0) "@" (itoa BT) "=<>") DIM "")
)
(if (= (equal sodu 0.00000001 0.01) nil) (alert "\n Hay xem lai kich thuoc can than, kich thuoc bi sai"))
)
(setvar "dimzin" od)
(princ)
)
-Và đây là file cad:http://www.cadviet.com/upfiles/1_11.dwg
  • 0

-Nhận thực hiện bản vẽ 3D bằng revit.
-Liên hệ: 01664793290.


#1942 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 05 May 2009 - 05:43 PM

Đọan code của mình:
(DEFUN C:BII()
(setq od (getvar "dimzin"))
(setvar "dimzin" 0)
(setq
BT (getint "\n Buoc @:")
)
(while (setq
DIM (car(entsel "\n Chon kich thuoc dim:"))
ENT (cdr(assoc 42 (entget DIM)))
entc (/ ENT BT)
sodu (- entc (fix entc))
)
(if (/= (equal sodu 0.00000001 0.01) nil)
(command "dimedit" "n" (strcat (rtos entc 2 0) "@" (itoa BT) "=<>") DIM "")
)
(if (= (equal sodu 0.00000001 0.01) nil) (alert "\n Hay xem lai kich thuoc can than, kich thuoc bi sai"))
)
(setvar "dimzin" od)
(princ)
)
-Và đây là file cad:http://www.cadviet.com/upfiles/1_11.dwg

Chào bạn minhtu2004,
Chào bác Tue_NV,
Cái đoạn code mình post trên đây hoàn toàn không nhằm mục tiêu sửa cái sai lệch nhỏ do chế độ bắt điểm của CAD mà là để giải quyết cái ý tưởng kiểm tra và thông báo lỗi khi chia có dư của bạn Minhtu2004, tuy nhiên do mình định hướng là không chỉ báo lỗi rồi thoát ra như bạn Minhtu 2004 đề nghị mà mình muốn lisp sẽ yêu cầu người dùng nhập lại giá trị đúng nên mới post cái ý tưởng đó lên để bạn minhtu 2004 suy nghĩ và hoàn thiện nó. Tuy nhiên do bạn Minhtu hiểu chưa đúng nên dã bổ sung nó vào trong vòng lặp While, không những vậy bạn Minhtu 2004 còn chép chưa đầy đủ nên thiếu đi các dấu ngoặc cần thiết nên lisp của bạn đó sửa không chạy được.
Thực ra đoạn code đó mình định bổ sung vào trước vòng lặp While của bạn Minhtu 2004 và còn phải đưa thêm một vòng lặp while nữa để cho lisp lặp cho tới khi người dùng nhập giá trị phù hợp. Khi đó mới bắt đầu thực hiện vòng lặp While của bạn Minhtu 2004.
Về ý tưởng này có khác một chút với cái lisp của bác Tue_NV đã viết đúng theo yêu cầu của bạn Minhtu 2004.
Chính vì có chỗ khác này nên mình mới post thử để bạn Minhtu 2004 xem có phù hợp không vì mình nghĩ nếu làm như vậy sẽ tốt hơn cho người dùng vì không phải chạy lại lisp nhiều lần khi chót nhập sai giá trị của biến bước BT.
Nếu bạn Minhtu 2004 thấy đồng ý thì mình sẽ hoàn thiện nó theo hướng này.

Về cái sai lệch nhỏ do chế độ bắt điểm này, theo mình nghĩ hoàn toàn có thể khắc phục đơn giản bằng cách lấy lại giá trị của biến ENT là được mà. Thay vì biến ENT được lấy là giá trị của hàm (cdr (assoc 42 (entget DIM))) ta có thể lấy nó là giá trị của hàm (rtos (cdr (assoc 42 (entget DIM))) ......). Khi đó ta hoàn toàn có thể xác định được độ chính xác cần thiết của biến ENT mà không còn phụ thuộc gì vào chế độ bắt điểm của CAD nữa. Cuối cùng ta dùng hàm atof để chuyển chuỗi kết quả của biến ENT này thành biến số thực ENT theo mong muốn của người dùng. Công đoạn tiếp theo vẫn y như cụ.
Bác Tue_NV và bạn Minhtu 2004 hãy thử suy nghĩ theo hướng này xem nhé.

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

#1943 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 05 May 2009 - 11:30 PM

Chào bạn minhtu2004,
Chào bác Tue_NV,
Về ý tưởng này có khác một chút với cái lisp của bác Tue_NV đã viết đúng theo yêu cầu của bạn Minhtu 2004.
Chính vì có chỗ khác này nên mình mới post thử để bạn Minhtu 2004 xem có phù hợp không vì mình nghĩ nếu làm như vậy sẽ tốt hơn cho người dùng vì không phải chạy lại lisp nhiều lần khi chót nhập sai giá trị của biến bước BT.
Nếu bạn Minhtu 2004 thấy đồng ý thì mình sẽ hoàn thiện nó theo hướng này.

Về cái sai lệch nhỏ do chế độ bắt điểm này, theo mình nghĩ hoàn toàn có thể khắc phục đơn giản bằng cách lấy lại giá trị của biến ENT là được mà. Thay vì biến ENT được lấy là giá trị của hàm (cdr (assoc 42 (entget DIM))) ta có thể lấy nó là giá trị của hàm (rtos (cdr (assoc 42 (entget DIM))) ......). Khi đó ta hoàn toàn có thể xác định được độ chính xác cần thiết của biến ENT mà không còn phụ thuộc gì vào chế độ bắt điểm của CAD nữa. Cuối cùng ta dùng hàm atof để chuyển chuỗi kết quả của biến ENT này thành biến số thực ENT theo mong muốn của người dùng. Công đoạn tiếp theo vẫn y như cụ.
Bác Tue_NV và bạn Minhtu 2004 hãy thử suy nghĩ theo hướng này xem nhé.

Chúc thành công.

Chào bạn minhTu
Chào bác PhamThanhBinh :
Hoặc giải quyết theo cách trên và Tue_NV giải quyết theo cách của mình là sử dụng hàm Rnd(x).
Và theo ý bác PhamThanhBinh, Tue_NV đã hoàn thiện theo hướng là khi người dùng nhập sai bước BT thì cho phép nhập lại
;
(defun rnd(x);;;Round x, return INT
(if (>= x 0) (fix (+ x 0.5)) (fix (- x 0.5)))
)
;
(DEFUN C:BU()
(setq od (getvar "dimzin"))
(setvar "dimzin" 0)
(setq
BT (getint "\n Buoc @:")
)
(while (setq
DIM (car(entsel "\n Chon kich thuoc dim:"))
ENT (rnd (cdr(assoc 42 (entget DIM))))
entc (/ ENT BT)
sodu (rem ent BT)
)
(if (= sodu 0)
(command "dimedit" "n" (strcat (rtos entc 2 0) "@" (itoa BT) "=<>") DIM "")
)
(if (/= sodu 0)
(Progn
(alert "\n phep chia co du")
(if (not BTo) (setq BTo BT))
(setq BT (getint (strcat "\n Buoc @ <" (itoa BTo) "> :")))
(if (not BT) (setq BT BTo) (setq BTo BT))
)
)
)
(setvar "dimzin" od)
(princ)

)
Bạn Minh Tu sử dụng và cho biết ý kiến nhé. Hy vọng bạn hài lòng
  • 2

#1944 minhtu2004

minhtu2004

    biết lệnh chamfer

  • Members
  • PipPipPipPip
  • 219 Bài viết
Điểm đánh giá: 34 (tàm tạm)

Đã gửi 06 May 2009 - 07:37 AM

Cám ơn bạn Tue_NV, mình rất hài lòng đọan code bạn thêm vô cho mình và đã giải quyết được vấn đề. Mình cũng cám ơn bạn Thanh Bình đã gợi ý cho mình, vì mình mới viết lisp để hỗ trợ cho công việc và cũng mới bắt đầu học nên mình sẽ tự viết 1 lisp khác theo ý của bạn Thanh Bình để hiểu rõ thêm vấn đề, nếu có thắc mắc mình sẽ hỏi 2 bạn. Mong 2 bạn giúp đỡ, cám ơn 2 bạn nhiều.
  • 0

-Nhận thực hiện bản vẽ 3D bằng revit.
-Liên hệ: 01664793290.


#1945 minhtu2004

minhtu2004

    biết lệnh chamfer

  • Members
  • PipPipPipPip
  • 219 Bài viết
Điểm đánh giá: 34 (tàm tạm)

Đã gửi 06 May 2009 - 07:38 AM

Cám ơn bạn Tue_NV, mình rất hài lòng đọan code bạn thêm vô cho mình và đã giải quyết được vấn đề. Mình cũng cám ơn bạn Thanh Bình đã gợi ý cho mình, vì mình mới viết lisp để hỗ trợ cho công việc và cũng mới bắt đầu học nên mình sẽ tự viết 1 lisp khác theo ý của bạn Thanh Bình để hiểu rõ thêm vấn đề, nếu có thắc mắc mình sẽ hỏi 2 bạn. Mong 2 bạn giúp đỡ, cám ơn 2 bạn nhiều.
Bạn Tue_NV ơi bạn có thể giải thích cho mình hiểu cái hàm tự tạo rnd và cái biến hệ thống assoc 42 ( biến hệ thống mình có thể tham khảo ở đâu vậy), thank.
  • 0

-Nhận thực hiện bản vẽ 3D bằng revit.
-Liên hệ: 01664793290.


#1946 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 06 May 2009 - 08:21 PM

Cám ơn bạn Tue_NV, mình rất hài lòng đọan code bạn thêm vô cho mình và đã giải quyết được vấn đề. Mình cũng cám ơn bạn Thanh Bình đã gợi ý cho mình, vì mình mới viết lisp để hỗ trợ cho công việc và cũng mới bắt đầu học nên mình sẽ tự viết 1 lisp khác theo ý của bạn Thanh Bình để hiểu rõ thêm vấn đề, nếu có thắc mắc mình sẽ hỏi 2 bạn. Mong 2 bạn giúp đỡ, cám ơn 2 bạn nhiều.
Bạn Tue_NV ơi bạn có thể giải thích cho mình hiểu cái hàm tự tạo rnd và cái biến hệ thống assoc 42 ( biến hệ thống mình có thể tham khảo ở đâu vậy), thank.

Vấn đề của bạn dđuwọc Tue_NV giải quyết triệt để, cho phép Tue_NV được dừng chủ đề của bạn tại đây. Vì Topic này là "Viết Lisp theo yêu cầu" nên bạn muốn hỏi vấn đề gì thì sang đây hỏi cho thoải mái và bàn luận luôn ở đây nhé :Hỏi về Lisp, xin chỉ giúp
TB : Những vấn đề của bạn có thể tham khảo trong Cuốn Help Developer của CAD.
Chào bạn Chúc bạn luôn vui vẻ
  • 1

#1947 ngocthinh84

ngocthinh84

    biết vẽ line

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

Đã gửi 08 May 2009 - 07:56 AM

trước đây mình thấy 1 số máy dưới thanh coords của cad nó kô hiện lên tọa độ của con trỏ mà chỉ hiển thị tên người dùng. kô biết là làm như thế nào? mình đã thử mà kô được.ai biết chỉ mình với.cảm ơn nha
  • 0

#1948 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 08 May 2009 - 08:04 AM

trước đây mình thấy 1 số máy dưới thanh coords của cad nó kô hiện lên tọa độ của con trỏ mà chỉ hiển thị tên người dùng. kô biết là làm như thế nào? mình đã thử mà kô được.ai biết chỉ mình với.cảm ơn nha

Thiết lập tên cho biến Modemacro :
Command: modemacro

Enter new value for MODEMACRO, or . for none <"1 mm = 100 drawing units">: CADVIET : gõ CADVIET
Lập tức tên CADVIET hiện dưới thanh coords của cad
  • 2

#1949 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1359 (rất tốt)

Đã gửi 08 May 2009 - 08:07 AM

trước đây mình thấy 1 số máy dưới thanh coords của cad nó kô hiện lên tọa độ của con trỏ mà chỉ hiển thị tên người dùng. kô biết là làm như thế nào? mình đã thử mà kô được.ai biết chỉ mình với.cảm ơn nha

-Bạn gỏ MODEMACRO enter xong gỏ nội dung muốn hiển thị vào là ok.
-Dùng lisp: bạn lưu dòng này vào file lisp cho nó loa tự động.
(setvar "MODEMACRO" "nội dung")
  • 2

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#1950 nataca

nataca

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 712 Bài viết
Điểm đánh giá: 553 (tốt)

Đã gửi 08 May 2009 - 08:14 AM

trước đây mình thấy 1 số máy dưới thanh coords của cad nó kô hiện lên tọa độ của con trỏ mà chỉ hiển thị tên người dùng. kô biết là làm như thế nào? mình đã thử mà kô được.ai biết chỉ mình với.cảm ơn nha

Bạn thử đánh lệnh MODEMACRO xem sao. Nếu nó ra kết quả là 1 chuỗi tên giống như hiển thị ở góc trái thì bạn thử nhập lại cho nó thành chuỗi rỗng "". Nếu vẫn không được thì bạn xem lại trong file lisp nào đó bạn tự load có dòng gán chuỗi cho biến MODEMACRO không.
  • 2

#1951 minhtu2004

minhtu2004

    biết lệnh chamfer

  • Members
  • PipPipPipPip
  • 219 Bài viết
Điểm đánh giá: 34 (tàm tạm)

Đã gửi 08 May 2009 - 09:50 AM

-Mình viết đọan code này hok biết sai ở đâu và dùng hàm gì để lấy được chữ trong hộp DCL. Xin giúp đỡ và sửa dùm.
NB : dialog{
label = "Thu";
:popup_list{
label = "Chon";
list = "Atama \nNegarami";
value = 0;
edit_width = 30;
key = "btn";
}
ok_cancel;
}
Đây là đọan lisp:
(defun SaveVars()
(setq LE(get_tile "btn"))
)
(defun c:tu()
(setq dcl_id (load_dialog "tmp.dcl"))
(new_dialog "NB" dcl_id)
(action_tile "cancel" "(done_dialog)")
(action_tile "accept" "(saveVars)(done_dialog)")
(start_dialog)
(unload_dialog dcl_id)
(setq PT1(getpoint "\n Chon diem thu 1:")
PT2(getpoint PT1"\n Chon diem thu 2:")
)
(command "leader" PT1 PT2 "A" LE "")
(princ)
)
  • 0

-Nhận thực hiện bản vẽ 3D bằng revit.
-Liên hệ: 01664793290.


#1952 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 08 May 2009 - 06:59 PM

-Mình viết đọan code này hok biết sai ở đâu và dùng hàm gì để lấy được chữ trong hộp DCL. Xin giúp đỡ và sửa dùm.
NB : dialog{
label = "Thu";
:popup_list{
label = "Chon";
list = "Atama \nNegarami";
value = 0;
edit_width = 30;
key = "btn";
}
ok_cancel;
}
Đây là đọan lisp:
(defun SaveVars()
(setq LE(get_tile "btn"))
)
(defun c:tu()
(setq dcl_id (load_dialog "tmp.dcl"))
(new_dialog "NB" dcl_id)
(action_tile "cancel" "(done_dialog)")
(action_tile "accept" "(saveVars)(done_dialog)")
(start_dialog)
(unload_dialog dcl_id)
(setq PT1(getpoint "\n Chon diem thu 1:")
PT2(getpoint PT1"\n Chon diem thu 2:")
)
(command "leader" PT1 PT2 "A" LE "")
(princ)
)

Chào bạn Minhtu2004,
Mình đã trả lời bài viết của bạn trong topic hỏi về líp rồi. Bạn nên rút kinh nghiệm, không nên pót cùng một câu hỏi, cùng một nội dung trên nhiều topic thế này. Đây là một quy định của diễn đàn, rất mong bạn lưu ý và tôn trọng quy định này, tránh làm phiền mọi người trên diễn đàn bạn nhé.
Cám ơn bạn.
  • 2
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1953 ngocthinh84

ngocthinh84

    biết vẽ line

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

Đã gửi 09 May 2009 - 07:38 AM

đúng là nó có hiện thật nhưng mà vẫn có dòng toạ độ bên cạnh bạn ạ.thank nhiều nha
  • 0

#1954 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 09 May 2009 - 09:01 AM

đúng là nó có hiện thật nhưng mà vẫn có dòng toạ độ bên cạnh bạn ạ.thank nhiều nha

Bạn kích chuột phải vào thanh coords của cad ( Vùng màu xám bên tay phải chữ Model) -> Hiện lên me nu xổ lên -> Bỏ dấu tick Cursor coordinate Value (F6) là được
  • 3

#1955 cavoitrang_11

cavoitrang_11

    biết zoom

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

Đã gửi 09 May 2009 - 11:02 AM

Tôi có cái này lệnh là MAW tác dụng với PL ;line ;ARC chỉ cần chọn pl có độ rộng làm chuẩn sau đó chọn các đối tượng khác.



(DEFUN C:MAW(/ SSET NET SSL M)
(prompt "\nChon PLINE mau.")
(setq DTD (car (entsel)))
(setq DT (entget DTD))
(setq NDT (cdr (assoc 40 DT)))
(Princ "\nHay chon cac doi tuong muon chinh :")
(Setq sset (Ssget))

(if (Null sset)
(princ "\nKhong chon duoc doi tuong nao")
)

(IF (/= NIL SSET) (PROGN
(SETQ SSL (SSLENGTH SSET))
(INITGET 4)
;(SETQ NDT (GETREAL "\nNhap do rong : "))
(IF (/= NIL NDT)
(WHILE (> SSL 0)
(SETQ M (SSNAME SSET (SETQ SSL (- SSL 1)) ))
(IF (= (CDR (ASSOC '0 (ENTGET M))) "LINE")
(COMMAND "PEDIT" M "Y" "W" NDT "")
)

(IF (= (CDR (ASSOC '0 (ENTGET M))) "LWPOLYLINE")
(COMMAND "PEDIT" M "W" NDT "")
)

(IF (= (CDR (ASSOC '0 (ENTGET M))) "ARC")
(COMMAND "PEDIT" M "Y" "W" NDT "")
)


)
)))
(PRINC)
)

Bác cho em hỏi báo lỗi "; error: bad character read (octal): 0" là do đâu, cám ơn bác!!!
  • 0

#1956 nataca

nataca

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 712 Bài viết
Điểm đánh giá: 553 (tốt)

Đã gửi 09 May 2009 - 11:07 AM

Bác cho em hỏi báo lỗi "; error: bad character read (octal): 0" là do đâu, cám ơn bác!!!

Là lỗi do đọc file lisp của bạn bị lỗi. Bạn xoá file lisp đó đi. Copy lại code này để làm 1 file lisp mới xem sao :(
  • 0

#1957 ToTo08

ToTo08

    biết vẽ line

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

Đã gửi 09 May 2009 - 11:14 AM

Mình cần 1 lisp nối các đoạn thẳng, đoạn cong lại với nhau, mong mọi người giúp đỡ.
  • 0

#1958 nataca

nataca

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 712 Bài viết
Điểm đánh giá: 553 (tốt)

Đã gửi 09 May 2009 - 11:46 AM

Mình cần 1 lisp nối các đoạn thẳng, đoạn cong lại với nhau, mong mọi người giúp đỡ.

Cái này nói nhiều trên diễn đàn rồi. Bạn có thể tìm thêm. Riêng Spline thì hơi đặc biệt nên bạn phải biến nó thành pline trước đã .
  • 0

#1959 haanh

haanh

    biết lệnh adcenter

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

Đã gửi 09 May 2009 - 12:15 PM

Mình cần 1 lisp nối các đoạn thẳng, đoạn cong lại với nhau, mong mọi người giúp đỡ.

nối các line, arc, lwpolyline không chạm nhau, bằng tính năng mới của lệnh pline
http://www.cadviet.c...p?showtopic=507


làm sao để chuyển đổi đường Spline thành Pline
http://www.cadviet.c...?showtopic=5056

Nối đường spline
http://www.cadviet.c...showtopic=10242
  • 2

“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...”


#1960 vanlinhmt

vanlinhmt

    Chưa sử dụng CAD

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

Đã gửi 09 May 2009 - 07:16 PM

Trước tiên em vô cùng cảm ơn anh hoành đã mở topic này. Nhờ nó mà em và mọi người đã có nhiều lisp hay giúp công việc được thực hiện nhanh hơn. Em có vấn đề cần như sau :
Trong đây có lisp copy thông minh tuy nhiên em muốn hỏi làm sao để thay thế bước nhảy của việc copy vì đôi khi em không muốn 1->2->3 VD em muốn bước 1->1.2->1.4... thì phải thay đổi như thế nào anh có thể giúp em sửa đổi để có thể chọn bước nhảy trước khi copy không? Em xin cảm ơn!!
  • 0