KREMEN Реклама
KREMEN Реклама

Делаем ребристое круглым?

aussy
Идет загрузка
Загрузка
17.02.2018
10849
34
3D-печать

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Отписаться от уведомлений вы всегда сможете в профиле автора.

43
Статья относится к принтерам:
RepRap
Делаем ребристое круглым?
Преамбула: я вообще-то программист, и достаточно настырный и занудный. Когда я первый раз получил из 3d-модели gcode, я конечно полез смотреть - что там внутри? Оказалось, на 99% этот код состоит из комманд G1 - 'отрезок'. Хорошо, а почему нет например команд G2 или G3 'дуга'? Да потому, что формат stl - это грубо говоря набор треугольников, поэтому круглая фигура, сконвертированная в stl и обработанная слайсером, будет содержать отрезки вместо дуг. Ну а можно ли по отрезкам, концы которых лежат на дуге, восстановить исходную дугу? Понятно, что в теории можно, а на практике?

Оказалось, можно и на практике. Слева стакан, представленный в виде 20-гранника. Конечно, можно делать число граней больше - хоть 360 - но это сильно увеличивает размер stl файла и время его обработки. Справа - стакан, где для каждого слоя 20 команд G1 заменены одной командой G3. На вид гораздо лучше, не так ли?

Теперь подробности для настырных зануд.

Математика очень простая, на уровне 7го класса. Если отрезок - хорда, то перпендикуляр из середины отрезка проходит через центр окружности. Два последовательных отрезка (если только они не лежат на одной прямой) дадут центр - в точке пересечения перпендикуляров. Если третий подряд отрезок имеет перпендикуляр, проходящий через ту же точку - все три лежат на одной дуге. Считаем следующие отрезки, пока они лежат на одной дуге - добавляем их в список. Как только вышли за дугу (перпендикуляр промахивается, или вообще пошло перемещение без выдавливания пластика) - начальная и конечная точки дуги у нас есть, центр тоже, заменяем весь отрезков одной дугой. (На практике оказалось, что неплохо бы еще по двум отрезкам проверить, насколько близко точка пересечения - она не может быть слишком близко, т.к. угол между отрезками должен быть тупым).

С теорией понятно, а как это реализовать на практике? Парсер gcode писать самому было лень, да и незачем, поскольку RepetierHost позволяет плагины для всякой постобработки. Подробности тут: Repetier-Host Plugin Guide

С помощью этого хелпа (и небольшой помощью собственно разарботчиков Repetier-Host) написал я небольшой плагин. Если в двух словах: по нажатии кнопки Import получаем содержимое редактора кода в виде List, команды уже распарсили за нас. Идем по этому списку, производим соответствующие вычисления и замены. Результат показываем пользователю в отдельном текстовом редакторе. По нажатии кнопки Export результат загружаем в редактор команд, при этом отрисовку за нас тоже сделают.

Вот пример модели до обработки:
Делаем ребристое круглым?
А вот после обработки:
Делаем ребристое круглым?
Предупреждаю сразу, что этот плагин - пока что только proof of concepts, доказательство того, что идея работает. Там еще много недоделок и неточностей, и интерфейс вообще никакой. Кстати, я написал Рональду и Маркусу (авторам RepetierHost), мол, как вам такая идея. Ответили, что идея так себе, сделать конечно можно, но нужно ли это кому - все равно G2/G3 превращается в набор шагов по прямой, и есть риск конвертировать в дугу полигоны, которые не должны быть дугами, и вообще лучше увеличивать количество треугольников в исходной модели...

Интересно, что скажет клуб - нужен ли кому такой плагин к repetier-host?

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Отписаться от уведомлений вы всегда сможете в профиле автора.

43
Комментарии к статье
Lider 3D Реклама
Lider 3D Реклама