module two_cylinder() { translate( [ 0.8, 0, 0 ] ) cylinder( 2, 1, 1 ); translate( [ -0.8, 0, 0 ] ) cylinder( 2, 1, 1 ); } module oblong() { diameter = 2; width = 4; length = 3; r = diameter / 2; c = width/2 - r; color( "#eeeeee" ) { cube([ diameter, c*2, length ], center=true); translate( [ 0, c, 0 ] ) cylinder( length, r, r, center=true ); translate( [ 0, -c, 0 ] ) cylinder( length, r, r, center=true ); } } module cylinder_extrude() { translate( [ 0, 0, -1 ] ) linear_extrude( 2 ) circle( 1 ); } module rocket() { translate( [ 0, 0, -4 ] ) linear_extrude( 4 ) circle( 1 ); linear_extrude( 0.5, scale=0.5 ) circle( 1 ); translate( [ 0, 0, 0.5 ] ) linear_extrude( 2 ) circle( 0.5 ); translate( [ 0, 0, 2.5 ] ) linear_extrude( 2, scale=0 ) circle( 0.5 ); } module quarter_donut() { r_leg = 0.5; bend_r = 2.0; rotate( 180, [ 0, 1, 0 ] ) rotate( 90, [ 1, 0, 0 ] ) rotate_extrude( angle=90 ) translate( [ bend_r, 0, 0 ] ) circle( r_leg ); } module one_leg_par( leg_dia, bend_dist, bend_r, leg_vlen ) { r_leg = leg_dia/2; l_h = bend_dist - bend_r; color( "#777777" ) { // horizontal part of the leg translate( [ 0, 0, -l_h-.001 ] ) cylinder( l_h+1.002, r_leg, r_leg ); // vertical part of the leg translate( [ bend_r+.00, 0, -bend_dist ] ) rotate( 90, [ 0, 1, 0 ] ) cylinder( leg_vlen-bend_r+.001, r_leg, r_leg ); // curved part of the leg translate( [ bend_r, 0, -l_h ] ) rotate( 180, [ 0, 1, 0 ] ) rotate( 90, [ 1, 0, 0 ] ) rotate_extrude( angle=90 ) translate( [ bend_r, 0, 0 ] ) circle( r_leg ); } } module legs_par( leg_dist, leg_dia, bend_dist, bend_r, leg_vlen ) { translate( [ 0, leg_dist/2, 0 ] ) one_leg_par( leg_dia, bend_dist, bend_r, leg_vlen ); // translate( [ 0, -leg_dist/2, 0 ] ) // one_leg_par( leg_dia, bend_dist, bend_r, leg_vlen ); } module legs() { diameter = 9; leg_dist = 11.8; leg_dia = 0.6; bend_r = 0.6; bend_dist = 2; leg_vlen = diameter/2 + 3.5; legs_par( leg_dist, leg_dia, bend_dist, bend_r, leg_vlen ); } module oblong2d() { // square( 2, center=true ); translate( [ -1, -1, 0 ] ) square( 2 ); translate( [ 0, 1, 0 ] ) circle( 1 ); translate( [ 0, -1, 0 ] ) circle( 1 ); } module oblongext() { linear_extrude( 4 ) oblong2d(); } module oblonghalvedonut() { rotate_extrude( angle=180 ) translate( [ 4, 0, 0 ] ) oblong2d(); } module oblong2dgroove() { difference() { oblong2d(); translate( [ 1, 0.7, 0 ] ) circle( 0.2 ); } } module oblonggroovedonut() { rotate_extrude( angle=180 ) translate( [ 4, 0, 0 ] ) oblong2dgroove(); } module green_heat_shrink_shape_p( diameter, width, length, hsdepth ) { // fillet radius at the edge r_edge = 0.2; // radius of the notch r_notch = 0.6; // inner depth without the fillet d_i = hsdepth - r_edge; x_notch = d_i + sqrt(0.5) * (r_edge + r_notch); y_notch = 3 * r_notch; dy_nf = sqrt(0.5) * (r_edge + r_notch); y_nfl = y_notch - dy_nf; y_nfh = y_notch + dy_nf; difference() { union() { // main body square( [ d_i, length ] ); // fillet top and bottom translate( [ d_i, r_edge, 0 ] ) circle( r_edge ); translate( [ d_i, 19.5-r_edge, 0 ] ) circle( r_edge ); // notch lower fillet and fill translate( [ d_i, y_nfl, 0 ] ) circle( r_edge ); translate( [ d_i, r_edge, 0 ] ) square( [ r_edge, y_nfl - r_edge ] ); // notch upper fillet and fill translate( [ d_i, y_nfh, 0 ] ) circle( r_edge ); translate( [ d_i, y_nfh, 0 ] ) square( [ r_edge, length - y_nfh - r_edge ] ); // fill the notch up to the cut translate( [ d_i, y_nfl, 0 ] ) square( [ r_edge*sqrt(0.5), y_nfh - y_nfl ] ); } translate( [ x_notch, y_notch, 0 ] ) circle( r_notch ); } } module green_heat_shrink_halve_p( diameter, width, length, hsdepth ) { r_i = diameter/2 - hsdepth; w_i2 = width/2 - hsdepth - r_i; translate( [ 0, w_i2, 0 ] ) rotate( 90, [ 1, 0, 0 ] ) linear_extrude( 2*w_i2 ) { translate( [ r_i, 0, 0 ] ) green_heat_shrink_shape_p( diameter, width, length, hsdepth ); } translate( [ 0, w_i2, 0 ] ) rotate_extrude(angle=180) { translate( [ r_i, 0, 0 ] ) green_heat_shrink_shape_p( diameter, width, length, hsdepth ); } } module green_heat_shrink_halve() { diameter = 9; width = 17.5; length = 19.5; hsdepth = 1; green_heat_shrink_halve_p( diameter, width, length, hsdepth ); }