Страница 3 из 39
Разработка Gcodetools - плагин Inkscape для экспорта в Gкод
Добавлено: 07 дек 2009, 11:39
Nick
Разработка Gcodetools
Эта ветка посвящена разработке
Gcodetools, плагина для векторного редактора
Inkscape, позволяющего конвертировать кривые из Inkscape в Gкод, используя круговую и линейную интерполяцию.
Описание работы, установка, помошь и уроки по плагину можно найти в теме:
Gcodetools - plug-in Inkscape для экспорта в Gcode
На данный момент ведется работа над Gcodetools 1.7
Что мы хотим увидеть в новой версии:
- Улучшение расширения для плазменной резки
- Добавление дополнительных опций экспорта:
- Улучшение функции обработки площади
- Угол заглубления
- Расширение для сверловки
Требуются
- Тестеры
- Разработчики
- Помощь в технических аспектах по работе станков и обработке материалов
- Новые идеи
Последняя версия
Исходный код находится на launchpad.net. Получить последнюю версию при помощи bazaar можно так:
Последнюю версию можно загрузить через web-интерфейс:
http://bazaar.launchpad.net/~gcodetools ... lope/files
Установка
1. Загрузите последнюю ревизию, из указанных выше мест.
2. Выполните "python create_inx.py" в директории с загруженными файлами.
3. Скопируйте все созданные файлы с расширением *.inx и файл gcodetools-dev.py в каталог:
Linux: /usr/share/inkscape/extensions/ и перезапустите inkscape
Windows: Program Files\Inkscape\share\extensions\
4. Перезапустите Inkscape
Последняя версия может быть не рабочей! Для получения стабильной рабочей версии зайдите сюда
Gcodetools - plug-in Inkscape для экспорта в Gcode или загрузите предыдущие ревизии.
Re: Inkscape plug-in для экспорта в Gcode
Добавлено: 09 фев 2010, 20:05
Nick
Разработка новых функций:
- Loft создание объекта с определенными сечениями.
Параметры: расстояния между сечениями, степень интерполяции, упрощенное превью/полное превью
Реализация: сначала в исходные кривые добавляются контрольные точки таким образом, чтобы кривые делились ими на равные (относительно длинны кривой) отрезки. Затем эти на основе этих контрольных точек создаются новые кривые которые будут описывать лофт (нужно найти нормальное Русское название).
Проблемы: нет возможности удобно задать поворот сечений.
- Создание узоров переменной глубины.
Для быстрой обработки узоров с переменной глубиной необходимо задать величину координаты z. Первое, что приходит на ум использовать контуры с переменной шириной обводки. Также необходим механизм перевода обычных фигур к такому виду.
Проблемы: нельзя использовать круговую интерполяцию для третьей координаты, придется дополнительно разбивать исходный контур. Сложно составлять необходимые контуры. Необходимо задать функцию толщины фрезы в зависимости от заглубления.
На данный момент в процессе реализации находится лофт, т.к. его реализация вызывает меньше вопросов, и его реализация проще.
Обработка узоров переменной глубины пока находится на стадии обсуждения реализации.
Re: Inkscape plug-in для экспорта в Gcode
Добавлено: 11 фев 2010, 16:27
Nick
При создании loft-а возникает вопрос: что делать с составными кривыми?
Варианты:
- Заменять дырки (между концом одной кривой и началом следующей) прямыми отрезками.
Этот вариант прост в реализации и результатбудет выглядеть достаточно логично - не будет не понятных промежутков в готовом лофте.
- Считать дырку дыркой и при переразбивке кривых учитывать ее как кривую. Тогда появятся дырки в цельных кривых, в тех же местах.
- Считать дырку дыркой и не учитывать ее при переразбивке кривых. Тогда дырки будут плавно исчезать. По идее это самый правильный вариант. Нужно подумать над его реализацией.
Пока не рабочая версия:
Re: Inkscape plug-in для экспорта в Gcode
Добавлено: 12 фев 2010, 18:29
Nick
Loft в процессе разработки. Появились параметры:
- loft distance - расстояние между кривыми в лофте
- loft interpolation - тип интерполяции лофта: прямолинейная интерполяция и сглаженная
- loft direction - направление кривых созданных лофтом: продольное и поперечное
Версия пока не рабочая!
Re: Inkscape plug-in для экспорта в Gcode
Добавлено: 15 фев 2010, 07:36
Nick
Почти рабочая версия с функцией лофта.

