Создание "куска пирога" в OpenSCAD?
Когда я делаю цилиндр, иногда мне нужно взять только кусочек пирога. В настоящее время я использую этот изящный трюк, чтобы сделать ломтики пирога под углом менее 90 градусов. Тем не менее, мне нужно несколько углов больше 90, но меньше 180 градусов. Есть ли способ обобщить/расширить это, чтобы работать под этими большими углами?
module pie_slice(r=3.0,a=30) {
intersection() {
circle(r=r);
square(r);
rotate(a-90) square(r);
}
}
pie_slice(r=10,a=15);
@Hamy, 👍6
Обсуждение3 ответа
Мой текущий обходной путь-использовать объединение
вместо пересечения. К сожалению, это означает, что я должен использовать предложение if, которое заставляет код иметь два пути вместо одного чистого подхода. Кроме того, в отличие от описанного выше метода, это не приводит к чистой цилиндрической форме, а вместо этого должно быть объединено с соответствующим цилиндром, чтобы получить окончательный кусок пирога
size = length + 2;
if (angle_deg <= 90) {
translate([0,0,-1])
intersection() {
cube(size);
rotate(angle_deg-90) cube(size);
}
} else if (angle_deg <= 180) {
translate([0,0,-1])
union() {
cube(size);
rotate(angle_deg-90) cube(size);
}
} else {
echo(str("FAILURE - Angle cannot exceed 180"));
}
Хотя создание сложных фигур путем объединения примитивных фигур OpenSCAD является устоявшейся традицией и часто является всем, что требуется, в этом случае было бы более элегантным создать срез круга непосредственно с помощью функции многоугольника
и понимания списка.
module pie_slice(r=3.0, a=30) {
polygon(points=[
[0, 0],
for(theta=0; theta<a; theta=theta+$fa)
[r*cos(theta), r*sin(theta)],
[r*cos(a), r*sin(a)]
]);
}
Обратите внимание, что приведенный выше код немного грубоват, так как он не проверяет ошибки, но он работает. Он использует специальную переменную $fa для угла шага.
Вот что я использую:
module pieSlice(a, r, h){
// a:angle, r:radius, h:height
rotate_extrude(angle=a) square([r,h]);
}
pieSlice(110,20,3);
- Библиотека OpenSCAD для пустого пространства/отверстий
- Рендер OpenSCAD (F6) завершается ошибкой "ERROR: CGAL error in CGAL_Nef_polyhedron3()"
- Как добавить отверстие 2х2 мм в файл SCAD?
- Каков самый простой способ изменить/изменить размер объекта внутри STL-файла?
- Будут ли 3D напечатные игральные кости честными?
- Действительно ли 3D-принтеры достигают точности 50 микрон (0,05 мм)?
- Файл слишком большой, чтобы открыть его в Tinkercad. Как уменьшить его?
- Являются ли самопересекающиеся сетки грязными с точки зрения 3D-печати?
Я думаю, что проще всего было бы использовать " разницу`. Окружность минус два куба со сторонами 2*R. (Или один из размера 2*R и один из размера R.), @Tomas By
IIUC, это похоже на мой текущий обходной путь (я опубликовал ниже для справки). Я использую "объединение` вместо "пересечение". К сожалению, вам придется изучить, сколько степеней хочет вызывающий абонент, и использовать ту или иную - мне еще предстоит найти универсальный метод, @Hamy
Подумайте об этом так: у вас есть два прямоугольника, которые покрывают каждую половину круга. Затем вы открываете зазор между ними под углом. Это должно работать для любого угла между 0 и 180., @Tomas By
О, щелчок, это звучит идеально. Я попробую, спасибо, @Hamy
Или используйте модуль, который может создавать кусочки пирога, например [Фаски для OpenSCAD](https://github.com/SebiTimeWaster/Chamfers-for-OpenSCAD)., @0scar