Руководство пользователя по OpenSCAD/Примеры проектов с комментариями
Внешний вид
Двенадцатигранник (додекаэдр)
[править] //создаем двенадцатигранник (додекаэдр) пересечением 6 блоков
module dodecahedron(height)
{
scale(height) //масштабируем по параметру height
{
intersection(){
//делаем куб
cube([2,2,1], center = true);
intersection_for(i=[0:4]) //зацикливаем i от 0 до 4, пересекаем результат
{
//делаем куб, поворачиваем его на 116.565 градусов вокруг оси X,
//затем на 72*i градуса вокруг оси Z
rotate([0,0,72*i])
rotate([116.565,0,0])
cube([2,2,1], center = true);
}
}
}
}
//создаем "снеговика" из 3 двенадцатигранников
//вызываем модуль с параметром height=1 и смещаемся вверх на 1.5
translate([0,0,2])dodecahedron(1);
//вызываем модуль с параметром height=2
dodecahedron(2);
//вызываем модуль с параметром height=4 и смещаемся вниз на 3
translate([0,0,-4])dodecahedron(4);
Ограничительная рамка
[править] // модуль для определения ограничительной рамки из пересекающихся прогнозы
module BoundingBox()
{
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;
module coupling()
{
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);
}
}
// создаем выемки под винт и гайку для сжатия валов
module bolt(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();