Re: Inkscape plug-in для экспорта в Gcode
Добавлено: 15 фев 2010, 20:00
Nick
Появился перый скриншот лофта. Примерно определилась поцедура его создания:
- задать сечения детали в осях.
- задать расстояния между осями.
- выделить сечения в правильном порядке.
- выбрать степень интерполяции (от степени интерполяции зависит гладкость лофта при переходе от сечения к сечению)
- нажать ок
.
Несколько советов: для получения правильного лофта необходио, чтобы контуры были правльно ориентированы. Ориентацию контуров можно просто проверить задав в стиле обводки стрелки, указывающие направление (маркер начала, середины или конца).
Возникает вопрос нужна ли переменная степень интероляции? Т.е. Задавать одну степень для всего лофта или сделать возможным задание степени для каждой пары контуров?
Re: Inkscape plug-in для экспорта в Gcode
Добавлено: 15 фев 2010, 20:19
Nick
По поводу гравировки узоров, примерно сформировалсч алгоритм действий:
- Выбираем кривую.
- Смотрим есть ли у нее эффект переменной ширины штриха
- Если есть переразбиваем кривую таким образом, чтобы ширина штриха хорошо интерполировалась прямыми отрезками.
Здесь нужно также постараться учесть различные формы фрезы: если фреза в виде простого конуса, то все просто - масштабируем глубину в зависимости от угла острия фрезы, а вот если фреза имеет более сложную форму, наприер, шар или какая-нибудь выпуклая/вогнутая фреза, то нужно будет вводить замену переменной. Хотя, это случай можно оставить на потом и предоставить возможность людям самим устанавливать разбиение кривой.
- Затем переводим кривую в Жкод уже готовой функцией.
Теперь не решенные вопросы:
- При задании кривой с переменной шириной штриха кривая будет отображаться не овсем так как она будет вырезана. На концах кривая будет обрублена хотя при обработке останется закругленный конец. По идее это одно отрисовать при создании превьюшки но на стадии отрисовки этого всеравно не будет видно.
- Уже оговоренный вопрос интерполяции кривой по оси Z при сложных формах фрезы.
- Как оптимизировать отрисовку узоров? Пока это процесс отработан не слишком хорошо.
Re: Inkscape plug-in для экспорта в Gcode
Добавлено: 16 фев 2010, 18:00
Nick
Очередная версия пока не рабочая.
В процедуре лофта произошли изменения.
Дистанции между сечениями теперь задаються дополнительной кривой. Также с этой кривой берется способ интерполяции. Каждая точка кривой соответствует одному сечению. Разница между координатами х этих точек - расстояние между сечениями. Сегодня повешу пример, по нему проще объяснить.
Re: Inkscape plug-in для экспорта в Gcode
Добавлено: 17 фев 2010, 07:46
Nick
Исправлено несколько багов...
Re: Inkscape plug-in для экспорта в Gcode
Добавлено: 17 фев 2010, 18:04
Nick
Код плагина полностью перерабатывается. Добавляются новые функции, не нужные удаляются. Структура улучшается.
Новые возможности:
- автоматическое разбиение кривой, для достижения заданной точности аппроксимации
Версия пока не доделана!
Re: Inkscape plug-in для экспорта в Gcode
Добавлено: 18 фев 2010, 18:03
Nick
Почти готова новая версия Gcode tools 1.1:
О всех нововведениях напишу чуть позже.
Re: Inkscape plug-in для экспорта в Gcode
Добавлено: 19 фев 2010, 18:09
Nick
Готовая версия 1.1.
Пока не протестирован экспорт в Gкод!
Re: Inkscape plug-in для экспорта в Gcode
Добавлено: 25 фев 2010, 19:42
Nick
Разработка...
Гравировка.
1. Необходимо облегчить отрисовку узоров с произвольной глубиной.
Как я это вижу : удобнее всего нарисовать внешние границы узора, а потом привести его к нужному виду. Под нужным видом подразумевается контур с эффектом переменной толщины, что по сути является эффектом Path along path.
Итак входные данные замкнутый контур. Хотим получить траекторию посередине этого контура и вычислить переменную толщину. Первая проблема - как найти траекторию?
Сначала нужно найти направление траектории можно построить множество контуров выбрать тот у которого будет самым маленьким самое толстое место. Но это достаточно трудозатратно. Второй вариант заставить человека указывать начало и конец траектории. Для этого придется заставлять рисовать человека еще одну кривую. Имхо это не так сложно и стоит пойти по этому пути.
Если у нас есть начало и конец траектории, то мы можем разделить контур на две части - условно правая и левая. После этого мы можем очень просто рассчитать точки посередине. Интересно если равномерно разбить правую и левую част и взять усредненные их контрольные точки, то получившаяся кривая будет проходить ровно посередине или нет? Сами-то контрольные точки будут точно посередине.
Нужно расписать векторную форму кривой Безье и все станет понятно.
2. Нужно написать обработку таких узоров.
Re: Inkscape plug-in для экспорта в Gcode
Добавлено: 26 фев 2010, 00:05
Nick
Начал писать гравировку...
Что-то тяжело работать после рабочего дня после праздников

