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

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

Сообщение Nick »

0001 - просто номер. Если добавишь второй инструмент выйдет 0002 :).
penetration feed скорость заглубления. Т.е. есть скорость обработки, есть скорость опускания, работает только для заглубдения до уровня реза, для гравировки не учитывается.
depth step для многозаходной обработки шаг по глубине, точнее заглубление на проход.
tool change gcode добавляется в gкод перед использованием инструмента, сюда можно написать T2M6, а можно все, что угодно, все эт овставится перед применением инструмента
scale и offset, это масштаб и отступ. по wrapped rotary, наверное это не совсем правильно для твоего случая... хотя может я и не прав... А как в твоем случае запрограммировать два оборота вправо?
Аватара пользователя
NightV
Почётный участник
Почётный участник
Сообщения: 6610
Зарегистрирован: 30 дек 2011, 09:14
Репутация: 2279
Настоящее имя: Владимир Айрапетян
Откуда: Israel
Контактная информация:

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

Сообщение NightV »

Nick писал(а):А как в твоем случае запрограммировать два оборота вправо?
поэксперементировал с "wrapped_rotary"
при значении 1 дать команду два оборота вправо "G0 A-720" не дает, неверное значение. и даже просто сделать полный оборот 360 (чтоб просто два раза обернуться вокруг себя) не дает, только "G0 A-359.999"
при значении 0 на команду "G0 A-720" ругаться перестал и прокрутил мне 2 оборота вправо При шкале 360, тоесть пришел в ноль, НО если говорю "G0 A0" откручивает эти два оборота назад :D хотя недолжен был сдвинутся с места
вот за такие лишние "отматывания" и отвечает "wrapped_rotary"
Всё просто! если знаешь КАК!
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

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

Сообщение Nick »

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

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

Сообщение NightV »

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

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

Сообщение Nick »

там по моему по умолчанию в градусах, так что 1 наверное правильный коэффициент...
т.е. A = scale*x+offset, где х - значение поворота в градусах. Попробуй нарисуй квадрат, сразу станет понятно. будут либо 90 180 270 360 либо пи/2, пи, 3пи/2 и 2пи.
Аватара пользователя
NightV
Почётный участник
Почётный участник
Сообщения: 6610
Зарегистрирован: 30 дек 2011, 09:14
Репутация: 2279
Настоящее имя: Владимир Айрапетян
Откуда: Israel
Контактная информация:

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

Сообщение NightV »

у Вас программеров всегда так? со сложностями? вы по простому не умеете :hehehe:
а насчет GUI.... "хотел бы я мосмотреть в глаза.... этому коструктору.... © " :hehehe: :hehehe: :hehehe:
как пример... попросите какого нибуть программера написать мануал к его программе :hehehe: прочтет разве что другой программер.
а потом удивляются "странно... наша прога круче, а люди на винде и Мач сидят, вроде ничего сложного"

на эту теме был ШЕДЕВР (я аж прослезился, году так в 2001) в фильме кажется "улицы разбитых фонарей", когда два мента чето спросили у программера... тот им ответил, но их не видел, а смотрел в монитор. что-то там про прокси, РОР3 и логи.... а за спиной фраза "мальчик.... ты щас с кем разговаривал..... ? " :mrgreen: :mrgreen: :mrgreen: :mrgreen: а он посмотел на них... "а... ну да...." и ответил "человеческим" языком.... мы с подругой вместе катались по полу :mrgreen: :mrgreen:
Последний раз редактировалось NightV 29 янв 2012, 02:33, всего редактировалось 1 раз.
Всё просто! если знаешь КАК!
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

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

Сообщение Nick »

Смотрел фильм Хотттабыч?
По гуи - я не виноват, возможности расширений ооочень ограничены.

