Commit 4e85e07e authored by leonmuller's avatar leonmuller

Fixed x-y coordinates of raster image, fixed a bug where multipe objects in a...

Fixed x-y coordinates of raster image, fixed a bug where multipe objects in a single layer were not being exported
parent 27fda036
...@@ -466,13 +466,13 @@ class Gcode_tools(inkex.Effect): ...@@ -466,13 +466,13 @@ class Gcode_tools(inkex.Effect):
# p = np[:] # p = np[:]
#Vector path data, cut from x to y in a line or curve #Vector path data, cut from x to y in a line or curve
inkex.errormsg("Parsing data type : "+path[0]['type']) inkex.errormsg("Building gcode for "+path['type']+" type object." )
if(path[0]['type'] == "vector") : if(path['type'] == "vector") :
lst = {} lst = {}
lst['type'] = "vector" lst['type'] = "vector"
lst['data'] = [] lst['data'] = []
for subpath in path[0]['data']: for subpath in path['data']:
lst['data'].append( lst['data'].append(
[[subpath[0][1][0]*xs, subpath[0][1][1]*ys], 'move', 0, 0] [[subpath[0][1][0]*xs, subpath[0][1][1]*ys], 'move', 0, 0]
) )
...@@ -488,7 +488,7 @@ class Gcode_tools(inkex.Effect): ...@@ -488,7 +488,7 @@ class Gcode_tools(inkex.Effect):
#Raster image data, cut/burn left to right, drop down a line, repeat in reverse until completed. #Raster image data, cut/burn left to right, drop down a line, repeat in reverse until completed.
else: else:
#No need to modify #No need to modify
return path[0] return path
def draw_curve(self, curve, group=None, style=BIARC_STYLE): def draw_curve(self, curve, group=None, style=BIARC_STYLE):
if group==None: if group==None:
...@@ -603,7 +603,7 @@ class Gcode_tools(inkex.Effect): ...@@ -603,7 +603,7 @@ class Gcode_tools(inkex.Effect):
#R = mm per pixel #R = mm per pixel
#R = 1 / dots per mm #R = 1 / dots per mm
#90dpi = 1 / (90 / 25.4) #90dpi = 1 / (90 / 25.4)
gcode += ';Image '+str(curve['id'])+' pixel size: '+str(curve['width'])+'x'+str(curve['height'])+'\n' gcode += '\n\n;Beginning of Raster Image '+str(curve['id'])+' pixel size: '+str(curve['width'])+'x'+str(curve['height'])+'\n'
gcode += 'M649 S'+str(laserPower)+' B2 D0 R0.2822 '+cutFeed+'\n' gcode += 'M649 S'+str(laserPower)+' B2 D0 R0.2822 '+cutFeed+'\n'
gcode += 'G28\n' gcode += 'G28\n'
gcode += 'G0 X'+str(curve['x'])+' Y'+str(curve['y'])+' '+cutFeed+'\n' gcode += 'G0 X'+str(curve['x'])+' Y'+str(curve['y'])+' '+cutFeed+'\n'
...@@ -725,6 +725,7 @@ class Gcode_tools(inkex.Effect): ...@@ -725,6 +725,7 @@ class Gcode_tools(inkex.Effect):
first = not first first = not first
gcode += ("M5 \n"); gcode += ("M5 \n");
gcode += ';End of Raster Image '+str(curve['id'])+'\n\n'
return gcode return gcode
...@@ -896,8 +897,7 @@ class Gcode_tools(inkex.Effect): ...@@ -896,8 +897,7 @@ class Gcode_tools(inkex.Effect):
im = Image.open(BytesIO(base64.b64decode(data))).convert('L') im = Image.open(BytesIO(base64.b64decode(data))).convert('L')
img = ImageOps.invert(im) img = ImageOps.invert(im)
inkex.errormsg( str(img.size))
imageDataWidth, imageDataheight = img.size imageDataWidth, imageDataheight = img.size
#Resize to match the dimensions in Inkscape #Resize to match the dimensions in Inkscape
...@@ -911,8 +911,9 @@ class Gcode_tools(inkex.Effect): ...@@ -911,8 +911,9 @@ class Gcode_tools(inkex.Effect):
path['type'] = "raster" path['type'] = "raster"
path['width'] = inkscapeWidth path['width'] = inkscapeWidth
path['height'] = inkscapeHeight path['height'] = inkscapeHeight
path['x'] = float(node.get("x")) path['x'] = self.unitScale*(float(node.get("x")) * 1)
path['y'] = float(node.get("y")) #Add the height in px from inkscape from the image, as its top is measured from the origin top left, though in inkscape the origin is bottom left so we need to begin scanning the px at the bottom of the image for our laser bed.
path['y'] = self.unitScale * ((float(node.get("y"))+float(node.get("height")))*-1+self.pageHeight)
path['id'] = node.get("id") path['id'] = node.get("id")
path['data'] = pixels path['data'] = pixels
...@@ -980,10 +981,6 @@ class Gcode_tools(inkex.Effect): ...@@ -980,10 +981,6 @@ class Gcode_tools(inkex.Effect):
logger.write("no objects in layer") logger.write("no objects in layer")
continue continue
#inkex.errormsg(str(pathList))
#Fetch the vector or raster data
curve = self.parse_curve(pathList)
#Determind the power of the laser that this layer should be cut at. #Determind the power of the laser that this layer should be cut at.
#If the layer is not named as an integer value then default to the laser intensity set at the export settings. #If the layer is not named as an integer value then default to the laser intensity set at the export settings.
...@@ -1017,17 +1014,20 @@ class Gcode_tools(inkex.Effect): ...@@ -1017,17 +1014,20 @@ class Gcode_tools(inkex.Effect):
#arg = curve[0] #arg = curve[0]
#pt = arg[0] #pt = arg[0]
#gcode += "G00 " + self.make_args(pt) + "\n" #gcode += "G00 " + self.make_args(pt) + "\n"
#Fetch the vector or raster data and turn it into GCode
if (self.options.drawCurves): for objectData in pathList:
self.draw_curve(curve) curve = self.parse_curve(objectData)
#Generate the GCode for this layer #Should the curves be drawn in inkscape?
if (curve['type'] == "vector"): if (self.options.drawCurves):
gcode += self.generate_gcode(curve, 0, laserPower, altfeed=altfeed, altppm=altppm) self.draw_curve(curve)
elif (curve['type'] == "raster"):
gcode += self.generate_raster_gcode(curve, laserPower, altfeed=altfeed) #Generate the GCode for this layer
inkex.errormsg(("Pixels for raster here")) if (curve['type'] == "vector"):
gcode += self.generate_gcode(curve, 0, laserPower, altfeed=altfeed, altppm=altppm)
elif (curve['type'] == "raster"):
gcode += self.generate_raster_gcode(curve, laserPower, altfeed=altfeed)
# If there are any objects left over, it's because they don't belong # If there are any objects left over, it's because they don't belong
# to any inkscape layer (bug in inkscape?). Output those now. # to any inkscape layer (bug in inkscape?). Output those now.
...@@ -1135,7 +1135,7 @@ class Gcode_tools(inkex.Effect): ...@@ -1135,7 +1135,7 @@ class Gcode_tools(inkex.Effect):
return return
if (self.skipped > 0): if (self.skipped > 0):
inkex.errormsg(("Warning: skipped %d object(s) because they were not paths. Please convert them to paths using the menu 'Path->Object To Path'" % self.skipped)) inkex.errormsg(("Warning: skipped %d object(s) because they were not paths (Vectors) or images (Raster). Please convert them to paths using the menu 'Path->Object To Path'" % self.skipped))
e = Gcode_tools() e = Gcode_tools()
e.affect() e.affect()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment