Итак, я пытаюсь создать простой стек масштабированных кубов, используя рекурсивную функцию:
function stack(levels) = (
levels <= 0
? cube([1,1,1], center=true)
: union() {
cube([1,1,1], center=true);
translate([0, 0, 0.9]) scale([1, 1, 0.9]) stack(levels - 1);
}
);
stack(5);
Теперь по какой-то причине я сейчас не понимаю, что OpenSCAD говорит мне, что у меня есть синтаксисошибка в строке 4, помечающая редактор следующим образом:
К сожалению, консоль выдает только эти выходные данные:
ОШИБКА: Ошибка синтаксического анализатора в строке 4: синтаксическая ошибка
ОШИБКА: ошибка компиляции!
Так что мне довольно сложно понять, что именно я делаю неправильно.Я думаю, что есть способ сделать это, используя for
, но я бы посчитал рекурсивный подход более читабельным.
Я попытаюсь сделать это с модулями, и если это не сработает, я могу прибегнуть киспользуйте for
в сочетании с модулями, я полагаю - мне бы хотелось, чтобы это работало и было очень удобочитаемым.
Обновление: так из OpenSCAD User Manual Я получил этот фрагмент:
Я хотел бы интерпретировать это так, что невозможно создать рекурсивную структуру так, как я себе представлял.
Вместо этого яМогут: * Использовать вспомогательную функцию для генерации параметров куба и последующего вычисления их объединения.* Перепишите структуру в терминах for
цикла.
Я не уверен, правильно ли мое убеждение, но причина в следующем:
- Я не могу создавать объекты вфункция, потому что это будет иметь эффект.
- Я не могу использовать модуль рекурсивно, потому что он не возвращает результат и, возможно, способ работы переменных в OpenSCAD будет мешать идее.