Разработка 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 (175020 просмотров) <a class='original' href='./download/file.php?id=348&sid=516d87dbe3b100e32a3e5cddf41dc164&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 »

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

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

Сообщение NightV »

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

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

Сообщение Nick »

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

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

Сообщение NightV »

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

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

Сообщение dormouse »

NightV: Я тоже скоро буду участвовать в исправлении багов. Сейчас времени только на доделку картинок хватает. В ближайших планах у меня:
1. доделать картинки чтобы можно было начать тестировать
2. сделать адекватно update (исправив работу с прокси), чтобы был переключатель "dev версия"/"стабильная" для обновления и РАБОТАЛ
проблема: неясно как с правами у пользователя под linux быть (чтобы у каждого папка extensions был личная? или права были исправлены?)
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

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

Сообщение Nick »

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

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

Сообщение NightV »

да, для опдейта без проверки платформы не обойтись.
а я вот тут мозгую по поводу ГУИ, многих отпугивает (как и меня в начале) НЕинтуитивность расположения "кнопочек-галочек-окошечек", плюс все "в одну кучу" свалено... :problem:
Вам это не заметно так как Вы пишите ее и знаете все на зубок а для человека впервые открывшего приложение темный лес, и без мануала где пошагово описана процедура не обойтись.
кстате я столкнулся с Gcodetools еще год назад когда делал первый станок, но сходу не разобравшись ушел на Артсам
пока что только одна стоящая идея:
в версии DEV, где сейчас расположена "справка" (первая вкладка) поставить "выбор инструмента или тип станка" и исходя из этого плясать, какие остальные вкладки-окошечки паказать а какие нет, тоесть не перегружать конечного пользователя (не програмера) излишней информацией

ЗЫ у меня тут пара человек есть которые будут на станке работать, они с компьютером на ВЫ :D но рисовать в Инкскейп уже получается ;) вот на них и можно ГУИ налаживать, так сказать подопытные-кролики :hehehe:
я им уже пытался показать Gcodetools :D :D оба достали блокнотики и начали записывать что и куда нажать... через час обьяснений я уже начал нервничать :hehehe:
Всё просто! если знаешь КАК!
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

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

Сообщение Nick »

Дело в том, что доступный интерфейс _крайне_ ограничен. Мы постарались выжать из него все, что можно. Есть вариант, загружать внешний интерфейс, даже где-то было такое расширение для плоттера, но тогда это расширение будет блокировать работу inkscape и нельзя будет сделать так, чтобы окно расширения постоянно висело открытым.

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

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

Сообщение Nick »

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

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

Сообщение 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
Последний раз редактировалось NightV 11 фев 2012, 14:45, всего редактировалось 1 раз.
Всё просто! если знаешь КАК!
Аватара пользователя
NightV
Почётный участник
Почётный участник
Сообщения: 6599
Зарегистрирован: 30 дек 2011, 09:14
Репутация: 2279
Настоящее имя: Владимир Айрапетян
Откуда: Israel
Контактная информация:

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

Сообщение 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


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

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

Сообщение Nick »

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

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

Сообщение NightV »

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

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

Сообщение 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
Аватара пользователя
NightV
Почётный участник
Почётный участник
Сообщения: 6599
Зарегистрирован: 30 дек 2011, 09:14
Репутация: 2279
Настоящее имя: Владимир Айрапетян
Откуда: Israel
Контактная информация:

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

Сообщение NightV »

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

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

Сообщение Nick »

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

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

Сообщение NightV »

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

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

Сообщение dormouse »

Nick: Оценил скорость работы численных растровых методов. На тестовой картинке с барышней около 0.3мпх накладывание простейшего фильтра отбрасывания выколотых вверх точек в один проход занимает на core2duo секунд 10. Около минуты-двух займёт наложение фильтра геометрии фрезы и т.п.
Если всё это просуммировать, то выйдет около 5минут на мегапиксель (грубо, но порядок таков). Похоже, надо вычисления проводить однократно и складывать эти результаты методом .tostring в файлы на диске, поскольку повторно данные вычисления не нужны. Только если меняется форма фрезы, угол картинки или параметры смещения чего-либо в пространстве (либо коэффициенты толщин слоя картинки и т.п.).

Удалось придумать и реализовать очень изящный по своей прямолинейности метод накладывания фильтра фрезы. Надо соотнести форму из tools к реальным фрезам. Мы в тот раз сделали только несколько известных форм через функции + возможность ввода свой пользовательской формы через функцию?
Аватара пользователя
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 »

Тут описывать особо нечего - простейшие алгоритмы вроде "сравнить со средним двух максимальных значений" или "сумма неотрицательных элементов матрицы". Главное, что самих операций много и полагаю, что делать их надо однократно, после кешировать.
Лучше чуть сосредоточиться на самой обёртке для помещения картинок и интерфейсе. Это НАМНОГО важнее, а мелкую оптимизацию будем делать уже потом. В конце-концов она только скорости придаст, а это мелочи (на мой взгляд).
Ответить

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