Страница 36 из 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
Добавлено: 09 фев 2012, 13:00
Nick
Круто! Ждем результатов. Кстати дописал быстрый поиск пересечений, осталось выправить все баги

.
Эх, осталось совсем чуть-чуть и у нас будет свой хороший оффсет!
Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 09 фев 2012, 15:48
NightV
а что по "ножичку"? смотрел, почему врезание раньше поворота?
и в конце ненужный поворот на 180 зачемто выполняется, и снова с опущеным ножом
я блин тестер в коце-концов или ГДЕ?

не прислушиваетесь к тестерам
и ВООБЩЕ! этому концу, в конце концов будет конец?

Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 09 фев 2012, 16:13
Nick
Будет, сделаем

. Погоди. ты же знаешь, всегда тянет сделать что-то новое, вместо поддержки старого

. Сегодня постараюсь посмотреть.
Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 09 фев 2012, 16:20
NightV
Nick писал(а):вместо поддержки старого .
это не поддержка, а доделка

Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 10 фев 2012, 10:34
dormouse
NightV: Я тоже скоро буду участвовать в исправлении багов. Сейчас времени только на доделку картинок хватает. В ближайших планах у меня:
1. доделать картинки чтобы можно было начать тестировать
2. сделать адекватно update (исправив работу с прокси), чтобы был переключатель "dev версия"/"стабильная" для обновления и РАБОТАЛ
проблема: неясно как с правами у пользователя под linux быть (чтобы у каждого папка extensions был личная? или права были исправлены?)
Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 10 фев 2012, 11:26
Nick
В linux у каждого есть своя папка extensions, меня остановила необходимость кроссплатформенности апдейта. Т.е. нужно определить систему и потом пихать файлы в нужное место.
Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 10 фев 2012, 12:48
NightV
да, для опдейта без проверки платформы не обойтись.
а я вот тут мозгую по поводу ГУИ, многих отпугивает (как и меня в начале) НЕинтуитивность расположения "кнопочек-галочек-окошечек", плюс все "в одну кучу" свалено...
Вам это не заметно так как Вы пишите ее и знаете все на зубок а для человека впервые открывшего приложение темный лес, и без мануала где пошагово описана процедура не обойтись.
кстате я столкнулся с Gcodetools еще год назад когда делал первый станок, но сходу не разобравшись ушел на Артсам
пока что только одна стоящая идея:
в версии DEV, где сейчас расположена "справка" (первая вкладка) поставить "выбор инструмента или тип станка" и исходя из этого плясать, какие остальные вкладки-окошечки паказать а какие нет, тоесть не перегружать конечного пользователя (не програмера) излишней информацией
ЗЫ у меня тут пара человек есть которые будут на станке работать, они с компьютером на ВЫ

но рисовать в Инкскейп уже получается

вот на них и можно ГУИ налаживать, так сказать подопытные-кролики
я им уже пытался показать Gcodetools

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

Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 10 фев 2012, 13:11
Nick
Дело в том, что доступный интерфейс _крайне_ ограничен. Мы постарались выжать из него все, что можно. Есть вариант, загружать внешний интерфейс, даже где-то было такое расширение для плоттера, но тогда это расширение будет блокировать работу inkscape и нельзя будет сделать так, чтобы окно расширения постоянно висело открытым.
Для обучения персонала, настоятельно рекомендую создать шаблон, чтобы в нем все было настроено заранее. Тогда пользователю останется только нажать пару кнопочек.
Шаблон нужен такой, чтобы в нем был нарисован станок, рабочее поле, сделаны слои для инструментов с самими инструментами и привязками по координатам.
Потом такой шаблон кидаешь в папку с шаблонами и остается сделать только Файл-Новый-Шаблон.
Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 10 фев 2012, 18:01
Nick
Ревизия 223
Исправил баги с ножом. В прошлый раз я исправил только для прямых, теперь добавил туда еще и дуги

