resolution = 20; glass_color = white; # Creating walls... pnt1 = ctlpt (E3, 0.15, 0, 0); pnt2 = ctlpt (E3, 0.25, 0, 0.05); pnt3 = ctlpt (E3, 0.35, 0, 0.15); pnt4 = ctlpt (E3, 0.4, 0, 0.3); pnt5 = ctlpt (E3, 0.4, 0, 0.4); gside = cbezier ( list ( pnt1, pnt2, pnt3, pnt4, pnt5 ) ); gwalls = surfprev ( gside ); color ( gwalls, glass_color ); # Creating inside walls... delta = 0.01; pnt12 = ctlpt (E3, 0.15, 0, 0+delta); pnt22 = ctlpt (E3, 0.25-delta, 0, 0.05+delta); pnt32 = ctlpt (E3, 0.35-delta, 0, 0.15+delta); pnt42 = ctlpt (E3, 0.4-delta, 0, 0.3); pnt52 = ctlpt (E3, 0.4-delta, 0, 0.4); gside2 = cbezier ( list ( pnt52, pnt42, pnt32, pnt22, pnt12 ) ); gwalls2 = surfprev ( gside2 ); color ( gwalls2, glass_color ); # attrib ( gwalls2, "rgb", "255,255,255" ); # Creating bottom gbottom = cylin ( vector(0,0,0), vector(0,0,delta), 0.152 ); color ( gbottom, glass_color ); # attrib ( gbottom, "rgb", "255,255,255" ); # Creating upper side gupseg = cbezier ( list ( pnt5, pnt52 ) ); gup = surfprev ( gupseg ); color ( gup, glass_color ); attrib ( gup, "rgb", "255,255,255" ); # Creating handle pt1 = ctlpt (E3, 0.25, 0, 0.1); pt2 = ctlpt (E3, 0.35, 0, 0.08); pt3 = ctlpt (E3, 0.45, 0, 0.14); pt4 = ctlpt (E3, 0.48, 0, 0.25); pt5 = ctlpt (E3, 0.35, 0, 0.3); cross_sect = circle(vector(0,0,0),0.05) * scale ( Vector ( 1/2, 1, 1 ) ); hc = cbezier ( list(pt1,pt2,pt3,pt4,pt5) ); tmp = sweepsrf ( cross_sect, hc, OFF ); handle = tmp - gwalls; color ( handle, glass_color ); # view ( handle , true ); # Creating the glass itself... glass = list ( gwalls, gwalls2, gbottom, gup, handle ); plate_color = blue; # # Creating bottom... # delta = 0.05; bottom = cylin ( vector(0,0,0), vector(0,0,-delta), 0.15 ); color ( bottom, plate_color ); # attrib ( bottom, "texture", "marble" ); # # Creating up... # pnt1 = ctlpt ( E3, 0.15, 0, 0 ); pnt2 = ctlpt ( E3, 0.3, 0, 0 ); pnt3 = ctlpt ( E3, 0.45, 0, 0.05 ); pnt4 = ctlpt ( E3, 0.6, 0, 0.15 ); cup = cbezier ( list ( pnt4, pnt3, pnt2, pnt1 ) ); up = surfprev ( cup ); color ( up, plate_color ); # attrib ( up, "texture", "marble" ); # # Creating walls... # wpnt1 = ctlpt (E3, 0.15, 0, -delta); wpnt2 = ctlpt (E3, 0.3, 0, - delta / 2 ); wpnt3 = ctlpt (E3, 0.46, 0, 0.04); wpnt4 = ctlpt (E3, 0.61, 0, 0.149); side = cbezier ( list ( wpnt1, wpnt2, wpnt3, wpnt4 ) ); walls = surfprev ( side ); color ( walls, plate_color ); # attrib ( walls, "texture", "marble" ); # # Creating top... # ctop = cbezier ( list ( pnt4, wpnt4 ) ); top = surfprev ( ctop ); color ( top, plate_color ); # attrib ( top, "texture", "marble" ); # # Composing those objects to plate... # plate = list ( up, bottom, walls, top ); # # Creating the spoon itself... # scl_x = 1 / 4; scl_y = 1; scl_z = 1; shift = 0.05 * scl_x; knots = list ( list ( KV_FLOAT ), list ( KV_FLOAT ) # list ( 0, 0, 0, 1, 2, 2, 2 ) # list ( 0, 0, 0, 1, 2, 3, 4, 5, 6, 6, 6 ), ); sp_mesh = list ( list ( ctlpt ( E3, -0.4, 0, 0.1 ), ctlpt ( E3, -0.4, 0, 0.1 ), ctlpt ( E3, -0.4, 0, 0.1 ), ctlpt ( E3, -0.4, 0, 0.1 ) ), list ( ctlpt ( E3, -0.39, -0.1, 0.1 ), ctlpt ( E3, -0.39, -0.05, 0.08 ), ctlpt ( E3, -0.39, 0.05, 0.08 ), ctlpt ( E3, -0.39, 0.1, 0.1 ) ), list ( ctlpt ( E3, -0.2, -0.2, 0.1 ), ctlpt ( E3, -0.2, -0.15, -0.04 ), ctlpt ( E3, -0.2, 0.15, -0.04 ), ctlpt ( E3, -0.2, 0.2, 0.1 ) ), list ( ctlpt ( E3, 0.05, -0.25, 0.1 ), ctlpt ( E3, 0.05, -0.17, -0.2 ), ctlpt ( E3, 0.05, 0.17, -0.2 ), ctlpt ( E3, 0.05, 0.25, 0.1 ) ), list ( ctlpt ( E3, 0.2, -0.2, 0.1 ), ctlpt ( E3, 0.2, -0.1, -0.02 ), ctlpt ( E3, 0.2, 0.1, -0.02 ), ctlpt ( E3, 0.2, 0.2, 0.1 ) ), list ( ctlpt ( E3, 0.29, -0.1, 0.1 ), ctlpt ( E3, 0.29, -0.05, 0.1 ), ctlpt ( E3, 0.29, 0.05, 0.1 ), ctlpt ( E3, 0.29, 0.1, 0.1 ) ), list ( ctlpt ( E3, 0.3, -0.05, 0.1 ), ctlpt ( E3, 0.3, -0.025, 0.1+1.5*shift ), ctlpt ( E3, 0.3, 0.025, 0.1+1.5*shift ), ctlpt ( E3, 0.3, 0.05, 0.1 ) ) comment & list ( ctlpt ( E3, 0.3, -0.05, 0.1 ), ctlpt ( E3, 0.3, -0.005, 0.1 ), ctlpt ( E3, 0.3, 0.005, 0.1 ), ctlpt ( E3, 0.3, 0.05, 0.1 ) ) & ); # sp_srf = sbspline ( 3, 3, sp_mesh, knots ); sp_srf = sbezier ( sp_mesh ); bk_mesh = list ( comment & list ( ctlpt ( E3, 0.3, -0.05, 0.1 ), ctlpt ( E3, 0.3, -0.005, 0.1 ), ctlpt ( E3, 0.3, 0.005, 0.1 ), ctlpt ( E3, 0.3, 0.05, 0.1 ) ), & list ( ctlpt ( E3, 0.3, -0.05, 0.1 ), ctlpt ( E3, 0.3, -0.005, 0.1-shift ), ctlpt ( E3, 0.3, 0.005, 0.1-shift ), ctlpt ( E3, 0.3, 0.05, 0.1 ) ), list ( ctlpt ( E3, 0.29, -0.101, 0.1 ), ctlpt ( E3, 0.29, -0.051, 0.05 ), ctlpt ( E3, 0.29, 0.051, 0.05 ), ctlpt ( E3, 0.29, 0.101, 0.1 ) ), list ( ctlpt ( E3, 0.2, -0.201, 0.1 ), ctlpt ( E3, 0.2, -0.101, -0.1 ), ctlpt ( E3, 0.2, 0.101, -0.1 ), ctlpt ( E3, 0.2, 0.201, 0.1 ) ), list ( ctlpt ( E3, 0.05, -0.251, 0.1 ), ctlpt ( E3, 0.05, -0.171, -0.23 ), ctlpt ( E3, 0.05, 0.171, -0.23 ), ctlpt ( E3, 0.05, 0.251, 0.1 ) ), list ( ctlpt ( E3, -0.2, -0.201, 0.1 ), ctlpt ( E3, -0.2, -0.151, -0.08 ), ctlpt ( E3, -0.2, 0.151, -0.08 ), ctlpt ( E3, -0.2, 0.201, 0.1 ) ), list ( ctlpt ( E3, -0.39, -0.101, 0.1 ), ctlpt ( E3, -0.39, -0.051, 0.05 ), ctlpt ( E3, -0.39, 0.051, 0.05 ), ctlpt ( E3, -0.39, 0.101, 0.1 ) ), list ( ctlpt ( E3, -0.4, 0.001, 0.1 ), ctlpt ( E3, -0.4, 0.001, 0.1 ), ctlpt ( E3, -0.4, 0.001, 0.1 ), ctlpt ( E3, -0.4, 0.001, 0.1 ) ) ); # bk_srf = sbspline ( 3, 3, bk_mesh, knots); bk_srf = sbezier ( bk_mesh ); # # Creating spoon handle... # # # Creating sections... # center1 = Vector ( 0.3, 0, 0.1 ); center2 = Vector ( 0.6, 0, 0.25 ); center3 = Vector ( 1.6, 0, 0.17 ); center4 = Vector ( 1.795, 0, 0.13 ); center5 = Vector ( 1.8, 0, 0.13 ); rad1 = 0.05; rad2 = 0.05; rad3 = 0.1; rad4 = 0.1; rad5 = 0; axesO = Vector ( 0, 0, 0 ); sect1 = circle ( axesO, rad1 ); sect2 = circle ( axesO, rad2 ); sect3 = circle ( axesO, rad3 ); sect4 = circle ( axesO, rad4 ); sect5 = circle ( axesO, rad5 ); # Scale circles... scl = Vector ( scl_x, scl_y, scl_z ); sect1 = sect1 * Scale ( scl ); sect2 = sect2 * Scale ( scl ); sect3 = sect3 * Scale ( scl ); sect4 = sect4 * Scale ( scl ); sect5 = sect5 * Scale ( scl ); # Rotate circles... sect1 = sect1 * RotY ( 90 ); sect2 = sect2 * RotY ( 90 ); sect3 = sect3 * RotY ( 90 ); sect4 = sect4 * RotY ( 90 ); sect5 = sect5 * RotY ( 90 ); # Move circles to theirs position... sect1 = sect1 * Trans ( center1 ); sect2 = sect2 * Trans ( center2 ); sect3 = sect3 * Trans ( center3 ); sect4 = sect4 * Trans ( center4 ); sect5 = sect5 * Trans ( center5 ); hspoon = sfromcrvs ( list ( sect1, sect2, sect3, sect4, sect5 ), 5 ); # hspoon = hspoon * Trans ( Vector # # Whole the object... sp_color = cyan; color ( sp_srf, sp_color ); color ( bk_srf, sp_color ); color ( hspoon, sp_color ); spoon = list ( bk_srf, sp_srf, hspoon ); scl_factor = 1/2; short_it = Scale ( Vector ( scl_factor, scl_factor, scl_factor ) ); spoon = spoon * short_it; angle_y = -30; rotate_it = rotY(angle_y); shift_it = Trans ( Vector ( 0, 0, 0.1*sin(angle_y) ) ); spoon1 = spoon * rotate_it; spoon1 = spoon1 * shift_it; spoon1 = spoon1 * RotZ ( 90 ); cervise = list ( glass, plate, spoon1 ); view ( cervise, true );