• Trang Chủ
  • Kiến Trúc
  • Nội Thất
  • Đồ Họa
  • Phần Mềm
  • Tài Liệu
  • Giải Trí
  • Khác
No Result
View All Result
  • Trang Chủ
  • Kiến Trúc
  • Nội Thất
  • Đồ Họa
  • Phần Mềm
  • Tài Liệu
  • Giải Trí
  • Khác
No Result
View All Result
Đặng Tiến Dũng
No Result
View All Result

MAXScript cơ bản cho người mới – phần 2

15/12/2023
in Phần Mềm
Reading Time: 7 mins read

Trong phần trước, chúng ta đã xuất bản được một script cơ bản nhất. Những script như vậy chỉ thực thi một lần duy nhất trong 3ds Max. Khi muốn sử dụng lại, chúng ta sẽ lại phải mở thủ công bằng Scripting > Open Script, hoặc lại kéo thả file script vào viewport.

Trong phần này, chúng ta sẽ học cách tạo giao diện người dùng cho script, để nó có thể thực thi lệnh nhiều lần trước khi kết thúc. Nút bấm, danh sách, thanh trượt,…, cũng sẽ giúp người dùng có nhiều lựa chọn hơn khi sử dụng script.

Đầu tiên, mở 3ds Max lên và setup lại giao diện làm việc như lần trước.

Nhớ là luôn mở Listener để theo dõi kết quả trả về.

Nhập vào của sổ Editor như sau. Nhớ là nhập bằng tay nhé.

delete selection

Bạn sẽ thấy rằng chữ delete được tự động chuyển thành màu xanh và selection chuyển thành màu cam. Những màu sắc này thể hiện rằng những từ khóa này là biến và tính năng có sẵn trong 3ds Max. Ở đây, selection cũng có thể được viết tắt bằng ký hiệu $ (đồng đô-la). Khi bắt đầu, chúng ta vẫn nên cứ viết chúng là selection để dễ đọc hơn.

Dòng lệnh này ở đây có nghĩa giống hệt nghĩa đen của nó: xóa những gì đang chọn. Đây là ưu điểm lớn nhất của MAXScript, vì nó rất gần với văn viết bình thường. Việc chúng ta cần làm chỉ là học các từ vựng có sẵn. Tất nhiên, giống như mọi ngôn ngữ khác, điều này sẽ cần thời gian, đừng sốt ruột, rồi bạn sẽ dần dần học hết chúng.

Thử chọn một vài vật thể, sau đó click vào cửa sổ Editor và chạy Tools > Evaluate All (nút tắt Ctrl + E). Những gì chúng ta vừa chọn đã bị xóa đi. Chúng ta vừa viết được tính năng Delete có sẵn của 3ds Max. Bây giờ việc cần làm là tạo một giao diện cho nó.

Xóa dòng delete selection vừa viết khỏi Editor, và nhập vào dòng lệnh sau.

rollout xoaVatThe "Xoa Vat The"
(
)
createDialog xoaVatThe 150 150

Evalute All (nút tắt Ctrl + E). Bạn sẽ thấy một cửa sổ có tên là Xoa Vat The sẽ hiển thị trên viewport của 3ds Max. Tuyệt vời, đây là giao diện người dùng đầu tiên bạn tạo được. Hãy ghi nhớ những dòng lệnh phía trên. Nó là mẫu cơ bản và hay dùng nhất để tạo ra một giao diện người dùng (rollout user interface).

Kích thước 150×150 không bao gồm thanh tiêu đề.

Để ý rằng phía sau lệnh rollout, chúng ta có dấu mở ngoặc và đóng ngoặc. Các thiết kế giao diện, và tính năng của script sẽ được đặt trong hai dấu ngoặc này. Lệnh createDialog sẽ biến rollout thành một dialog (bảng) hiển thị trên viewport của 3ds Max. Chuỗi số 150 150 phía sau chính là kích thước chiều rộng và chiều cao của dialog.

Thử đổi con số này thành 150 300 và evalute lại đoạn code của chúng ta trong Editor. Một cửa sổ mới sẽ hiện ra với kích thước lớn hơn cửa sổ cũ. Nhưng bạn có để ý rằng trên viewport của 3ds Max đang có 2 cửa sổ Xoa Vat The cùng một lúc không?

