Страница 26 из 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: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 27 май 2010, 14:08
dormouse
Я считаю, что надо включать gcodetools в основную ветку Inkscape ДО выхода следующего релиза Inkscape. Пусть в зачаточном состоянии, но оно "будет у всех на виду" и люди потянутся. Иначе все будут качать "последнюю стабильную релиз-версию" и ещё год о нас не узнают. А год потери десятков бета-тестеров это критично, как я считаю.
Надо ещё сделать одну закладочку "DXF points". При нажатии Apply на ней всем выделенным объектам будет присвоен тег 'gcodetools':'1' или убран - для этого радиобаттон "присвоить/убрать". XML-редактор это сурово для пользователей.
Сейчас доделаю сортировку точек для сверловки и будет совсем красиво....
dxf_input: если есть прямая ссылка на разработчиков, то надо её мне дать. Я сам свяжусь и попытаюсь добиться чтобы они влили все мои изменения.
rev 74. dxfpoints сортировка и добавлены dxf_input
http://kalyaev.com/2010/20100423/gcodetools.html
Копия картинок:
http://kalyaev.com/2010/20100527/01.png
http://kalyaev.com/2010/20100527/02.png
http://kalyaev.com/2010/20100527/03.png
http://kalyaev.com/2010/20100527/04.png
Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 27 май 2010, 19:41
Nick
самый простой способ написать багрепорт на
www.launchpad.net/inkscape , а там тебя, если что, направят куда надо.
Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 28 май 2010, 08:50
dormouse
Сейчас готовлю баг-репорт. Есть предложение полностью разделить (остались только p-t-g и area вместе) все механизмы на отдельные инструменты, т.к. кнопка "Apply" зависящая от активной tab сильно смущает людей.
Так же предлагаю не откладывая сильно внести gcodetools в Inkscape чтобы он обязательно в 0.48 БЫЛ!
Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 28 май 2010, 11:42
Nick
Можно сделать следующим образом: добавить параметр скажем available-instruments, в котором прописать все функциональные вкладки, и если в нем будет только одна вкладка, то выбираем ее по-умолчанию, если несколько, то смотрим какая активная. Это позволит с одной стороны сохранить возможность общего окна gcodetools, с другой стороны, отпадет назойливая ошибка, в тех случаях, если вкладка одна.
Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 28 май 2010, 12:07
dormouse
Мне самому дописать инструмент добавления/убирания тэга dxfpoint к выбранным объектам? Это будет хорошей практикой =)
rev75
Реорганизовал меню: разделил ptg и Area, первым tab стал "действующий", последним - help
Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 28 май 2010, 13:27
Nick
dormouse писал(а):На данном этапе предлагаю разделить p-t-g и area на различные вкладки и поменять местами, чтобы help был последней вкладкой а "действующая" tab-первой.
По поводу хелпа, я его специально ставил на первое место, чтобы новичок хотябы одним глазом успел его увидеть. При последующих запусках активная вкладка сохраняется, т.е. хелп больше мешать не будет.
Мне самому дописать инструмент добавления/убирания тэга dxfpoint к выбранным объектам? Это будет хорошей практикой =)
Конечно, почему нет?

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

Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 28 май 2010, 13:29
dormouse
хелп я уже перекинул в конец. потом вернём =)
Будет просьба поиграться чуть-чуть с точками. Вдруг я какую-то радикальную проблему упускаю из вида.... Должно всё работать: сортировка, слои, параметричность и т.п.
rev80: dxfpoints
Добавлена вкладка dxfpoints на которой можно выделенные объекты сделать dxfpoint с сохранением исходной формы или с заменой на красную стрелочку. Так же можно снять этот признак (после replace исходную форму вернуть нельзя, разумеется).
Соображения:
1. не нашёл способа как удалить атрибут. Только создать или заменить на "0", а реагировать только на "1"
2. всвязи с исчезновением вкладки Orientation из ptg/area/eng/dxfp получается интересный момент - значение "по умолчанию" для Zdepth берётся из .py файла и равно -0.125 =)
3. Если на листе остался (или попал в выделение, если таковое было) уже "пройденный ptg контур" (т.е. разноцветная змейка), то на вызове процедуры self.set_tool(layer) возникает ошибка "Can not find tool for 'None' layer! Please add one with Tools library tab!"
todo
Надо обязательно решить как-то проблему мелких ошмётков-артефактов поле Area offset. Предлагаю взять себя в руки и в срочном порядке реализовать что-то вроде
а) автовыделения мелких замкнутых контуров (все точки укладываются в квадрат со стороной "n")
b) выделять другим цветом все контуры ЗА ПРЕДЕЛАМИ выбранного объекта. За пределами - это чтобы вспомогательные отрезки от каждой точки этого ошмётка до каждой конечной точки исходной кривой было чётное число пересечений.
Простейший алгоритм определения (нестрогий) точек "внутри" кривых:
∀т.A ∈ ошмётку, т.B ∈ исходному контуру ⇒ AB ∩ исходный=2n штук, где n∈N.
Отдельно проверить: если безье исходной кривой имеющие пересечения с AB это отрезки и они параллельны AB. (это отдельный случай) - не проверяя дальше выделять.
Добавлен файл, в котором три примера.
Здравые размышления о причинах и сути артефактов ничего не выявили. Понял только что вообще ничего по сути мы не делаем в функции area() кроме сортировки... Т.е. в самом SVG вообще эти оффсеты не существуют пока мы не "разгруппируем" результирующий объект.
Из этого надо сделать вывод - если нет функции "разгруппировать" изнутри питона, то надо делать дополнительную вкладку "area artefacts" наравне с "dxfpoints","ptg","area" и т.п. Какие будут предложения?
Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 31 май 2010, 16:12
Nick
Ухты, сколько всего нового

