// This script creates Lattice Deformer to selected objects.
// Also, it creates expression to each Lattice Point to add noise animation.
global proc latticeNoise()
{
int $division_s = 12;
int $division_t = 9;
int $division_u = 9;
float $amplitude = 0.01;
float $freq = 1.0;
string $lattice_name[] = `lattice  -divisions $division_s $division_t $division_u -objectCentered true  -ldv 2 2 2`;
int $i = 0,$j = 0,$k = 0, $count = 0;
for($i = 0; $i < $division_u; $i++)
    for($j = 0; $j < $division_t; $j++)
        for($k = 0; $k < $division_s; $k++){
        string $exp = "";
        float $def_position[] = `getAttr ($lattice_name[1] + ".pt[" + $k + "][" + $j + "][" + $i +"]")`;
        $exp = $lattice_name[1] + "Shape.controlPoints[" + $count + "].xValue = noise(time*" + $freq + "+" + $count + ")*" + $amplitude + "+" + $def_position[0] + ";\r\n" +
                $lattice_name[1] + "Shape.controlPoints[" + $count + "].yValue = noise(time*" + $freq + "+" + $count + "+ 100)*" + $amplitude + "+" + $def_position[1] + ";\r\n" +
                $lattice_name[1] + "Shape.controlPoints[" + $count + "].zValue = noise(time*" + $freq + "+" + $count + "+ 200)*" + $amplitude + "+" + $def_position[2] + ";";
        expression -s $exp -o ($lattice_name[1] + "Shape") -ae 1 -uc all;
        if($count > 100000) break; // To prevent infinite loop.
        $count++;
}
  
}
  
latticeNoise;