Điều này xảy ra là vì chúng ta chưa đóng lại bảng Xoa Vat The cũ. Người dùng có thể tạo ra hàng trăm cửa sổ Xoa Vat The trên màn hình với code hiện tại. Để khắc phục, thêm dòng lệnh sau vào đầu script.

destroyDialog xoaVatThe

Lệnh destroyDialog là lệnh ngược lại với createDialog. Giờ chạy lại script (Evaluate All). Cửa sổ Xoa Vat The cũ sẽ được đóng lại trước khi tạo ra cửa sổ mới. Điều này đảm bảo trên viewport 3ds Max sẽ chỉ luôn có 1 cửa sổ Xoa Vat The duy nhất.

Bây giờ bạn hãy lưu script này, thử khởi động lại 3ds Max và chạy lại script. Vài dòng chữ đỏ thông báo lỗi sẽ hiện ra ở Listener. Vì sao lần này lại có lỗi? Chuyện gì đã xảy ra?

Listener báo lỗi khi chạy script lần đầu tiên trong 3ds Max.

Ở phiên làm việc trước, chúng ta đã khai báo về rollout xoaVatThe. Định nghĩa này nằm trong bộ nhớ của 3ds Max, vì thế khi thêm lệnh destroyDialog, script vẫn hợp lệ. Tuy nhiên, ngay sau khi khởi động lại 3ds Max, định nghĩa xoaVatThe chưa có trong 3ds Max. Lệnh xóa dialog trở thành không hợp lệ, vì khai báo định nghĩa về biến xoaVatThe lại nằm sau lệnh destroyDialog.

Để khắc phục điều này, chúng ta sẽ sửa code thành như sau:

try destroyDialog xoaVatThe catch()

Cặp lệnh try … catch() có nghĩa là thử chạy lệnh …, nếu không được thì những lệnh trong cặp dấu mở ngoặc sau chữ catch sẽ được chạy. Ở đây, chúng ta không viết gì vào trong dấu đóng mở ngoặc này, nên lệnh phía trên có thể dịch thành: thử đóng cửa sổ xoaVatThe, nếu không được thì thôi, không làm gì cả. Lệnh này sẽ ngăn Listener báo lỗi khi chạy script khi mở lần đầu.

Bây giờ chúng ta sẽ tạo một nút bấm cho nó, và gán lệnh delete selection ở đầu bài viết vào nút bấm này. Hãy thêm dòng sau vào giữa hai dấu ngoặc sau rollout:

button nutXoa "Xoa"

Evaluate lại script. Một nút bấm nhỏ xinh sẽ hiển thị trên dialog của chúng ta. Chúng ta vừa định nghĩa một nút bấm có tên trong script là nutXoa, tên hiển thị trong dialog là Xoa.

Nút “Xoa” xuất hiện trong giao diện của script.

Hiện tại, bấm vào nút này sẽ không có tác dụng vì chúng ta chưa gán bất kỳ lệnh nào cho nó. Thêm dòng sau vào ngay phía dưới (lưu ý là vẫn trong dấu dóng mở ngoặc của rollout):

on nutXoa pressed do delete selection

Tương tự, chúng ta có thể dễ dàng hiểu được ý nghĩa của câu này: khi (on) nutXoa được bấm (pressed) thì (do) xóa những vật thể đang chọn (delete selection). Hãy evaluate lại script và thử công dụng của nó. Chọn một vật thể và bấm vào nút Xoa. Kỳ diệu phải không, bạn đã làm nút bấm đầu tiên hoạt động!

Bây giờ, tôi muốn hiển thị một thông báo sau khi xóa vật thể. Bạn còn nhớ lệnh messageBox ở trong bài trước chứ, chúng ta sẽ dùng lệnh này để tạo ra thông báo trên màn hình.

Chỉnh sửa câu lệnh phía trên thành:

on nutXoa pressed do
(
 delete selection
 messageBox "Ban vua xoa cac vat the dang chon!"
)

Giống như rollout, chúng ta sẽ “đóng gói” các nội dung sẽ chạy sau khi bấm nutXoa bằng dấu đóng mở ngoặc. Ở đây bạn có thể thêm bao nhiêu lệnh tùy thích. Các lệnh sẽ phân biệt với nhau bởi dấu xuống dòng. Hãy chạy lại script. Chọn một vật thể vào bấm nút Xoa. Script sẽ xóa vật thể đó và hiển thị thông báo như hình.

