Simply Maya User Community

Simply Maya User Community (https://simplymaya.com/forum/index.php)
-   Programming (https://simplymaya.com/forum/forumdisplay.php?f=32)
-   -   geometry grid randomisation (https://simplymaya.com/forum/showthread.php?t=29727)

bendingiscool 25-04-2008 06:07 AM

geometry grid randomisation
 
I was going through the 'artists guide to mel' training from dt the otherday and found the really handy little loop that can make grids of geometry.

Heres the script...

int $i;
int $j;

for ($i=0;$i<5;$i++){
for ($j=0;$J<5;$j++){

polyCube;
move -r (2*$j)0(2*$i);
}
}

I was wondering how I would go about randomising their size on creation so that I could have random size cubes etc be produced.

Chris

t1ck135 26-04-2008 05:57 AM

Here you go Chris, slightly modified code adding in a random number generator and applying it to the polyCube command to set the scale. Commented so people can follow it :)

Code:

int $i;
int $j;
// holds random value assigned each time a cube is created
float $randSize;

for ($i=0; $i<5; $i++) {
    for ($j=0; $j<5; $j++) {

        // generate a random float number between 0.0 and 2.0
        $randSize = rand(2);
        // use the random number to set the cube dimensions
        polyCube -w $randSize -h $randSize -d $randSize;
        move -r (2*$j)0(2*$i);
    }
}

The only thing to remember though is that $i, $j and $randSize will be global variables which can be bad. The next step would be to change it into a function so that the variables are local.

Code:

// function that creates a 5x5 grid of randomly sized cubes
proc generateVariedCubes() {
    int $i;
    int $j;
    // holds random value assigned each time a cube is created
    float $randSize;

    for ($i=0;$i<5;$i++){
        for ($j=0;$j<5;$j++){

            // generate a random float number between 0.0 and 2.0
            $randSize = rand(2);
            // use the random number to set the cube dimensions
            polyCube -w $randSize -h $randSize -d $randSize;
            move -r (2*$j)0(2*$i);
        }
    }
}

// call the function
generateVariedCubes();

Once you've run the function code then you wont need to rerun it for the current maya session. You can therefore run the generateVariedCubes() call whenever you want or multiple times and it will create the cubes.
As an exercise it'd be good to modify the function so that it generates another set of cubes to the right or left of the previous one. Up to you though ;)

Simon

gster123 04-05-2008 10:48 AM

Hey Si

Ive not used ramdom in MEL, is it actually random so to speak (say in delphi you set a random number and unless you set the clock its always the same as its always produced in the same clock cycle)??

Like I say I've never used it so cant comment.

t1ck135 05-05-2008 03:58 PM

Hi Steve,

It gives a different result each time so can be called random. If you look into how it is seeded then with some hardcore maths it might be possible to predict the variance but thats way over the head of us mere mortals ;)

Simon


All times are GMT. The time now is 09:56 AM.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Simply Maya 2018