.
А я смотрю у себя непрочитанные сообщения, там ничего, сюда вообще случайно попал... а тут ....
Выделение маленьких контуров.
Ок, можно сделать... Да, нужно отдельную вкладку. Определение внутри или снаружи - тоже просто (может даже уже написано).
До конца недели напишу.
По поводу появления оффестов, они появляются когда инкскейп обрабатывает результат скрипта. Меня очень мучает вопрос создания своей функции оффсета. Я бы даже поставил ее приоритетом этого или следующего релиза. Свой оффсет очень сильно усовершенствует все функции. Для area нужен оффсет, если будет свой то сможем сразу удалять артефакты и вычислять радиус оффсета. Для плазмы нужен оффесет, для более точного контура. Для Токарки нужен оффсет для чистового прохода. Оффсет нужен везде, но пока он глючный и не дает возможности сразу использовать результаты.
dormouse писал(а):1. не нашёл способа как удалить атрибут. Только создать или заменить на "0", а реагировать только на "1"
По идее либо Element.remove() или object.__delitem__(). (
http://docs.python.org/library/xml.etre ... ent.remove
dormouse писал(а):3. Если на листе остался (или попал в выделение, если таковое было) уже "пройденный ptg контур"
)
PTG добавляет превью на самый верхний слой... Хммм... можно превьюшке дописать свой атрибут gcodetools:preview...
Rev 81
Багфикс с inkex от версии 0.46. (подробнее в англ. ветке)
PS А разве у нас в базааре не храниться последний релиз? Только dev версия???
Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 31 май 2010, 16:17
dormouse
rev 82 Area offset artifacts
(пока) на той же вкладке Area радиобаттон-селектор. Работает по всему листу. Перед применением выделить все образованные группы, далее подряд:
Object/Ungroup (Shift+Ctrl+G)
Path/Object to Path (Shift+Ctrl+C)
Path/Break apart (Shift+Ctrl+K)
Кнопку в "postprocessing:..." и Apply.
Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 31 май 2010, 21:43
Nick
Object/Ungroup (Shift+Ctrl+G)
Path/Object to Path (Shift+Ctrl+C)
Path/Break apart (Shift+Ctrl+K)
По идее это делать не обязательно. У всех оффсетов есть параметр d. Если к нему применить cubicsuperpath получим лист
[ [ [ [],[],[] контрольная точка это сама точка и точки касательных] ,...,[] ] - субконтур это лист контрольных точек, [] ] - весь контур это лист субконтуров.
break appart фактически разделяет все субконтуры, таким образом лист контуров после ungroup и object to path и break appart =
Код: Выделить всё
[[self.paths[i][j]] for i in range(len(self.paths)) for j in range(len(self.paths[i]))]
Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 31 май 2010, 23:20
dormouse
Я уже не осиливаю - надо с вашей стороны патч наложить.
Сейчас перебор всех разделённых ошмётков я могу осуществить только по цепочке выделить всё-разгруппировать-оконтурить-бреак апарт-тупой перебор всего на листе или по ещё раз выделенному
Код: Выделить всё
paths = self.paths
for layer in self.layers :
if layer in paths :
for path in paths[layer] :
bbox=[]
bbox=trapezium_bbox(cubicsuperpath.parsePath(path.get("d")))
Вторую часть алгоритма - безусловное выделение ошмётков независимо от их размера при условии гарантированного выхода ошмётка за пределы контура при положительном Area offset radius и при попадания в контур при отрицательном + раскрашивание в другой цвет стрелочки "критическая раскраска"... сделаю завтра.
Надо ещё стандартизировать место для складывания стрелочек и т.п. + какой-то массив с тэгами для игнорирования во всех алгоритмах. Если это уже есть, завтра найду.
Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 01 июн 2010, 09:10
Nick
Сейчас гляну, как это все можно оптимизировать...
Кстати уже есть функция csp_simple_bound(csp) которая вычисляет баунд кривой.
Также предлагаю вынести пометку мелких контуров в отдельную вкладку.
Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 01 июн 2010, 09:22
dormouse
rev83
Artefacts вынесена в отдельную вкладку. мелкие исправления. Забыл вчера push'нуть
todo: стандартизовать способ "выкидывания" служебных стрелочек и т.п. из рассмотрения других алгоритмов. Предлагаемые пути: служебные тэги 'gcodetools:artefactarrow':'1', 'gcodetools:dxfpointarrow', 'gcodetools:orientation':'1','gcodetools:tool':'....' и т.п., после этого функция def is_gcodetools_addon(object)
todo: можно ли изнутри скрипта сделать выделение, чтобы оно осталось активным в интерфейсе?
todo: вторая часть artefact-алгоритма: если бы можно было продублировать тэг inkscape:original в получающийся после разгруппировки и оконтуривания (если добавить его, то после разгруппировки тэг остаётся, а после оконтуривания Inkscape его стирает... а из скрипта мы, насколько я помню, не можем делать Shift+Ctrl+C) то можно сравнивать, что если bbox ошмётка снаружи от bbox inkscape:original - это однозначно артефакт.
Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 01 июн 2010, 11:09
Nick
Ревизия 84
Переделал артефакты, теперь:
есть выбор действия:
1. Выделять стрелкой
2. Выделять стилем
3. Сразу стирать
Контуры сами разбиваются и разгруппировываются. Старые контуры на данный момент удаляются, вместо них появляются разгруппированные и брейкнутые... Из атрибутов сохраняется только style. Хотя, возможно это слишком кардинально.
К сожалению inkscape и в правду не сразу создает параметр d для оффсета, поэтому разгрупировывать группу с оффсетами всетаки нужно..... Блин, нужно написать свой офсет

