Maya for 3D Printing - Rapid Prototyping
In this course we're going to look at something a little different, creating technically accurate 3D printed parts.
# 1 17-11-2004 , 04:10 AM
Renderizer's Avatar
Subscriber
Join Date: Jun 2002
Location: Germany
Posts: 276

Script doesn't remember variables

Hi all,


this is really my first attempt to dabble in MEL, so be kind, please...

Now, please take a look at the following if-statement.

The reason I post this, is that the script seems to forget the values for $MR_rotX, $MR_rotY and $MR_rotZ as soon as it leaves the if-block. Inside the block everything is fine (I printed the values to the script editor to confirm this), outside the block all values are set to zero. If I delete the if-statement and the brackets, the values remain intact..

Any idea why this happens?

Thanks!

Mario


if ($MR_SnapButton == 1)
{
int $MR_randX = rand (360/$MR_snapx);
int $MR_rotX = $MR_randX*$MR_snapx;

int $MR_randY = rand (360/$MR_snapy);
int $MR_rotY = $MR_randY*$MR_snapy;

int $MR_randZ = rand (360/$MR_snapz);
int $MR_rotZ = $MR_randZ*$MR_snapz;
}


Subdivide and conquer!

Free your mind, and your ass will follow!
# 2 17-11-2004 , 08:39 AM
kbrown's Avatar
Moderator
Join Date: Sep 2002
Location: London, UK
Posts: 3,198
It's because you declare the variables inside the block. When you do that they become local variables to that block. When you try to use them outside of the block you are actually declaring new variables and that's why they show zero in the contents. To make the variables available outside the block you have to declare them in "upper level":

Code:
{
	int $MR_randX;
	int $MR_rotX;
	int $MR_randY;
	int $MR_rotY;
	int $MR_randZ;
	int $MR_rotZ;

	if ($MR_SnapButton == 1) 
	{ 
		$MR_randX = rand (360/$MR_snapx); 
		$MR_rotX = $MR_randX*$MR_snapx; 
	
		$MR_randY = rand (360/$MR_snapy); 
		$MR_rotY = $MR_randY*$MR_snapy; 
	
		$MR_randZ = rand (360/$MR_snapz); 
		$MR_rotZ = $MR_randZ*$MR_snapz; 
	}
}


Kari
- My Website
- My IMDB

Do a lot, Fail a lot and Learn a lot!
# 3 17-11-2004 , 02:20 PM
Renderizer's Avatar
Subscriber
Join Date: Jun 2002
Location: Germany
Posts: 276
Yep, already found out. It just had to be some minuscle detail that's so upfront, right under your nose, that you would just overlook it.

Thanks anyway!


Subdivide and conquer!

Free your mind, and your ass will follow!
# 4 17-11-2004 , 04:13 PM
Alan's Avatar
Moderator
Join Date: Oct 2002
Location: London, UK
Posts: 2,800
it's called "variable scoping" and a scope is defined by {code}

they are hierarchical and so:

int x = 1;
{
int x = 2;
print x (will print 2)
{
int x = 3;
print x (will print 3)
}
}
print x (will print 1)

user added image
Alan


Technical Director - Framestore

Currently working on: Your Highness

IMDB
Posting Rules Forum Rules
You may not post new threads | You may not post replies | You may not post attachments | You may not edit your posts | BB code is On | Smilies are On | [IMG] code is On | HTML code is Off

Similar Threads