Intro to Mel Script Part 6 :: Learning About Variables

General Rules About Variables In Mel Scripting:
  • always preceded with a "$" symbol ( "$myVar" )
  • no white spaces allowed
  • can not start with a number ( "$2" )
  • a variable's data-type cannot be redefined once it is created, until the maya session is ended.

There are several commonly-used variable data types that we can introduce you to here:
  • int
  • string
  • float
  • vector
  • int array
  • string array
  • float array
  • vector array

Here is some syntax for properly declaring these variable types and an example of loading these variables with values.

{
    int $intVar              = 12;
    string $stringVar        = "twelve";
    float $floatVar          = 12.25;
    vector $vectorVar        = <<12, 12, 12>>;
    int $intArrayVar[]       = {12,13,14};
    string $stringArrayVar[] = {"twelve","thirteen","forteen"};
    float $floatArrayVar[]   = {12.25, 13.5, 14.75};
    vector $vectorArrayVar[] = { <<0,0,0>>, <<0.01,-2,16>>, <<0,1,3>> };
}


 




{
    int $intVar              = 12;
    string $stringVar        = "twelve";
    float $floatVar          = 12.25;
    vector $vectorVar        = <<12, 12, 12>>;
    int $intArrayVar[]       = {12,13,14};
    string $stringArrayVar[] = {"twelve","thirteen","forteen"};
    float $floatArrayVar[]   = {12.25, 13.5, 14.75};
    vector $vectorArrayVar[] = { <<0,0,0>>, <<0.01,-2,16>>, <<0,1,3>> };

    // how to properly use the declared variables in a command:
    print $intVar;
    print "\n"; // print a new line         
    print $stringVar;  
    print "\n";   
    print $floatVar;  
    print "\n";         
    print $vectorVar; 
    print "\n";
    print $intArrayVar;  
    print "\n";      
    print $stringArrayVar;
    print "\n";
    print $floatArrayVar;
    print "\n";
    print $vectorArrayVar;
    print "\n";
   
    // Return values:
    //  12
    //  twelve
    //  12.25
    //  12 12 12
    //  12
    //  13
    //  14

    //  twelve
    //  thirteen
    //  forteen

    //  12.25
    //  13.5
    //  14.75

    //  0 0 0
    //  0.01 -2 16
    //  0 1 3     
}



















  























This gives you a taste of
learning about variables.
For a more in-depth look
at variables go here:



(preview listed below)


Variables in MEL
General Rules:
  • always preceded with a "$"quot; symbol ( "$myVar" )
  • no white spaces allowed
  • can not start with a number ( "$2" )
  • a variable's type cannot be redefined once it is created, until the maya session is ended.

Defining variables:

automatic assignment
You can declare a variable using the above rules and simply give it a value, as in the example below. Maya will look at the value and automatically determine the data type of the variable.
 

$myVar = 3.14; // this variable will be a float from now on. 
$myVar2 = 3; // this will be an integer
Once a variable is assigned, you need to treat it accordingly. Otherwise you may get undesired results:
 

$myVar2 = 3 + 3.14     // the result will be "6" since the variable is an integer as it was defined above.In some cases you may be getting the value as a return result from another mel command. You will probably then want to do some operation to that returned result, so it's a good idea to already know the datatype in order to know what you can do with it.

IT IS BEST TO ALWAYS EXPLICITY DEFINE A VARIABLE
Use the data type keyword to declare the variable:

int $myInteger;
float $myFloat;
string $myString;
vector $myVector;


If you do as above, each variable will inherit a default "zero" value.

$myInteger = 0;
$myFloat = 0.0;
$myString = "";
$myVector = <<0,0,0>>;

You may want to set the inititial value at the time you declare the variable:

int $myInteger = 3;
float $myFloat = 3.14;
string $myString = "hello";
vector $myVector = <<0,0,0>>;


STRINGS:

string $myString = "hello world" ;
concatenate using "+"

string $myString = "hello";
$myString = ( $myString + " and goodbye" ) ;


// $myString now equals "hello and goodbye"

use the "\" to denote special characters:
  • \t = tab
  • \n = new line
  • \r = carriage return
  • \\ = backslash
  • \" = a quote character you want in the actual string

A common special characer is the new line, often concatenated to a variable for printing out messages from your script:

print ($myString + "\n") ;
VECTORS:

vector $myVector = << 12, 3, 5 >> ;

Always a set of three floats.
Use "<<" and ">>" when defining

vector $myVector = <<12, 3, 5>> ;

You can get the value of any one component of the vector:

vector $myVector = <<12, 3, 5>> ;
float $myX = $newVector.x ;


// $myX now equals "12"
You cannot set the value of one component in the same way, however:

vector $myVector = <<12, 3, 5>> ;
$myVector.x = 52 ;    // this will not work and Maya will give you an error message

Set the value of one or more components of a vector like this:

vector $myVector = <<12, 3, 5>> ;
$myVector = << 52, $myVector.y, $myVector.z >>;

// $myVector now equals "<< 52, 3, 5 >>"



ARRAYS:

float $floatArray[] = {3.14, 5.0, 32.3, 56.43} ;
Arrays are a list of variables, all of the same type, so you define an array with a data type keyword:

float $floatArray[];
string $stringArray[];
OR
float $floatArray[] = {3.14, 5.0, 32.3, 56.43};
string $stringArray[] = {"sphere", "cube", "torus"};

Assign values to single elements of an array (only after the array has been defined):

float $floatArray[] = {3.14, 5.0, 32.3, 56.43};
$floatArray[0] = 1.55 ;


// this changes the first element of the array, "3.14", to "1.55"

A common usage of arrays in mel is when you need to determine what is selected:

$selectionList[] = `ls -sl`;

// note the type of array is not defined here, but it could be, in either case the result will be strings
Or to get the transform node name of a newly created object:

$newObj[] = `sphere`;
select $newObj[0];


// this retrieves the first element of the array (which is the transform node, while the second element is the shape node)
Append to an array of a unknown size using the "size" command: 

$array[ size[$array] ] = 1.55 ;
Clear the contents of an array:

clear($array);

        
MATRIX:

matrix $myMatrix[2] [4] ;

A matrix is a two-dimensional array, with any number of rows and columns:

matrix $myMatrix[2] [4] ;
// this defines a matrix with two rows and four columns

Initialize the values in a matrix:

matrix $myMatrix[2] [4] = << 3,4,6,7 ; 3,9,0,1 >>;
Visualize it like a spreadsheet layout:

  





SCOPE of a variable:

A local variable only exists within a procedure or a statement block within braces.

int $myVar = 5;

for ($i = 1; $i <= 10; $i++) {
      $myVar = $i;
}

{ float $myVar = 3.14; }

print ( $myVar + "\n" );

// the result is "10" from the "for" loop. Since the "float $myVar = 3.14" statement was
// enclosed in braces, the value of 3.14 is not printed, as well as being able to declare
// $myVar as a float!



GLOBAL vs LOCAL:

Once a variable is declared as global, it can exist and be addressed between different scripts and procedures.

global int $myVar = 5;
You can remind yourself a variable is global with consistent naming conventions. A common practice is to use a leading lower case 'g'.

global int $gMyVar = 5;

To refer to the variable elsewhere, you need to include the "global" keyword:

global int $gMyVar;

// if the variable was initialized previously, it will not be initialized again
then you can simply refer to "$gMyVar" in the rest of the procedure, block, or script.




























No comments:

Post a Comment