Как удалить внутреннюю часть шестигранной сетки

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

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

Все работает как положено...

Range = 15, Angle = 60°

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

Я довольно новичок в OpenSCAD: каков был бы лучший подход здесь? (Я доволен даже решением, которое требует заново реализовать то, что делалось до сих пор).

, 👍4

Обсуждение

Вы хотите создать выпуклую оболочку или просто удалить все внутренние ребра?, @Mick

Если вы не можете найти решение здесь, подумайте о том, чтобы присоединиться к списку рассылки / форуму OpenSCAD, так как есть довольно опытные и талантливые мозги, которые действительно на высоте., @fred_dot_u

@Mick - Я не уверен, что достаточно хорошо осведомлен, чтобы понять ваш вопрос (мне не хватает терминологии), но я уже пробовал функцию "hull()" (если это то, к чему вы стремились), и она не делает то, что я хочу, так как не очерчивает мою фигуру он "оборачивает" его, проводя прямую линию между наиболее выступающими точками каждой его стороны..., @mac

@fred_dot_u - Спасибо за предложение! :), @mac


2 ответа


Лучший ответ:

3

В итоге я сам нашел разумное решение:

По сути, я различил две идентичные неполые геометрии, в которых в первой ячейки были больше, чем нужно (поэтому они перекрывались с другими), а во второй-точно нужного размера:

difference() {
  base_geometry(range, angle, infill, extra_padding = 2);
  base_geometry(range, angle, infill, extra_padding = 0);
}

Таким образом, единственной оставшейся частью твердого тела была extra_padding на внешних краях геометрии.


,

Теперь я понимаю, чего вы добивались. Я собирался попросить вас предоставить рисунок, но вы сделали гораздо лучше., @Mick


0

К сожалению, OpenSCAD не имеет преобразования 2D hull (), хотя оно и было запрошено. Возможно, вам удастся найти предварительно написанный пакет, реализующий 2D-корпус. Однако если все, что вам нужно, - это шестиугольная сетка с границей произвольной формы, не могли бы вы не жульничать и заставить свой слайсер сгенерировать сетку для вас? Все, что вам нужно сделать, это сгенерировать конверт, а затем нарезать его шестиугольной сеткой в качестве заливки и не запрашивать ни верхнего, ни нижнего слоев. Большинство слайсеров будут делать шестиугольную заливку.

Если вы хотите сделать все это в OpenSCAD, то я бы сделал это так:

  1. Создайте 2D-сетку, аналогичную той, что у вас есть сейчас.
  2. Создайте 2D-контур нужной вам формы, уменьшенный до размера, чтобы можно было добавить коллектор (в виде периметра).
  3. Продублируйте эту фигуру.
  4. Добавьте коллектор к первой копии.
  5. Создайте пересечение второй копии и сетки.
  6. Создайте объединение двух копий.
  7. Выдавливаем соединение.
,

Я считаю, что мне не удалось достаточно ясно понять, чего я хочу достичь (извините, мне не хватает правильной терминологии из САПР и / или математики): мне вообще не нужна внутренняя сетка. Мне нужен только периметр фигуры, которую я сгенерировал, например: внешние, не примыкающие к другому шестиугольнику стороны шестиугольников на краю моей поверхности... Однако в вашем предложении есть что-то интересное, может быть, часть решения, которое я ищу ... а именно: добавление коллекторов. Как я могу это сделать, имея существующую геометрию?, @mac