include ; use ; inner_diameter = 410; inner_width = 40; thickness = 4; inner_curve_diameter = 60; module wheel( diameter, width, curve_diameter) { intersection() { linear_extrude( width, center=true) circle( d=diameter); union() { linear_extrude( width, center=true) circle( d=diameter-curve_diameter); rotate_extrude( angle=360) translate( [(diameter-curve_diameter)/2, 0]) circle( d=curve_diameter); } } } module base() { difference() { wheel( inner_diameter+2*thickness, inner_width+2*thickness, inner_curve_diameter+2*thickness); wheel( inner_diameter, inner_width, inner_curve_diameter); translate( [0, 0, inner_width/2]) linear_extrude( inner_width, center=true) circle( d=inner_diameter-15); } *rotate_extrude( angle=360) translate( [(diameter-curve_diameter)/2, 0]) circle( d=curve_diameter); } module form() { linear_extrude( inner_width+2*thickness+2, center=true) offset(50) offset(-100) offset(50) polygon([ [inner_diameter/2+thickness+2, inner_diameter/2], [inner_diameter/4, inner_diameter*0.15], [-inner_diameter*0.13, inner_diameter*0.13], [-inner_diameter*0.1, -inner_diameter*0.4*sin(45)], [-inner_diameter*0.45*sin(45), -inner_diameter*0.45*sin(45)], [-inner_diameter, -inner_diameter], [-inner_diameter, inner_diameter] ]); } scale([1,1,1]) intersection() { base(); form(); }