$fn=60; use include Teil = 2; // [1:Dose, 2:Deckel] Durchmesser=40; Wandstaerke=1.5; Laenge_Gewinde=5; Laenge_Dose=15; Raendel=3; // Durchmesser module Gewinde(dia, len, int) { clearance=(int) ? 1 : 0; // int==true = Innengewinde mit 1mm Spiel metric_thread(diameter=dia+clearance, pitch=2, thread_size=1.5, length=len, leadin=2, n_starts=1, internal=int); } module Raendelung(h) { for (i=[0:360/16:359]) rotate([0,0,i]) translate([(Durchmesser)/2-1,0,0]) hull() { sphere(d=Raendel); translate(v = [0,0,h]) sphere(d=Raendel); } } module Dose() { difference() { union() { Gewinde(Durchmesser-2*Wandstaerke, len=5, int=false); translate([0,0,Laenge_Gewinde]) union() { cylinder(d=Durchmesser, h=Laenge_Dose); translate([0,0,2]) Raendelung(Laenge_Dose-4); } translate([0,0,Laenge_Gewinde+Laenge_Dose]) Gewinde(Durchmesser-2*Wandstaerke, len=Laenge_Gewinde, int=false); } cylinder(d=Durchmesser-5*Wandstaerke, h=100, center=true); } intersection() { cylinder(d=Durchmesser-5*Wandstaerke, h=10, center=true); x=50; translate([-x/2,-x/2,0]) linear_extrude(height=1.25) honeycomb(x, x, 3.75, 2, whole_only=true); } } module Deckel() { Rundung=5; // Durchmesser! difference() { union() { hull() rotate_extrude() translate([(Durchmesser-Rundung)/2,0]) circle(d=Rundung); Raendelung(3); cylinder(d=Durchmesser, h=Laenge_Gewinde); } Gewinde(dia=Durchmesser-2*Wandstaerke, len=6, int=true); } } if (Teil==1) render() Dose(); if (Teil==2) render() Deckel();