Разработка 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 (174537 просмотров) <a class='original' href='./download/file.php?id=348&sid=dec5fdb6a0f75641fc72f7f492bd83be&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 или загрузите предыдущие ревизии.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

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

Сообщение Nick »

Да, надо бы возобновить оглашение изменений, а то делаю по чуть-чуть в тихоря, а никто и не знает :).

Ревизия 221

Что делаю сейчас - заканчиваю начатую переработку biarc - теперь все сделано через ООП :).
На данный момент делаю быструю функцию пересечений biarc через поиск по бинарному дереву пересечения баундов кривых.

Самое главное :attention: заменил все фукции math.xxx на просто xxx, так оно дожно быстрее работать. Возникла проблема, т.к. была дописана своя функция atan2 (для удобства работы с различными типами представления данных) переименовал ее в atan2_ и заменил в коде ее вызовы.
Аватара пользователя
NightV
Почётный участник
Почётный участник
Сообщения: 6599
Зарегистрирован: 30 дек 2011, 09:14
Репутация: 2279
Настоящее имя: Владимир Айрапетян
Откуда: Israel
Контактная информация:

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

Сообщение NightV »

Nick писал(а):теперь все сделано через ООП
теперь я верю в светлое будущее... у нас все через ООП будет :think: блин... програмеры... думаю что в реале умолчу о таких изменениях :hehehe:
Всё просто! если знаешь КАК!
Аватара пользователя
NightV
Почётный участник
Почётный участник
Сообщения: 6599
Зарегистрирован: 30 дек 2011, 09:14
Репутация: 2279
Настоящее имя: Владимир Айрапетян
Откуда: Israel
Контактная информация:

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

Сообщение NightV »

кстате завтра отпишусь о багах в Gкоде, на предмет инструмента "бла-бла нож" (трудно выговорить... не то чтоб написать :D :D )
Всё просто! если знаешь КАК!
Аватара пользователя
NightV
Почётный участник
Почётный участник
Сообщения: 6599
Зарегистрирован: 30 дек 2011, 09:14
Репутация: 2279
Настоящее имя: Владимир Айрапетян
Откуда: Israel
Контактная информация:

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

Сообщение NightV »

круг с поднятием ножа на углах

G00 Z 5.0000
G00 X 93.9305 Y 50.0000

G01 Z -1.0000 F 300.0000(Penetrate)
G00 Z 4.0000 (Lift up)

G01 A -89.9977 (Turn knife)
G01 Z -1.0000 (Penetrate back)
G02 X 88.0457 Y 28.0337 Z -1.0000 I -43.9305 J -0.0024 F 2000.0000 A -119.9990
G02 X 71.9659 Y 11.9531 Z -1.0000 I -38.0457 J 21.9639 A -150.0004
G02 X 50.0000 Y 6.0671 Z -1.0000 I -21.9659 J 38.0445 A -180.0017
G02 X 28.0341 Y 11.9531 Z -1.0000 I 0.0000 J 43.9305 A -210.0030
G02 X 11.9543 Y 28.0337 Z -1.0000 I 21.9659 J 38.0445 A -240.0044
G02 X 6.0695 Y 50.0000 Z -1.0000 I 38.0457 J 21.9639 A -270.0057
G00 Z 4.0000 (Lift up)
G01 A -269.9994 (Turn knife) раньше этого небыло
G01 Z -1.0000 (Penetrate back)
G02 X 11.9543 Y 71.9663 Z -1.0000 I 43.9305 J 0.0024 A -300.0007
G02 X 28.0341 Y 88.0469 Z -1.0000 I 38.0457 J -21.9639 A -330.0021
G02 X 50.0000 Y 93.9329 Z -1.0000 I 21.9659 J -38.0445 A -360.0034
G02 X 71.9659 Y 88.0469 Z -1.0000 I 0.0000 J -43.9305 A -390.0047
G02 X 88.0457 Y 71.9663 Z -1.0000 I -21.9659 J -38.0445 A -420.0061
G02 X 93.9305 Y 50.0000 Z -1.0000 I -38.0457 J -21.9639 A -450.0074
G00 Z 4.0000 (Lift up)
G01 A -450.0043 (Turn knife)
G01 Z -1.0000 (Penetrate back)
G01 X 93.9305 Y 50.0000 Z -1.0000

G00 Z 5.0000

=============================================================
круг без поднятия

G00 Z 5.0000
G00 X 93.9305 Y 50.0000

G01 Z -1.0000 F 300.0000(Penetrate) тут получается сначала врезались ножом а уж потом развернули его :?
G01 A -89.9977 (Turn knife)
G02 X 88.0457 Y 28.0337 Z -1.0000 I -43.9305 J -0.0024 F 2000.0000 A -119.9990
G02 X 71.9659 Y 11.9531 Z -1.0000 I -38.0457 J 21.9639 A -150.0004
G02 X 50.0000 Y 6.0671 Z -1.0000 I -21.9659 J 38.0445 A -180.0017
G02 X 28.0341 Y 11.9531 Z -1.0000 I 0.0000 J 43.9305 A -210.0030
G02 X 11.9543 Y 28.0337 Z -1.0000 I 21.9659 J 38.0445 A -240.0044
G02 X 6.0695 Y 50.0000 Z -1.0000 I 38.0457 J 21.9639 A -270.0057
G01 A -269.9994 (Turn knife)
G02 X 11.9543 Y 71.9663 Z -1.0000 I 43.9305 J 0.0024 A -300.0007
G02 X 28.0341 Y 88.0469 Z -1.0000 I 38.0457 J -21.9639 A -330.0021
G02 X 50.0000 Y 93.9329 Z -1.0000 I 21.9659 J -38.0445 A -360.0034
G02 X 71.9659 Y 88.0469 Z -1.0000 I 0.0000 J -43.9305 A -390.0047
G02 X 88.0457 Y 71.9663 Z -1.0000 I -21.9659 J -38.0445 A -420.0061
G02 X 93.9305 Y 50.0000 Z -1.0000 I -38.0457 J -21.9639 A -450.0074
G01 A -450.0043 (Turn knife)
G01 X 93.9305 Y 50.0000 Z -1.0000

G00 Z 5.0000

квадрат даже пробовать нет смысла, все осталось как раньше, а в центре программы еще что-то втисалось

а здесь (строка 4344)
g = "G01 A%s (Turn knife)\n" % (a*tool['4th axis scale']+tool['4th axis offset'])
мне кажется поднятый нож-диск нет смысла крутить медленно, луче G00
Всё просто! если знаешь КАК!
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

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

Сообщение Nick »

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

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

Сообщение dormouse »

1. вначале картинку разворачиваем на нужный угол, добавляя белый или чёрный цвет в зависимости от многочисленных настроек до прямоугольника.
2. вводим step_x, step_y в зависимости от orientation_points и прочего
3. далее работаем в mm-реальных координатах. для определения вклада картинки алгоритм прост: левый нижний (к примеру) угол и n*m клеток с длиной ребра step_x, step_y от угла (который перенесён на self.transform(source_point(x,y), layer) из координат картинки)
4. с учётом контекста уже всё знаем.

Поворот похоже это сложная операция - пусть её делает PIL, раз уж он "наше кое-что". im.rotate(angle, filter=BICUBIC, expand=0), а угол вычислим из матрицы поворота атрибутов контейнера img. не хочется изобретать ещё один велосипед.... попробуем на готовом проехаться.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

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

Сообщение Nick »

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

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

Сообщение dormouse »

Лучше пусть этим "оно" займётся. Раз уж на pil чтение возложили, пусть и остальное сделает. Угол в градусах я из матрицы svg-xml свойства возьму :lol:
Какой угол в Inkscape берётся за опорный у картинки?
в PIL матрица от левого верхнего идёт. Возможно ещё придётся догадаться что вручную необходимо найти новую координату (вернее вычислить сдвиг) на новой PIL-повёрнутой картинке.
У меня под виндой Python не очень уверенно работает. под Ubuntu веселее...
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

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

Сообщение Nick »

За опорный... По идее когда картинка не повернута, т.е. верх вверху.Я тут вот о чем подумал, поворот дело конечно хорошее, но как мы тогда узнаем попали ли мы в картинку или нет?

