var white = [1.5,1.5,1.5]; var light_brown = [1,133/255,63/255]; var dom2D = DOMAIN([[0,1],[0,1]])([10,10]); function surface(curves){ return MAP(BEZIER(S1)(curves))(dom2D); } /****************************** OUTSIDE ******************************/ var dx = 14; var dy = 4; var dz = 6; var bottom_side = CUBOID([dx,dy]); var upper_side = T([2])([dz])(CUBOID([dx,dy])); var left_side = R([0,2])([-PI/2])(CUBOID([dz,dy])); var right_side = T([0])([dx])(left_side); var back_side = T([1])([dy])(R([1,2])([PI/2])(CUBOID([dx,dz]))); var exterior = COLOR(white)(STRUCT([bottom_side, upper_side, left_side, right_side, back_side])); var dx_recess = 0.2; var dy_recess = 0.1; var dz_recess = 0.2; p1 = [0,0,0]; p2 = [dx,0,0]; p3 = [dx,0,dz]; p4 = [0,0,dz]; p5 = [dx_recess,dy_recess,dz_recess]; p6 = [dx-dx_recess,dy_recess,dz_recess]; p7 = [dx-dx_recess,dy_recess,dz-dz_recess]; p8 = [dx_recess,dy_recess,dz-dz_recess]; var c1 = BEZIER(S0)([p4,p3]); var c2 = BEZIER(S0)([p8,p7]); var c3 = BEZIER(S0)([p1,p4]); var c4 = BEZIER(S0)([p5,p8]); var c5 = BEZIER(S0)([p1,p2]); var c6 = BEZIER(S0)([p5,p6]); var c7 = BEZIER(S0)([p2,p3]); var c8 = BEZIER(S0)([p6,p7]); p9 = [dx_recess,dy-0.01,dz_recess]; p10 = [dx-dx_recess,dy-0.01,dz_recess]; p11 = [dx-dx_recess,dy-0.01,dz-dz_recess]; p12 = [dx_recess,dy-0.01,dz-dz_recess]; var c9 = BEZIER(S0)([p12,p11]); var c10 = BEZIER(S0)([p9,p12]); var c11 = BEZIER(S0)([p9,p10]); var c12 = BEZIER(S0)([p10,p11]); var interior = COLOR(light_brown)( STRUCT([surface([c1,c2]), surface([c3,c4]), surface([c5,c6]), surface([c7,c8]), surface([c2,c9]), surface([c4,c10]), surface([c6,c11]), surface([c8,c12])])); var outside = STRUCT([exterior, interior]); /****************************** DRAWERS ******************************/ var distance = 0.02; var dx_drs = dx-(dx_recess*2)-(distance*2); var dy_drs = dy-dy_recess-(distance); var dz_drs = dz-(dz_recess*2)-(distance*2); var dx_dr123 = (2*(dx_drs-distance))/3; var dy_dr123 = dy_drs; var dz_dr123 = (dz_drs-distance-distance)/3; var dx_dr4 = dx_dr123/2; var dy_dr4 = dy_drs; var dz_dr4 = dz_drs; var case123 = COLOR(light_brown)(STRUCT([CUBOID([dx_dr123, dy_dr123, 0.1]), CUBOID([dx_dr123, 0.1, dz_dr123]), CUBOID([0.1, dy_dr123, dz_dr123]), T([0])([dx_dr123-0.1])(CUBOID([0.1, dy_dr123, dz_dr123])), T([1])([dy_dr123-0.1])(CUBOID([dx_dr123, 0.1, dz_dr123]))])); var case4 = COLOR(light_brown)(STRUCT([CUBOID([dx_dr4, dy_dr4, 0.1]), CUBOID([dx_dr4, 0.1, dz_dr4]), CUBOID([0.1, dy_dr4, dz_dr4]), T([0])([dx_dr4-0.1])(CUBOID([0.1, dy_dr4, dz_dr4])), T([1])([dy_dr4-0.1])(CUBOID([dx_dr4, 0.1, dz_dr4]))])); var space = 0.2; var dz_figure123 = dz_dr123-(space); var dz_figure4 = dz_dr4-(space); var depht = 0.1; // drawer1 verts11 = [[space,space],[space,dz_figure123],[3.3,dz_figure123],[4.5,1.1],[5,dz_figure123],[5.3,dz_figure123],[5.7,space]]; cells11 = [[6,0,1],[6,2,1],[6,2,3],[6,3,4],[6,4,5]]; figure11 = STRUCT([T([2])([depht])(EXTRUDE([depht])(SIMPLICIAL_COMPLEX(verts11)(cells11))), T([0,1])([2.1,0.5])(CUBOID([1,1,depht]))]); verts21 = [[5.9,space],[5.5,dz_figure123],[dx_dr123-space,dz_figure123],[dx_dr123-space,space]]; cells21 = [[0,1,3],[1,2,3]]; figure21 = STRUCT([T([2])([depht])(EXTRUDE([depht])(SIMPLICIAL_COMPLEX(verts21)(cells21))), T([0,1])([6.8,0.5])(CUBOID([1,1,depht]))]); var figures1 = COLOR(white)(STRUCT([figure11, figure21])); var drawer1 = STRUCT([case123, R([1,2])([PI/2])(figures1)]); // drawer2 verts12 = [[space,space],[space,dz_figure123],[4.7,dz_figure123],[5,1.1],[4,space]]; cells12 = [[0,1,2],[0,2,3],[3,1,0],[3,4,0]]; figure12 = STRUCT([T([2])([depht])(EXTRUDE([depht])(SIMPLICIAL_COMPLEX(verts12)(cells12))), T([0,1])([2.1,0.5])(CUBOID([1,1,depht]))]); verts22 = [[5.4,space],[5.8,dz_figure123],[dx_dr123-space,dz_figure123],[dx_dr123-space,space]]; cells22 = [[0,1,3],[1,2,3]]; figure22 = STRUCT([T([2])([depht])(EXTRUDE([depht])(SIMPLICIAL_COMPLEX(verts22)(cells22))), T([0,1])([6.8,0.5])(CUBOID([1,1,depht]))]); var figures2 = COLOR(white)(STRUCT([figure12, figure22])); var drawer2 = STRUCT([case123, R([1,2])([PI/2])(figures2)]); // drawer3 verts13 = [[space,space],[space,dz_figure123],[2.8,dz_figure123],[2.3,space]]; cells13 = [[0,1,3],[1,2,3]]; figure13 = STRUCT([T([2])([depht])(EXTRUDE([depht])(SIMPLICIAL_COMPLEX(verts13)(cells13))), T([0,1])([0.6,0.5])(CUBOID([1,1,depht]))]); verts23 = [[3,space],[2.7,dz_figure123/2],[3,dz_figure123],[5.6,dz_figure123],[5.6,space]]; cells23 = [[1,2,3],[1,3,4],[1,4,0]]; figure23 = STRUCT([T([2])([depht])(EXTRUDE([depht])(SIMPLICIAL_COMPLEX(verts23)(cells23))), T([0,1])([3.8,0.5])(CUBOID([1,1,depht]))]); verts33 = [[5.8,space],[5.8,dz_figure123],[dx_dr123-space,dz_figure123],[dx_dr123-space,space]]; cells33 = [[0,1,3],[1,2,3]]; figure33 = STRUCT([T([2])([depht])(EXTRUDE([depht])(SIMPLICIAL_COMPLEX(verts33)(cells33))), T([0,1])([6.8,0.5])(CUBOID([1,1,depht]))]); var figures3 = COLOR(white)(STRUCT([figure13, figure23, figure33])); var drawer3 = STRUCT([case123, R([1,2])([PI/2])(figures3)]); // drawer4 verts14 = [[space,dz_recess+(distance*3)+(dz_dr123*2)],[space,dz_figure4],[2.3,dz_figure4],[2,dz_recess+(distance*3)+(dz_dr123*2)]]; cells14 = [[0,1,3],[1,2,3]]; figure14 = STRUCT([T([2])([depht])(EXTRUDE([depht])(SIMPLICIAL_COMPLEX(verts14)(cells14))), T([0,1])([0.6,dz_figure4-1.2])(CUBOID([1,1,depht]))]); verts24 = [[space,space],[space,-dz_recess+(distance)+(dz_dr123*2)],[2.3,-dz_recess+(distance)+(dz_dr123*2)],[2.7,dz_figure4], [dx_dr4-space,dz_figure4],[dx_dr4-space,dz_recess+(distance*2)+(dz_dr123)], [dx_dr4-2.5,dz_recess+(distance*2)+(dz_dr123)],[1.4,space]]; cells24 = [[0,6,7],[0,6,1],[1,6,2],[2,6,5],[2,5,4],[2,3,4]]; figure24 = STRUCT([T([2])([depht])(EXTRUDE([depht])(SIMPLICIAL_COMPLEX(verts24)(cells24))), T([0,1])([2.8,3.5])(CUBOID([1,1,depht])), T([0,1])([0.8,2])(CUBOID([1,1,depht]))]); verts34 = [[dx_dr4-2,space],[dx_dr4-2.3,dz_figure123],[dx_dr4-space,dz_figure123],[dx_dr4-space,space]]; cells34 = [[0,1,3],[1,2,3]]; figure34 = STRUCT([T([2])([depht])(EXTRUDE([depht])(SIMPLICIAL_COMPLEX(verts34)(cells34))), T([0,1])([2.8,0.5])(CUBOID([1,1,depht]))]); var figures4 = COLOR(white)(STRUCT([figure14, figure24, figure34])); var drawer4 = STRUCT([case4, R([1,2])([PI/2])(figures4)]); var drawers = STRUCT([T([0,1,2])([dx_recess+distance, dy_recess, dz_recess+distance])(drawer1), T([0,1,2])([dx_recess+distance, dy_recess, dz_recess+(distance*2)+dz_dr123])(drawer2), T([0,1,2])([dx_recess+distance, dy_recess, dz_recess+(distance*3)+(dz_dr123*2)])(drawer3), T([0,1,2])([dx_recess+(distance*2)+dx_dr123, dy_recess, dz_recess+distance])(drawer4)]); /****************************** FEET ******************************/ base = CUBOID([0.3,0.3,0.01]); side_left = T([0,1])([0.05,0.05])(R([0,2])([-PI/45])(CUBOID([0.01,0.2,1.8]))); side_right = T([0,1])([0.24,0.05])(R([0,2])([PI/45])(CUBOID([0.01,0.2,1.8]))); verts = [[0,0],[-0.028,0.5],[0.2+0.028,0.5],[0.2,0]]; cells = [[0,1,2],[0,2,3]]; trapeze = R([1,2])([PI/2])(EXTRUDE([0.01])(SIMPLICIAL_COMPLEX(verts)(cells))); front = T([0,1])([0.051,0.06])(trapeze); back = T([0,1])([0.051,0.25])(trapeze); function circle(r, h) { var domain = DOMAIN([[0, 2*PI],[0,r]])([30,30]); var mapping = function(v) { var a = v[0]; var r = v[1]; return [r*COS(a), r*SIN(a), h]; } model = MAP(mapping)(domain); return model; } top_side = T([0,1,2])([0.15,0.15,1.77])(STRUCT([CYL_SURFACE([0.5,0.1])([30,30]), circle(0.5,0), circle(0.5,0.1)])); var foot = COLOR([184/255, 134/255, 11/255])(STRUCT([base, side_left, side_right, front, back, top_side])); var feet = STRUCT([T([0,1,2])([-0.15+2,-0.15+0.8, -1.87])(foot), T([0,1,2])([-0.15-2+dx,-0.15+0.8, -1.87])(foot), T([0,1,2])([-0.15-2+dx,-0.15-0.8+dy, -1.87])(foot), T([0,1,2])([-0.15+2,-0.15-0.8+dy, -1.87])(foot)]) /****************************** COMMODE ******************************/ var commode = STRUCT([outside, drawers, feet]); DRAW(commode);