//создаем двенадцатигранник (додекаэдр) пересечением 6 блоковmoduledodecahedron(height){scale(height)//масштабируем по параметру height{intersection(){//делаем кубcube([2,2,1],center=true);intersection_for(i=[0:4])//зацикливаем i от 0 до 4, пересекаем результат{//делаем куб, поворачиваем его на 116.565 градусов вокруг оси X,//затем на 72*i градуса вокруг оси Zrotate([0,0,72*i])rotate([116.565,0,0])cube([2,2,1],center=true);}}}}//создаем "снеговика" из 3 двенадцатигранников//вызываем модуль с параметром height=1 и смещаемся вверх на 1.5translate([0,0,2])dodecahedron(1);//вызываем модуль с параметром height=2dodecahedron(2);//вызываем модуль с параметром height=4 и смещаемся вниз на 3translate([0,0,-4])dodecahedron(4);
// модуль для определения ограничительной рамки из пересекающихся прогнозыmoduleBoundingBox(){intersection(){translate([0,0,0])linear_extrude(height=1000,center=true,convexity=10,twist=0)projection(cut=false)intersection(){rotate([0,90,0])linear_extrude(height=1000,center=true,convexity=10,twist=0)projection(cut=false)rotate([0,-90,0])children(0);rotate([90,0,0])linear_extrude(height=1000,center=true,convexity=10,twist=0)projection(cut=false)rotate([-90,0,0])children(0);}rotate([90,0,0])linear_extrude(height=1000,center=true,convexity=10,twist=0)projection(cut=false)rotate([-90,0,0])intersection(){rotate([0,90,0])linear_extrude(height=1000,center=true,convexity=10,twist=0)projection(cut=false)rotate([0,-90,0])children(0);rotate([0,0,0])linear_extrude(height=1000,center=true,convexity=10,twist=0)projection(cut=false)rotate([0,0,0])children(0);}}}// Тест модуль на эллипсоидеtranslate([0,0,40])scale([1,2,3])sphere(r=5);BoundingBox()scale([1,2,3])sphere(r=5);
Муфта с зажимом цилиндрических валов и закругленными скосами[править]
Муфта с зажимом цилиндрических валов и закругленными скосами
// диаметр первого валаone_wall=5;// диаметр второго валаtwo_wall=8;// диаметр болтов стяжкиbolt=3;// Диамтр описанной окружности шестигранника, для гайки стажкиscrew_nut_out_circle=6;// диаметр закругления цилиндра(фаска)chamfer=3;// Определение внешнего диаметра муфтыext_diam=max(one_wall,two_wall)+bolt*3;// высота обжимного цилиндра под каждый вал соответственноheight_one_wall=15;height_two_wall=15;// разрешение поверхностейfn=100;// фикс высоты для устранения искажений поверхностей при вырезании// при выставленном 0 разница ощутима// фикс смещения рассчитан на то что первый вал всегда меньше или равен второму qwe=0.1;modulecoupling(){difference(){// создаем основную конструкциюdifference(){// создаем основной цилиндр// если в $fn задать значение 6, то в сечением цилиндра будет не круг а шестигранник// грубо говоря $fn задает количество граней из которых формируется поверхность// в этом и смысл этого параметраcylinder(height_one_wall+height_two_wall,r=ext_diam/2,$fn=fn);// вырезаем из него первый вал (с фиксированными смещением и высотой)translate([0,0,-qwe])cylinder(height_one_wall+qwe*2,r=one_wall/2,$fn=fn);// создаем второй вал со смещением по оси Z на высоту первого (также учитываем фикс)translate([0,0,height_one_wall])cylinder(height_two_wall+qwe,r=two_wall/2,$fn=fn);}// создаем скос (закругленную фаску в основании)// затем этот скос исключается из основного цилиндраdifference(){// создаем кольцо прямоугольной формы на поверх грани для которой будет сформирован скосrotate_extrude(convexity=10,$fn=fn)translate([ext_diam/2-chamfer+qwe,-qwe,0])square([chamfer,chamfer]);// исключаем из него кольцо круглой формы со смещениемrotate_extrude(convexity=10,$fn=fn)translate([ext_diam/2-chamfer+qwe,chamfer-qwe*2,0])circle(chamfer);}// точно такую же операцию проделываем с другой стороны цилиндраdifference(){rotate_extrude(convexity=10,$fn=fn)translate([ext_diam/2-chamfer+qwe,height_one_wall+height_two_wall+qwe-chamfer,0])square([chamfer,chamfer]);rotate_extrude(convexity=10,$fn=fn)translate([ext_diam/2-chamfer+qwe,height_one_wall+height_two_wall+qwe*2-chamfer,0])circle(chamfer);}// вырезаем зажимной прорез, предварительно повернув его на 30 градусов// на случай если у основного цилиндра задать разрешение $fn=6// чтобы прорез оказался в в угле шестигранникаrotate(30,[0,0,1])translate([-0.5,-1-max(one_wall,two_wall)/2,-qwe])cube([1,ext_diam,height_one_wall+height_two_wall+qwe*2]);// вырезаем выемку под стяжной болт первого валаbolt(height_one_wall/2,false);// вырезаем вырезку под болт второго валаbolt(height_one_wall+height_two_wall/2,true);}}// создаем выемки под винт и гайку для сжатия валовmodulebolt(height,rate=false){// задаем нужный наклон rotate(90,[1,0,0])rotate(120,[0,1,0])union(){// отверстике сквозноеtranslate([ext_diam/2-bolt,height,-ext_diam/2])cylinder(ext_diam,r=bolt/2,$fn=fn);// выемка для посадки головки винтаtranslate([ext_diam/2-bolt,height,rate?-ext_diam/2:ext_diam/4])cylinder(ext_diam/4,r=bolt*2/2,$fn=fn);// выемка для посадки шестигранной гайкиtranslate([ext_diam/2-bolt,height,rate?ext_diam/4:-ext_diam/2])// разворачиваем на 30 радусов чтобы грань шестигранника// не была отвесной на 90градусов, при 3Д печатиrotate(30,[0,0,1])cylinder(ext_diam/4,r=screw_nut_out_circle/2,$fn=6);}}coupling();