use global_fn=180; $fn=global_fn; Eps=0.1; //Vyfuk digestore dvf_dy=150; //vnejsi prumer podelne dvf_dx=148.7; //vnejsi prumer pricne dvf_tl=2.8; //tloustka steny dvf_dx_sl=1.8; //prumer vymezovacich sloupku na stenach dvf_dy_sl=2.2; //o kolik vymezovaci sloupek vycuhuje dovnitr dvf_x_sl=(34-1.25)/2; //x-ova souradnice stredu sloupku dvf_inner=dvf_dx/2-dvf_tl; //vnitrni prumer (pred deformaci) dvf_y_sl=dvf_inner*sin(acos(dvf_x_sl/dvf_inner)); //y-ova souradnice dvf_block_x=50; //polosirka blocku (dotyk s vnitrnim prumerem) dvf_block_y=dvf_inner*sin(acos(dvf_block_x/dvf_inner)); dvf_block_z=31.5; //zapusteni blocku pod vrchni hranu dvf_block_r=8; dvf_screw_z=19; //zapusteni sroubu dvf_screw_x=-20.77; dvf_screw_y=dvf_dy/2-15; dvf_screw_pad=7; dvf_height=dvf_block_z+dvf_block_r*2; //Al roura al_d=133; //vnejsi prumer al_tl=3.6; //tloustka steny //Koleno Kd=114; //vnitrni prumer roury Ktl=3; //tloustka steny Ktol=1.1; //tolerance lozisek+presnost tisku v X,Y smerech Kcr=35; //polomer toceni kolene v miste nejvyssi krivosti Kseal=8.8; //sirka tesnici dosedaci plochy Kxrim=14; //sirka priruby Kyrim=4.75; //vyska priruby Kgroove_width=1.2; //sirka drazky Kgroove_depth=2; //hloubka drazky //Ventil Vd=128; module vyfuk(positive) { eps0=0.1; eps=positive?0:eps0; sy(dvf_dy/dvf_dx){ difference(){ cylinder(d=dvf_dx+2*eps, h=dvf_height+2*eps, $fn=360); mz(-1) cylinder(d=dvf_dx-2*dvf_tl-2*eps, h=dvf_height+2, $fn=360); } difference(){ xsym(){ mx(dvf_dx/2-dvf_tl){ mx(-dvf_dy_sl+dvf_dx_sl/2) cylinder(d=dvf_dx_sl+2*eps, h=dvf_height+2*eps); mx(-(dvf_dy_sl-dvf_dx_sl/2)/2) box(dvf_dy_sl-dvf_dx_sl/2+2*eps, dvf_dx_sl+2*eps, dvf_height+2*eps); } ysym() mx(dvf_x_sl) my(dvf_y_sl) rz(atan(dvf_y_sl/dvf_x_sl)){ mx(-dvf_dy_sl+dvf_dx_sl/2) cylinder(d=dvf_dx_sl+2*eps, h=dvf_height+2*eps); mx(-(dvf_dy_sl-dvf_dx_sl/2)/2) box(dvf_dy_sl-dvf_dx_sl/2+2*eps, dvf_dx_sl+2*eps, dvf_height+2*eps); } } mz(dvf_height-7) my(-dvf_dy/2+dvf_tl) rx(-30) box(200,80,1.5); } intersection(){ union(){ my((dvf_block_y+dvf_inner+dvf_block_r)/2) box(dvf_block_x*2,dvf_inner-dvf_block_y-dvf_block_r,2*dvf_block_r); my(dvf_block_y+dvf_block_r) mz(dvf_block_r) ry(90)mz(-50)cylinder(r=dvf_block_r, h=100); my((dvf_block_y+dvf_inner)/2) box(dvf_block_x*2,dvf_inner-dvf_block_y,dvf_block_r); mx(dvf_screw_x) my(dvf_screw_y+(dvf_inner-dvf_screw_y-dvf_screw_pad/2)/2) box(dvf_screw_pad+2*eps,2*eps+dvf_inner-dvf_screw_y+dvf_screw_pad/2,dvf_height-dvf_screw_z+eps); } cylinder(d=dvf_dx+2*eps, h=dvf_height+2*eps, $fn=360); } mx(dvf_screw_x) my(dvf_screw_y){ mz(dvf_height-dvf_screw_z+2)cylinder(d=8.5+2*eps,h=3*dvf_screw_z); //dira na sroub cylinder(d=3.83+eps,h=dvf_height); } } } module adapter_digestor_roura() { l=11; //+30; difference(){ union(){ mz(dvf_height-l) cylinder(d=dvf_dx+4, h=l+2.5+4, $fn=360); sy(dvf_dy/dvf_dx) mx(dvf_screw_x) my(dvf_screw_y) mz(dvf_height-dvf_screw_z)cylinder(d=12,h=dvf_screw_z); //trubka na sroub } vyfuk(0); mx(-5) my(-6) mz(dvf_height-l-1){ cylinder(d=al_d-al_tl*2-4, h=l+70, $fn=360); mz(l+3){ torus(al_d/2-al_tl/2, al_tl/2); difference(){ cylinder(r=al_d/2, h=10, $fn=360); mz(-1) cylinder(r=al_d/2-al_tl, h=12, $fn=360); } box(3,al_d, h=30); box(al_d,3, h=30); } } } // mz(20) box(1,8,8); } module plechy() { difference(){ box(192+2,175+1,500); mz(-1)my(-1.1)box(192,175,502); } } module groove(eps) { mx(Kcr+Kd/2+Ktl) rx(-90) mz(-.1) difference(){ cylinder(d=Kd+Ktl+(Kgroove_width+eps)*2, h=Kgroove_depth+eps/2); mz(-1)cylinder(d=Kd+Ktl, h=Kgroove_depth+2); box(500,38,5); } mid=Kcr+Kd/2+Ktl; mx(mid) xsym() mx(-mid) zsym() mz(38/2) mx(25+5) my(Kgroove_depth/2-.1) box(20, Kgroove_depth+eps, Kgroove_width+eps); mx(15+5+Kgroove_width/2) mz(-38/2) my(Kgroove_depth/2-.1) box(Kgroove_width+eps, Kgroove_depth+eps, 38); } bofs=3; //dodatecne posunuti dolniho loziska (aby nevycuhovalo uvnitr v roure) module lozisko(eps) { ri=14.84/2; dx=32.1/2+2*eps-ri; h=9.04+eps; ry(90) mz(-eps/2){ rotate_extrude(convexity=10, r=ri-eps) polygon(points=[[0,0], [dx,0], [dx,h], [0,h]]); if(eps>0){ mz(h-eps)cylinder(d=28, h=1); } } } module dira_na_lozisko() { h=9.04; hull() rx(90){ lozisko(Eps); intersection(){ //tohle vytvori dodatecny prostor aby i pri mirnem propadnuti konstrukce mz(-40)mx(h/2)box(h,2*h,100); //lozisko uvnitr drzelo pevne aspon za boky a horejsek mel pripadne vuli union(){ mz(0.22) ry(90) cylinder(d=32.1,h=h); mz(-0.22) ry(90) cylinder(d=32.1,h=h); } } } } module talir(eps) { Kthickness=12; intersection(){ box(1000,1000,1000); mz(eps)sz((Kthickness+eps)/Kd) sphere(d=Kd-2*Ktol-2*Kseal); } hull(){ intersection(){ my(-500) box(1000,1000,1000); cylinder(d=Kd-2*Ktol,h=0.8); } intersection(){ my(-500) box(1000,1000,1000); mz(eps)sz((Kthickness+eps)/Kd) sphere(d=Kd-2*Ktol-2*Kseal); } } } module sroub(eps,dug=false) { sz(-1){ cylinder(d=5.45+eps, h=2.95); hole(d=3, h=16.8); } if(dug)cylinder(d=5.45+eps, h=100); } module matice(eps, dug=false) { rz(30) sz(-1) cylinder(d=(5.56+eps)*2/sqrt(3), h=2.40+eps+(dug?100:0), $fn=6); } module klapka(eps) { w=Kd+Ktl+bofs+10*eps; ww=Kseal+Ktol+7+5*eps; dd=eps>0?14.5+8+eps:16.5; difference(){ union(){ mx(Kd/2+Kcr+Ktl){ ry(90){ mz(-bofs/2){ difference(){ hull(){ cylinder(d=14.93, h=Kd+Ktl+2*9+bofs-2, center=true); cylinder(d=13.5, h=Kd+Ktl+2*9+bofs+1, center=true); } cylinder(d=20, h=w-2, center=true); } difference(){ union(){ mz(-w/2) cylinder(d=dd, h=ww+bofs); mz(w/2-ww) cylinder(d=dd, h=ww); } if(eps>0) mz(-w/2) mx(dd/2) box(2.3*2,15,h=w); //loziskove axialni tesneni na skrini } } zsym() mz((w-bofs)/2-ww-15) cylinder(d1=0, d2=dd, h=15); } talir(eps); rx(180) talir(eps); if(eps>0) mz(-1) cylinder(d=Kd,h=2); } fh=(Kd-2*Kseal)/4; intersection(){ mx(Kd/2+Kcr+Ktl) sz(.5) sphere(d=Kd-2*Ktol-2*Kseal); for(i=[-1:1]) intersection(){ array=[27,14,45]; gg=array[i+1]; mx(-gg)rz(-45)rotate_extrude(angle=90, caps=true, convexity=30, r=Kcr+Kd/2+Ktl+30*i+gg, $fn=global_fn*3) polygon(points=[[-4,0],[0,fh],[5,fh],[5,0],[5,-fh],[0,-fh]]); mx(gg)rz(-45)rotate_extrude(angle=90, caps=true, convexity=30, r=Kcr+Kd/2+Ktl+30*i-gg, $fn=global_fn*3) polygon(points=[[-5,0],[-5,fh],[0,fh],[4,0],[0,-fh],[-5,-fh]]); } } } if(eps==0) mx(Kd/2+Kcr+Ktl){ ry(90)mz((Kd+Ktl+2*9+bofs/2+1.1)/2){ sz(-1) cylinder(d1=13.5, d2=0, h=7, $fn=4); //pyramida pro prenos momentu sz(-1) cylinder(d=3+2*Eps, h=21); //dira pro vodorovny sroub mz(-12) rz(30) matice(Eps); //jeho (matice) } xsym() mx(Kd/2-ww+Ktl) mz(16.7/2) {sroub(Eps,true); mz(-16.7+3) matice(Eps,true);} } } if(eps>0){ mx(Kd/2+Kcr+Ktl)ry(90)mz((Kd+Ktl+2*9+bofs/2+1.1)/2)mz(-1)cylinder(d=12, h=5); //misto pro hlavu sroubu (pri debugovani) }else{ mx(Kd/2+Kcr+Ktl-bofs/2) xrotsym() my(-16.5/2) box(w,2*2.3,1.8); //loziskove axialni tesneni na klapce } } module horni_klapka() { intersection(){ klapka(0); box(1000,1000,1000); } } module dolni_klapka() { intersection(){ rx(180) klapka(0); box(1000,1000,1000); } } module koleno(extra) { o=16; difference(){ union(){ rotate_extrude(convexity=50, caps=true, angle=45+extra, r=Kcr+Kd/2+Ktl, $fn=global_fn*3) circle(d=Kd+2*Ktl); mx(Kcr+Kd/2+Ktl) rx(-90) mz(-0) rotate_extrude(convexity=50, r=Kd/2+Ktl/2+1) polygon(points=[[0,0], [Kxrim,0], [Kxrim,Kyrim], [3.4,Kyrim], [0,Kyrim+3.4]]); mx(Kcr-Kxrim+Ktl/2-o/2+6) rx(-90) box(o,60,Kyrim); intersection(){ mx(Kcr+Ktl-.1) ry(-90){ cylinder(d1=20, d2=40, h=5); mz(5) cylinder(d=40,h=10); mz(15) cylinder(d1=40,d2=38, h=1); } rx(-90)box(1000,1000,1000); } intersection(){ mx(Kcr+Kd) ry(90){ cylinder(d1=20, d2=40, h=5); mz(5) cylinder(d=40,h=10); mz(15) cylinder(d1=40,d2=38, h=1); } rx(-90)box(1000,1000,1000); } } Kseal_scale=(Kd-2*Kseal)/Kd; rz(-.1)rotate_extrude(convexity=20, caps=true, angle=46+extra, s0=Kseal_scale, r=Kcr+Kd/2+Ktl, $fn=global_fn*3) circle(d=Kd); rz(-.1)rotate_extrude(convexity=20, caps=true, angle=46+extra, r=Kcr+Kd/2+Ktl, $fn=global_fn*3) intersection(){ circle(d=Kd); mx(-500) square(1000); } // groove(Eps); mx(Kcr+Ktl/2-.1-bofs) sx(-1) dira_na_lozisko(); mx(Kcr+Ktl+Ktl/2+Kd+.1) dira_na_lozisko(); klapka(3*Eps); zsym(){ for(a=[21.75:10.5:180-21.75]){ mx(Kcr+Kd/2+Ktl) ry(a) rx(90) mx(Kd/2+Ktl+0.58*Kxrim) mz(-20) hole(d=3.05, h=40); //cylinder(d=6.71,h=40); } for(a=[0:1]) rx(90) mx(Kcr-Kxrim+Ktl/2-o/2+3) my(8+16*a) mz(-20) hole(d=3.05, h=40); } } } module zed_vyfuk() { color("green") difference(){ cylinder(d=130+3,h=19.9); mz(-1) cylinder(d=124-0.84*2,h=22); } } module radialni_tesneni() //pro polozeni na plastove tesneni loziska { difference(){ cylinder(d=27.3, h=0.3); mz(-1) cylinder(d=20.9, h=2); } } module horni_koleno() { koleno(0); } module dolni_koleno() { extra=5; color("red") rx(180) koleno(extra); H=30; ofs=0; rz(-45-extra+0.01) mx(Kcr+Kd/2+Ktl) rx(90){ difference(){ hull(){ cylinder(d=Kd+2*Ktl,h=1); mz(H) mx(ofs) cylinder(d=al_d-al_tl*2-4, h=1); } hull(){ mz(-.001) cylinder(d=Kd,h=1); mz(H) mx(ofs) cylinder(d=al_d-al_tl*2-4-2*Ktl, h=2); } } } } /* intersection(){ adapter_digestor_roura(); //mx(500)box(1000,1000,1000); }*/ //%vyfuk(1); *intersection(){ union(){ rz(-45) ry(90) my(Kcr+Kd/2+Ktl) mz(-20.2) zed_vyfuk(); horni_koleno(); dolni_koleno(); } box(1000,1000,1000); } horni_koleno(); rx(90) intersection(){ klapka(0); mz(-1000)box(1000,1000,1000); } % rz(-45-90)ry(90)mz(-165)my(68)plechy(); module tesneni(){ mz(.15)rx(90)groove(0); mz(Kgroove_depth-0.35) rx(90)groove(0); } module zkouska(){ intersection(){ horni_klapka(); mx(Kd+Kcr) sphere(d=60); } mx(50)intersection(){ dolni_klapka(); mx(Kd+Kcr) sphere(d=60); } my(50)intersection(){ rx(90)horni_koleno(); mx(Kd+Kcr) sphere(d=60); } mx(15) my(-60)intersection(){ rx(-90)dolni_koleno(); mx(Kd+Kcr) sphere(d=60); } mx(-30) my(70)intersection(){ tesneni(); mx(Kd+Kcr) sphere(d=60); } } *zkouska(); module zkouska2(){ intersection(){ rx(90)horni_koleno(); mx(Kcr) sphere(d=78); } rz(180)intersection(){ rx(-90)dolni_koleno(); mx(Kcr) sphere(d=78); } mx(-30) my(70)intersection(){ tesneni(); mx(Kcr) sphere(d=78); } } *zkouska2(); module sestava_klapky() { my(45) {mx(145) radialni_tesneni(); mx(40) radialni_tesneni();} horni_klapka(); my(104) dolni_klapka(); } *sestava_klapky();