home *** CD-ROM | disk | FTP | other *** search
- #Authors: Orli Gan and Ido Halevi
-
- display = on;
-
-
- CnvrtCrvToPolygon = function( Crv, n ):ptl:pt:t:t0:t1:dt:
- ptl = nil():
- t0 = nth( pdomain( Crv ), 1 ):
- t1 = nth( pdomain( Crv ), 2 ):
- if ( n < 2, n = 2 ):
- dt = (t1 - t0) / (n - 1):
- for ( t = t0, dt, t1 - dt / 2,
- pt = ceval( Crv, t ):
- snoc( pt, ptl )
- ):
- return = poly( ptl, false );
-
-
- key_bsp = list( ctlpt( E3 , 0.116 , 0.296 , 0.0),
- ctlpt( E3 , 0.172 , 0.7 , 0.0),
- ctlpt( E3 ,-0.292 , 0.928 , 0.0),
- ctlpt( E3 , -0.66 , 0.66 , 0.0),
- ctlpt( E3 ,-0.572 , 0.244 , 0.0),
- ctlpt( E3 ,-0.316 , 0.06 , 0.0),
- ctlpt( E3 ,-0.324 , 0.068 , 0.0),
- ctlpt( E3 ,-0.296 , -0.208 , 0.0),
- ctlpt( E3 ,-0.236 , -0.812 , 0.0),
- ctlpt( E3 ,-0.228 , -0.82 , 0.0),
- ctlpt( E3 ,-0.172 , -0.872 , 0.0),
- ctlpt( E3 , -0.02 , -0.764 , 0.0),
- ctlpt( E3 ,-0.028 , -0.76 , 0.0),
- ctlpt( E3 ,-0.036 , -0.692 , 0.0),
- ctlpt( E3 ,-0.076 , -0.668 , 0.0),
- ctlpt( E3 , -0.02 , -0.62 , 0.0),
- ctlpt( E3 ,-0.076 , -0.556 , 0.0),
- ctlpt( E3 ,-0.036 , -0.476 , 0.0),
- ctlpt( E3 ,-0.104 , -0.412 , 0.0),
- ctlpt( E3 ,-0.052 , -0.332 , 0.0),
- ctlpt( E3 , -0.08 , -0.276 , 0.0),
- ctlpt( E3 ,-0.044 , -0.24 , 0.0),
- ctlpt( E3 , -0.12 , -0.14 , 0.0),
- ctlpt( E3 ,-0.068 , -0.072 , 0.0),
- ctlpt( E3 ,-0.072 , -0.004 , 0.0),
- ctlpt( E3 , 0.008 , 0.004 , 0.0),
- ctlpt( E3 ,-0.072 , 0.084 , 0.0),
- ctlpt( E3 ,-0.056 , 0.1 , 0.0),
- ctlpt( E3 , 0.028 , 0.16 , 0.0),
- ctlpt( E3 , 0.116 , 0.292 , 0.0));
-
- key_cb = cbspline( 3, key_bsp, list( KV_OPEN ));
-
- free(key_bsp);
-
- drawctlpt = 0;
-
- key_poly = CnvrtCrvToPolygon( key_cb, 100 );
-
- ext_dir = vector( 0.0, 0.0, 0.1);
-
- key1 = extrude (key_poly, ext_dir);
-
- hole = cylin (vector(-0.27,0.67,0.0), ext_dir*3, 0.1);
-
- key2 = key1 - hole;
-
- free (key1);
-
- elipse_bsp = list (ctlpt (E3,-0.235869, 0.0, 0.254282),
- ctlpt (E3, -0.234916, 0.0, 0.175189),
- ctlpt (E3, -0.124377, 0.0, 0.174236),
- ctlpt (E3, -0.122471, 0.0, 0.328611),
- ctlpt (E3, -0.235869, 0.0, 0.330517),
- ctlpt (E3, -0.235869, 0.0, 0.254282));
-
- elipse_cb = cbspline( 3, elipse_bsp, list( KV_OPEN ));
-
- free(elipse_bsp);
-
- elipse_poly = CnvrtCrvToPolygon( elipse_cb, 50 );
-
- cyl = extrude (elipse_poly, vector(0.0, 1.3, 0.0)) *
- scale (vector(0.6, 0.7, 0.7));
-
- cyl_mat1 = rotz(6) * trans (vector(-0.06, -0.85, -0.08));
- cyl1 = cyl_mat1 * cyl;
-
- cyl_mat2 = rotz(6) * trans (vector(-0.0, -0.84, -0.185));
- cyl2 = cyl_mat2 * cyl;
-
- cyl_mat3 = rotz(6) * trans (vector(0.07, -0.83, -0.08));
- cyl3 = cyl_mat3 * cyl;
-
- key3 = key2 - cyl1 - cyl2 - cyl3;
-
- free (cyl1);
- free (cyl2);
- free (cyl3);
-
- key4 = key3 * trans (vector (0.0, -0.13, 0.0));
-
- key5 = key3 * rotz (20) * trans (vector (0.18, -0.03, 0.11));
-
- key6 = key3 * rotz (-15) * trans (vector (-0.2, -0.13, -0.12));
-
- cir = circle(vector(0.0, 0.0, 0.0), 0.35);
-
- loop = sweepsrf (circle(vector(0.0, 0.0, 0.0), 0.03),
- cir, off) *
- roty(90) * rotz (-40) * trans (vector (-0.09, 0.8, 0.05));
-
- view_mat = trans(vector(0.0, 0.0, 0.0));
-
- view (list (view_mat,loop, key4, key5, key6), true);
-
- key4_final = convex (key4);
- key5_final = convex (key5);
- key6_final = convex (key6);
-
- save ("keys", list (key4_final, key5_final, key6_final, loop));
-
-
-
-
-
-
-
-
-