.
Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 11 фев 2012, 14:33
NightV
круг
центр круга x50 y50
G00 Z 4.0000 (Lift up)
G00 X 49.9979 Y 74.3236 нехватает этой строчки, добавил сам, это координата где начинается первая арка и заканчивается последняя
G00 A 180.0913 (Turn knife) а в идеале выглядело бы так G00 X 49.9979 Y 74.3236 A 180.0913
G01 Z -1.0000 (Penetrate back) лишняя и в ней нет feed
G01 Z -1.0000 F 100.0000(Penetrate) первый feed указался только здесь
G03 X 32.7998 Y 67.2007 Z -1.0000 I -0.0000 J -24.3234 F 400.0000 A 225.1101
G03 X 25.6759 Y 50.0036 Z -1.0000 I 17.1947 J -17.1971 A 270.1369
G03 X 32.7998 Y 32.8065 Z -1.0000 I 24.3186 J -0.0000 A 315.1638
G03 X 49.9979 Y 25.6836 Z -1.0000 I 17.1981 J 17.2005 A 360.1826
G03 X 67.1960 Y 32.8065 Z -1.0000 I 0.0000 J 24.3234 A 405.2014
G03 X 74.3200 Y 50.0036 Z -1.0000 I -17.1947 J 17.1971 A 450.2282
G03 X 67.1960 Y 67.2007 Z -1.0000 I -24.3186 J 0.0000 A 495.2551
G03 X 49.9979 Y 74.3236 Z -1.0000 I -17.1981 J -17.2005 A 540.2739
G00 Z 5.0000
Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 11 фев 2012, 14:45
NightV
квадрат
ошибки теже
G00 Z 4.0000 (Lift up)
G00 X 0.5448 Y 99.4552 нехвататет этой строки
G00 A -90.0456 (Turn knife) идеально было-бы G00 X 0.5448 Y 99.4552 A -90.0456
G01 Z -1.0000 (Penetrate back) лишняя
G01 Z -1.0000 F 100.0000(Penetrate)
G01 X 0.5448 Y 0.5448 Z -1.0000 F 400.0000
G00 Z 4.0000 (Lift up)
G00 A -5.0915e-14 (Turn knife)
G01 Z -1.0000 (Penetrate back)
G01 X 99.4552 Y 0.5448 Z -1.0000
G00 Z 4.0000 (Lift up)
G00 A 90.0456 (Turn knife)
G01 Z -1.0000 (Penetrate back)
G01 X 99.4552 Y 99.4552 Z -1.0000
G00 Z 4.0000 (Lift up)
G00 A 180.0913 (Turn knife)
G01 Z -1.0000 (Penetrate back)
G01 X 0.5448 Y 99.4552 Z -1.0000
G00 Z 5.0000
тоесть в обоих случаях не указавается первоночальная координана арки или прямой откуда режем
Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 11 фев 2012, 15:13
Nick
Блин... опять...
Так надо будет за это плотничком сесть все переделать

.
Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 11 фев 2012, 15:18
NightV
может не надо?

потом опять баги вылавливать

Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 11 фев 2012, 15:23
Nick
когда все будет написано нормально на объектном языке, их будет гораздо проще вылавливать, сейчас там просто каша с 100500 костылей, чтобы что-то работало:
Код: Выделить всё
def generate_gcode(self, curve, layer, depth):
Zauto_scale = self.Zauto_scale[layer]
tool = self.tools[layer][0]
g = ""
def c(c):
c = [c[i] if i<len(c) else None for i in range(6)]
if c[5] == 0 : c[5]=None
s,s1 = [" X", " Y", " Z", " I", " J", " K"], ["","","","","",""]
m,a = [1,1,self.options.Zscale*Zauto_scale,1,1,self.options.Zscale*Zauto_scale], [0,0,self.options.Zoffset,0,0,0]
r = ''
for i in range(6):
if c[i]!=None:
r += s[i] + ("%f" % (c[i]*m[i]+a[i])) + s1[i]
return r
def calculate_angle(a, current_a) :
return min(
[abs(a-current_a%pi2+pi2), a+current_a-current_a%pi2+pi2],
[abs(a-current_a%pi2-pi2), a+current_a-current_a%pi2-pi2],
[abs(a-current_a%pi2), a+current_a-current_a%pi2])[1]
def get_tangent_knife_turn_gcode(s,si,tool,current_a, depth) :
# get tangent at start point
if s[1] == 'line' :
a = atan2_(si[0][0]-s[0][0],si[0][1]-s[0][1])
else :
if s[3]<0 : # CW
a = atan2_(s[2][1]-s[0][1],-s[2][0]+s[0][0]) + pi
else: #CCW
a = atan2_(-s[2][1]+s[0][1],s[2][0]-s[0][0]) + pi
# calculate all vars
a = calculate_angle(a, current_a)
axis4 = " A%s"%((a+s[3])*tool['4th axis scale']+tool['4th axis offset']) if s[1]=="arc" else ""
if abs((a-current_a)%pi2)<1e-5 or abs((a-current_a)%pi2 - pi2)<1e-5 :
g = ""
else :
g = "A%s (Turn knife)\n" % (a*tool['4th axis scale']+tool['4th axis offset'])
if tool['lift knife at corner']!=0. :
g = "G00 Z%s (Lift up)\n"%(depth+tool['lift knife at corner']) + "G00 "+ g + "G01 Z%s (Penetrate back)\n"%depth
else :
g = "G01 "+g
return a, axis4, g
if len(curve)==0 : return ""
try :
self.last_used_tool == None
except :
self.last_used_tool = None
print_("working on curve")
print_(curve)
if tool != self.last_used_tool :
g += ( "(Change tool to %s)\n" % re.sub("\"'\(\)\\\\"," ",tool["name"]) ) + tool["tool change gcode"] + "\n"
lg, zs, f = 'G00', self.options.Zsafe, " F%f"%tool['feed']
current_a = 0
go_to_safe_distance = "G00" + c([None,None,zs]) + "\n"
penetration_feed = " F%s"%tool['penetration feed']
for i in range(1,len(curve)):
# Creating Gcode for curve between s=curve[i-1] and si=curve[i] start at s[0] end at s[4]=si[0]
s, si = curve[i-1], curve[i]
if point_to_point_d2(s[0],si[0]) < 1e-7 : continue
feed = f if lg not in ['G01','G02','G03'] else ''
if s[1] == 'move':
g += go_to_safe_distance + "G00" + c(si[0]) + "\n" + tool['gcode before path'] + "\n"
lg = 'G00'
elif s[1] == 'end':
g += go_to_safe_distance + tool['gcode after path'] + "\n"
lg = 'G00'
elif s[1] == 'line':
if tool['4th axis meaning'] == "tangent knife" :
current_a, axis4, g_ = get_tangent_knife_turn_gcode(s,si,tool,current_a, depth)
g+=g_
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" :
current_a, axis4, g_ = get_tangent_knife_turn_gcode(s,si,tool,current_a, depth)
g+=g_
current_a = current_a+s[3]
else : axis4 = ""
if lg=="G00": g += "G01" + c([None,None,s[5][0]+depth]) + penetration_feed + "(Penetrate)\n"
if (r[0]**2 + r[1]**2)>self.options.min_arc_radius**2:
r1, r2 = (P(s[0])-P(s[2])), (P(si[0])-P(s[2]))
if abs(r1.mag()-r2.mag()) < 0.001 :
g += ("G02" if s[3]<0 else "G03") + c(si[0]+[ s[5][1]+depth, (s[2][0]-s[0][0]),(s[2][1]-s[0][1]) ]) + feed + axis4 + "\n"
else:
r = (r1.mag()+r2.mag())/2
g += ("G02" if s[3]<0 else "G03") + c(si[0]+[s[5][1]+depth]) + " R%f" % (r) + feed + axis4 + "\n"
lg = 'G02'
else:
if tool['4th axis meaning'] == "tangent knife" :
current_a, axis4, g_ = get_tangent_knife_turn_gcode(s[:1]+["line"]+s[2:],si,tool,current_a, depth)
g+=g_
g += "G01" +c(si[0]+[s[5][1]+depth]) + feed + "\n"
lg = 'G01'
if si[1] == 'end':
g += go_to_safe_distance + tool['gcode after path'] + "\n"
return g
Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 11 фев 2012, 15:26
NightV
да уш... заглядывал я в эту "кашу" несколько раз

просто неизвестно сколько это займет времени.... а на меня уже начали давить

Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 11 фев 2012, 15:49
Nick
Ну, сам напросился. Очередной костыль..... rev224.
Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 11 фев 2012, 16:04
NightV
работает
теперь думаю готов (ну почти) запускать станок в работу

Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 11 фев 2012, 21:57
dormouse
Nick: Оценил скорость работы численных растровых методов. На тестовой картинке с барышней около 0.3мпх накладывание простейшего фильтра отбрасывания выколотых вверх точек в один проход занимает на core2duo секунд 10. Около минуты-двух займёт наложение фильтра геометрии фрезы и т.п.
Если всё это просуммировать, то выйдет около 5минут на мегапиксель (грубо, но порядок таков). Похоже, надо вычисления проводить однократно и складывать эти результаты методом .tostring в файлы на диске, поскольку повторно данные вычисления не нужны. Только если меняется форма фрезы, угол картинки или параметры смещения чего-либо в пространстве (либо коэффициенты толщин слоя картинки и т.п.).
Удалось придумать и реализовать очень изящный по своей прямолинейности метод накладывания фильтра фрезы. Надо соотнести форму из tools к реальным фрезам. Мы в тот раз сделали только несколько известных форм через функции + возможность ввода свой пользовательской формы через функцию?
Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 12 фев 2012, 02:40
Nick
А можешь по подробнее описать фильтр? попробуем его оптимизировать...
Re: Разработка Gcodetools - плагин Inkscape для экспорта в G
Добавлено: 12 фев 2012, 14:37
dormouse
Тут описывать особо нечего - простейшие алгоритмы вроде "сравнить со средним двух максимальных значений" или "сумма неотрицательных элементов матрицы". Главное, что самих операций много и полагаю, что делать их надо однократно, после кешировать.
Лучше чуть сосредоточиться на самой обёртке для помещения картинок и интерфейсе. Это НАМНОГО важнее, а мелкую оптимизацию будем делать уже потом. В конце-концов она только скорости придаст, а это мелочи (на мой взгляд).