Коль, снова нужна твоя помощь
допиливаю Gcodetools "под себя"
уперся в "проблему" отматымания в ноль
короче рисуем например (испытывал в живую) значек AUDI, тоесть тупо круги...
щас олгоритм такой
встаем в ноль, режем круг до 360 гр, потом на следующем он ОТМАТЫВАЕТ круг до 0 и снова все по кругу
или рисуем крадрат, щас рисует так
0гр
-90гр
-180 гр
90гр
тоесть отматал обратно 270гр когда можно было встать в -270, а потом выполнить типа "IF a >= 190: a=360-a" "G10 L2 P0 A%a"
щас ковыряю этот кусок кода
Код: Выделить всё
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, penetration_feed) :
# get tangent at start point
forse = False
if current_a == None :
current_a = 0
forse = True
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 not forse and ( 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
else :
g = "G00 "+g
return a, axis4, g
если со строкой "IF a >= 190: a=360-a" "G10 L2 P0 A%a" (строка для примера логики, у тебя же все в PI расписано, правильно будет что-то типа IF a >= pi+0.5: a=pi2-a)
еще ка-то смутно вырисовывается то получить последовательность 0, 90, 180, 270 невыходит
или может не туда копаю?