.
Также добавил, если контур содержит атрибут gcodetools то его не включает в self.paths и self.selected_paths.
Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 01 июн 2010, 11:51
dormouse
Через час протестирую.
вопрос 1: контуры выделяются исходя из того, что это Area offset и просходит это автоматически?
вопрос 2: можно ли выделить что-то и сохранить это выделение в inkscape
вопрос 3: можно ли как-то сохранить информацию о первичном контуре (т.е. сохранить связь с "родительским контуром" для определения что ошмёток внутрь/наружу выпал)
вопрос 4: сегодня я до токарного станка дойду. Актуально ли ещё перетачивать втулки и если да, то КАКИЕ ДИАМЕТРЫ с двух сторон сделать?
Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 01 июн 2010, 12:11
Nick
1. контуры также как в ptg, если что-то выбрано, то смотрим по ним, если нет то берем все контуры
2. не уверен, скорее нет.... хотя не уверен...
3. ну по идее в оффсеты можно добавить "gcodetools_parameter":"original path id".
4. да, еще актуально, диаметры 6.35мм на 8мм.
ревизия 85
Добавил параметр gcodetools для процедуры draw_curve и engraving.
Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 01 июн 2010, 12:17
dormouse
3. я ещё утром попробовал сходную вещь, но после разгруппировки они сохраняются, но после РУЧНОГО shift+ctrl+c они пропадают. Если это делать через питон - можно ли добавить к результату этот тэг? без него неполучается реализовать "гарантированный" артефакт для безусловного удаления - который своим bbox за пределами породившего его контура оказался.
Иными словами: при операции Shift+Ctrl+C Inkscape отбрасывает все дополнительные атрибуты.
4. обе втулки с одной стороны 8мм, с другой 6.35?
Опять "съелись" 2 ревизии
почему-то пушнулось до ревизии 84 опять, а .inx стал ревизии 83.1.1
надо проверить, что ничего не пропало...
Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 01 июн 2010, 13:47
Nick
3. Когда разгруппировываем объект остается офсетом, но для совместимости с другими программами или для скорости отрисовки к объекту добавляется поле "d", т.е. получается обычный контур у которого есть дополнительные поля: inkscape:original, inkscape:radius и sodipodi:type. А когда делаем ctrl+shift+c то объект преобразуется в контур.
4. да, т.е. нужно обработать только с одной стороны, вторая уже должна быть 6.35.
С ревизиями сейчас посмотрим...
Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 01 июн 2010, 14:00
Nick
Ревизия 85
Чуть-чуть изменил warning если у контура нет "d".
ЗЫ если пишем self.error, то в любом случае сообщение попадет в лог. Вне зависимости от типа ошибки.
Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 01 июн 2010, 14:10
dormouse
я уже окончательно запутался. Если
открыть файл area-offset-errors.svg
после выделить контур (неважно один, или все 3)
нажать Area offset (+20)
СНЯТЬ ВЫДЕЛЕНИЕ
выбрать Area Artefacts
нажать "mark with an arrow"
Apply
у меня почему-то УДАЛЯЮТСЯ исходные оффсеты, а ошмётки остаются и успешно помечаются стрелками. При этом удаление ошмётков в методе delete стоит не на месте и если его закомментировать то удаление при указанной выше последовательности по-прежнему происходит
Ещё раз переделал - ещё сложнее. происходит если выделен только левый контур или выделение его содержит. При этом сейчас стрелки не расставляются.