/* 360 Labial Pipe, Marcus Poller, inspired by https://github.com/benjaminwand/3d-printed-labial-pipe/blob/master/0.23.0.scad 2024-10-13 v1: submitted to discuss@lists.openscad.org */ mundstueck_tiefe=5; mundstueck_breite_r=2; windkanal_seitenversatz=10; ueberstand=2; schraubenaufnahme_laenge=20; schraubenaufnahme_durchmesser=5.8; schraubenaufnahme_radius=schraubenaufnahme_durchmesser/2; mittelstueck=1; windkanal_h=2; windkanal_breite=0.15; luftzufuehrung_d=1.5; windkanal_einlassoeffnung=windkanal_h/3*2; bahn_breite=0.4; bahn_anzahl=2; module korpus(){ rotate_extrude() polygon(points=[ [0,mittelstueck], [-mundstueck_breite_r,mittelstueck], [-mundstueck_breite_r,mittelstueck+mundstueck_tiefe], [-windkanal_seitenversatz-ueberstand,mittelstueck+mundstueck_tiefe], [-windkanal_seitenversatz-ueberstand,-mittelstueck-windkanal_h], [-windkanal_seitenversatz-windkanal_breite/2,-mittelstueck-windkanal_h], [-windkanal_seitenversatz-windkanal_breite/2,-mittelstueck], [-windkanal_seitenversatz+windkanal_breite/2,-mittelstueck], [-windkanal_seitenversatz+windkanal_breite/2,-mittelstueck-windkanal_h], // [-windkanal_seitenversatz/2,-mittelstueck-windkanal_h], [-2*schraubenaufnahme_radius,-mittelstueck-windkanal_h], [-2*schraubenaufnahme_radius,-schraubenaufnahme_laenge], [-schraubenaufnahme_radius,-schraubenaufnahme_laenge], [-schraubenaufnahme_radius,-mittelstueck], [0,-mittelstueck]]); } module luftrohr_helper(){ $fn=30; hull(){ translate([-mundstueck_breite_r+windkanal_einlassoeffnung/2,mittelstueck]) sphere(d=windkanal_einlassoeffnung); translate([-windkanal_seitenversatz,-mittelstueck]) sphere(d=windkanal_einlassoeffnung); } } module luftrohr(){ intersection(){ translate([0,0,-mittelstueck-windkanal_einlassoeffnung]) cylinder(r=windkanal_seitenversatz+windkanal_breite/2,h=2*mittelstueck+windkanal_einlassoeffnung); rotate([90,0,0]) luftrohr_helper(); } } radius=windkanal_seitenversatz+windkanal_breite/2; umfang=radius*2*PI; luftsegment=windkanal_einlassoeffnung; pausesegment=bahn_breite*bahn_anzahl; segmente_anzahl=floor(umfang/(luftsegment+pausesegment)); echo("Luftsegment=", luftsegment); echo("Pause=", pausesegment); echo("Segmentzahl=", segmente_anzahl); segment_winkel=360/segmente_anzahl; if( $preview){ %korpus(); for( w=[0:segment_winkel:360]){ rotate([0,0,w]) luftrohr(); } } if( !$preview){ echo("Rendering"); difference(){ korpus(); union(){ for( w=[0:segment_winkel:360]){ rotate([0,0,w]) luftrohr(); } } } } ! difference(){ korpus(); union(){ for( w=[0:segment_winkel:360]){ rotate([0,0,w]) luftrohr(); } } }