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

Подписаться на 3Dtoday
aussy
Идет загрузка
Загрузка
17.02.18
7013
36
печатает на RepRap
3D-печать
44
Статья относится к принтерам:
RepRap
72c7f9d2013c1de7e310c61841da86aa.jpg
Преамбула: я вообще-то программист, и достаточно настырный и занудный. Когда я первый раз получил из 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 результат загружаем в редактор команд, при этом отрисовку за нас тоже сделают.

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

Интересно, что скажет клуб - нужен ли кому такой плагин к repetier-host?
Подписаться на 3Dtoday
44
Комментарии к статье

Комментарии

17.02.18 в 22:08
1
Хм. К статье еще прилагались исходники плагина и готовая dll, которую надо положить в тот же каталог, где лежит RepetierHost.exe. Но похоже портал их не показывает. Кто-нибудь знает, как приложить к статье файлы (не картинки)?
17.02.18 в 22:09
0
гугл диск поможет
17.02.18 в 22:34
0
Так и не понял, как приложить файлы к статье, вот ссылка на яндекс-диск:

WindowsFormsControlLibrary1.dll

UserControl1.cs

UserControl1.Designer.cs

WindowsFormsControlLibrary1.csproj

WindowsFormsControlLibrary1.sln
17.02.18 в 22:09
0
Вижу эту опцию только как инструмент по спасению очень гадких, но крайне необходимых моделей. А в остальном бесполезный функционал. После инвентора почти все модели идеальны. Симплифай режет быстро и вес модели не сказывается абсолютно.
17.02.18 в 22:53
6
что-то похожее тут уже, кстати, делалось, но для slic3r (но можно и вручную обрабатывать) на питоне, я ещё тогда сохранил т.к. интересно. просто на всякий случай - http://3dtoday.ru/blogs/4gordi/teach-the-printer-to-print-circles-not-polygons/
18.02.18 в 01:38
1
Я считаю что это однозначно нужная штука, хотя бы потому что уменьшит gcode файлы, которые кстати нужно передавать по медленному COM порту и еще и парсить вдобавок, что тоже не добавляет скорости.
18.02.18 в 03:56
0
Однозначно нужная вещь.
Не все пользуются ломаным Симпом и демо Кисом, и гараздо меньше их покупают.
Развивайте.
Делайте так чтобы у скептиков слюне потекли и встроили в R-H.
Успехов!
18.02.18 в 22:27
0
Пользую бесплатный Kis. В коде везде и только G1. Может я не умею его готовить? :)
19.02.18 в 03:16
0
И в Симпе тоже, но в Симпе есть галачка отправлять G2/G3, это если с компа из под Симпа управлять, но сохранаяе все равно G1, а Кис, если верно помню, дробит и регулирует что бы не было резкого старт/стоп.
От того все круглое.
В случаи с Симпом прошивка должна понимать команды G2/G3. Репитор например имеет такую функцию.
Марлин в зависимости от версии то работает то тупит. Нарывался на это хозяйство.
18.02.18 в 10:22
1
Уменьшение веса gcode-файла это хорошо, однако микроконтроллеру принтера придется затратить еще больше усилий и времени на пересчет дуг обратно в прямые отрезки... Для восьмибитных платформ, мне кажется, не слишком целесообразно.
18.02.18 в 11:26
1
Ну а что мне до усилий контроллера - он железный, пусть работает. По времени получается, как ни странно, процентов на 10-15 быстрее. Возможно, потому что не надо парсить каждую команду; возможно, потому что движение более плавное, безе рывков получается на коротких отрезках.
19.02.18 в 01:30
1
То, что на практике получается быстрее, но подход "он железный, пусть работает" мне кажется немного так безответственным.
А по теме плагина - штука интересная, может быть полезна.
Хотя, честно говоря, только сейчас узнал, что к репитеру можно свои плагины крутить) за что вам отдельное спасибо)
19.02.18 в 10:14
2
Сам не знал. У них на сайте эта информация где-то глубоко зарыта. Нашел на гитхабе код репитера пятилетней давности, написал Роланду письмо, мол, где бы взять код посвежее, а то хочу фичу прикрутить. А он и ответил, мол, мы закрыли сорцы, а для фичекрутильщиков есть механизм плагинов. И еще потом любезно ответил на пару моих вопросов, когда у меня что-то не получалось. Я, пожалуй, чуть позже отдельно в блоге напишу, как плагин к репитеру делать.
26.02.18 в 13:01
0
С первого взгляды вроде бы всё правильно. Круги нужно и записывать кругами, а не ломаной линией. Нужная вещь.. А со вторго - принтер-то XY. Он по определению круги делать не умеет, следовательно, логично предоставить ему информацию в том виде, в котором она ближе всего к собственной системе. И мы ведь в 21 веке живем. Какие com-порты? Всё либо с usb льеся либо с флешки печатается. Так что хотелось бы чтобы плагин был нужен, но на самом деле он ситуацию кардинально не меняет. А только переносит нагрузку с компа на контроллер принтера. Нужно ли это?
26.02.18 в 13:22
0
Мне кажется здесь все дело не в самом принтере, который "круги делать не умеет", и не в его осях "XY".
Любой принтер сможет сделать и круги и другие кривые, с дискретностью установленных микрошагов.

