## Output

global proc doit() {

## Rotate on Curve

I haven’t posted anything for sometime because I’m working on a new script. For now, this is a script I’ve developed a few years ago. It’s a tool to duplicate a nurbs object along a curve while rotating it. There is also the option of lofting the duplicates. Enjoy.

```
// RotateOnCurve.mel Rotate on Curve.
// The script rotates the object along a curve 'n' number of times with rotations.
// written by Amenah Benjasem.// https://mayation.wordpress.com
group -em -n ronc;
addAttr -ln path -dt "string";
addAttr -ln object -dt "string";
addAttr -ln Repetition -at short;
addAttr -ln xRotation -at short;addAttr -ln yRotation -at short;
addAttr -ln zRotation -at short;
if (`window -exists ronc`) {deleteUI ronc; windowPref -remove ronc;}
window -widthHeight 360 350 -s 1 -title "Rotate on Path" ronc;
columnLayout -columnAttach "right" 10 -rowSpacing 10 -columnWidth 340 columnlayout ;
attrFieldSliderGrp -min 2 -max 100 -at ronc.Repetition ;
attrFieldSliderGrp -min 1 -max 360 -fs 10 -at ronc.xRotation ;
attrFieldSliderGrp -min 1 -max 360 -fs 10 -at ronc.yRotation ;
attrFieldSliderGrp -min 1 -max 360 -fs 10 -at ronc.zRotation ;
$t_loft = `checkBox -label "Loft" -align "left"`;
setParent ..;setParent ..;
button -label "duplicate on curve" -h 30 -width 200 -command "dupl($t_loft)" dupl;
button -label "exit" -h 30 -width 200 -command "exit()" exit ;
showWindow ronc;
select -cl;
print "\n\n- - - - \nRotateOnCurve.mel:\n========\nPlace object pivot in desired place.";
print " Select 1)Path 2)object. \n amna\n";
global proc dupl(string $t_loft) {
$sel = `ls -sl`;
if (size($sel) > 0) {
$obj = `ls -selection -tail 1`;
setAttr ronc.object -type "string" $obj;
$path = `ls -selection -head 1`;
setAttr ronc.path -type "string" $path;
print ("\nPath: " + $path[0] + ", Object: " + $obj[0] + ".\n");
$knots = `getAttr ronc.Repetition`;
$knots_ = $knots - 1;
rebuildCurve -rt 0 -s $knots_ $path;
$rotx = `getAttr ronc.xRotation`;
$roty = `getAttr ronc.yRotation`;
$rotz = `getAttr ronc.zRotation`;
////duplicate move and rotate object..
for ($i = 1; $i <= $knots; $i++) {
$point = $path[0] + ".ep[" + $i + "]";
$pos = `getAttr $point`;
$newobj = `duplicate -n obj $obj[0] `;
rotate -r $rotx $roty $rotz $newobj;
move -rpr $pos[0] $pos[1] $pos[2] $newobj;
$rotx = $rotx + $rotx;
$roty = $roty + $roty;
$rotz = $rotz + $rotz; }
$loft = `checkBox -q -v $t_loft`;
string $name;
if ($loft == 1) {
for ($i = 0; $i<=($knots-2); $i++) {
if ($i == 0) { $name = "obj"; }
if ($i > 0) { $name = "obj" + $i;}
```

```
$j = $i+1;
$name2 = "obj" + $j;
loft $name $name2; }
} }else{ print "\nError: Select Path then object\n"; } }
global proc exit() {
delete ronc;
deleteUI ronc; }
```

## Lorenz attractor

Parametric forms are created using mathematical formulas. Those formulas could be as simple as x + y = 22, or they could be generated from complex mathematical systems that have already been set by scientists and mathematicians. In this post, we’re exploring a system initiated by Edward Lorenz who was studying the movement and behavior of gaseous systems. He came up with the following formula that can be used to draw and trace the path of the gas molecules.

dx = delta * (y – x)

dy = r * x – y – x * z

` `

`dz = x * y - beta * z`

For more information about Lorenz Attractor we recommend this website.

global proc Lorenz() {

$iterations = 2000;

float $x = 1.0;

float $y = 1.0;

float $z = 1.0;

float $newdx;

float $newdy;

float $newdz;

int $i = 0;

curve -n Lorenz -d 3 -p $x $y $z;

do {

$newdx = dx($x, $y, $z);

$newdy = dy($x, $y, $z);

$newdz = dz($x, $y, $z);

$x = $x + (0.01 * $newdx);

$y = $y + (0.01 * $newdy);

$z = $z + (0.01 * $newdz);

curve -a -p $x $y $z Lorenz;

$i++;

} while ($i < $iterations);

}

global proc float dx(float $x, float $y, float $z) {

float $delta = 11.0;

return $delta * ($y – $x);

}

global proc float dy(float $x, float $y, float $z){

float $r = 50.0;

return -1 * $x * $z + $r * $x – $y;

}

global proc float dz(float $x, float $y, float $z){

float $beta = 4.0;

return $x * $y – $beta * $z;

}

## Wireframe render

Many times while designing, I find it more interesting to look at a solid object in wireframe mode. In any 3D software the modeling is done through wireframe. When rendering the model however, it becomes solid. This tool allows you to convert any object made with Nurbs or surfaces in Maya to wireframe. You can change the number of sections or frames in every column and row. You can also change the radius of each frame.

global proc wireframe(int $u, float $v) { $obj = `ls -sl`; rebuildSurface -ch 1 -rpo 1 -rt 0 -end 1 -kr 0 -kcp 0 -kc 0 -su $u -du 3 -sv $v -dv 3 -tol 0.01 -fr 0 -dir 2 $obj; int $i; string $curIso; float $inc_v; float $inc_u; float $curIsoValue; float $j = 0; $inc_v = (1.0 / $v); $inc_u = (1.0 / $u); $profile_radius = 0.05; //change this value to change the size of the wireframe. $profile = `circle -ch on -o on -nr 0 1 0 -r $profile_radius ` ; for ($i = 0; $i <= $v; $i++) { $curIsoValue = ($inc_v * $j); $curIso = $obj[0] + ".v[" + $curIsoValue + "]"; select -r $curIso; $curve = `duplicateCurve -ch 1 -rn 0 -local 0 $curIso` ; extrude -ch true -rn false -po 0 -et 1 -fpt 1 -upn 0 -rotation 0 -scale 1 $profile[0] $curve[0] ; $j = $j + 1; } $j = 0; for ($i = 0; $i <= $u; $i++) { $curIsoValue = ($inc_u * $j); $curIso = $obj[0] + ".u[" + $curIsoValue + "]"; select -r $curIso; $curve = `duplicateCurve -ch 1 -rn 0 -local 0 $curIso` ; extrude -ch true -rn false -po 0 -et 1 -fpt 1 -upn 0 -rotation 0 -scale 1 $profile[0] $curve[0] ; $j = $j + 1; } print "\n written by mayation.wordpress.org\n" }solid to wireframe

## What is Parametric Design?

It is a process used to manipulate, regenerate and design objects based on a set of rules or parameters. Parametric design is now being widely used in the fields of architecture and product design. There are many concepts that appear regularly in parametric design projects. One important concept is *repetition*, which works best when it is used in parallel with rotation, scaling and movement. This simply means to copy an object multiple times while introducing a gradual change in its scale for example.

Another concept frequently used in parametric design is *Mutation*. What is meant by mutation is the progressive change in the form of an object along a process based on a few rules. This might completely transform the object to a new form, which makes animation and video logging a great tool to monitor the transformation.

In architecture, *surface manipulation* is used to perforate the façade of a building. In scripting, this requires two things. One is of course a surface or a plane, and the other is a system that can determine the degrees and directions of the manipulations taking place. Although randomness could easily be implemented in parametric design, following a system brings great aesthetic value to the result.

Computer visualization programs like Maya and Rhino are used to create 3D forms using a scripting language. Each program has its own language, which is relatively easy to learn. In this site we’ll be using MEL (Maya embedded language) to explore and demonstrate parametric design.

1comment