diff --git a/gviz.py b/gviz.py index 131ab33..24148ac 100755 --- a/gviz.py +++ b/gviz.py @@ -1,9 +1,9 @@ import wx,time class window(wx.Frame): - def __init__(self,f,size=(600,600),bedsize=(200,200),center=(100,100),grid=(10,50),extrusion_width=0.5): + def __init__(self,f,size=(600,600),build_dimensions=[200,200,100,0,0,0],grid=(10,50),extrusion_width=0.5): wx.Frame.__init__(self,None,title="Layer view (Use shift+mousewheel to switch layers)",size=(size[0],size[1])) - self.p=gviz(self,size=size,bedsize=bedsize,center=center,grid=grid,extrusion_width=extrusion_width) + self.p=gviz(self,size=size,build_dimensions=build_dimensions,grid=grid,extrusion_width=extrusion_width) s=time.time() for i in f: self.p.addgcode(i) @@ -53,11 +53,10 @@ class window(wx.Frame): elif z < 0: self.p.zoom(event.GetX(),event.GetY(),1/1.2) class gviz(wx.Panel): - def __init__(self,parent,size=(200,200),bedsize=(200,200),center=(100,100),grid=(10,50),extrusion_width=0.5): + def __init__(self,parent,size=(200,200),build_dimensions=[200,200,100,0,0,0],grid=(10,50),extrusion_width=0.5): wx.Panel.__init__(self,parent,-1,size=(size[0],size[1])) self.size=size - self.bedsize=bedsize - self.center=center + self.build_dimensions=build_dimensions self.grid=grid self.lastpos=[0,0,0,0,0,0,0] self.hilightpos=self.lastpos[:] @@ -70,7 +69,7 @@ class gviz(wx.Panel): self.layers=[] self.layerindex=0 self.filament_width=extrusion_width # set it to 0 to disable scaling lines with zoom - self.scale=[min(float(size[0])/bedsize[0],float(size[1])/bedsize[1])]*2 + self.scale=[min(float(size[0])/build_dimensions[0],float(size[1])/build_dimensions[1])]*2 penwidth = max(1.0,self.filament_width*((self.scale[0]+self.scale[1])/2.0)) self.translate=[0.0,0.0] self.mainpen=wx.Pen(wx.Colour(0,0,0),penwidth) @@ -136,10 +135,10 @@ class gviz(wx.Panel): dc.SetPen(wx.Pen(wx.Colour(180,180,150))) for grid_unit in self.grid: if grid_unit > 0: - for x in xrange(int(self.bedsize[0]/grid_unit)+1): - dc.DrawLine(self.translate[0]+x*self.scale[0]*grid_unit,self.translate[1],self.translate[0]+x*self.scale[0]*grid_unit,self.translate[1]+self.scale[1]*self.bedsize[1]) - for y in xrange(int(self.bedsize[1]/grid_unit)+1): - dc.DrawLine(self.translate[0],self.translate[1]+y*self.scale[1]*grid_unit,self.translate[0]+self.scale[0]*self.bedsize[0],self.translate[1]+y*self.scale[1]*grid_unit) + for x in xrange(int(self.build_dimensions[0]/grid_unit)+1): + dc.DrawLine(self.translate[0]+x*self.scale[0]*grid_unit,self.translate[1],self.translate[0]+x*self.scale[0]*grid_unit,self.translate[1]+self.scale[1]*self.build_dimensions[1]) + for y in xrange(int(self.build_dimensions[1]/grid_unit)+1): + dc.DrawLine(self.translate[0],self.translate[1]+y*self.scale[1]*grid_unit,self.translate[0]+self.scale[0]*self.build_dimensions[0],self.translate[1]+y*self.scale[1]*grid_unit) dc.SetPen(wx.Pen(wx.Colour(0,0,0))) if not self.showall: self.size = self.GetSize() @@ -237,9 +236,9 @@ class gviz(wx.Panel): return target def _y(y): - return self.bedsize[1]-(y+(self.bedsize[0]/2-self.center[0])) + return self.build_dimensions[1]-(y-self.build_dimensions[4]) def _x(x): - return x+(self.bedsize[0]/2-self.center[0]) + return x-self.build_dimensions[3] start_pos = self.hilightpos[:] if hilight else self.lastpos[:] diff --git a/pronterface.py b/pronterface.py index 741b397..0901ce5 100755 --- a/pronterface.py +++ b/pronterface.py @@ -57,10 +57,8 @@ class PronterWindow(wx.Frame,pronsole.pronsole): self.settings.last_file_path = "" self.settings.last_temperature = 0.0 self.settings.last_bed_temperature = 0.0 - self.settings.bed_size_x = 200. - self.settings.bed_size_y = 200. - self.settings.bed_center_x = 100. - self.settings.bed_center_y = 100. + #default build dimensions are 200x200x100 with 0,0,0 in the corner of the bed + self.settings.build_dimensions = '200x200x100+0+0+0' self.settings.preview_grid_step1 = 10. self.settings.preview_grid_step2 = 50. self.settings.preview_extrusion_width = 0.5 @@ -86,7 +84,11 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ] self.custombuttons=[] self.btndict={} + print self.settings.build_dimensions self.parse_cmdline(sys.argv[1:]) + print self.settings.build_dimensions + self.build_dimensions_list = self.get_build_dimensions(self.settings.build_dimensions) + print self.build_dimensions_list customdict={} try: execfile("custombtn.txt",customdict) @@ -611,14 +613,12 @@ class PronterWindow(wx.Frame,pronsole.pronsole): self.zfeedc.SetForegroundColour("black") # lls.Add((10,0),pos=(0,11),span=(1,1)) self.gviz=gviz.gviz(self.panel,(300,300), - bedsize=(self.settings.bed_size_x,self.settings.bed_size_y), - center=(self.settings.bed_center_x,self.settings.bed_center_y), + build_dimensions=self.build_dimensions_list, grid=(self.settings.preview_grid_step1,self.settings.preview_grid_step2), extrusion_width=self.settings.preview_extrusion_width) self.gviz.showall=1 self.gwindow=gviz.window([], - bedsize=(self.settings.bed_size_x,self.settings.bed_size_y), - center=(self.settings.bed_center_x,self.settings.bed_center_y), + build_dimensions=self.build_dimensions_list, grid=(self.settings.preview_grid_step1,self.settings.preview_grid_step2), extrusion_width=self.settings.preview_extrusion_width) self.gviz.Bind(wx.EVT_LEFT_DOWN,self.showwin) @@ -1462,6 +1462,35 @@ class PronterWindow(wx.Frame,pronsole.pronsole): wx.CallAfter(self.pausebtn.SetLabel, _("Pause")) wx.CallAfter(self.printbtn.SetLabel, _("Print")) self.paused=0 + + def get_build_dimensions(self,bdim): + import re + # a string containing up to six numbers delimited by almost anything + # first 0-3 numbers specify the build volume, no sign, always positive + # remaining 0-3 numbers specify the coordinates of the "southwest" corner of the build platform + # "XXX,YYY" + # "XXXxYYY+xxx-yyy" + # "XXX,YYY,ZZZ+xxx+yyy-zzz" + # etc + bdl = re.match( + "[^\d+-]*(\d+)?" + # X build size + "[^\d+-]*(\d+)?" + # Y build size + "[^\d+-]*(\d+)?" + # Z build size + "[^\d+-]*([+-]\d+)?" + # X corner coordinate + "[^\d+-]*([+-]\d+)?" + # Y corner coordinate + "[^\d+-]*([+-]\d+)?" # Z corner coordinate + ,bdim).groups() + print bdl + bdl_float = [ + 200.0 if bdl[0]==None else float(bdl[0]), + 200.0 if bdl[1]==None else float(bdl[1]), + 100.0 if bdl[2]==None else float(bdl[2]), + 0.0 if bdl[3]==None else float(bdl[3]), + 0.0 if bdl[4]==None else float(bdl[4]), + 0.0 if bdl[5]==None else float(bdl[5]), + ] + return bdl_float + class macroed(wx.Dialog): """Really simple editor to edit macro definitions"""