- Че смотришь, давай перекачивай!
- Чего перекачивать-то?
- Ты че тупой, первый раз за компьютером, давай не придуривайся, деньги из банков качай. Быстро!
- А сколько качать-то?
- Че ты тупые вопросы задаешь? Миллион качай!
- Готово! Деньги отправленны вам по . email-у :).
- Опа, молодец.
Аватара пользователя
NightV
Почётный участник
Почётный участник
Сообщения: 6610
Зарегистрирован: 30 дек 2011, 09:14
Репутация: 2279
Настоящее имя: Владимир Айрапетян
Откуда: Israel
Контактная информация:

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

Сообщение NightV »

точно... PI... а как его перевести в человеческие градусы, сложно у меня с математикой :hehehe:

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

G00 X 0.5718 Y 28.1207
G01 A -1.5708
G01 Z -1.0000 F 100.0000(Penetrate)
G01 X 0.5718 Y 0.2890 Z -1.0000 F 400.0000
G01 A 0.0000
G01 X 27.7485 Y 0.2890 Z -1.0000
G01 A 1.5708
G01 X 27.7485 Y 28.1207 Z -1.0000
G01 A 3.1416
G01 X 0.5718 Y 28.1207 Z -1.0000
G01 A 1.5708
G01 X 0.5718 Y 28.1207 Z -1.0000
G00 Z 5.0000
Последний раз редактировалось NightV 29 янв 2012, 10:35, всего редактировалось 1 раз.
Всё просто! если знаешь КАК!
DSP1
Опытный
Сообщения: 172
Зарегистрирован: 15 янв 2012, 19:37
Репутация: 2
Контактная информация:

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

Сообщение DSP1 »

Nick писал(а):Есть у нас такой инструмент - тангенциальный нож. Вот он очень похоже работает...
А привязку оси вращения он учитывает ? У NightV что-то типа (100,0,0) .
Аватара пользователя
dormouse
Мастер
Сообщения: 334
Зарегистрирован: 27 фев 2010, 09:55
Репутация: 15
Заслуга: Developer
Контактная информация:

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

Сообщение dormouse »

Правильный loft на мой взгляд это когда профили нарисованы отдельно перпендикулярно, т.е. если inkscape - это "вид сверху вдоль оси Z", то контур режется в плоскости XY на обычном станке.
При этом отдельное окошко с набором кривыч из сечений XZ (или YZ) по номерам и опорная кривая в плоскости XY на обычном чертеже.

Я уже сформулировал более чётко свою стратегию: если в текущем слое есть 1 битмап и заполнены параметры слоя :
"use Z-depth bitmap галочка"
"Z-depth bitmap offset=10mm"
"Z-depth bitmap scale 1px=NNNmm"
то при всех операциях в данном слое при вычислении конечной и начальной точки любой линии в g-code'е делать подстановку:
Zитоговый=min(Zпо текущему алгоритму; Z=координата_цвета_из_текстуры*Z-depth_bitmap_scale+Z-depth_bitmap_offset)

Таким образом словами получится: для любой точки в результирующем g-коде координата Z заменится на координату из текстуры если попытаемся резать глубже.

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

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

Сообщение Nick »

Grad = Rad/pi*180 (pi = 3.14159265 :) )

Привязки пока нет, тогда такой задачи не стояло... надо сделать

Лофт так и задумывался, он даже таким и был, была опорная кривая и были сечения. Не помню, почему я его не доделал....
По битмапу, для его реализации придется:
1. делать битмап, если он будет просто уже готовым растром, то проще.
2. бежать по всей площади для поиска различных глубин.
3. делать разрывы в контуре на участки меньшей и большей глубиной.
Гость

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

Сообщение Гость »

всё проще.
1. bitmap уже готовый (сделан где-то ещё, вставлен на нужный слой и отмасштабирован, т.е. растянут)
2. по всей площади бежать не надо. Только в конце очередного сегмента biarc и в начале взять среднее значение цвета растра на квадрате с ребром n пикселей в качестве глубины Z
3. не понял, но кажется, что это _пока_ неважно - детали уже после отлаживать.