Sau khi bấm nút, script sẽ xóa các vật thể đang chọn và kèm theo thông báo sau khi xóa xong.

Xin chúc mừng! Bạn đã tạo ra script có giao diện đầu tiên của riêng mình. Đây cũng là cách làm thường dùng nhất khi tạo giao diện, vì thế hãy ghi nhớ nó cẩn thận mẫu phía dưới. Bạn cũng có thể thử thêm các nút bấm với thông báo khác nhau.

try destroyDialog myScript catch()
rollout myScript "My Script"
( 
) 
createDialog myScript 100 100

Bài học đến đây là hết. Hẹn gặp các bạn ở phần tiếp theo.

 

Bài Viết Liên Quan

Thư viện SketchUp Trung Quốc
Phần Mềm

Thư viện SketchUp Trung Quốc

17/06/2025
99
Vì sao SketchUp lại thích hợp cho concept?
Phần Mềm

Vì sao SketchUp lại thích hợp cho concept?

20/05/2025
69
Incremental Saves trong SketchUp
Phần Mềm

Incremental Saves trong SketchUp

28/04/2025
91

Trả lời Hủy

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Nhiều lượt xem

Tổng hợp lisp nhỏ cho AutoCAD

Tổng hợp lisp nhỏ cho AutoCAD

17/05/2024
12.6k
Tổng hợp script nhỏ cho 3ds Max

Tổng hợp script nhỏ cho 3ds Max

27/02/2024
5.6k
Hiệu ứng phác thảo cho bản vẽ AutoCAD

Hiệu ứng phác thảo cho bản vẽ AutoCAD

19/03/2024
3.9k
Kiếm tiền từ bán model trên 3dsky

Kiếm tiền từ bán model trên 3dsky

25/03/2024
2.8k
Khắc phục lỗi AutoCAD bị treo khi sửa chữ

Khắc phục lỗi AutoCAD bị treo khi sửa chữ

15/02/2024
2.6k

Mới chỉnh sửa

Thư viện SketchUp Trung Quốc

Thư viện SketchUp Trung Quốc

17/06/2025
99
Tổng hợp thông tin về các script & plugin trên d95design.com

Tổng hợp thông tin về các script & plugin trên d95design.com

20/09/2024
1.4k
Phác thảo và vẽ tay

Phác thảo và vẽ tay

10/06/2025
33
Khoe hợp đồng

Khoe hợp đồng

30/05/2025
37
Luyện vẽ

Luyện vẽ

29/05/2025
30

Bài ngẫu nhiên

Máy tính mới

Máy tính mới

15/03/2024
235
5 lý do nên sử dụng bản vẽ dương bản

5 lý do nên sử dụng bản vẽ dương bản

09/12/2023
427
Các cách khắc phục lỗi 3ds Max không lưu cài đặt người dùng

Các cách khắc phục lỗi 3ds Max không lưu cài đặt người dùng

10/01/2024
412
Hướng dẫn sử dụng STB trong AutoCAD

Hướng dẫn sử dụng STB trong AutoCAD

19/06/2024
1.2k
Sửa lỗi GPU quá nhiệt khi sử dụng màn hình thứ 3

Sửa lỗi GPU quá nhiệt khi sử dụng màn hình thứ 3

31/01/2024
146

Bài mới nhất

Thư viện SketchUp Trung Quốc

Thư viện SketchUp Trung Quốc

17/06/2025
99
Phác thảo và vẽ tay

Phác thảo và vẽ tay

10/06/2025
33
Khoe hợp đồng

Khoe hợp đồng

30/05/2025
37
Luyện vẽ

Luyện vẽ

29/05/2025
30
Phác thảo bằng SketchUp

Phác thảo bằng SketchUp

20/05/2025
65
  • Giới thiệu
  • Cửa hàng
  • Facebook
  • Youtube
  • Liên hệ

Tổng số lượt truy cập: 79701  |  Hôm nay: 15  |  Hôm qua: 145

No Result
View All Result
  • Kiến Trúc
  • Nội Thất
  • Đồ Họa
  • Phần Mềm
  • Tài Liệu
  • Khác

Tổng số lượt truy cập: 79701  |  Hôm nay: 15  |  Hôm qua: 145