Думается все же, все дело в первоисточнике... в самом формате STL... как ни крути в этом формате не может быть никаких ни дуг, ни эллипсов, ни каких иных кривых линий... и это вопрос наверное не принтера скорее, а слайсера, как он будет совокупность тех или иных линий, описанных в STL, интерпретировать...

Может я что-то и путаю... и не правильно вас понял...
26.02.18 в 14:24
1
Именно что слайсера! И задача у меня была - можно ли восстановить информацию о дугах, потерянную при конвертации в промежуточный формат stl. Ну, можно. (Нужно ли - второй вопрос.) Конечно, слайсер, встроенный прямо в программу 3d моделирования, таких проблем иметь не будет, поскольку не будет промежуточной конвертации в stl.
19.02.18 в 13:24
0
однако микроконтроллеру принтера придется затратить еще больше усилий и времени на пересчет дуг обратно в прямые отрезки... Для восьмибитных платформ, мне кажется, не слишком целесообразно.

Я не смотрел, как в принтере реализованы дуги, но Алгоритм Брезенхэма решает кучу проблем как для линий, так и окружностей. Для дуг тоже можно найти решение. Причём решение без операций умножения и деления. Умножение на 2 делается сдвигом.
18.02.18 в 14:55
1
После Fusion 360 и Cura всё кругленькое и ничего не тормозит, что-то подсказывает что модель сама по себе была сделана в ПО не предназначенном под производство изделий (тридемакс?)
18.02.18 в 16:07
0
А чего бы это тридемакс не предназначается для производства изделий?) Норм программа. Лет 10 уже в ней работаю, и для печати модели делаю уже года 2-3. Проблем не было.
18.02.18 в 17:05
2
Три де макс не предназначается для производства изделий. Не верите, проходим по ссылке на сайт производителя три де макса - https://www.autodesk.com/products/3ds-max/overview моделирование и рендер для VR и игр.
Российскому пользователю, который с начал 2000-х сидит в три де максе это сложно принять, но после принятия и перехода на САПР, тот же фьюжн, люди просто окрыляются, я сам переучивался и переучил нескольких упорных товарищей, которые упирались "до последнего" а сейчас нарадоваться не могут.
21.02.18 в 08:12
0
но визуализацию такую же,как в 3ДМаксе во фьюжне сделать нельзя? или можно?
21.02.18 в 17:09
0
Если Вы говорите об удобстве САПР, о том что параметрическое моделирование удобнее, тут вопросов нет. Это более чем очевидно. Но это совершенно не означает непригодность 3ds max при моделировании изделий для последующей печати.
А предположение о том что кругленькое можно получить только во Fusion 360 говорит о неумении тоже самое повторить в 3ds Max.
18.02.18 в 15:56
0
Разве такая тема уже не поднималась?)