Только нашёл самый удачный как казалось внешний плагин "Raster-Negate", а оказалось, что это не внешний, а http://fossies.org/windows/misc/inkscap ... egate.html
т.е. он не берёт никаких координат привязки к листу, а тупо весь bitmap через фильтр imagemagic прогоняет....

надо найти конкретный плагин на питоне из которого можно извлечь простейшую процедуру: getColor(X,Y), где XY - это координаты _НА_ЛИСТЕ_INKSCAPE_
Аватара пользователя
dormouse
Мастер
Сообщения: 334
Зарегистрирован: 27 фев 2010, 09:55
Репутация: 15
Заслуга: Developer
Контактная информация:

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

Сообщение dormouse »

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

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

Сообщение Nick »

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

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

Сообщение dormouse »

Теперь почти на одном языке говорим! Нужна именно единственная точка растра (значение Z-depth map серого цвета) и нужна она только в момент генерации g-кода по уже построенному сегменту biarc. Браться она должна из текущего слоя во время работы gcodetools.py в самом простейшем варианте.

Фактически, надо доработать только строчку вывода в G-code добавив вызов getColor(x,y). Поэтому ни C-код, ни консольный вывод не подойдут. Подойдёт только python-код, который вероятно есть в растровых экстеншнах. Я предположил

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

pixelsnap.py
и

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

render_alphabetsoup.py
[добалено позже: результат отрицательный. ошибочная идея.]

Завтра раскопаю поглубже и доложусь о результатах.

P.S. Посмотрел уже сегодня - совсем глухо! Совершенно все внешние скрипты похоже векторные. Только в extractimage.py хоть что-то подходящее есть! брр.... всё прочее реализовано в C-коде.

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

node in self.selected.iteritems()
Если

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

node.tag == inkex.addNS('image','svg')
, то

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

xlink = node.get(inkex.addNS('href','xlink'))
и из него брать типа изображения:

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

xlink[5:semicolon].lower()
принимает значения "png, bmp, jpeg, jpg, icon, gif"
и далее тупо в файл вываливать содержимое внедрённого изображения

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

 data = base64.decodestring(xlink[comma:])
Конкретно: просмотр svg даёт, что атрибуты height, width, x, y неизменны, лишь

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

xlink:href="/home/dormouse/filename.jpg"
заменяется на

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

xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJ...."
Я рассчитывал на высокоуровневую реализацию getColor(x,y) уже написанную добрыми дяденьками и тётеньками из основной команды Inkscape, а вовсе не на бинарный массив исходного файла. Как-то это очень грустно. При таком подходе надо будет самостоятельно звать imagemagic, делать .bmp восьмибитный, правильно отмасштабированный и уже в нём начинать что-то вытаскивать делая getColor(x,y)=getColor(x+y*width) да ещё и с коэффициентами.... жуть.

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

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

Сообщение Nick »

Да там просто все. (только в пятницу с этим возился :) )

Берем пакет Image и numpy.

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

import Image, numpy
# потом надо две функции: 
#переводим картинку в массив
def image2array(im):
	newArr = numpy.fromstring(im.tostring(),numpy.uint8)
	newArr = numpy.reshape(newArr,im.size)
	return newArr
# и функция getcolor
def getcolor(x,y):
	# в ней делаем билинейную или бикубическую фильтрацию?
Аватара пользователя
dormouse
Мастер
Сообщения: 334
Зарегистрирован: 27 фев 2010, 09:55
Репутация: 15
Заслуга: Developer
Контактная информация:

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

Сообщение dormouse »