.
Re: Inkscape plug-in для экспорта в Gcode
Добавлено: 26 фев 2010, 18:27
Nick
Продолжение...
Написана разбивка кривой вблизи указанных точек на две кривые.
По первому пункту, нужно дописать построение серединной кривой и вычисление толщины.
Re: Inkscape plug-in для экспорта в Gcode
Добавлено: 27 фев 2010, 12:18
Nick
Разработка...
Гравировка узоров.
Есть два варианта:
1. Все узоры имееют толщину меньше диаметра фрезы, тогда все просто:
2. Контур толще диаметра фрезы:
Вот тут возникают проблемы см рисунок:
Проблемы обработки цилиндром - это проблема обработки площади, нужно доделать выход фрезы во всех углах. Или можно просто уменьшить диаметр фрезы в настройках (но это сильно увеличит время обработки вплоть до двух раз!).
Проблему обработки конусом можно избежать вручную отрисовав контур угла. Это плохое решение и нужно придумать что-то еще.
По идее,
вместо конуса можно использовать любую фигурную фрезу. Для этого нужно будет реализовать замену переменной в функции вычисления заглубления:
Пусть ширина контура = w, нужно найти глубину d, также задана функция f(w) которая описывает форму фрезы.
Тогда глубина будет ровна f(w). Единственная проблема: нужно учитывать f(w) во время аппроксимации ширины контура.
Для конусной фрезы f(w) = tg(a/2)*w/2 где а - угол конуса, для сферы f(w) = sqtr(r^2-w^2)/2, где r - радиус сферы.
Re: Inkscape plug-in для экспорта в Gcode
Добавлено: 27 фев 2010, 13:02
Nick
Просто найти среднюю линию контура = траекторию инструмента не удалось

.
Простое усреднение всех контрольных точек дает неправильный результат.
Если мы усредняем контрольные точки, то получившаяся линия будет равноудалена от исходных контуров хитрым образом: если nl - новая линия, rl и ll - правая и левая линия, то для каждого сегмента этих линий:
расстояние от nls(t) до rls(t) равно расстоянию от nls(t) до lls(t). Но, к сожалению t у нас нелинейно по отношению к длине сегмента

, поэтому результат не правильный.
Если ввести линейную интерполяцию обоих контуров, то по идее этот способ будет работать, но тогда траектория будет ломанной линией, потеряются все преимущества биарок.
Вот иллюстрации:
Хотя на некоторых контурах все выглядит хорошо:

- g4303.png (17.99 КБ) 5977 просмотров
на самом деле это не так

