OpenSCAD: Вращение вокруг определенной точки?

Следующий код вращает второй куб вокруг начала координат. Как вместо этого повернуть второй куб вокруг его центральной точки ([5,5,0])?

cube([10,10,1]);
rotate([0,0,45]) cube([10,10,1]);


person Mark Harrison    schedule 22.08.2017    source источник


Ответы (2)


Этот модуль будет выполнять желаемое вращение.

// rotate as per a, v, but around point pt
module rotate_about_pt(a, v, pt) {
    translate(pt)
        rotate(a,v)
            translate(-pt)
                children();   
}

cube([10,10,1]);
rotate_about_pt(45,0,[5,5,0]) cube([10,10,1]);

В более новых версиях (протестированных с предварительным просмотром за январь 2019 г.) приведенный выше код генерирует предупреждение. Чтобы это исправить, обновите параметры до rotate:

module rotate_about_pt(z, y, pt) {
    translate(pt)
        rotate([0, y, z]) // CHANGE HERE
            translate(-pt)
                children();   
}
person Mark Harrison    schedule 22.08.2017
comment
спасибо, это действительно должно было быть встроено в команду поворота - person argentum2f; 12.04.2019

Если вы хотите «центрировать» форму, это намного проще:

cube(center =true,[10,10,1]);
rotate([0,0,45]) cube(center =true,[10,10,1]);
person Ryan Jarvis    schedule 30.11.2018
comment
Это работает только с примитивами, у которых есть эта опция. - person onealexharms; 17.09.2020