Разработка Gcodetools - плагин Inkscape для экспорта в Gкод

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.

Следующее направление разработки

Можно выбрать до 5 вариантов ответа

 
 
Результаты голосования

Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Разработка Gcodetools - плагин Inkscape для экспорта в Gкод

Сообщение Nick »

Разработка Gcodetools

Screenshot-output.ngc - AXIS-4.png (183321 просмотр) <a class='original' href='./download/file.php?id=348&mode=view' target=_blank>Загрузить оригинал (31.64 КБ)</a>
Эта ветка посвящена разработке Gcodetools, плагина для векторного редактора Inkscape, позволяющего конвертировать кривые из Inkscape в Gкод, используя круговую и линейную интерполяцию.

Описание работы, установка, помошь и уроки по плагину можно найти в теме: Gcodetools - plug-in Inkscape для экспорта в Gcode

На данный момент ведется работа над Gcodetools 1.7

Что мы хотим увидеть в новой версии:
  • Улучшение расширения для плазменной резки
  • Добавление дополнительных опций экспорта:
  • Улучшение функции обработки площади
  • Угол заглубления
  • Расширение для сверловки

Требуются

  • Тестеры
  • Разработчики
  • Помощь в технических аспектах по работе станков и обработке материалов
  • Новые идеи

Последняя версия

Исходный код находится на launchpad.net. Получить последнюю версию при помощи bazaar можно так:

Код: Выделить всё

bzr branch lp:gcodetools
Последнюю версию можно загрузить через 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 или загрузите предыдущие ревизии.
Аватара пользователя
dormouse
Мастер
Сообщения: 334
Зарегистрирован: 27 фев 2010, 09:55
Репутация: 15
Заслуга: Developer
Контактная информация:

Re: Разработка Gcodetools - плагин Inkscape для экспорта в G

Сообщение 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
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Разработка Gcodetools - плагин Inkscape для экспорта в G

Сообщение Nick »

самый простой способ написать багрепорт на www.launchpad.net/inkscape , а там тебя, если что, направят куда надо.
Аватара пользователя
dormouse
Мастер
Сообщения: 334
Зарегистрирован: 27 фев 2010, 09:55
Репутация: 15
Заслуга: Developer
Контактная информация:

Re: Разработка Gcodetools - плагин Inkscape для экспорта в G

Сообщение dormouse »

Сейчас готовлю баг-репорт. Есть предложение полностью разделить (остались только p-t-g и area вместе) все механизмы на отдельные инструменты, т.к. кнопка "Apply" зависящая от активной tab сильно смущает людей.

Так же предлагаю не откладывая сильно внести gcodetools в Inkscape чтобы он обязательно в 0.48 БЫЛ!
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Разработка Gcodetools - плагин Inkscape для экспорта в G

Сообщение Nick »

Можно сделать следующим образом: добавить параметр скажем available-instruments, в котором прописать все функциональные вкладки, и если в нем будет только одна вкладка, то выбираем ее по-умолчанию, если несколько, то смотрим какая активная. Это позволит с одной стороны сохранить возможность общего окна gcodetools, с другой стороны, отпадет назойливая ошибка, в тех случаях, если вкладка одна.
Аватара пользователя
dormouse
Мастер
Сообщения: 334
Зарегистрирован: 27 фев 2010, 09:55
Репутация: 15
Заслуга: Developer
Контактная информация:

Re: Разработка Gcodetools - плагин Inkscape для экспорта в G

Сообщение dormouse »

Мне самому дописать инструмент добавления/убирания тэга dxfpoint к выбранным объектам? Это будет хорошей практикой =)

rev75

Реорганизовал меню: разделил ptg и Area, первым tab стал "действующий", последним - help
Последний раз редактировалось dormouse 28 май 2010, 13:28, всего редактировалось 1 раз.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Разработка Gcodetools - плагин Inkscape для экспорта в G

Сообщение Nick »