:
Re: Inkscape plug-in для экспорта в Gcode
Добавлено: 27 фев 2010, 13:44
dormouse
Особо рисовать не умею, поэтому прошу после изменить мои почеркушки на адекватные...
Re: Inkscape plug-in для экспорта в Gcode
Добавлено: 27 фев 2010, 15:20
Nick
Попробовал отрисовать то, что ты говорил:
Что имеем сначала:
После обработки цилиндром:
Потом проходим конусом. (Или конусом не надо проходить?)
Потом рисуем уголок:
Что-то не то получилось... Или я не правильно понял...
Re: Inkscape plug-in для экспорта в Gcode
Добавлено: 27 фев 2010, 17:33
dormouse
"Не совсем" правильно. Есть уточнения:
1. треугольной фрезой надо проходить ТОЛЬКО там, где на первой картинке НЕТ синего цвета
2. проходить надо не по прямой, а по контуру детали с ПЕРЕМЕННЫМ отступом. Для расчёта средней линии (рис 3.зелёная) вместо касательной лучше брать синюю, повёрнутую на угол{зелёная, красная} - так будет красивее на больших длинах
3. Таким образом кроме редких случаев в каждом "носике" должно сходиться 2 средние линии (два прохода конусом - вдоль одной стороны и вдоль другой). Артефакт (рис 4.синее) появится там, где две средние линии широко разведены, а основная фреза (рис 1,2.красное) не дошла.
---
На тему задания глубины. Поясните, пожалуйста, какие есть варианты в Inkscape? В растровой программе всё понятно - пиксельная линия с переменным цветом (как одна из линий из серой карты глубины, Z-depth map). В векторной - либо переменный цвет линии (если это вообще возможно), либо линию нарезать на короткие кусочки разной ширины, либо точек разным цветом наставить, либо рис 3.синее и рис 3.красное нарезать на N сегментов (при большом числе можно отрезки прямых).
Пример - на этой картинке. Среднюю линию брать как линию, соединяющую все середины отрезков ([G1,G2][G2,G3][G3,G4]), каждый из которых имеет концами соответственные узлы Ri красной и Bi синей линии (сама желаемая траектория, она с отступом от чёрной линии объекта для наглядности сделана) и ГЛУБИНОЙ = половине длины такого отрезка (жёлтая). |RiGi|=|GiBi|.
Сказал сложно, но, надеюсь, разобраться можно. Насчёт целесообразности линии [G1,0] - не знаю, но, возможно, она необходима. "маленький штрих для красоты".
"рис 4.синее озеро" будет расположено примерно на месте точки R4. Таких зелёных линий будет две - одна от нижней чёрной части исходной картинки, другая от верхней. Причина существования чёрной синего озера - в т.R4 ни одна ни другая коническая фреза почти ничего не вырежут, а исходная рис 1.красная уже не достаёт сюда.
P.S. Только что заметил, что увлёкся и сделал ошибочную иллюстрацию! На самом деле: диаметр конической фрезы в самой толстой части = |R4,B4|=|R3,B3|=|R2,B2|. "нехватать" диаметра (необходимость вынимать фрезу из максимального заглубления) возникает только на отрезке [G2,G1], т.к. окружность {G1,|G4,B4|} уже пересекает верхнюю чёрную кривую, поэтому |B1,R1|<|B4,R4|, т.е. фреза поднимается вверх!
Re: Inkscape plug-in для экспорта в Gcode
Добавлено: 27 фев 2010, 18:56
Nick
Приблизительно понятно...
В голове только с трудом все это представляется, как оно в итоге будет выглядеть... Правда у меня сейчас будет 3 часа в пробке на то чтобы это обдумать

.
Карту высот можно задать битмапом. Т.е. просто вставить битмап в инкскейп и все.
Я вот тут подумал, а не логичнее ли будет делать такой уголок шариком? Тогда и борозды посередине не останется и края будут плавно закругляться...
Вот что пока наклепал: поиск траектории внутри контура. Это первая версия поэтому все очень коряво

. Будем улучшать!