Ошибки после операций объединения, пересечения, вычитания

Для моделирования простых конструкций я сначала освоил немного Blender. Чтобы делать простые коробочки, крючки и подставки (в том числе и для электроники) мне его хватало. Иногда после операций выдавливания отверстий или углублений в детали происходило “нечто” для меня, после чего любая друга операция между этим и другим объектом приводила к полному разрушению. Т.е. в результате получался кусочек объекта совершенно не являющийся результатом последующей булевской операции. Приходилось возвращаться на несколько шагов назад и руками по граням и вершинам чинить обьект. Я сейчас понимаю, что это происходило в результате неправильно ориентированных нормалей. Но как они получались, когда на вход (предположим, вычитания) подавались простейшие объекты в виде кубов и цилиндров?

Я списывал это на глюки Blender как свободной и глючной программы.

Недавно стал осваивать компас 3д, и уже на втором уроке по азбуке схлопотал тот же самый глюк, хотя, как мне кажется, четко делал все по шагам из азбуки. Очередная операция выдавливания приводила не к появлению “ямочки“ на исходном объекте, а оставляла от него маленький кусочек. Хотя в исходных данных тоже ведь были простейшие объекты.

Такое поведение в программах моделирования допустимы? На что обращать внимание, чтобы такого не происходило? Иногда бывает берешь два цилиндра, пересекаешь под определенным углом - и все, последующие операции уже невозможны, т.к. уже получен объект с ошибками. Одно из наблюдений - такое происходит, когда часть граней пересекаемых объектов находятся в одной плоскости. По этому многоугольнику соприкосновения часто возникают совершенно дикие фигуры пересечения с непредсказуемыми нормалями.

Такое возможно если компас не верно определил какой именно объект ты хочешь выдавить. Его (этот объект) можно менять.

В Солиде подобных глюков практически нет, почему я за него )) Там даже если есть ошибка, то сама деталь обычно выглядит нормально.

Я пытался юзать FreeCad, там чуть что не так всё в кучу… зато на Маке он есть. Оказалось вернее собрать Мощщный Комп Для Работы™ с виндой, для Солида специально ахаха.

Так и у меня сложности возникали на нормально выглядящей детали. Если это уже последние шаги и надо в печать, то пофиг. Слайсеру на эти дырки глубоко фиолетово. Но так не всегда же. Особенно обидно это было в блендере, в котором нельзя поправить что-то в последовательности операций. Вычлось плохо, а ты это не заметив сидишь скругления фигачишь, размеры подгоняешь. После нескольких часов зализывания по этим округлостям делаешь еще одну логическую операцию, и у тебя вся деталь разваливается. И сидишь сотню полигонов руками чинишь. В компасе хоть можно “в прошлом” чуть двинуть все починится за один шаг, не надо последствия переделывать.

Это нормально. Программа - это инструмент, как молоток или пасатижы. Для моделирования надо понимать механизм построения объекта. Если вы понимаете математические методы построения этого объекта, то последовательность действий в программе моделирования для Вас не составят труда.

Есть хорошая задачка, которую подкинул в свое время конструктор.
Есть 3 цилиндра, которые в основании соединены и под разным углом расходятся вверх. В них надо установить шар, который будет касаться этих цилиндров (лежать в них).

Некоторые проги моделирования это умеют автоматически делать. Это из серии кинематики, где движок умеет сталкивать разные объекты. Делается рогатина, сила тяжести направляется вниз к “точке роста“, а сверху просто роняется шар. И он оказывается как раз там где должнен. Но я так не умею.

А похожие примеры видел. Например тут (результат в конце) падают кубики

Если в этом примере нижний кубик заменить на рогатину, которая уже почти опущена на “землю”, а другой кубик заменить на шар, то упав фигуры окажутся как вам надо.

Математически это вокруг существующих цилиндров нарисовать новые соосные с радиусом больше на величину радиуса сферы.
Центр сферы помещается в точку пересечения цилиндров.
Потом лишние цилиндры можно удалить (если это модель, а не чистая математика).

Респект!

Новую тему не хочу заводить, спрошу тут. Надо для поделки спираль Архимеда, нарисовал вот такое в Опенскад с помощью алисы


при вот таком коде

// Параметры спирали
b = 0.04;                 // шаг (на сколько растёт радиус за 1 радиан)
turns = 100;             // количество витков
steps = 200;           // количество цилиндров (чем больше — тем плотнее спираль)


// Генерируем точки спирали Архимеда: r = b * t
points = [
  for (i = [100 : steps])
    let (t = (i * 2.2 * PI * turns) / steps)
    [
      (b * t) * cos(t),
      (b * t) * sin(t),
      0
    ]
];
 // Рисуем спираль из цилиндров
 
for (p = points) {
  translate(p) {
   cylinder(2,2.5,2.5,$fn=100);
  }
  translate(-p) {
   cylinder(2,2.5,2.5,$fn=100);
  }
} 
///////
difference() { 
translate(v = [0,0,0]){
rotate([0, 0, 0]){
cylinder(20,11,11,$fn=100);
}  
}
translate(v = [0,0,2]){
cylinder(20,9,9,$fn=100);
}  
}
translate(v = [0,0,1]){
rotate([0, 0, -16]){
cube([30,4,2],true);
}  
} 
///////
translate(v = [-27,9,0]){
difference() { 
translate(v = [0,0,0]){
cylinder(2,4.5,4.5,$fn=100);
  }
translate(v = [0,0,-1]){
cylinder(4,1.6,1.6,$fn=100);
}  
}
}
translate(v = [27,-9,0]){
difference() { 
translate(v = [0,0,0]){
cylinder(2,4.5,4.5,$fn=100);
  }
translate(v = [0,0,-1]){
cylinder(4,1.6,1.6,$fn=100);
}  
}
}

Но рендеринг не проходит…время идёт, программа висит. Что может быть? И как эту спираль нарисовать в опенскад чтоб до stl файла довести?