Надо попробовать. Как раз сходу отличная катринка для теста нашлась в яндексе: http://kalyaev.com/2012/20120129/z-depth-01.jpg
Вообщем выражаю итоговую мысль:
на финальном проходе P-t-G прям перед записью g-кода
1. взять из текущего слоя первую картинку, т.е. "svg:image"
2. взять от картинки атрибуты x,y,width,height (их как раз пользователь вручную растягивал мышкой чтобы стало хорошо)
3. смотрим xlink:href и в зависимости от того путь это или base-64 данные делаем массив нужного нам размера
3а. Внедряем если ещё не внедрено или экстрагируем, если не экстрагировано в зависимости от принятого решения - работать во внешних файлах или в памяти Inkscape
3b. Конвертируем картинку в каком-то исходном формате в 8-ми битный серый "выбранный формат" с учётом масштабирования Kx=image.X/width, Ky=imageY/height
3c. Возможно растрируем дополнительно с некоторой абстрактной точностью Px=точность=штукX/mm из свойств слоя?) width[mm]*Px[штукX/mm] * height*Py в обычный массив из восьмибитных байтов=глубине=цвету
4. сравниваем на каждом шаге вывода ptgZ-координату с рассчитанной по формуле imZ=imZscale*imZ8bit+Zimoffset. Если ptgZ предлагает резать глубже чем рассчитанная imZ, то заменить в P-t-G ptgZ=imZ

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

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

Сообщение Nick »

А не маловато ли дискретность глубины в 256 цветов?

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

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

Сообщение dormouse »

8-бит (пока) является стандартом. Разумеется, мало. Тогда лучше сразу заложимся на 16бит. Больше обычный софт в любом случае не делает. Пусть будут двухбайтными, в обычном случае старший нулевой байт не помешает.

В svg при обычном внедрении только xywh. После поворота добавляется transform матрица. Её, конечно, надо учитывать.

Пункт 3 говорит о том, что картинка может быть уже внедрена, тогда надо её извлечь.
Либо если принимаем решение работать внутри inkscape, то наоборот, не внедрённые надо самостоятельно прочитать из файла.

З.Ы. Надо проверить код webslicer_export.py. В нём, похоже, есть обращения к ImageMagic через повторный вызов Inkscape из самого себя... странно, конечно.

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

def test_if_has_imagemagick(self):
        (status, output) = self.get_cmd_output('convert --version')
        self.has_magick = ( status == 0 and 'ImageMagick' in output )
....
(status, output) = self.get_cmd_output(
            'inkscape %s -i "%s" -e "%s" "%s"' % (
                opts, el.attrib['id'], img_name_png, self.tmp_svg
            )
)
Аватара пользователя
NightV
Почётный участник
Почётный участник
Сообщения: 6610
Зарегистрирован: 30 дек 2011, 09:14
Репутация: 2279
Настоящее имя: Владимир Айрапетян
Откуда: Israel
Контактная информация:

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

Сообщение NightV »

Nick писал(а):Grad = Rad/pi*180 (pi = 3.14159265 )
предлагаеш самому под себя править?

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

if tool['4th axis meaning'] == "tangent knife" : 
	a = atan2(si[0][0]-s[0][0],si[0][1]-s[0][1])
	a = calculate_angle(a, current_a)
	g+="G01 C%s\n" % (a*tool['4th axis scale']+tool['4th axis offset'])
	current_a = a
	if lg=="G00": g += "G01" + c([None,None,s[5][0]+depth]) + penetration_feed +"(Penetrate)\n"	
	g += "G01" +c(si[0]+[s[5][1]+depth]) + feed + "\n"
	lg = 'G01'
	elif s[1] == 'arc':
	r = [(s[2][0]-s[0][0]), (s[2][1]-s[0][1])]
	if tool['4th axis meaning'] == "tangent knife" : 
	if s[3]<0 : # CW
	a1 = atan2(s[2][1]-s[0][1],-s[2][0]+s[0][0]) + math.pi 
	else: #CCW
	a1 = atan2(-s[2][1]+s[0][1],s[2][0]-s[0][0]) + math.pi
	a = calculate_angle(a1, current_a)
	g+="G01 A%s\n" % (a*tool['4th axis scale']+tool['4th axis offset'])
	current_a = a
	axis4 = " A%s"%((current_a+s[3])*tool['4th axis scale']+tool['4th axis offset'])
	current_a = current_a+s[3]
else : axis4 = ""

Всё просто! если знаешь КАК!
Ответить

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