лучше сделать функцию преобразования global_xy -> local_xy, что-нибудь типа self.get_coordinates и отдельную функцию на get_color(x,y), в которой будет проводиться интерполяция цвета.
Аватара пользователя
dormouse
Мастер
Сообщения: 334
Зарегистрирован: 27 фев 2010, 09:55
Репутация: 15
Заслуга: Developer
Контактная информация:

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

Сообщение dormouse »

ВСЕМ ПОЛЬЗОВАТЕЛЯМ WINDOWS. Нашёл правильную инструкцию для Python2.6 по установке. Так же обратите внимание на две вещи:
1) при установке .exe файлов если появится окошко с выбором - выбрать питон 2.6
2) проверить что ваше папка (в моём случает C:\Python26) стоит первой в %Path%:
http://www.visionegg.org/Download%20and ... %20Windows

Насчёт картинки - я очень много разных вариантов выдумывал и понял, что фактически global_xy-local_xy равносильны заново матричным преобразованиям+фильтрации. Поэтому я предлагаю "прочитали jpg/xlink=>повернули=>подвинули=>выдали в numpy + offsetX,offsetY,n,m,lenX,lenY".

В итоге получаем полностью рабочую уже повёрнутую и отмасштабированную картинку, хранящуюся в виде proxy в реальном миллиметровом пространстве. Думаю над тем, что вместо массива байтов сделать прям реальные мм-значения!
Аватара пользователя
NightV
Почётный участник
Почётный участник
Сообщения: 6599
Зарегистрирован: 30 дек 2011, 09:14
Репутация: 2279
Настоящее имя: Владимир Айрапетян
Откуда: Israel
Контактная информация:

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

Сообщение NightV »

круг без поднятия

G00 Z 5.0000
G00 X 94.4881 Y 50.0000

G01 Z -1.0000 F 300.0000(Penetrate)
G01 A -90.0009 (Turn knife)

G02 X 88.5279 Y 27.7559 Z -1.0000 I -44.4881 J 0.0000 F 2000.0000 A -120.0011
G02 X 72.2441 Y 11.4721 Z -1.0000 I -38.5279 J 22.2441 A -150.0014
G02 X 50.0000 Y 5.5119 Z -1.0000 I -22.2441 J 38.5279 A -180.0017
G02 X 27.7559 Y 11.4721 Z -1.0000 I -0.0000 J 44.4881 A -210.0020
G02 X 11.4721 Y 27.7559 Z -1.0000 I 22.2441 J 38.5279 A -240.0023
G02 X 5.5119 Y 50.0000 Z -1.0000 I 38.5279 J 22.2441 A -270.0026
G02 X 11.4721 Y 72.2441 Z -1.0000 I 44.4881 J -0.0000 A -300.0028
G02 X 27.7559 Y 88.5279 Z -1.0000 I 38.5279 J -22.2441 A -330.0031
G02 X 50.0000 Y 94.4882 Z -1.0000 I 22.2441 J -38.5279 A -360.0034
G02 X 72.2441 Y 88.5279 Z -1.0000 I -0.0000 J -44.4881 A -390.0037
G02 X 88.5279 Y 72.2441 Z -1.0000 I -22.2441 J -38.5279 A -420.0040
G02 X 94.4881 Y 50.0000 Z -1.0000 I -38.5279 J -22.2441 A -450.0043
G01 A -630.0060 (Turn knife)
G01 X 94.4881 Y 50.0000 Z -1.0000

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

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

Сообщение Nick »

хммм.... посмотрю... Это у тебя ревизия 222?
Аватара пользователя
NightV
Почётный участник
Почётный участник
Сообщения: 6599
Зарегистрирован: 30 дек 2011, 09:14
Репутация: 2279
Настоящее имя: Владимир Айрапетян
Откуда: Israel
Контактная информация:

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

Сообщение NightV »

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

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

Сообщение dormouse »

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

im1 = im.rotate(35, resample=Image.BICUBIC, expand=1)
Как-то так оно поворачивает. Завтра впишу смещение угловой точки, новые размеры ячеек в миллиметрах и получится готовая маска из реального мира...

