// Geometry of the sliding piece of the IC abacus // Last edited on 2003-09-18 21:45:07 by stolfi // // Requires // ic_abacus_slider_angle = angle between chamfer and flat face, in degrees // // Defines // ic_abacus_slider = // the slider piece, outer radius = 1, thickness = 2*ic_abacus_slider_HY // centered on the origin and threaded on the Y axis. // Basic proportions of a slider: // These are relative to the slider's overall radius: // ic_abacus_slider_width = thickness of sliders (along hole) // ic_abacus_slider_round_min_R = radius of filet around rim // ic_abacus_slider_sin_t = sin of angle between chamfer and base of slider // ic_abacus_slider_cos_t = cos of angle between chamfer and base of slider // ic_abacus_slider_hole_R = radius of slider hole // ic_abacus_slider_flat_R = radius of flat part around hole #declare ic_abacus_slider_width = 1.10; #declare ic_abacus_slider_hole_R = 0.32; #declare ic_abacus_slider_flat_R = 0.50; #declare ic_abacus_slider_sin_t = sin(radians(ic_abacus_slider_angle)); #declare ic_abacus_slider_cos_t = cos(radians(ic_abacus_slider_angle)); #declare ic_abacus_slider_HY = ic_abacus_slider_width / 2; #declare ic_abacus_slider_round_min_R = (ic_abacus_slider_HY*ic_abacus_slider_cos_t - (1-ic_abacus_slider_flat_R)*ic_abacus_slider_sin_t) / (1 - ic_abacus_slider_sin_t); #declare ic_abacus_slider_round_maj_R = 1 - ic_abacus_slider_round_min_R; #declare ic_abacus_slider_round_HY = ic_abacus_slider_round_min_R * ic_abacus_slider_cos_t; #declare ic_abacus_slider_cap_base_Y = ic_abacus_slider_round_HY; #declare ic_abacus_slider_cap_base_R = ic_abacus_slider_round_maj_R + ic_abacus_slider_round_min_R / ic_abacus_slider_sin_t; #declare ic_abacus_slider_cap_height = ic_abacus_slider_cap_base_R * (ic_abacus_slider_sin_t / ic_abacus_slider_cos_t); #declare ic_abacus_slider_cap_join_R = ic_abacus_slider_round_maj_R + ic_abacus_slider_round_min_R * ic_abacus_slider_sin_t; #declare ic_abacus_slider_bounder = cylinder{ <0, -ic_abacus_slider_HY, 0>, <0, +ic_abacus_slider_HY, 0>, 1.0 } #declare ic_abacus_slider_joiner_cyl = cylinder{ <0, -ic_abacus_slider_HY, 0>, <0, +ic_abacus_slider_HY, 0>, 1.00001*ic_abacus_slider_cap_join_R } #declare ic_abacus_slider_cap_cone = cone{ <0, -0.0001*ic_abacus_slider_cap_height, 0>, 1.0001*ic_abacus_slider_cap_base_R <0, ic_abacus_slider_cap_height, 0>, 0 } #declare ic_abacus_slider_caps = intersection{ merge{ object{ic_abacus_slider_cap_cone} object{ic_abacus_slider_cap_cone scale <1,-1,1>} } object{ic_abacus_slider_joiner_cyl} } #declare ic_abacus_slider_round = difference{ torus{ic_abacus_slider_round_maj_R, ic_abacus_slider_round_min_R} object{ic_abacus_slider_joiner_cyl scale <0.99999, 1.00001, 0.99999>} } #declare ic_abacus_slider_hole = cylinder{ <0, -1.1*ic_abacus_slider_HY, 0>, <0, +1.1*ic_abacus_slider_HY, 0>, ic_abacus_slider_hole_R } #declare ic_abacus_slider = difference{ merge{ object{ic_abacus_slider_caps} ic_abacus_slider_round } object{ic_abacus_slider_hole} bounded_by{object{ic_abacus_slider_bounder scale 1.0001}} }