// program to design a wrist watch // // define the basic lengths // for the clock... cl_diameter = 24; cl_height = 1; // // for the clock hands... sec_length = 10; sec_width = 1; sec_thickness = 0.5; min_length = 8; min_width = 1.25; min_thickness = 0.5; h_length = 4; h_w = 1.25; h_t = 0.5; cap_diameter = min_width; cap_height = min_thickness; // // for the clock numbers text_t = cl_height / 2; text_c = 2.83/2; point_diameter = 1; // // for the clock base... base_diameter = 25; base_t = 4; side_w = 4; side_l = 15; bottom_diameter = base_diameter * 5/6; bottom_t = 0.5; knob_diameter = 2; knob_height = 2; notch_cylinder_dia = 1; // for the strap strap_length = 35; strap_thickness = 1; strap_width = side_l/2-strap_thickness; // // // main program // create the clock clock = cone(cl_diameter/2, (cl_diameter * 5/6) / 2, cl_height,32); cl_cut = cylinder((cl_diameter*5/6) / 2, cl_height,32); clock = clock.difference(cl_cut); // // create the needles // second hand second_flat = start2DGeom(0,0); second_flat.addLine(0,sec_length*1/4); second_flat.addLine(sec_width*1/4,sec_length*1/4); second_flat.addLine(sec_width*1/4,sec_length); second_flat.addArc(sec_width*3/4,sec_length,sec_width*1/2,sec_length,true); second_flat.addLine(sec_width*3/4,sec_length*1/4); second_flat.addLine(sec_width,sec_length*1/4); second_flat.addLine(sec_width,0); second_flat.addLine(0,0); second_hand = extrudeShape(second_flat, sec_thickness); // minute hand minute_flat = start2DGeom(0,0); minute_flat.addLine(0,min_length*1/4); minute_flat.addLine(min_width*1/4,min_length*1/4); minute_flat.addLine(min_width*1/4,min_length); minute_flat.addArc(min_width*3/4,min_length,min_width*1/2,min_length,true); minute_flat.addLine(min_width*3/4,min_length*1/4); minute_flat.addLine(min_width,min_length*1/4); minute_flat.addLine(min_width,0); minute_flat.addLine(0,0); minute_hand = extrudeShape(minute_flat, min_thickness); // hour hand hour_flat = start2DGeom(0,0); hour_flat.addLine(0,h_length*1/4); hour_flat.addLine(h_w*1/4,h_length*1/4); hour_flat.addLine(h_w*1/4,h_length); hour_flat.addArc(h_w*3/4,h_length,h_w*1/2,h_length,true); hour_flat.addLine(h_w*3/4,h_length*1/4); hour_flat.addLine(h_w,h_length*1/4); hour_flat.addLine(h_w,0); hour_flat.addLine(0,0); hour_hand = extrudeShape(hour_flat, h_t); // cap the needles with a cylinder cap = cylinder(cap_diameter/2,cap_height,32); // // create the base base = cylinder(base_diameter/2,base_t,32); // its sides base_side = cube(side_w,base_t,side_l); base_side.translateX((base_diameter/2)*11/12); base_side2 = cube(side_w,base_t,side_l); base_side2.translateX(-(base_diameter/2)*11/12); base = base.merge(base_side); base = base.merge(base_side2); notch = cube(side_w/2,base_t+10,side_l/2); notch2 = notch.clone(); notch.translateX(-(base_diameter*0.5)); notch2.translateX(base_diameter*0.5); base = base.difference(notch); base = base.difference(notch2); notch_cylinder = cylinder(notch_cylinder_dia/2, side_l/2); notch_cylinder2 = notch_cylinder.clone(); notch_cylinder.translateX(-base_diameter/2); notch_cylinder.rotateX(90); notch_cylinder2.translateX(base_diameter/2); notch_cylinder2.rotateX(90); base = base.merge(notch_cylinder); base = base.merge(notch_cylinder2); // its adjustment knob g1 = cube(knob_diameter,knob_diameter,knob_height); g = g1.clone(); for (i = 0;i < 20;i++) { g1.rotateX(18);// 18 degrees each time g = g.merge(g1); } // create the strap strap = cube(strap_length,strap_thickness,strap_width); edge_1 = cylinder(strap_thickness/2,strap_length); edge_3 = cylinder(strap_thickness/2,strap_width); loop = cylinder(strap_thickness*1.5, strap_width); over = cube(strap_length*0.125,strap_thickness,strap_width); edge_5 = cylinder(strap_thickness/2,strap_length*0.125); corner_1 = sphere(strap_thickness/2); corner_2 = corner_1.clone(); corner_3 = corner_1.clone(); corner_4 = corner_1.clone(); // // move... // the clock clock.translateY(base_t/2); // the second hand second_hand.rotateZ(90); second_hand.rotateX(90); second_hand.translateY(base_t/2+sec_thickness); second_hand.translateX(sec_length*1/4); second_hand.translateZ(-sec_width/2); second_hand.rotateY(-60); // the minute hand minute_hand.rotateZ(90); minute_hand.rotateX(90); minute_hand.translateY(base_t/2+min_thickness); minute_hand.translateX(min_length*1/4); minute_hand.translateZ(-min_width/2); minute_hand.rotateY(-30); // the hour hand hour_hand.rotateZ(90); hour_hand.rotateX(90); hour_hand.translateY(base_t/2+h_t); hour_hand.translateX(h_length*1/4); hour_hand.translateZ(-h_w/2); //hour_hand.rotateY(-270); // the cap cap.translateY((base_t/2)+min_thickness+(cap_height/2)); // the adjustment knob g.rotateY(90); g.translateZ(base_diameter/2); //g.rotateZ(90); // // create the numbers twelve = textGeom("XII",text_t*4,text_t); twelve.rotateX(90); twelve.rotateY(90); twelve.translateY((base_t/2)+text_t); twelve.translateX(-cl_diameter*13/32); twelve.translateZ(text_c); // point = cylinder(point_diameter/2,text_t); point.translateY((base_t/2)+text_t); point.translateX(-cl_diameter*12/32); point.rotateY(-30); main = twelve; for (i = 0;i<11;i++) { point2 = point.clone(); point2.rotateY(-30*i); main = main.merge(point2);//display(); } // the strap edge_1.rotateZ(90); edge_3.rotateX(90); loop.rotateX(90); edge_5.rotateZ(63.5); edge_2 = edge_1.clone(); edge_4 = edge_3.clone(); edge_1.translateZ(strap_width/2); edge_2.translateZ(-strap_width/2); edge_3.translateX(strap_length/2); edge_4.translateX(-strap_length/2); edge_5.translateX(-strap_length*7/16); edge_5.translateY(strap_thickness); edge_5.translateZ(strap_width/2); edge_6 = edge_5.clone(); edge_6.translateZ(-strap_width); loop.translateX(-strap_length/2); loop.translateY(strap_thickness); over.rotateZ(-26.5); over.translateX(-strap_length*7/16); over.translateY(strap_thickness); corner_1.translate(strap_length/2,0,strap_width/2); corner_2.translate(-strap_length/2,0,strap_width/2); corner_3.translate(strap_length/2,0,-strap_width/2); corner_4.translate(-strap_length/2,0,-strap_width/2); corner_5 = corner_2.clone(); corner_6 = corner_4.clone(); corner_5.translateY(strap_thickness*2); corner_6.translateY(strap_thickness*2); edge_6 = edge_6.merge(corner_6); // // get the info about all of the pieces... //twelve.info(); //clock.info(); //base.info(); // second_hand.info(); // // union the pieces hands = second_hand.merge(hour_hand); hands = hands.merge(minute_hand); hands = hands.merge(cap); // main = main.merge(clock); main = main.merge(base); main = main.merge(hands); // main = main.merge(g); // strap = strap.merge(edge_1); strap = strap.merge(edge_2); strap = strap.merge(edge_3); strap = strap.merge(edge_4); strap = strap.merge(corner_1); strap = strap.merge(corner_2); strap = strap.merge(corner_3); strap = strap.merge(corner_4); strap = strap.merge(loop); strap = strap.merge(over); strap = strap.merge(edge_5); strap = strap.merge(edge_6); strap = strap.merge(corner_5); strap.rotateY(180); strap.translateX(-strap_length*7/8); strap2 = strap.clone(); strap2.mirrorX(); // //main = main.merge(strap); //main = main.merge(strap2); main = main.difference(notch); main = main.difference(notch2); // // // display the piece main.display();