// setup bone skeleton of doorhandletypes global proc bones (int $type, float $radius, float $stem, float $hand) { // clear scene select -all; delete; // set up the bones skeleton for the doorhandle if ($type == 1) // handletype 1= doorgrip { // create bounding curve1_top curve -d 3 -p 0 0 ($radius) -p 0 0 ($radius) -p 0 ($stem*0.3) ($radius) -p 0 ($stem*0.6) ($radius) -p 0 ($stem*0.9) ($radius) -p 0 ($stem) ($radius) -p ($hand*0.1) ($stem) ($radius) -p ($hand*0.2) ($stem) ($radius) -p ($hand*0.3) ($stem) ($radius) -p ($hand*0.4) ($stem) ($radius) -p ($hand*0.5) ($stem) ($radius) -p ($hand*0.6) ($stem) ($radius) -p ($hand*0.7) ($stem) ($radius) -p ($hand*0.8) ($stem) ($radius) -p ($hand*0.9) ($stem) ($radius) -p ($hand) ($stem) ($radius) -p ($hand) ($stem) ($radius) -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -k 14 -k 15 -k 16 -k 17 -k 18 -n "curve_top"; // create bounding curve2_left curve -d 3 -p (-$radius) 0 0 -p (-$radius) 0 0 -p (-$radius) (($stem+$radius)*0.3) 0 -p (-$radius) (($stem+$radius)*0.6) 0 -p (-$radius) (($stem+$radius)*0.9) 0 -p (-$radius) ($stem+$radius)0 -p (($hand-$radius)*0.1) ($stem +$radius) 0 -p (($hand-$radius)*0.2) ($stem +$radius) 0 -p (($hand-$radius)*0.3) ($stem +$radius) 0 -p (($hand-$radius)*0.4) ($stem +$radius) 0 -p (($hand-$radius)*0.5) ($stem +$radius) 0 -p (($hand-$radius)*0.6) ($stem +$radius) 0 -p (($hand-$radius)*0.7) ($stem +$radius) 0 -p (($hand-$radius)*0.8) ($stem +$radius) 0 -p (($hand-$radius)*0.95) ($stem +$radius) 0 -p ($hand) ($stem +$radius)0 -p ($hand) ($stem +$radius) 0 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -k 14 -k 15 -k 16 -k 17 -k 18 -n "curve_left"; // create bounding curve3_bottom curve -d 3 -p 0 0 (-$radius) -p 0 0 (-$radius) -p 0 ($stem*0.3) (-$radius) -p 0 ($stem*0.6) (-$radius) -p 0 ($stem*0.9) (-$radius) -p 0 ($stem) (-$radius) -p ($hand*0.1) ($stem) (-$radius) -p ($hand*0.2) ($stem) (-$radius) -p ($hand*0.3) ($stem) (-$radius) -p ($hand*0.4) ($stem) (-$radius) -p ($hand*0.5) ($stem) (-$radius) -p ($hand*0.6) ($stem) (-$radius) -p ($hand*0.7) ($stem) (-$radius) -p ($hand*0.8) ($stem) (-$radius) -p ($hand*0.9) ($stem) (-$radius) -p ($hand) ($stem) (-$radius)-p ($hand) ($stem) (-$radius) -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -k 14 -k 15 -k 16 -k 17 -k 18 -n "curve_bottom"; // create bounding curve4_right curve -d 3 -p ($radius) 0 0 -p ($radius) 0 0 -p ($radius) (($stem-$radius)*0.3) 0 -p ($radius) (($stem-$radius)*0.6) 0 -p ($radius) (($stem-$radius)*0.9) 0 -p ($radius) ($stem -$radius) 0 -p (($hand+$radius)*0.1) ($stem -$radius) 0 -p (($hand+$radius)*0.2) ($stem -$radius) 0 -p (($hand+$radius)*0.3) ($stem -$radius) 0 -p (($hand+$radius)*0.4) ($stem -$radius) 0 -p (($hand+$radius)*0.5) ($stem -$radius) 0 -p (($hand+$radius)*0.60) ($stem -$radius) 0 -p (($hand+$radius)*0.7) ($stem -$radius) 0 -p (($hand+$radius)*0.75) ($stem -$radius) 0 -p (($hand+$radius)*0.8) ($stem -$radius) 0 -p ($hand) ($stem -$radius)0 -p ($hand) ($stem -$radius) 0 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -k 14 -k 15 -k 16 -k 17 -k 18 -n "curve_right"; // select and loft select -cl ; select -r curve_top ; select -tgl curve_right ; select -tgl curve_bottom ; select -tgl curve_left ; loft -ch 1 -u 1 -c 1 -ar 0 -d 3 -ss 4 -rn 0 -po 0 -rsn true "curve_top" "curve_right" "curve_bottom" "curve_left"; } else if ($type == 2) // handletype 2= entrance { // create extrusion circle + path circle -c 0 0 0 -nr 0 0 1 -sw 360 -r ($radius) -d 3 -s 8 -ch 1; curve -d 1 -p 0 0 0 -p 0 0 ($stem) -p ($hand) 0 ($stem) -p ($hand) 0 0 -k 0 -k 1 -k 2 -k 3 ; //extrude select -r nurbsCircle1 ; select -tgl curve1 ; extrude -ch true -rn false -po 0 -et 2 -ucp 0 -fpt 0 -upn 0 -rotation 0 -scale 1 -rsp 1 "nurbsCircle1" "curve1" ; // cap ends select -r extrudedSurface1.v[0] ; planarSrf -ch 1 -d 3 -ko 0 -tol 0.01 -rn 0 -po 0 "extrudedSurface1.v[0]"; select -r extrudedSurface1.v[4] ; planarSrf -ch 1 -d 3 -ko 0 -tol 0.01 -rn 0 -po 0 "extrudedSurface1.v[4]"; } else if ($type == 3) // handletype 3= the knob { // create extrusion circle + path circle -c 0 0 0 -nr 0 0 1 -sw 360 -r ($radius) -d 3 -s 8 -ch 1; curve -d 1 -p 0 0 0 -p 0 0 ($stem/2) -p 0 0 ($stem/1.5) -p 0 0 ($stem/1.2) -p 0 0 ($stem)-k 0 -k 1 -k 2 -k 3 -k 4; //extrude select -r nurbsCircle1 ; select -tgl curve1 ; extrude -ch true -rn false -po 0 -et 2 -ucp 0 -fpt 0 -upn 0 -rotation 0 -scale 1 -rsp 1 "nurbsCircle1" "curve1" ; // cap ends select -r extrudedSurface1.v[4] ; planarSrf -ch 1 -d 3 -ko 0 -tol 0.01 -rn 0 -po 0 "extrudedSurface1.v[4]"; // knob bulge select -r extrudedSurface1.cv[0:7][2] ; scale -r -p 0 0 ($stem/1.5) ($hand/2.25) ($hand/3) 0 ; select -r extrudedSurface1.cv[0:7][3] ; scale -r -p 0 0 ($stem/1.2) ($hand/2.25) ($hand/3) 0 ; } }; // parameters to adjust the surfaces all by sine + cosine function global proc para (float $finger, float $thumb, float $palm, float $curve) { // palmrest sine curvature int $ci; float $Yval; for ($ci = 7; $ci < 16; $ci++) { $Yval = (cos(deg_to_rad ($ci*$ci)*-0.8)*($palm*0.3)); select curve_left.cv[$ci]; move -r 0 (-$Yval) ($Yval*($Yval)); } // fingers sine curvature int $fi; float $Fval; for ($fi = 0; $fi < 14; $fi++) { $Fval = (sin(deg_to_rad ($fi*$fi)*6)*($finger*0.2)); select curve_right.cv[$fi]; move -r 0 ((-$Fval)-0.2) 0 ; } // curvature top curve int $i; float $Xval; for ($i = 7; $i < 17; $i++) { $Xval = (sin(deg_to_rad ($i*$i)*-2)*($palm*0.2)); select curve_top.cv[$i]; move -r 0 0 $Xval; } // curvature bottom curve int $ii; float $Xval_bo; for ($ii = 0; $ii < 17; $ii++) { $Xval_bo = (sin(deg_to_rad ($ii*$ii)*-1)*($curve*0.1)); select curve_bottom.cv[$ii] ; move -r 0 0 $Xval_bo ; } // curvature thumb rest X int $ti; float $tval; for ($ti = 0; $ti < 7; $ti++) { $tval = (sin(deg_to_rad ($ti*$ti)*8)*($thumb*0.13)); select curve_left.cv[$ti] ; move -r $tval 0 0 ; } // curvature thumb rest Z int $tzi; float $tzval; for ($tzi = 0; $tzi < 6; $tzi++) { $tzval = (sin(deg_to_rad ($tzi*$tzi)*8)*($thumb*0.1)); select curve_top.cv[$tzi] ; move -r 0 0 (-$tzval) ; } }; // parameters to adjust the doorplate global proc plate (float $plate) { select -r curve_right.cv[0:1] ; select -tgl curve_bottom.cv[0:1] ; select -tgl curve_left.cv[0:1] ; move -r 0 0 (-$plate) ; } // rebuild and subdivide surface, add z_knob pattern global proc znob (float $spans, float $znob) { rebuildSurface -ch 1 -rpo 1 -rt 0 -end 1 -kr 1 -kcp 0 -kc 1 -su ($spans*1.5) -du 3 -sv ($spans) -dv 3 -tol 0.01 -fr 0 -dir 2 "loftedSurface1"; // surface pattern: z_nobs int $sv; int $su; float $Z; for ($su = 0; $su < (($spans)-1); $su+=2) { for ($sv = 0; $sv < (($spans*1.5)+2); $sv+=2) { select -r loftedSurface1.cv[$sv][$su]; move -r 0 0 ($znob*0.1) ; } } } // get measures of surface in array of floats: xmin, ymin, zmin, xmax, ymax, zmax, and move to origin for milling global proc mill (float $fake) { float $bbox[] = exactWorldBoundingBox ("loftedSurface1"); curve -d 1 -p $bbox[0] $bbox[1] $bbox[2] -p $bbox[3] $bbox[4] $bbox[5] -k 0 -k 1 -n "bounding"; select -r ("loftedSurface1") ("bounding"); move -r (-$bbox[0])( -$bbox[1]) ($bbox[2]); select -tgl curve_left ; select -tgl curve_top ; select -tgl curve_bottom ; select -tgl curve_right ; delete; }