Метки: OpenSCAD  
2017-02-27  
  
Раздел: Моделирование  
Автор: andrew_answer Просмотров: 12 811  
4 комментария
Моделирование в OpenSCAD для 3D печати. Создание ушка
Добавлено в закладки: 0
Создавать детали в Опенскаде мы начнём с простого примера – используемого в SibRap-принтере ушка.
Ушко
Ушко верх
Ушко бок
Как мы видим, геометрия ушка состоит из небольшого количества примитивных объектов – цилиндров и параллелепипедов. С помощью булевых операций пересечения, вычитания и объединения над такими объектами мы легко можем получить данную форму.
Чтобы опираться на размеры, нам потребуется чертеж. Таким образом, задача будет такая: создать по существующему чертежу 3д-модель.
Чертеж ушка
Единица измерения в Опенскад по умолчанию – миллиметр, поэтому никаких дополнительных настроек и множителей не требуется. Нарисуем основной цилиндр и параллелепипед:
cube ([15,17,18]); translate ([7.5,17,0]) cylinder(r=7.5, h=18);
Опенскад автоматически объединит их в один объект. Все объекты в теле скрипта объединяются автоматически. Нажмем F5.
Ушко база
Пояснения по командам очень удобно открывать из шпаргалки (Справка – Шпаргалка):
- cube([x,y,z]) – создает параллелепипед со сторонами x,y,z единиц.
- translate([x,y,z]) – осуществляет параллельный перенос последующего объекта.
- cylinder(r=7.5, h=18) – создает цилиндр с основанием в плоскости XY, радиусом основания 7.5 мм и высотой 18 мм.
Далее нам необходимо сделать в детали отверстие:
cube([15,17,18]); translate([7.5,17,0]) difference() { cylinder(r=7.5, h=18); cylinder(r=4, h=18); }
- difference() {obj1, obj2, … objN} – производит вычитание второго и последующих объектов из первого объекта.
- cylinder(r=4, h=18) – цилиндр-отверстие.
Нажмем F5.
Рендеринг
Результат не очень понятен: какая-то дымка закрывает нам отверстие. Дело в том, что Опенскад для ускорения расчетов при предварительном просмотре не выполняет удаление граней вычитаемых объектов. Чтобы увидеть результат полностью, нужно нажать F6:
Неточность
И опять неясность – почему вырезалась только половина отверстия? Ответ прост: мы допустили ошибку, взяв в качестве исходного тела только цилиндр. Правильный код будет таким:
difference() { union() { cube([15,17,18]); translate([7.5,17,0]) cylinder(r=7.5, h=18); } translate([7.5,17,0]) cylinder(r=4, h=18); }
- union() {obj1, obj2, … objN} – производит объединение объектов в один общий объект.
Нажмем F6 – наконец-то нужный результат:
Отверстие
Обратите внимание, что в данном случае понадобилось две операции параллельного переноса – по одной для каждого из цилиндров.
Похожим образом делаем второе отверстие:
difference() { union() { cube([15,17,18]); translate([7.5,17,0]) cylinder(r=7.5, h=18); } translate([7.5,17,0]) cylinder(r=4, h=18); translate([0,7,9]) rotate([0,90,0]) cylinder(r=4, h=15); }
- rotate([x,y,z]) – производит поворот объекта вокруг оси X на x градусов, вокруг Y на y градусов, и вокруг оси Z на z градусов (+ – по часовой стрелке, – – против часовой, если смотреть в положительном направлении осей).
Второе отверстие
Обратите внимание, что порядок операций translate и rotate имеет значение – операции над цилиндром выполняются справа налево, сначала поворот, затем перенос. Поэтому при перемене операций местами нужно будет изменять и аргументы команд.
И, наконец, вырез:
difference() { union() { cube([15,17,18]); translate([7.5,17,0]) cylinder(r=7.5, h=18); } translate([7.5,17,0]) cylinder(r=4, h=18); translate([0,7,9]) rotate([0,90,0]) cylinder(r=4, h=15); translate([7,0,0]) cube([1,17,18]); }
Вырез
Получилось! Вот только на первом изображении почему-то отверстия более гладкие. За гладкость отверстий отвечает несколько параметров Опенскада: $fa, $fs, $fn.
Достаточно добавить в начало файла строку
$fn=30;
и наши цилиндры будут не 12-угольными, а 30-угольными. Вот и наш результат:
Результат
Теперь можно сохранить код в scad-файл (Файл – Сохранить), а геометрию в STL (Файл – Экспортировать – Экспортировать в STL…). Данный файл можно потом легко распечатать на 3д-принтере:
Бонус: 3д-модель ушка на GitHub
В следующей статье я расскажу о некоторых других командах, а также мы проведем параметризацию детали для создания гибкого дизайна.
Нуждов Андрей, 15.02.2017
4 комментария на «Моделирование в OpenSCAD для 3D печати. Создание ушка»
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.
Сборка робота-гуманоида InMoov. О проекте и авторе       Сборка робота-гуманоида InMoov. Оживляем первый палец
Можно вместо union было воспользоваться hull и тогда бы объекты слились.
Из плюсов не нужно было бы совмещать ровно объекты..
Ну и ушко было бы кривое, не того размера. Разве это надо?
почему кривое?
Абсолютно тоже самое. В cube изменил Y координату на 1
hull() {
cube([15,1,18]);
translate([7.5,17,0]) cylinder(r=7.5, h=18);
}
А, понял, тогда да