Trong phần này, chúng ta sẽ làm quen với Macro Script. Đây là một loại script đặc biệt, dùng để tạo ra ActionItem trong Customize User Interface của 3ds Max. Từ đó, chúng ta có thể gán phím tắt, tạo nút bấm, hay thêm lệnh vào menu chuột phải cho script.
Ở trong phần trước, chúng ta đã biết một cách tự động tạo ra Macro Script, đó là kéo thả code vào thanh công cụ của 3ds Max. Tuy nhiên, nhược điểm của chúng là không tùy chỉnh được tên script và tên category. Mặc định nó sẽ có luôn có tên là MacroX trong DragAndDrop category.
Bây giờ, chúng ta sẽ học cách định nghĩa các thuộc tính trên chi tiết hơn, giúp tăng độ nhận diện cho script của bạn, và có thể dễ dàng chia sẻ với người khác. Hãy mở 3ds Max, setup góc làm việc và bắt đầu cùng tôi tạo ra Macro Script đầu tiên của riêng mình.
MỤC LỤC
Bắt đầu tạo một Macro Script
Cấu trúc cơ bản của 1 một script như sau:
macroScript <name> [category:<string>] [buttontext:<string>] [tooltip:<string>] ( -- code của bạn ở đây... )
Bạn thấy nó có giống với thứ gì đó chúng ta đã học không? Đúng, đây chính là một dạng function (hàm) đặc biệt của 3ds Max mà chúng ta đã cùng thảo luận ở phần 3. Function này dùng để định nghĩa một Macro Script. Các từ khóa trong ngoặc vuông chính là tùy chọn của nó.
Sau khi chạy, nó sẽ tạo ra một lệnh mới có tên theo [tooltip], nằm trong thư mục [category]. Khi kéo thả lệnh này ra ngoài thanh công cụ, nó sẽ có tên là [buttontext]. Lệnh này cũng sẽ tạo ra một file mcr có cấu trúc tên là [category]-[name].mcr trong thư mục usermacros của 3ds Max tại đường dẫn sau:
AppData\Local\Autodesk\3dsMax\202x - 64bit\ENU\usermacros
Hãy thử xem xét ví dụ phía dưới.
macroscript helloMacro category:"D95 DESIGN" tooltip:"Hello Macro" buttontext:"H.M" ( messageBox "Hello, macro!" )
Dù code của chúng ta có lệnh messageBox, nhưng thực tế sau khi thực thi nó, không có gì xảy ra trong 3ds Max. Lý do là bởi toàn bộ code nằm trong function macroScript. Nó sẽ chỉ làm công việc định nghĩa một Macro Script, chứ không thực sự chạy các lệnh trong đó.
Macro Script trong Customize User Interface
Sau khi thực thi (execute) macroscript phía trên, hãy vào Customize User Interface > Toolbar để kiểm tra. Chọn category là D95 DESIGN hoặc bất kỳ tên gọi nào mà bạn đã đặt.
Bạn sẽ thấy Hello Macro nằm trong danh sách lệnh phía dưới (3). Kéo thả nút bấm này ra thanh công cụ của 3ds Max, nó mặc định có tên là H.M như chúng ta đã quy định với buttonText. Hãy bấm vào nút H.M này, cửa sổ thông báo “Hello, macro!” sẽ hiện ra.
Vậy tức là những gì bạn viết trong dấu ngoặc sẽ chỉ được thực thi khi bạn bấm nút H.M. Điều này tương tự với các ActionItem khác, bao gồm nút tắt Hotkey hay menu chuột phải Quads.
Chúc mừng, bạn vừa tạo xong Macro Script đầu tiên. Hãy thử chỉnh sửa nó theo ý bạn.
Cách gỡ bỏ một Macro Script
Vào thư mục usermacros của 3ds Max mà tôi có để đường dẫn ở phía trên. Lúc này, sẽ có 1 file mới xuất hiện, đó là D95 DESIGN-helloMacro.mcr. Đây chính là file macro được tự động tạo ra sau khi bạn thực thi (execute) Macro Script phía trên. Nó cũng sẽ tự load vào 3ds Max mỗi lần bạn khởi động phần mềm.
Bạn có thể xóa macro này để gỡ nó khỏi Customize User Interface của 3ds Max. Lần khởi động phần mềm tiếp theo, lệnh Hello Macro sẽ không còn xuất hiện.
Định dạng của Macro Script
Để ý rằng, khi tải script trên mạng, nếu script có đuôi là .ms, thì macroscript sẽ thường có đuôi là .mcr. Nhưng thực tế, không phải lúc nào cũng như vậy. Một vài tác giả vẫn phát hành Macro Script của họ dưới định dạng .ms, và mọi thứ vẫn sẽ hoạt động bình thường, bởi macroScript cũng chỉ là một dạng function trong 3ds Max. Tuy nhiên, theo tôi, chúng ta nên lưu file đúng định dạng, để tránh gây nhầm lẫn cho người dùng.
Hãy quay lại cửa sổ MAXScript Editor với macroscript helloMacro mà chúng ta vừa viết vừa xong. Bấm Ctrl + S để mở cửa sổ Save File. Đặt tên cho nó là Hello_Macro.mcr, sau đó lưu ra ngoài desktop.
File Hello_Macro.mcr bây giờ có thể coi là một “bộ cài đặt” hoàn chỉnh mà bạn có thể chia sẻ với người khác. Khi người dùng khác kéo thả file Hello_Macro.mcr này vào trong 3ds Max, lệnh Hello Macro sẽ xuất hiện trong Customize User Interface. Họ có thể kéo thả lệnh này ra thanh toolbar, hoặc đặt phím tắt cho nó. Mỗi khi sử dụng, họ sẽ nhận được thông báo “Hello, macro!” tới từ bạn.
Macro Script để mở một Script khác
Khi bạn tải một script từ internet có định dạng là .ms hay .mse, nó thường sẽ chỉ chạy 1 lần duy nhất mỗi lần bạn kéo thả vào trong 3ds Max. Vì thế, mỗi lần sử dụng nó, bạn sẽ cần kéo thả một lần nữa vào 3ds Max. Điều này thực sự rất bất tiện. Để khắc phục, chúng ta có thể viết một macroscript chuyên để mở script khác.
Ở đây tôi sẽ ví dụ với script Object Randomizer. Script này có tác dụng để random vị trí và góc xoay của vật thể. Ở đây, tôi sẽ tạo ra một Macro Script để có thể đặt nút tắt hay làm nút bấm cho nó. Đầu tiên, tải file objectrandomizerv3.ms về máy tính. Sau đó tạo một Macro Script mẫu như sau:
macroscript objectRandomizer category:"D95 DESIGN" tooltip:"Object Randomizer" buttontext:"O.R" ( )
Bạn có thể đổi category, tooltip và buttontext tùy theo ý thích của mình. Tên macroscript nên là một cái tên khó “đụng hàng”, tuyệt đối không dùng những tên dễ trùng như macro1, macro2. Vì nếu trùng tên, nó sẽ định nghĩa lại các macro mà bạn đã tạo ra trước đó. Ở đây tôi đang để là objectRandomizer.
Tiếp theo, chúng ta sẽ dùng lệnh fileIn của MAXScript để mở Object Randomizer. Lệnh fileIn có tác dụng giống việc kéo thả file vào trong 3ds Max. Việc chúng ta cần làm là dẫn tới file objectrandomizerv3.ms phía trên. Macro sẽ trông như sau:
macroscript objectRandomizer category:"D95 DESIGN" tooltip:"Object Randomizer" buttontext:"O.R" ( fileIn "D:\objectrandomizerv3.ms" )
Trong đó “D:\objectrandomizerv3.ms” chính là đường dẫn tới file vừa tải về. Hãy thay dòng này bằng đường dẫn trên máy bạn, nhớ là để chúng trong ngoặc kép. Thực thi (execute) macro này, lệnh Object Randomizer sẽ xuất hiện trong Customize User Interface.
Biến một script trở thành một Macro Script
Cách trên tuy đơn giản, hiệu quả, tuy nhiên bạn sẽ không thể chia sẻ thuận tiện được với bạn bè được, vì họ sẽ phải chỉnh sửa lại đường dẫn thủ công. Với những script gọn nhẹ như vậy, có một cách khác là trực tiếp biến những script này thành một Macro Script.
Trong MAXScript Editor, hãy mở file objectrandomizerv3.ms bạn vừa tải về. Bấm Ctrl + A để chọn toàn bộ, bấm copy, sau đó quay lại Macro Script chúng ta vừa tạo vừa rồi, và bấm paste vào giữa 2 dấu ngoặc. Macro sẽ trông như sau:
macroscript objectRandomizer category:"D95 DESIGN" tooltip:"Object Randomizer" buttontext:"O.R" ( rollout rlObjectRandomizer " Object Randomizer" ..... (khoảng 100 dòng)..... createDialog rlObjectRandomizer 265 272 style:#(#style_SysMenu, #style_ToolWindow) )
Xong. Hãy chạy thử macroscript này, nó sẽ có tác dụng tương tự với Macro Script chúng ta vừa làm phía trên. Lưu nó lại thành file objectrandomizerv3.mcr, và bạn có thể sẵn sàng chia sẻ nó với mọi người.
Bài tập ứng dụng
Nếu đã hoàn thành bài tập phần 4, chúng ta đã có được một script có giao diện gồm nhiều nút bấm, mỗi nút bấm sẽ xoay vật thể đang chọn sang một góc khác nhau. Hãy biến script này trở thành một Macro Script hoàn chỉnh. Sau đó chia sẻ nó với bạn bè và đồng nghiệp, để giúp họ tiết kiệm thời gian khi xoay các vật thể. Nhớ điền một biệt danh thật ngầu của bạn vào trong phần category của Macro Script để khiến mọi người nhớ tới bạn nhé.
Chúc các bạn thành công!