diff --git a/ball-link.scad b/ball-link.scad index 66223aa..83425d7 100644 --- a/ball-link.scad +++ b/ball-link.scad @@ -1,5 +1,5 @@ // Link with ends for ball inserts -// (c) Vitaliy Filippov 2014, license: CC-BY-SA 3.0 +// (c) Vitaliy Filippov 2014, license: CC-BY-SA 4.0 $fn=40; length=64; // 8U spacing between balls, like LEGO Black Link 9 (32293) diff --git a/small-shock-piston.scad b/small-shock-piston.scad index 9c45377..91db78a 100644 --- a/small-shock-piston.scad +++ b/small-shock-piston.scad @@ -1,5 +1,5 @@ // Piston for LEGO 76537 - Small Shock Absorber with Extra Hard Spring -// (c) Vitaliy Filippov 2014, license: CC-BY-SA 3.0 +// (c) Vitaliy Filippov 2014, license: CC-BY-SA 4.0 // Printed with Slic3r, 0.1mm layer, 0.3mm first layer and support enabled. $fn=40; diff --git a/tire/tire_81.6_50.scad b/tire/tire_81.6_50.scad index a2973aa..0876f1c 100644 --- a/tire/tire_81.6_50.scad +++ b/tire/tire_81.6_50.scad @@ -1,10 +1,19 @@ -// LEGO-like tire 81.6x50... Dunno where it's 81.6, it's 84 in fact... -// (c) Vitaliy Filippov 2014, license: CC-BY-SA 3.0 +// LEGO-like parametric tire... +// (c) Vitaliy Filippov 2014, license: CC-BY-SA 4.0 $fn=60; -R=42; // outer radius + +// 81.6x50: + +R=40.8; // outer radius R_I=26.5; // innermost radius +BEVEL=2; +THICKNESS=2.5; +PROT_DEPTH=1; +PROT_L_WIDTH=2; +PROT_A_WIDTH=2; B=2.5; // width of edge for the rim +B2=B+2; B_W=1.6; // thickness of edge for the rim B_P=4; // position of edge for the rim W=50; // tire width @@ -17,29 +26,54 @@ CUT_ANGLE=12; CUT_I_R=1.5; CUT_O_R=2; -// 6-spoke variant +/*// 6-spoke variant N_SPOKE=6; CUT_ANGLE=21; CUT_I_R=2.5; CUT_O_R=2; +N_L=2; -rim(); +// small +R=22; +BEVEL=1; +THICKNESS=1.5; +PROT_A_WIDTH=1; +PROT_L_WIDTH=1; +B=1.5; +B2=B+0.5; +R_I=15; +CUT_O_R=1; +CUT_BASE=5; +W=20;*/ + +translate([0, 0, W]) rotate([180, 0, 0]) { + rim(); +/* + // Support ... + translate([0, 0, SPOKE_THICKNESS+(R_I-2-CUT_BASE)/2+0.4]) cylinder(r=CUT_BASE, h=W-(SPOKE_THICKNESS+(R_I-2-CUT_BASE)/2+0.4)); + translate([0, 0, W-(B_P-2-0.2)+0.4]) cylinder(r=R_I+B+2, h=(B_P-2-0.2)-0.4); + translate([0, 0, W-(B_P-2-0.2)-2-B+0.5+0.4]) difference() { + cylinder(r=R_I+B+2, h=(B_P-2-0.2)+2+B-0.5-0.4); + translate([0, 0, -0.5]) cylinder(r=R_I+B+0.4, h=1+(B_P-2-0.2)+2+B-0.5-0.4); + } +*/ +} tire(); module rim() { - translate([0, 0, B_P-2-0.2]) color([0.5, 0.5, 1]) { + color([0.5, 0.5, 1]) { difference() { union() { - cylinder(r=R_I-0.2, h=W-2*(B_P-2-0.2)); - cylinder(r=R_I+B-0.5, h=2); - translate([0, 0, W-2*(B_P-2-0.2)-2]) cylinder(r=R_I+B-0.5, h=2); + cylinder(r=R_I-0.2, h=W-(B_P-2-0.2)); + cylinder(r=R_I+B-0.5, h=2+(B_P-2-0.2)); + translate([0, 0, W-(B_P-2-0.2)-2]) cylinder(r=R_I+B-0.5, h=2); hull() { - translate([0, 0, B_P]) cylinder(r=R_I+B+2, h=2); - translate([0, 0, B_P+B+2+0.2]) cylinder(r=R_I-0.2, h=2); + translate([0, 0, (B_P-2-0.2)+B_P]) cylinder(r=R_I+B2, h=2); + translate([0, 0, (B_P-2-0.2)+B_P+B2+0.2]) cylinder(r=R_I-0.2, h=2); } hull() { - translate([0, 0, W-2*(B_P-2-0.2)-6]) cylinder(r=R_I+B+2, h=2); - translate([0, 0, W-2*(B_P-2-0.2)-6-B-2-0.2]) cylinder(r=R_I-0.2, h=2); + translate([0, 0, W-(B_P-2-0.2)-6]) cylinder(r=R_I+B2, h=2); + translate([0, 0, W-(B_P-2-0.2)-6-B2-0.2]) cylinder(r=R_I-0.2, h=2); } } for (i = [1 : N_SPOKE]) @@ -49,10 +83,13 @@ module rim() { translate([(R_I-2-CUT_BASE)/2+CUT_BASE, 0, 0]) circle(r = (R_I-2-CUT_BASE)/2); translate([0, 0, SPOKE_THICKNESS+(R_I-2-CUT_BASE)/2]) cylinder(r=R_I-2, h=W); translate([0, 0, -0.5]) linear_extrude(height=W+1) axle(); - translate([0, 0, -1]) cylinder(r=CUT_BASE-3, h=5); - hull() { - translate([0, 0, -1]) cylinder(r=CUT_BASE-2, h=1); - translate([0, 0, -1]) cylinder(r=CUT_BASE-3, h=2); + translate([0, 0, -1]) cylinder(r=CUT_BASE-2, h=5+(B_P-2-0.2)); + difference() { + translate([0, 0, -1]) cylinder(r=1+R_I+B-0.5/*R_I-2*/, h=1+(B_P-2-0.2)); + translate([0, 0, (B_P-2-0.2)]) + scale([1, 1, (B_P-2-0.2)/((R_I-2-CUT_BASE+2)/2)]) + rotate_extrude(convexity = 10) + translate([(R_I-2-CUT_BASE+2)/2+CUT_BASE-2, 0, 0]) circle(r = (R_I-2-CUT_BASE+2)/2); } } } @@ -77,50 +114,55 @@ module rim_cut() { module tire() { difference() { hull() { - translate([0, 0, 2]) cylinder(r=R, h=W-4); - cylinder(r=R-2, h=W); + translate([0, 0, BEVEL]) cylinder(r=R, h=W-BEVEL*2); + cylinder(r=R-BEVEL, h=W); } // center hole through all piece translate([0, 0, -0.5]) cylinder(r=R_I, h=W+1); // top hole translate([0, 0, W-B_P]) cylinder(r=R_I+B, h=B_P+1); hull() { - translate([0, 0, W-1.5]) cylinder(r=R_I+B, h=1.5); - translate([0, 0, W]) cylinder(r=R_I+B+1.5, h=1); + translate([0, 0, W-BEVEL]) cylinder(r=R_I+B, h=BEVEL); + translate([0, 0, W]) cylinder(r=R_I+B+BEVEL, h=1); } // bottom hole translate([0, 0, -1]) cylinder(r=R_I+B, h=B_P+1); hull() { - translate([0, 0, 0]) cylinder(r=R_I+B, h=1.5); - translate([0, 0, -1]) cylinder(r=R_I+B+1.5, h=1); + translate([0, 0, 0]) cylinder(r=R_I+B, h=BEVEL); + translate([0, 0, -1]) cylinder(r=R_I+B+BEVEL, h=1); } // inside cut - translate([0, 0, B_P+B_W]) cylinder(r=R-3, h=W-(B_P+B_W)*2); + translate([0, 0, B_P+B_W]) cylinder(r=R-THICKNESS-PROT_DEPTH/2, h=W-(B_P+B_W)*2); difference() { - translate([0, 0, 2.5]) cylinder(r=R-3, h=W-2.5*2); - cylinder(r=R_I+B+2, h=W); + translate([0, 0, THICKNESS]) cylinder(r=R-THICKNESS-PROT_DEPTH/2, h=W-THICKNESS*2); + cylinder(r=R_I+B+THICKNESS, h=W); } // lateral protector for (i = [1 : N_L]) - translate([0, 0, -1+i*W/(N_L+1)]) difference() { - cylinder(r=R+1, h=2.5); - translate([0, 0, -0.1]) cylinder(r=R-1, h=2.5+0.2); - } + translate([0, 0, -PROT_L_WIDTH/2+i*W/(N_L+1)]) + difference() { + cylinder(r=R+1, h=PROT_L_WIDTH); + translate([0, 0, -0.01]) linear_extrude(height=min(PROT_L_WIDTH/2-0.1, PROT_DEPTH/2)+0.01, scale=(R-PROT_DEPTH)/(R+0.01)) circle(r=R+0.01); + translate([0, 0, PROT_L_WIDTH]) rotate([180, 0, 0]) translate([0, 0, -0.01]) linear_extrude(height=min(PROT_L_WIDTH/2-0.1, PROT_DEPTH/2)+0.01, scale=(R-PROT_DEPTH)/(R+0.01)) circle(r=R+0.01); + translate([0, 0, -0.1]) cylinder(r=R-PROT_DEPTH, h=PROT_L_WIDTH+0.2); + } // angular protector for (i = [1 : N_A]) rotate([0, 0, 360/N_A*i]) protector_single(); // to cut and look inside :) - //translate([0, 0, -0.1]) cube(size=[100, 100,100]); + translate([0, 0, -0.5]) cube(size=[R+10, R+10, W+1]); } } module protector_single() { difference() { union() { - translate([(W/2)/2, 0, W/2]) rotate([0, -45, 0]) cube(size=[2, R+4, sqrt((W/2)*(W/2)*2)]); - translate([-(W/2+2)/2, 0, 0]) rotate([0, 45, 0]) cube(size=[2, R+4, sqrt((W/2+2)*(W/2+2)*2)]); + translate([(W/2)/2, 0, W/2]) rotate([0, -45, 0]) + cube(size=[PROT_A_WIDTH, R+4, sqrt((W/2)*(W/2)*2)]); + translate([-(W/2)/2, 0, 0]) rotate([0, 45, 0]) + cube(size=[PROT_A_WIDTH, R+4, PROT_A_WIDTH+sqrt((W/2)*(W/2)*2)]); } - translate([0, 0, -0.5]) cylinder(r=R-1, h=W+1); + translate([0, 0, -0.5]) cylinder(r=R-PROT_DEPTH, h=W+1); translate([0, 0, W]) cylinder(r=R+10, h=10); translate([0, 0, -10]) cylinder(r=R+10, h=10); } diff --git a/wakeboard/wakeboard.scad b/wakeboard/wakeboard.scad index e969955..4790542 100644 --- a/wakeboard/wakeboard.scad +++ b/wakeboard/wakeboard.scad @@ -1,5 +1,5 @@ // Simple wakeboard model -// (c) Vitaliy Filippov 2014, license: CC-BY-SA 3.0 +// (c) Vitaliy Filippov 2014, license: CC-BY-SA 4.0 // Print with Slic3r 1.1.3-dev rotated 45 degree to the edge with following settings // 0.1mm layer, 0.3mm first layer, enforce support for first layers = 40, // skirt distance = 0, skirt loops = 4, skirt height = 1 layer