// воронка для пузыря из под воды под 3-заходную резьбу

K1 = 2;

$fn = 36*K1;

E1 = 0.01;
E2 = E1 * 2;

D0 = 33.5; // внутренний диаметр горла
D1 = 36+0.5; // внешний диаметр горла (внутренний резьбы)
D2 = 38+0.5; // внешний диаметр резьбы

V3 = 3; // число витков

ZOFFS1 = 1;
H0 = 10; // высота горла
S0 = 3; // шаг резьбы

N1 = 36*K1; // число секторов резьбы
OB1 = H0 / S0 / V3; // оборотов резьбы

X1 = (D2-D1) / 2; //длина зуба
Z1 = S0 / 2; // высота зуба

difference ()
{
	union ()
	{
		translate ([0,0,+ZOFFS1]) cylinder (h=H0,d=D2+3); // внешка
		Nasechka ();
		translate ([0,0,H0+ZOFFS1])Voronka ();
	}
	translate ([0,0,+1-E1]) cylinder (h=H0+E2,d=D1); // дырка в крыше

	cylinder (h=H0,d1=D1+1,d2=D1); // нутро резьбы

	translate ([0,0,-Z1])
	for (i=[1:V3])
	{
		rotate ([0,0,i*360/3]) Vitok ();
	}
	
	//color ("red") cube ([25,25,50]); // сечение
}
//color ("blue") translate ([D1/2+2.5,0,3/2]) cube ([3,3,3],center=true);

module Nasechka ()
{
	for (i=[1:36])
	{
		rotate ([0,0,i*360/36]) translate ([0,D2/2+1.25,1]) cylinder (h=H0,d=1.5);
	}
}

module Vitok ()
{
	for (i=[1:N1*OB1])
	{
		j = i - 1;
		hull ()
		{
			translate ([0,0,j*S0/N1*V3]) rotate ([0,0,j/N1*360]) translate ([D1/2,0,0]) Zub ();
			translate ([0,0,i*S0/N1*V3]) rotate ([0,0,i/N1*360]) translate ([D1/2,0,0]) Zub ();
		}
	}
}

module Zub ()
{
	rotate ([90,0,0]) linear_extrude (E1) polygon (points=[[0,0],[X1,0],[X1,Z1/2],[0,Z1]]);
}

DA = 2;
DW = 0.75;
DZ = 0.1;
W0 = 2;

module Voronka ()
{
	A0 = 15;
	translate ([0,-D1,0]) 
	difference ()
	{
		union ()
		{
			color ("blue") translate ([0,55,8.5/2+0.5]) rotate ([90+A0,0,0]) translate ([0,0,+1.5]) cylinder (h=5,d=8.5+3,center=true);
			Voron (D1+W0);
		}
		Voron (D1,1);
		color ("blue") translate ([0,55,8.5/2+0.5]) rotate ([90+A0,0,0]) cylinder (h=25,d=8.5,center=true);
	}
}

module Voron (D0,K=0)
{
	for (i=[0-K:29+K])
	{
		j = i + 1;
		hull ()
		{
			translate ([0,0,i*DZ]) rotate ([i*DA,0,0]) translate ([0,D1-(i*DW)/2,0]) cylinder (h=E1,d=D0-i*DW);
			translate ([0,0,j*DZ]) rotate ([j*DA,0,0]) translate ([0,D1-(j*DW)/2,0]) cylinder (h=E1,d=D0-j*DW);
		}
	}
}
