Преобразование 2D-фигуры OpenSCAD в 3D-фигуру

У меня есть проблема в OpenSCAD, я знаю язык и не знаю, как подойти к проблеме.
Допустим, я получаю двумерную фигуру, например круг (r=25), и я хочу получить из нее твердое тело. Но вот что я хочу от этого твердого тела.
-> На h=0 есть мой круг(r=25)
-> На h=10 есть круг(r=35), поэтому круг, который на самом деле масштабирован, но я не хочу использовать масштаб, так как он умножает фигуру, но я хочу сделать его на 10 пунктов больше из каждой его точки
-> Это похоже на усеченный конус
- > Это работает для других фигур, скажем, многоугольников, но у нас они на 10 пунктов больше с каждой точки
-> Мне также нужно что-то, что работает в обратном направлении, я имею в виду уменьшение фигуры

Как к этому подойти? Может на нере есть примеры, так что если вы мне их покажете, буду признателен

Что я пробовал?
Если h = 10, то для каждого h1 в [0, ..., 10] я пытался создать что-то вроде этого: (blech)

translate([0,0,h]) for(i = [0:359]){
                x = thickness*cos(i);
                y = thickness*sin(i);
                translate([x,y,0]) children(0);
                }
            }

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


person Michał Piotr Stankiewicz    schedule 09.11.2015    source источник


Ответы (2)


Я не уверен, понял ли я вашу проблему. Но все, что вы описали выше, можно сделать с помощью linear_extrude() и параметра масштаба:

small = 25;
large = 35;

// upscale 
linear_extrude(height = 10, center = false, scale = large/small) circle(r = small);

// downscale
translate([2*large,0,0]) {
    linear_extrude(height = 10, center = false, scale = small/large) circle(r = large); 
}

он работает с каждым 2D-примитивом и dxf-импортом.

person a_manthey_67    schedule 18.11.2015
comment
это не то, что я искал, и на самом деле ответ - использовать minkowski - person Michał Piotr Stankiewicz; 19.11.2015

Многоугольники могут иметь смещение() в обоих направлениях. Пока оба получившихся многоугольника выпуклые, можно использовать hull() для создания из них 3D-объекта. К сожалению, hull() не может напрямую генерировать 3D из полигонов, но это можно решить с помощью очень тонкой linear_extrude().

$fa = 0.5;

module extrude(o, h) {
    hull() {
        linear_extrude(0.001)
            children();

        translate([0, 0, h])
            linear_extrude(0.001)
                offset(o)
                    children();
    }
}

extrude(10, 50) circle(20);

translate([80, 0, 0]) extrude(-10, 50) scale([1, 1.5]) circle(30);

Для более сложных случаев есть несколько экспериментальных примеров кода в репозитории list-comprehension-demos.

person Torsten Paul    schedule 15.12.2015