Титульная страница
ISO 9000 ISO 14000
GMP Consulting
 
Mastering 3D Studio MAX R3

Previous Table of Contents Next


We also used many functions. Since the rotation of the fingers will occur similarly in all fingers with three links, using functions makes the script easier and faster. We don’t need to repeat all the code everywhere; we just use the functions and define the correct parameters.

One interesting feature we added to the script is the Invert button. This allows the user to re-use this hand as a left or a right hand, or even to add some strange movements to the hand.

Feel free to modify this script and add other features.

Building Shortcut Menus

It’s true in MAX as it is in so many programs: shortcut menus are very useful. (In case you do not know, MAX’s shortcut menus are scripts.) Besides right-clicking an object, we can also Ctrl+right-click it, and a new menu will appear. This menu is called the Custom shortcut menu.

We can customize both shortcut menus, but let’s avoid working in the regular one. Let’s work with the Custom menu instead. To edit it, Ctrl+right-click any place in the screen and choose Customize Menu.

Shortcut menus are made of three parts: filters, menu items, and actions. The filters will be used to allow us to see different menu options depending on which object is selected. For instance, locate the Filter Functions and add:

fn anyoneselected = (selection.count > 0)

This filter will return true if there’s any object selected. If there isn’t, it will hide the menu lines associated with it.

Now let’s add some menu options. Under menuitem mi_isolate “Isolate Tools”, add and evaluate:

separator Sep_custom00 filter:anyoneselected
submenu “Render Properties ON” filter:anyoneselected
(
menuitem mi_renderable_on “Renderable”
menuitem mi_Cast_Shadows_on “Cast_Shadows”
menuitem mi_Receive_on “Receive Shadows”
menuitem mi_Inherit_on “Inherit Visibility”
separator sep_rend_prop
menuitem mi_All_on “All On”
)

We’ve created a horizontal line that will divide the shortcut menu in sections using SEPARATOR. (Some scripts use SEPERATOR; MAX allows this spelling.) Notice that this line has a filter, which makes the line appear only when there’s an object selected.

Next we created a submenu. The submenu opens another menu to the right with several options. This submenu is also filtered, so it only appears when at least one object is selected. Then we added the menu options, using MENUITEM. Notice we didn’t need to add a filter to them, because we already have filtered the submenu.

Let’s add the actions for these menus. Locate on mi_render picked and add the following code before it:

on mi_renderable_on picked do
(
for i in 1 to selection.count do selection[i].renderable = true
)
on mi_Cast_Shadows_on picked do
(
for i in 1 to selection.count do selection[i].castshadows = true
)
on mi_Receive_on picked do
(
for i in 1 to selection.count do selection[i].receiveshadows = true
)
on mi_inherit_on picked do
(
for i in 1 to selection.count do selection[i].inheritvisibility = true
)
on mi_All_on picked do
(
for i in 1 to selection.count do
(
selection[i].renderable = true
selection[i].castshadows = true
selection[i].receiveshadows = true
selection[i].inheritvisibility = true
)
)

These commands are the actions that are executed when the specified menu item is picked. Notice we always used for i in 1 to selection.count, since we do not know how many objects will be selected. This makes the script work in all situations. Doing this, we can add any property to the shortcut menu. Check the Rcmenu.ms file (the name stands for “right-click menu”) located in the stdplugs\scripts folder. It has many more options and commands. Make sure you save a backup file before editing them.

Summary

Adding a user interface to a script is essential to making it interactive and easy to use. This chapter laid out the most important techniques to include UIs with your scripts.

Make sure you have in mind all the features you want in your script before starting. Some people prefer to start from the UI, some prefer to start from the “engine” of the script (the actions). Do it the way you feel comfortable, but it will be easier to build the code if you think out the requirements first, creating a “storyboard” of the script the same way that moviemakers do.

In Chapter 16 you’ll learn how to use MAXScript with keyframes, controllers, and everything related to animation.


Previous Table of Contents Next

© 2000, Frol (selection, edition, publication)

 
Rambler's Top100