OpenSCAD linear_extrude из многопутевого импорта svg
В OpenSCAD я пытаюсь сделать linear_extrude на фигуре, импортированной из svg. Файл svg содержит несколько путей. Я хотел бы масштабировать каждый путь отдельно. Я попробовал следующий код, но весь импорт рассматривается как одна форма, приводящая к изображению ниже.
linear_extrude(height = 5, center = true, scale=1.2)
import(file = "xxx.svg", center = true, dpi = 96);
Как я могу иметь каждую из букв, чтобы иметь "свою собственную пирамиду"?
Я знаю, что могу создать один SVG на букву. Но для простоты я хотел бы иметь только один SVG-файл, так как в будущем я хочу создавать гораздо более сложные мотивы. Моя конечная цель-создать штампы из рисунков SVG.
Правка: Альтернатива, попробованная после комментария Мика (тот же результат):
module pyramidChildren(height){
for ( i= [0:1:$children-1])
linear_extrude(height = height, scale=1.5)
children(i);
}
pyramidChildren(5)
import(file = "xxx.svg", center = true, dpi = 96);
Я попытался использовать базовый svg (несколько путей), а также сгруппировать каждый путь (только с самим собой) без изменений в результате.
@Oneira, 👍4
Обсуждение4 ответа
Неубедительное решение: создание ступенчатой пирамиды со смещением. Я понял, что масштаб не сработает для мотивов с дырками внутри. Смещение кажется тогда более подходящим, чем масштаб для моего приложения (создание штампов)
Для рендеринга требуются века, но этого может быть достаточно для простых шаблонов. Любое лучшее решение по-прежнему приветствуется...
module buildPyramidalExtrude(height,maxOffset,nSlices){
heightIncrement = height/nSlices;
offsetIncrement = maxOffset/(nSlices-1);
for(i=[1:nSlices])
linear_extrude(height=i*heightIncrement)
offset(r = maxOffset-(i-1)*offsetIncrement)
children();
}
buildPyramidalExtrude(4,2.5,20)
import(file = "Farm/cow.svg", center = true);
То, что вы, кажется, хотите,-это не масштаб по пути, а смещение. Это открытый пиар в OpenSCAD и, надеюсь, скоро будет в восходящем потоке.
С нетерпением ждем возможности увидеть его в upstream!, @Oneira
Один из вариантов-использовать minkowski()
для объединения svg с конусом. С положительной стороны, это дает довольно приятный результат, но есть и минусы:
- это довольно медленно
- он откармливает низ, а не сжимает верх, поэтому в зависимости от ваших потребностей вам, возможно, придется инвертировать изображение, запустить
minkowski
, а затем снова инвертировать.
Другой вариант - преобразовать в оттенки серого png и применить размытие с помощью внешнего инструмента, а затем импортировать с помощью surface()
(серое размытие станет хорошим наклоном). Это одновременно откормит низ и сократит верх, но сохранение только верхней половины должно дать желаемый результат.
Поздно с вопросом, но я работаю над проектом, похожим на вопрос. Мое решение состоит в том, чтобы открыть файл SVG в Inkscape (версия < 1.x) и использовать расширение Path to OpenSCAD для создайте набор точек для каждого объекта.
Расширение создает пути на основе желаемой высоты экструзии и помещает каждый набор точек в отдельный модуль. При этом можно масштабировать каждый отдельный объект и манипулировать каждым по желанию.
Изображение со связанного сайта.
- Существует ли простой способ разделения моделей в OpenSCAD?
- .STEP/.F3D to .Файл SCAD?
- Как указать начало вращения в openscad
- Библиотека OpenSCAD для пустого пространства/отверстий
- OpenSCAD "not valid 2-manifold" полезная информация
- Рендер OpenSCAD (F6) завершается ошибкой "ERROR: CGAL error in CGAL_Nef_polyhedron3()"
- Создание "куска пирога" в OpenSCAD?
- Может ли в OpenSCAD сгибать текст (проецировать его на изогнутую поверхность)?
Вы пробовали использовать
children()
на объекте? Это должно позволить вам манипулировать каждой буквой отдельно., @MickСпасибо @Mick Я не знал о
children()
. Я попробовал это после вашего комментария, но это не изменило результат..., @Oneiraдети не помогают. Импорт является одним дочерним узлом, а не последовательностью компонентов из SVG., @R.. GitHub STOP HELPING ICE