Насчёт нативной поддержки 16-бит возможно потом посмотрим на PyPNG http://packages.python.org/pypng/ca.html

Надо разобраться. В PIL поворот происходит относительно средней точки. Матрица поворота в Inkscape действует относительно уголка....
Так же перед поворотом картинки похоже необходимо вначале добить её до квадрата, иначе слишком сложно смещается центр картинки (из исходного прямоугольника выходит описанный новый прямоугольник с другим соотношением сторон).

Похоже, всё-таки так или иначе планировалась или реализована поддержка более 8-битного режима в PIL: http://kalyaev.com/2012/20120207/pil.pdf
Аватара пользователя
dormouse
Мастер
Сообщения: 334
Зарегистрирован: 27 фев 2010, 09:55
Репутация: 15
Заслуга: Developer
Контактная информация:

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

Сообщение dormouse »

очередные наблюдения:
1. При повороте картинки в Inkscape происходит изменение координат (X,Y), т.е. левый верхний угол картинки находится именно там, где его видно глазами на листе A4.
2. Матрица поворота в Inkscape: (1,0,0,1) = нет поворота, (0.7,0.7,-0.7,0.7)=45 по часовой, (0,1,-1,0)=90 по часовой.
3. Похоже, что поворот лучше сделать самостоятельно, от фильтрации предварительно откажусь (п.п. 3.4 и 3.5 объясняют). Алгоритм:
3.0. прочитать картинку и вывести её в numpy-массив (готово)
3.1. расширить картинку до квадрата вправо вниз до обоих нечётных длин в пикселях, окружить рамкой нужной ширины (компенсация диаметра фрезы) и нужного цвета
3.2. высчитать диагональ полученного квадрата и назвать её буквой "a"
3.3. сделать новый квадратный numpy-массив со стороной a*sqrt(2) (максимально возможное уширение) с учётом так же нечётной длины в пикселях
3.4. условно соотнести центры квадратов 3.1 и 3.3, сделать цикл по всем точкам квадрата 3.3 и для них выполнить обратное преобразование из матрицы преобразований Inkscape для получения цвета из квадрата 3.1. Фактически это некий вариант фильтрации, для начала хватит. При этом возможно сразу вместо коэффициентов вписывать реальные значения в миллиметрах модели.
3.5. пройтись по полученному массиву контуром реальной фрезы чтобы убрать заранее недостижимые состояния.
3.6. определить точки привязки уголка изображения на новом квадрате к координатам (X,Y) исходного элемента img в svg.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

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

Сообщение Nick »

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

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

Сообщение dormouse »

Суть в том что картинку надо открыть только 1 раз из файла и "долгие" процедуры тоже не осмысленно более одного раза над ней проводить.
Поэтому "в двух словах" предлагаю картинку их xlink:href открыть в numpy-массив сразу выполнив все повороты, обрамления, фильтрацию с учётом активной фрезы и т.п.
В любом случае надо сам массив хранить в оперативке. При желании, можно кешировать в файлы на диске.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

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

Сообщение Nick »

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

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

Сообщение dormouse »

эм.... начитать файл =>numpy => добить до квадрата, оконтурить на 0..Dфрезы (в зависимости от фактической ситуации) => повернуть => отфильтровать
Получится новая квадратная картинка с известной точкой, которая должна лечь на лист с координатами (x,y) из svg.

Первый вариант сделал. пока весьма шаткий и путает X с Y, но счастье близко...
Готовая первая версия. она без антиалиасинга, но по факту работает и для реальной задачи её может быть достаточно. (не реализовано накладывание фильтров).

Попробую красиво в объект с методами завернуть.

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

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

Сообщение dormouse »

Ура!
Первая объектная версия готова. Осталось сделать пару простейших фильтров и метод, который будет выводить массив высот для расчёта изменения отрезка (думаю, этим отдельный объект будет заниматься, хотя точного решения пока не принял).

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

img=gcodetoolsImage(xlink,45,20)  # передать тэг xlink:href, угол поворота 45 градусов и +20px рамку уширяющую сделать
img.save("test.jpg")
print img.data #вывести новый квадратный массив
img.applyFilter("badpixel") # обрабатывает как-то фотку
Ответить

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