http://3dtoday.ru/blogs/4gordi/teach-the-printer-to-print-circles-not-polygons/
18.02.18 в 17:01
1
Да, тут выше уже упоминали эту ссылку, тема сильно похожая, спасибо. (Тоже хотел сначала на питоне делать.)
18.02.18 в 17:13
0
Не заметил:)попробуйте реализовать, может получится лучше!
21.02.18 в 09:05
0
С тонкостенным объектом, как на рисунке, все просто. А вот если изменять периметр сплошного объекта, то придется позаботится и о корректировке траектории заполнения.
21.02.18 в 10:21
0
Хороший вопрос. Сейчас специально посмотрел дно стакана, там как раз периметр и заполнение. Расхождение глазом не заметно. Поскольку там 15% перекрытие, то никаких щелей нет.
21.02.18 в 10:26
0
Логично.
А если заполнение неожиданно будет концентрическим?
Тоже придется пересчитывать?

Я без критики, размышление вслух.
21.02.18 в 22:26
1
А плагину без разницы, заполнение это или периметр - лишь бы дуга. Вон в примере у меня внешняя и внутрення стенка, он их нормально обработал.
21.02.18 в 14:42
0
Риторика:
"Интересно....- а когда добавят в G-код возможность автоматического увеличения подачи прутка от ускорения каретки...", в принципе...это слайсеры автоматом делают наверное...но всё-таки...если есть перемещение каретки по траекториям полученным функциями, то почему нет подачи...
Извините что не высказал своей оценки по поводу работы автора - мне несколько иначе представляется конструктивное общение, чем некоторым, кому всегда есть что сказать по теме в силу своей невообразимой для меня компетенции. Не примите за - "дурачком прикинулся...", мне и правда интересно почему функционал однобоко увеличивается, может в этом есть своё рациональое зерно - откуда мне знать...про траектории в G-коде полученные по функциям я давно знал. Попробую ответить сам - траектории полученные по функциям предназначены для дорогих фрезерных и токарных станков, на которых стоят не шаговые двигатели.
Да - информация не изменилась во многих местах


Как и было сказано раньше, шаговый двигатель не может вам дать высокую скорость и мощность и поэтому одно из его применений - в станках ЧПУ недорого сегмента
Стало-быть ТСУ есть целесообразность копнуть "поднаготную" в сторону более дорого оборудования. Тут как я знал так и осталось пока без изменения. Ну а там есть смысл и мне посмотреть на серводивгатели, гидравлику, эффективный коррелируемый косвенный обдув...плашка с роликами на подачу...может получится неплохая связочка. Слайсер я могу брать от фрезера - код пишу, модифицировать G-код это -не проблема: возьму слайс для фрезера и сделаю с него всё что мне захочется. Запарочная конечно демка получится для гидропривода...но мысль интересная, вопрос только - когда...
22.02.18 в 08:20
0
А как этот плагин отрабатывает острые углы, градусов 30 к примеру? Или хотя бы прямые (90*)? Я так понимаю, он их будет "округлять"? Если полигональная сетка густая - это будет незаметно, а если это, к примеру, треугольная пирамида из четырех полигонов - что из нее получится? конус?
22.02.18 в 09:38
0
На дорогих станках этот G3 код применяется (он для серв и создан был видимо), вот тут с вопроса одного поднял видео. К шаговикам нет смысла лепить G3


