import string import re def getOppositPoint(refPoint,pivotPoint): tmp = pivotPoint - (refPoint - pivotPoint); return round(tmp,3) def makePointsData(SVG_bezierSource): beziers = [] currentX = 0.0 currentY = 0.0 dump = re.split(',',SVG_bezierSource) n = 0 while(n < len(dump)): bezierUnit = [] while(len(bezierUnit)<8): if(dump[n] == 'M'): n += 1 #moveTo bezierUnit.append(dump[n]) bezierUnit.append(dump[n+1]) #setCurrentPoint currentX = currentX + float(dump[n]) currentY = currentY + float(dump[n+1]) n += 2; elif(dump[n] == 'c'): if(dump[n-3] != 'M'): print 'rc' bezierUnit.append(float(dump[n-2]) + currentX) bezierUnit.append(float(dump[n-1]) + currentY) currentX = float(dump[n-2]) + currentX currentY = float(dump[n-1]) + currentY n += 1 #c represents cubic, relative... tmpX = currentX + float(dump[n]); tmpY = currentY + float(dump[n+1]); bezierUnit.append(tmpX) bezierUnit.append(tmpY) n += 2 elif(dump[n] == 'C'): if(dump[n-3] != 'M'): print 'AC' bezierUnit.append(float(dump[n-2]) + + currentX) bezierUnit.append(float(dump[n-1]) + + currentY) n += 1 currentX = 0 currentY = 0 #C represents cubic, absolute bezierUnit.append(dump[n]) bezierUnit.append(dump[n+1]) n += 2 elif(dump[n] == 'S'): n += 1 #setCurrentPoint #S means absolute shorthand #share point from previous bezier tmpX = float(dump[n-3]) + currentX tmpY = float(dump[n-2]) + currentY bezierUnit.append(tmpX) bezierUnit.append(tmpY) #cacurate new ancor point which has to be absolute tmpX2 = getOppositPoint(float(dump[n-5])+currentX,tmpX) tmpY2 = getOppositPoint(float(dump[n-4])+currentY,tmpY) bezierUnit.append(tmpX2) bezierUnit.append(tmpY2) currentX = 0 currentY = 0 #currentX = tmpX #currentY = tmpY elif(dump[n] == 's'): n += 1 #setCurrentPoint #s means relative shorthand #share point from previous bezier tmpX = currentX + float(dump[n-3]) tmpY = currentY + float(dump[n-2]) bezierUnit.append(tmpX) bezierUnit.append(tmpY) #cacurate new ancor point which has to be relative tmpX2 = getOppositPoint(float(dump[n-5]) + currentX,tmpX) tmpY2 = getOppositPoint(float(dump[n-4]) + currentY,tmpY) bezierUnit.append(tmpX2) bezierUnit.append(tmpY2) currentX = tmpX currentY = tmpY else: tmpX = currentX + float(dump[n]) tmpY = currentY + float(dump[n+1]) bezierUnit.append(tmpX) bezierUnit.append(tmpY) n += 2 #print(bezierUnit) #print(bezierUnit) beziers.append(bezierUnit) return beziers def changeRes(bezierPoints, oldMax): i=0 while(i',dump) RSLString = '' paths = []; for tag in lines: if(re.search('\