dormouse писал(а):На данном этапе предлагаю разделить p-t-g и area на различные вкладки и поменять местами, чтобы help был последней вкладкой а "действующая" tab-первой.
По поводу хелпа, я его специально ставил на первое место, чтобы новичок хотябы одним глазом успел его увидеть. При последующих запусках активная вкладка сохраняется, т.е. хелп больше мешать не будет.
Мне самому дописать инструмент добавления/убирания тэга dxfpoint к выбранным объектам? Это будет хорошей практикой =)
Конечно, почему нет? :)
К тому же, твой стиль программирования гораздо более правильный и более "питоновский" чем мой. :)
Аватара пользователя
dormouse
Мастер
Сообщения: 334
Зарегистрирован: 27 фев 2010, 09:55
Репутация: 15
Заслуга: Developer
Контактная информация:

Re: Разработка Gcodetools - плагин Inkscape для экспорта в G

Сообщение 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" и т.п. Какие будут предложения?
Вложения
area-offset-errors.svg
(25.18 КБ) 808 скачиваний
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Разработка Gcodetools - плагин Inkscape для экспорта в G

Сообщение 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 версия???
Аватара пользователя
dormouse
Мастер
Сообщения: 334
Зарегистрирован: 27 фев 2010, 09:55
Репутация: 15
Заслуга: Developer
Контактная информация:

Re: Разработка Gcodetools - плагин Inkscape для экспорта в G

Сообщение 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.
Вложения
gcodetools.82.zip
(63.03 КБ) 498 скачиваний
area-offset-errors.png (3815 просмотров) <a class='original' href='./download/file.php?id=532&mode=view' target=_blank>Загрузить оригинал (44.56 КБ)</a>
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Разработка Gcodetools - плагин Inkscape для экспорта в G

Сообщение 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]))]
Аватара пользователя
dormouse
Мастер
Сообщения: 334
Зарегистрирован: 27 фев 2010, 09:55
Репутация: 15
Заслуга: Developer
Контактная информация:

Re: Разработка Gcodetools - плагин Inkscape для экспорта в G

Сообщение 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 и при попадания в контур при отрицательном + раскрашивание в другой цвет стрелочки "критическая раскраска"... сделаю завтра.
Надо ещё стандартизировать место для складывания стрелочек и т.п. + какой-то массив с тэгами для игнорирования во всех алгоритмах. Если это уже есть, завтра найду.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Разработка Gcodetools - плагин Inkscape для экспорта в G

Сообщение Nick »

Сейчас гляну, как это все можно оптимизировать...
Кстати уже есть функция csp_simple_bound(csp) которая вычисляет баунд кривой.
Также предлагаю вынести пометку мелких контуров в отдельную вкладку.
Аватара пользователя
dormouse
Мастер
Сообщения: 334
Зарегистрирован: 27 фев 2010, 09:55
Репутация: 15
Заслуга: Developer
Контактная информация:

Re: Разработка Gcodetools - плагин Inkscape для экспорта в G

Сообщение 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 - это однозначно артефакт.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Разработка Gcodetools - плагин Inkscape для экспорта в G

Сообщение Nick »

Ревизия 84

Переделал артефакты, теперь:
есть выбор действия:
1. Выделять стрелкой
2. Выделять стилем
3. Сразу стирать

Контуры сами разбиваются и разгруппировываются. Старые контуры на данный момент удаляются, вместо них появляются разгруппированные и брейкнутые... Из атрибутов сохраняется только style. Хотя, возможно это слишком кардинально.

К сожалению inkscape и в правду не сразу создает параметр d для оффсета, поэтому разгрупировывать группу с оффсетами всетаки нужно..... Блин, нужно написать свой офсет :).

Также добавил, если контур содержит атрибут gcodetools то его не включает в self.paths и self.selected_paths.
Аватара пользователя
dormouse
Мастер
Сообщения: 334
Зарегистрирован: 27 фев 2010, 09:55
Репутация: 15
Заслуга: Developer
Контактная информация:

Re: Разработка Gcodetools - плагин Inkscape для экспорта в G

Сообщение dormouse »

