When I started mel scripting, I read a ton of forums that talked about how scriptjobs helped... but they never really explained how they worked. When i first tried to use a scriptjob... I crashed Maya. After some experimenting and reading up on details, i finally figured out how they work.
A scriptjob is a way to execute a procedure by doing another action, such as selecting an object or just if maya is sitting idle.
Example:
Lets say you want to write a script print the objects name and it's transform information by just selecting the object. First, lets write the procedure.
proc print_info(){
//Create an array and store whatever you have selected into it.
string $sel[] = `ls -sl`;
//For each object in your selection
for ($each in $sel){
//Get the name.
string $name = $each;
//Get the X,Y and Z transform value
string $x = `getAttr ($each + ".translateX")`;
string $y = `getAttr ($each + ".translateY")`;
string $z = `getAttr ($each + ".translateZ")`;
//print the name and transform data for the selected object
print ("You have selected " + $name + ".");
print ("It's transform information is " + $x + ", " + $y + ", " + $z + ".");
}
}
Now we need to setup a scriptjob to run this whenever you select an object. Add this line under the procedure. We will set an event to happen whenever a selection is changed.
int $jobID = `scriptJob -e "SelectionChanged" print_info`;
Now, execute the script. You will notice it will print:
"You have selected (object name here).It's transform information is (x), (y), (z)."
That is how a scriptjob works! Now you need to know how to turn it off, otherwise it could get annoying. If you noticed, i created an int variable for the scriptjob. This variable is the JobID. When you want to turn off the scriptjob, you need to find it's job ID. Then type a script like this:
scriptJob -k $jobID;
This will kill the scriptjob of that specific jobID number. If you want to turn off ALL scriptjobs, enter this:
scriptJob -ka;
This is very important because depending on how complicated the procedure, it will always be running. Whatif you accidently select 1000 objects? what if the procedure takes a couple of seconds per object? A scriptjob is a very powerful fucntion, but can cause maya to lag or even crash if you are not careful.
For more information on scriptJobs amd different events that you can use in a scriptJob, Click Here.
I find it difficult sometimes to find information for mel scripting out there. Not that it doesnt exist, but it is scattered all over the place and sometimes very difficult to understand. So I decided to start a blog to share what I know with everyone else and hopefully others will share some of their knowledge with readers. Please feel free to email me links, examples, questions, references, or whatever you have used to help you with your melscripting needs.
Popular Posts
-
Defining Variables Knowing how to define variables is the first thing you should learn if you want to start Mel Scripting. It is very basi...
-
For my first post, I though I'd show you how to do something I though was cool, a keyword search feature.
-
When I started mel scripting, I read a ton of forums that talked about how scriptjobs helped... but they never really explained how they wor...
No comments:
Post a Comment