Разрезать ленту Мёбиуса на четыре части с замком
Я новичок в OpenSCAD. Раньше я работал с Rhino, но у меня больше нет лицензии, а новый Fablab, с которым я работаю, использует OpenSCAD, поэтому сейчас я изучаю OpenSCAD.
На рисунке ниже показано, что я хочу сделать. Мне нужно это, чтобы иметь возможность напечатать несколько деталей на 3D-принтере, чтобы получить ленту Мёбиуса большего размера.
Я нашел эти скрипты:
1. /*
2. * Лента Мёбиуса
3. *
4. * r: радиус полосы
5. * w: ширина полосы
6. * t: толщина полосы
7. *
8. * Модель использует $fs to adjust the smoothness.
9. */
10. module moebius_strip(r = 1, w = 1, t = 1) {
11. step = $fs;
12. for(azimuth = [0 : step : 360]) {
13. x = r * cos(azimuth);
14. y = r * sin(azimuth);
15. translate([x, y, 0]) {
16. rotate([0, azimuth/2, azimuth]) {
17. cube([t, step, w], center=true);
18. }
19. }
20. }
21. }
22.
23. $fs = 0.5;
24.
25. moebius_strip(r = 30, w = 15, t = 1);
Этот вариант выше работает, и я нашел еще один для разделения:
module mycut() {
translate([x,y,z]) cube([w,l,h]);
}
difference() {
myobject();
mycut();
}
translate([u,v,w])
intersection() {
myobject();
mycut();
}
Я просто не знаю, как использовать эти скрипты вместе. Может кто-нибудь объяснить мне немного о том, как я могу управлять этим? Не забывайте, что я новичок!
1 ответ
Разрезание на части
Чтобы разрезать кольцо на части, вы можете использовать intersection() объекта и квадранта. представляет интерес (например, с помощью куба, но клин тоже сработал бы).
/*
* Лента Мёбиуса
*
* r: радиус полосы
* w: ширина полосы
* t: толщина полосы
*
* Модель использует $fs to adjust the smoothness.
*/
module moebius_strip(r = 1, w = 1, t = 1) {
step = $fs;
for(azimuth = [0 : step : 360]) {
x = r * cos(azimuth);
y = r * sin(azimuth);
translate([x, y, 0]) {
rotate([0, azimuth/2, azimuth]) {
cube([t, step, w], center=true);
}
}
}
}
$fs = 0.5;
xloc=[0,1,-1,-1,1];
yloc=[0,1,1,-1,-1];
//квадрант = 4; // 1, 2, 3 или 4
for(quadrant = [1 : 1 : 4])
intersection(){
translate([xloc[quadrant]*10,yloc[quadrant]*10,0]) moebius_strip(r = 30, w = 15, t = 1);
translate([xloc[quadrant]*10,yloc[quadrant]*10,-(30+15/2)/2]) rotate([0,0,(quadrant-1)*90]) cube(30+15/2);
}
Поскольку вкладки и слоты запрашиваются, нам нужно внести некоторые коррективы.
Добавить/удалить табуляцию
Осталось только вырезать "прямоугольный" формы на интерфейсах. Для этого мы склеиваем или union() вкладку с одной стороны и выдавливаем или difference() вкладка с другой стороны, клин используется для intersection() с лентой Мёбиуса меньшей ширины.
echo(version=version());
//отладка = 0;
//explode = $preview ? 0.1 : 0.0;
//$fn = $preview ? 90 : 360;
//nearly_zero = $предварительный просмотр? 0,005: 0,0;
tol = 0.01;
/*
* Möbius Strip
*
* r: radius of strip
* w: width of strip
* t: thickness of strip
*
* The model uses $fs to adjust the smoothness.
*/
module moebius_strip(r = 1, w = 1, t = 1) {
step = $preview ? 2 : 0.5;
for(azimuth = [0 : step : 360]) {
x = r * cos(azimuth);
y = r * sin(azimuth);
translate([x, y, 0]) {
rotate([0, azimuth/2, azimuth]) {
cube([t, step, w], center=true);
}
}
}
}
module wedge(h,r,a)
{
th=(a%360)/2;
difference()
{
cylinder(h=h,r=r,center=true);
if(th<90)
{
for(n=[-1,1])rotate(-th*n)translate([(r+0.5)*n,0,0])
cube(size=[r*2+1,r*2+1,h+1],center=true);
}
else
{
intersection()
{
rotate(-th)translate([(r+0.5),(r+0.5),0])
cube(size=[r*2+1,r*2+1,h+1],center=true);
rotate(th)translate([-(r+0.5),(r+0.5),0])
cube(size=[r*2+1,r*2+1,h+1],center=true);
}
}
}
}
xloc=[0,1,-1,-1, 1]; // вектор, индексированный квадрантом, отрицательное значение — отрицательная ось x
yloc=[0,1, 1,-1,-1]; // вектор, проиндексированный квадрантом, отрицательное значение - это отрицательное значение оси y
offsetVal=0; // можно использовать для разнесения представления
quadrant = 1; // 1, 2, 3 или 4 соотв. для xy, -xy, -xy или xy
//for(quadrant = [1 : 1 : 4]){ // теперь закомментировано для используемого одиночного квадранта
difference(){ // для вытягивания вкладки
union(){ // для добавления вкладки
intersection(){
translate([xloc[quadrant]*offsetVal,yloc[quadrant]*offsetVal,0]) moebius_strip(r = 30, w = 15, t = 1); // Пояс Мёбиуса
translate([xloc[quadrant]*offsetVal,yloc[quadrant]*offsetVal,-(30+15/2)/2]) rotate([0,0,(quadrant-1)*90]) cube(30+15/2); // квадратный куб
}
intersection(){
moebius_strip(r = 30, w = 7.5, t = 1); // Лента Мёбиуса меньшей ширины
rotate([0,0,(quadrant-1)*90]){
wedge((30+15/2), (30+15/2), 10); // пересекаемся с клином, чтобы получить выступ, который расширяет часть квадранта
}
}
}
intersection(){
moebius_strip(r = 30, w = 7.5, t = 1+tol); // Ремень Мебиуса меньшей ширины и увеличенной толщины для лучшего вырезания негативного язычка
rotate([0,0,(quadrant-2)*90]){
wedge((30+15/2), (30+15/2), 10); // пересекаемся с клином, чтобы получить вкладку, которая выдавливает часть квадранта
}
}
}
//}
Обратите внимание, что для рендеринга (F6) требуется некоторое время, предварительный просмотр (F5) даже не отображается из-за слишком большого количества элементов. Просто измените значение quadrant = 1;
на 2, 3 или 4 для других сегментов.
Обратите внимание, что изображение из вопроса не создано с помощью скрипта Мебиуса, для создания этого объекта необходимо rotate([0, azimuth/2, azimuth])
изменено на rotate([0, азимут, азимут]
)
- Библиотека OpenSCAD для пустого пространства/отверстий
- Рендер OpenSCAD (F6) завершается ошибкой "ERROR: CGAL error in CGAL_Nef_polyhedron3()"
- Создание "куска пирога" в OpenSCAD?
- Можно ли выдавливать грани вдоль нормалей индивидуально в OpenSCAD?
- Как добавить отверстие 2х2 мм в файл SCAD?
- Какие виды зазоров/допусков следует использовать при проектировании деталей, которые подходят друг к другу?
- Инструмент для измерения в STL-файлах
- Каков самый простой способ изменить/изменить размер объекта внутри STL-файла?
Здесь используются четыре разные части. С вашей точки зрения, будет ли результирующий объект лучше, если он будет состоять из четырех одинаковых ⅛ витков?, @Ray Butterworth