Через час протестирую.
вопрос 1: контуры выделяются исходя из того, что это Area offset и просходит это автоматически?
вопрос 2: можно ли выделить что-то и сохранить это выделение в inkscape
вопрос 3: можно ли как-то сохранить информацию о первичном контуре (т.е. сохранить связь с "родительским контуром" для определения что ошмёток внутрь/наружу выпал)
вопрос 4: сегодня я до токарного станка дойду. Актуально ли ещё перетачивать втулки и если да, то КАКИЕ ДИАМЕТРЫ с двух сторон сделать?
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Разработка Gcodetools - плагин Inkscape для экспорта в G

Сообщение Nick »

1. контуры также как в ptg, если что-то выбрано, то смотрим по ним, если нет то берем все контуры
2. не уверен, скорее нет.... хотя не уверен...
3. ну по идее в оффсеты можно добавить "gcodetools_parameter":"original path id".
4. да, еще актуально, диаметры 6.35мм на 8мм.

ревизия 85

Добавил параметр gcodetools для процедуры draw_curve и engraving.
Аватара пользователя
dormouse
Мастер
Сообщения: 334
Зарегистрирован: 27 фев 2010, 09:55
Репутация: 15
Заслуга: Developer
Контактная информация:

Re: Разработка Gcodetools - плагин Inkscape для экспорта в G

Сообщение dormouse »

3. я ещё утром попробовал сходную вещь, но после разгруппировки они сохраняются, но после РУЧНОГО shift+ctrl+c они пропадают. Если это делать через питон - можно ли добавить к результату этот тэг? без него неполучается реализовать "гарантированный" артефакт для безусловного удаления - который своим bbox за пределами породившего его контура оказался.
Иными словами: при операции Shift+Ctrl+C Inkscape отбрасывает все дополнительные атрибуты.

4. обе втулки с одной стороны 8мм, с другой 6.35?

Опять "съелись" 2 ревизии

почему-то пушнулось до ревизии 84 опять, а .inx стал ревизии 83.1.1
надо проверить, что ничего не пропало...
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Разработка Gcodetools - плагин Inkscape для экспорта в G

Сообщение Nick »

3. Когда разгруппировываем объект остается офсетом, но для совместимости с другими программами или для скорости отрисовки к объекту добавляется поле "d", т.е. получается обычный контур у которого есть дополнительные поля: inkscape:original, inkscape:radius и sodipodi:type. А когда делаем ctrl+shift+c то объект преобразуется в контур.

4. да, т.е. нужно обработать только с одной стороны, вторая уже должна быть 6.35.

С ревизиями сейчас посмотрим...
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Разработка Gcodetools - плагин Inkscape для экспорта в G

Сообщение Nick »

Ревизия 85

Чуть-чуть изменил warning если у контура нет "d".

ЗЫ если пишем self.error, то в любом случае сообщение попадет в лог. Вне зависимости от типа ошибки.
Аватара пользователя
dormouse
Мастер
Сообщения: 334
Зарегистрирован: 27 фев 2010, 09:55
Репутация: 15
Заслуга: Developer
Контактная информация:

Re: Разработка Gcodetools - плагин Inkscape для экспорта в G

Сообщение dormouse »

я уже окончательно запутался. Если
открыть файл area-offset-errors.svg
после выделить контур (неважно один, или все 3)
нажать Area offset (+20)
СНЯТЬ ВЫДЕЛЕНИЕ
выбрать Area Artefacts
нажать "mark with an arrow"
Apply

у меня почему-то УДАЛЯЮТСЯ исходные оффсеты, а ошмётки остаются и успешно помечаются стрелками. При этом удаление ошмётков в методе delete стоит не на месте и если его закомментировать то удаление при указанной выше последовательности по-прежнему происходит :shock:

Ещё раз переделал - ещё сложнее. происходит если выделен только левый контур или выделение его содержит. При этом сейчас стрелки не расставляются.
Вложения
area-offset-errors.svg
(25.18 КБ) 756 скачиваний
Последний раз редактировалось dormouse 01 июн 2010, 14:22, всего редактировалось 1 раз.
Ответить

Вернуться в «LinuxCNC»