Другой вопрос - выдержит ли ретракты пруток (порвётся запросто).
Видео это не вставлятся
22.02.18 в 09:43
0
Вот сама тема вопроса
А как этот плагин отрабатывает острые углы, градусов 30 к примеру?
посмотрите, если действительно интересно , как нарезается слайс G3 для фрезера дорогого и узнаете как должно быть.
мне не интересно, я эту тему давно знаю, но сам слайс для дорого фрезера не видел - а смысл его смотреть, станка всё равно нет пока. А там всё просто -фреза делает круговое движение вокруг острого угла снаружи. Для сопла острые углы есть, их не может не быть, для фрезы острый угол - невероятный случай, очень редкий. Алгоритмы нарезки традиционно разные, но это от пряморукости создателей слайсеров. А этот плагин легко видимо можно применять - всё равно сначала нарежется G1, а потом модифицируется в G3, ну это если не космический корабль вместо слайсера. Я-бы так сделал: нарезал G1, а потом как ТС поступил-бы. Тем-более G1 тоже не все могут нормально нарезать - многие воды много в код льют и в сам способ нарезки. А уж за 3G нарезку "с ходу" говорить - люди там чуть-ли не галактику с нуля переписывают в этом коде, там такие теориии умопомрачительные выдвигают, рабочие, но это мрак просто, когда к булевым операциям наложений сводится.
Вот неплохое применение этого плагина, если он съест это: сделать большой принтер на сервах (ну это ларжовый конечно надо 2 на 2, 3 на 3, 5 на 5 метров, так где-то, чтобы пруток большого диаметра брать) - на шаговиках нет смысла большой принтер делать - медленный будет, брать слайсер (чтобы новый не писать) готовый от фрезера и модифицировать выдаваемый им G3 под сопло...ну это как вариант конечно, я не в теме особо тут. Чел на видео - он просто код сгенерированый программой на Python написаной заюзал очевидно - для 2D там просто всё делается, читал в своё время, для ознакомления, 2D тем более для идеальных линий по контуру - это так: батва, третьеклассники под 2 D пишут есть, микроконтроллеры чпу есть адаптированные под python, незабвенный контроллер конструктора "Кулибин" один из них, так это какие ещё годы...ТС-у другие аппараты нужны для такого кода, а на шаговиках нет смысла - нет "пространства для разворота". Я для себя эту тему проем - буду на гидроприводах делать принтер с сервомоторами, попозже, но буду, гидропривод - тема стрельнувшая у меня первого для 3D печати (там на одной направляющей можно кучу кареток ставить, а двигать вообще лучами света, на наноуровне какм-нибудь, но это уже не по мне - это мне не одолеть одному), знаю плюсы и минусы, как сделать. Там я попробую G3.
Тему хорошую поднял ТС, теперь я понимаю, что переплатил за свой принтак дофига - один экструдер, шаговоики, актуален только G1 - удовольствие 120 к. Пользователей обдирают как липок. Они эти шаговики чуть ли не в рамки идолов поставили перед публикой, впрочем с прочим ...теперь ясной становится цена...кормить непомерно раздутые штаты интеллектуалов - ОП. Кормить ОП - предназначение покупателя, на корм. Они потом в коментах вот такое постят

чё им ещё делать на жопе ровно сидя: пошёл пожрал - размножился, затролил, ещё и подонком назовут или наркоманом - если чё скажи умное. Им уже в офисах тесно, он вон телек тролят. Зато вопеть будут на углах - "а знает-ли этот падонок сколько это стоит!?!?!", зато идею ПЗУ на резисторах им слямзить ни во что не обошлось в 80-ых (бумаги туалетной отделались клочком) - чужое ничего не стоит, только своему цену знают. Лучше-бы они и поныне катушки использовали - меньше несправедливости-бы было, за золото покупали-бы за границею станки - зато жрали-бы меньше. Один фиг все плоды их трудов вот к такому сводятся . Там не только глаза вот так выпучаться, но и руки опустятся.
22.02.18 в 15:34
0
Нет, не будет, у меня в коде стоит ограничение - 150 градусов как минимум (это 12-угольник). Треугольные, квадратные, 6угольные и т.п. - не трогает. По-хорошему, надо этот параметр сделать настраиваемым.
22.02.18 в 15:45
0
А, ну тогда все хорошо ;) Прям попробовать захотелось. Не уверен правда, что моя прошива про G2/3 команды в курсе... Надо попробовать что-нибудь для начала "руками" скормить. Были как то модели на заказ криво откуда то сэкспортированные, все отверстия многоугольные. Печатал с пятью периметрами и потом сверлом "ровнял".
22.02.18 в 14:27
0
Это интересная функция. У нас принтер поддерживает дуги с командой G3, но пока особо не тестировали, нечем было код с G3 подготовить. Возможно протестируем печать именно с вашим плагином.

Для написания комментариев, пожалуйста, авторизуйтесь.

Читайте в блогах

"Каляка-Маляка" из твёрдого состояния в жидкое

MKS Robin. Часть вторая - укрощение строптивой прошивки.

Panda 3D предлагает фотополимерные 3D-принтеры Paladin стоимостью от $299

3D-технологии для литейного производства: как создать форму для отливки за неделю

Истории участников 3Dtoday Fest: Илья и Анастасия Никоновы

3D-печать помогает восстанавливать популяцию белых журавлей