diff --git a/README.i18n b/README.i18n
index 0b1d9fd..3684941 100644
--- a/README.i18n
+++ b/README.i18n
@@ -25,6 +25,10 @@ now there is only one, for German. New ones can be created:
# Edit the .po file to add messages for newlang
msgfmt -o ${newlang}.mo ${newlang}.po
+To update a previously created message catalog from the template, use :
+
+ msgmerge -U locale/fr/LC_MESSAGES/${lang}.po locale/pronterface.pot
+
As currently coded, the default location for these message catalogs is
/usr/share/pronterface/locale/
diff --git a/gcview.py b/gcview.py
new file mode 100755
index 0000000..912bb87
--- /dev/null
+++ b/gcview.py
@@ -0,0 +1,997 @@
+#!/usr/bin/python
+import os
+import math
+import wx
+from wx import glcanvas
+import time
+import threading
+
+import pyglet
+pyglet.options['shadow_window'] = False
+pyglet.options['debug_gl'] = False
+from pyglet.gl import *
+
+import stltool
+
+import threading
+
+
+class GLPanel(wx.Panel):
+ '''A simple class for using OpenGL with wxPython.'''
+
+ def __init__(self, parent, id, pos=wx.DefaultPosition,
+ size=wx.DefaultSize, style=0):
+ # Forcing a no full repaint to stop flickering
+ style = style | wx.NO_FULL_REPAINT_ON_RESIZE
+ #call super function
+ super(GLPanel, self).__init__(parent, id, pos, size, style)
+
+ #init gl canvas data
+ self.GLinitialized = False
+ attribList = (glcanvas.WX_GL_RGBA, # RGBA
+ glcanvas.WX_GL_DOUBLEBUFFER, # Double Buffered
+ glcanvas.WX_GL_DEPTH_SIZE, 24) # 24 bit
+ # Create the canvas
+ self.sizer = wx.BoxSizer(wx.HORIZONTAL)
+ self.canvas = glcanvas.GLCanvas(self, attribList=attribList)
+ self.sizer.Add(self.canvas, 1, wx.EXPAND)
+ self.SetSizer(self.sizer)
+ #self.sizer.Fit(self)
+ self.Layout()
+
+ # bind events
+ self.canvas.Bind(wx.EVT_ERASE_BACKGROUND, self.processEraseBackgroundEvent)
+ self.canvas.Bind(wx.EVT_SIZE, self.processSizeEvent)
+ self.canvas.Bind(wx.EVT_PAINT, self.processPaintEvent)
+
+ #==========================================================================
+ # Canvas Proxy Methods
+ #==========================================================================
+ def GetGLExtents(self):
+ '''Get the extents of the OpenGL canvas.'''
+ return self.canvas.GetClientSize()
+
+ def SwapBuffers(self):
+ '''Swap the OpenGL buffers.'''
+ self.canvas.SwapBuffers()
+
+ #==========================================================================
+ # wxPython Window Handlers
+ #==========================================================================
+ def processEraseBackgroundEvent(self, event):
+ '''Process the erase background event.'''
+ pass # Do nothing, to avoid flashing on MSWin
+
+ def processSizeEvent(self, event):
+ '''Process the resize event.'''
+ if self.canvas.GetContext():
+ # Make sure the frame is shown before calling SetCurrent.
+ self.Show()
+ self.canvas.SetCurrent()
+ size = self.GetGLExtents()
+ self.winsize = (size.width, size.height)
+ self.width, self.height = size.width, size.height
+ self.OnReshape(size.width, size.height)
+ self.canvas.Refresh(False)
+ event.Skip()
+
+ def processPaintEvent(self, event):
+ '''Process the drawing event.'''
+ self.canvas.SetCurrent()
+
+ # This is a 'perfect' time to initialize OpenGL ... only if we need to
+ if not self.GLinitialized:
+ self.OnInitGL()
+ self.GLinitialized = True
+
+ self.OnDraw()
+ event.Skip()
+
+ def Destroy(self):
+ #clean up the pyglet OpenGL context
+ #self.pygletcontext.destroy()
+ #call the super method
+ super(wx.Panel, self).Destroy()
+
+ #==========================================================================
+ # GLFrame OpenGL Event Handlers
+ #==========================================================================
+ def OnInitGL(self):
+ '''Initialize OpenGL for use in the window.'''
+ #create a pyglet context for this panel
+ self.pmat = (GLdouble * 16)()
+ self.mvmat = (GLdouble * 16)()
+ self.pygletcontext = Context(current_context)
+ self.pygletcontext.set_current()
+ self.dist = 1000
+ self.vpmat = None
+ #normal gl init
+ glClearColor(0, 0, 0, 1)
+ glColor3f(1, 0, 0)
+ glEnable(GL_DEPTH_TEST)
+ glEnable(GL_CULL_FACE)
+ # Uncomment this line for a wireframe view
+ #glPolygonMode(GL_FRONT_AND_BACK, GL_LINE)
+
+ # Simple light setup. On Windows GL_LIGHT0 is enabled by default,
+ # but this is not the case on Linux or Mac, so remember to always
+ # include it.
+ glEnable(GL_LIGHTING)
+ glEnable(GL_LIGHT0)
+ glEnable(GL_LIGHT1)
+
+ # Define a simple function to create ctypes arrays of floats:
+ def vec(*args):
+ return (GLfloat * len(args))(*args)
+
+ glLightfv(GL_LIGHT0, GL_POSITION, vec(.5, .5, 1, 0))
+ glLightfv(GL_LIGHT0, GL_SPECULAR, vec(.5, .5, 1, 1))
+ glLightfv(GL_LIGHT0, GL_DIFFUSE, vec(1, 1, 1, 1))
+ glLightfv(GL_LIGHT1, GL_POSITION, vec(1, 0, .5, 0))
+ glLightfv(GL_LIGHT1, GL_DIFFUSE, vec(.5, .5, .5, 1))
+ glLightfv(GL_LIGHT1, GL_SPECULAR, vec(1, 1, 1, 1))
+
+ glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, vec(0.5, 0, 0.3, 1))
+ glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, vec(1, 1, 1, 1))
+ glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 50)
+ glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, vec(0, 0.1, 0, 0.9))
+ #create objects to draw
+ #self.create_objects()
+
+ def OnReshape(self, width, height):
+ '''Reshape the OpenGL viewport based on the dimensions of the window.'''
+
+ if not self.GLinitialized:
+ self.OnInitGL()
+ self.GLinitialized = True
+ self.pmat = (GLdouble * 16)()
+ self.mvmat = (GLdouble * 16)()
+ glViewport(0, 0, width, height)
+ glMatrixMode(GL_PROJECTION)
+ glLoadIdentity()
+ gluPerspective(60., width / float(height), .1, 1000.)
+ glMatrixMode(GL_MODELVIEW)
+ glLoadIdentity()
+ #pyglet stuff
+ self.vpmat = (GLint * 4)(0, 0, *list(self.GetClientSize()))
+ glGetDoublev(GL_PROJECTION_MATRIX, self.pmat)
+ glGetDoublev(GL_MODELVIEW_MATRIX, self.mvmat)
+ #glMatrixMode(GL_PROJECTION)
+
+ # Wrap text to the width of the window
+ if self.GLinitialized:
+ self.pygletcontext.set_current()
+ self.update_object_resize()
+
+ def OnDraw(self, *args, **kwargs):
+ """Draw the window."""
+ #clear the context
+ self.canvas.SetCurrent()
+ self.pygletcontext.set_current()
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+ #draw objects
+ self.draw_objects()
+ #update screen
+ self.SwapBuffers()
+
+ #==========================================================================
+ # To be implemented by a sub class
+ #==========================================================================
+ def create_objects(self):
+ '''create opengl objects when opengl is initialized'''
+ pass
+
+ def update_object_resize(self):
+ '''called when the window recieves only if opengl is initialized'''
+ pass
+
+ def draw_objects(self):
+ '''called in the middle of ondraw after the buffer has been cleared'''
+ pass
+
+
+def _dist(dist):
+ """return axis length, or 0 if None"""
+ if dist is None:
+ return 0
+ else:
+ return float(dist)
+
+class gcpoint(object):
+ """gcode point
+ stub for first line"""
+ def __init__(self, x=0,y=0,z=0,e=0):
+ self.x = x
+ self.y = y
+ self.z = z
+ self.e = e
+ self.length = 0
+
+
+class gcline(object):
+ """gcode move line
+ Once initialised,it knows its position, length and extrusion ratio
+ Returns lines into gcview batch()
+ """
+ def __init__(self, x=None, y=None, z=None, e=None, f=None, prev_gcline=None, orgline = False):
+ if prev_gcline is None:
+ self.prev_gcline = gcpoint()
+ else:
+ self.prev_gcline = prev_gcline
+ if x is None:
+ self.x = self.prev_gcline.x
+ else:
+ self.x = float(x)
+ if y is None:
+ self.y = self.prev_gcline.y
+ else:
+ self.y = float(y)
+ if z is None:
+ self.z = self.prev_gcline.z
+ else:
+ self.z = float(z)
+ if e is None:
+ self.e = self.prev_gcline.e
+ else:
+ self.e = float(e)
+
+ self.f = f
+
+ self.orgline = orgline
+
+ self.calc_delta()
+ self.calc_len()
+
+ def __str__(self):
+ return u"line from %s,%s,%s to %s,%s,%s with extrusion ratio %s and feedrate %s\n%s" % (
+ self.prev_gcline.x,
+ self.prev_gcline.y,
+ self.prev_gcline.z,
+ self.x,
+ self.y,
+ self.z,
+ self.extrusion_ratio,
+ self.f,
+ self.orgline,
+ )
+
+ def calc_delta(self, prev_gcline=None):
+ if prev_gcline is None:
+ prev_gcline = self.prev_gcline
+ if self.prev_gcline is not None:
+ self.dx = self.x - prev_gcline.x
+ self.dy = self.y - prev_gcline.y
+ self.dz = self.z - prev_gcline.z
+ self.de = self.e - prev_gcline.e
+ else:
+ self.dx = self.x
+ self.dy = self.y
+ self.dz = self.z
+ self.de = self.e
+
+ def calc_len(self):
+ if self.dz != 0:
+ self.length = math.sqrt(self.dx**2 + self.dy**2 + self.dz**2)
+ else:
+ self.length = math.sqrt(self.dx**2 + self.dy**2)
+ if self.de:
+ self.extrusion_ratio = self.length / self.de
+ else:
+ self.extrusion_ratio = 0
+
+ def glline(self):
+ return [
+ self.prev_gcline.x,
+ self.prev_gcline.y,
+ self.prev_gcline.z,
+ self.x,
+ self.y,
+ self.z,
+ ]
+ def glcolor(self, upper_limit = None, lower_limit = 0, max_feedrate = 0):
+ if self.extrusion_ratio == 0:
+ return [255,255,255,0,0,0]
+ else:
+ blue_color = 0
+ green_color = 0
+ if upper_limit is not None:
+ if self.extrusion_ratio <= lower_limit:
+ blue_color = 0
+ else:
+ blue_color = int ((self.extrusion_ratio - lower_limit) / (upper_limit - lower_limit) * 255)
+ else:
+ blue_color = 0
+ if max_feedrate > 0 and self.f > 0:
+ green_color = int((self.f/max_feedrate) * 255)
+
+ if green_color > 255:
+ green_color = 255
+ if green_color < 0:
+ green_color = 0
+ if blue_color > 255:
+ blue_color = 255
+ if blue_color < 0:
+ blue_color = 0
+ return[255,green_color,blue_color,128,green_color,blue_color/4]
+
+
+def float_from_line(axe, line):
+ return float(line.split(axe)[1].split(" ")[0])
+
+class gcThreadRenderer(threading.Thread):
+ def __init__(self, gcview, lines):
+ threading.Thread.__init__(self)
+ self.gcview = gcview
+ self.lines = lines
+ print "q init"
+
+ def run(self):
+ for line in self.lines:
+ layer_name = line.z
+ if line.z not in self.gcview.layers:
+ self.gcview.layers[line.z] = pyglet.graphics.Batch()
+ self.gcview.layerlist = self.gcview.layers.keys()
+ self.gcview.layerlist.sort()
+ self.gcview.layers[line.z].add(2, GL_LINES, None, ("v3f", line.glline()), ("c3B", line.glcolor(self.gcview.upper_limit, self.gcview.lower_limit, self.gcview.max_feedrate)))
+ self.gcview.t2 = time.time()
+ print "Rendered lines in %fs" % (self.gcview.t2-self.gcview.t1)
+
+class gcview(object):
+ """gcode visualiser
+ Holds opengl objects for all layers
+ """
+ def __init__(self, lines, batch, w=0.5, h=0.5):
+ if len(lines) == 0:
+ return
+ print "Loading %s lines" % (len(lines))
+ #End pos of previous mode
+ self.prev = gcpoint()
+ # Correction for G92 moves
+ self.delta = [0, 0, 0, 0]
+ self.layers = {}
+ self.t0 = time.time()
+ self.lastf = 0
+ lines = [self.transform(i) for i in lines]
+ lines = [i for i in lines if i is not None]
+ self.t1 = time.time()
+ print "transformed %s lines in %fs" % (len(lines), self.t1- self.t0)
+ self.upper_limit = 0
+ self.lower_limit = None
+ self.max_feedrate = 0
+ for line in lines:
+ if line.extrusion_ratio and line.length > 0.005: #lines shorter than 0.003 can have large extrusion ratio
+ if line.extrusion_ratio > self.upper_limit:
+ self.upper_limit = line.extrusion_ratio
+ if self.lower_limit is None or line.extrusion_ratio < self.lower_limit:
+ self.lower_limit = line.extrusion_ratio
+ if line.f > self.max_feedrate:
+ self.max_feedrate = line.f
+ #print upper_limit, lower_limit
+ #self.render_gl(lines)
+ q = gcThreadRenderer(self, lines)
+ q.setDaemon(True)
+ q.start()
+
+
+
+
+ def transform(self, line):
+ """transforms line of gcode into gcline object (or None if its not move)
+ Tracks coordinates across resets in self.delta
+ """
+ orgline = line
+ line = line.split(";")[0]
+ cur = [None, None, None, None, None]
+ if len(line) > 0:
+ if "G92" in line:
+ #Recalculate delta on G92 (reset)
+ if("X" in line):
+ try:
+ self.delta[0] = float_from_line("X", line) + self.prev.x
+ except:
+ self.delta[0] = 0
+ if("Y" in line):
+ try:
+ self.delta[1] = float_from_line("Y", line) + self.prev.y
+ except:
+ self.delta[1] = 0
+ if("Z" in line):
+ try:
+ self.delta[2] = float_from_line("Z", line) + self.prev.z
+ except:
+ self.delta[2] = 0
+ if("E" in line):
+ try:
+ self.delta[3] = float_from_line("E", line) + self.prev.e
+ except:
+ self.delta[3] = 0
+ return None
+
+ if "G1" in line or "G0" in line:
+ #Create new gcline
+ if("X" in line):
+ cur[0] = float_from_line("X", line) + self.delta[0]
+ if("Y" in line):
+ cur[1] = float_from_line("Y", line) + self.delta[1]
+ if("Z" in line):
+ cur[2] = float_from_line("Z", line) + self.delta[2]
+ if("E" in line):
+ cur[3] = float_from_line("E", line) + self.delta[3]
+ if "F" in line:
+ cur[4] = float_from_line("F", line)
+
+
+ if cur == [None, None, None, None, None]:
+ return None
+ else:
+ #print cur
+ if cur[4] is None:
+ cur[4] = self.lastf
+ else:
+ self.lastf = cur[4]
+
+ r = gcline(x=cur[0], y=cur[1], z=cur[2],e=cur[3], f=cur[4], prev_gcline=self.prev, orgline=orgline)
+ self.prev = r
+ return r
+ return None
+
+ def delete(self):
+ #for i in self.vlists:
+ # i.delete()
+ #self.vlists = []
+ pass
+
+
+def trackball(p1x, p1y, p2x, p2y, r):
+ TRACKBALLSIZE = r
+
+#float a[3]; /* Axis of rotation */
+#float phi; /* how much to rotate about axis */
+#float p1[3], p2[3], d[3];
+#float t;
+
+ if (p1x == p2x and p1y == p2y):
+ return [0.0, 0.0, 0.0, 1.0]
+
+ p1 = [p1x, p1y, project_to_sphere(TRACKBALLSIZE, p1x, p1y)]
+ p2 = [p2x, p2y, project_to_sphere(TRACKBALLSIZE, p2x, p2y)]
+ a = stltool.cross(p2, p1)
+
+ d = map(lambda x, y: x - y, p1, p2)
+ t = math.sqrt(sum(map(lambda x: x * x, d))) / (2.0 * TRACKBALLSIZE)
+
+ if (t > 1.0):
+ t = 1.0
+ if (t < -1.0):
+ t = -1.0
+ phi = 2.0 * math.asin(t)
+
+ return axis_to_quat(a, phi)
+
+
+def vec(*args):
+ return (GLfloat * len(args))(*args)
+
+
+def axis_to_quat(a, phi):
+ #print a, phi
+ lena = math.sqrt(sum(map(lambda x: x * x, a)))
+ q = map(lambda x: x * (1 / lena), a)
+ q = map(lambda x: x * math.sin(phi / 2.0), q)
+ q.append(math.cos(phi / 2.0))
+ return q
+
+
+def build_rotmatrix(q):
+ m = (GLdouble * 16)()
+ m[0] = 1.0 - 2.0 * (q[1] * q[1] + q[2] * q[2])
+ m[1] = 2.0 * (q[0] * q[1] - q[2] * q[3])
+ m[2] = 2.0 * (q[2] * q[0] + q[1] * q[3])
+ m[3] = 0.0
+
+ m[4] = 2.0 * (q[0] * q[1] + q[2] * q[3])
+ m[5] = 1.0 - 2.0 * (q[2] * q[2] + q[0] * q[0])
+ m[6] = 2.0 * (q[1] * q[2] - q[0] * q[3])
+ m[7] = 0.0
+
+ m[8] = 2.0 * (q[2] * q[0] - q[1] * q[3])
+ m[9] = 2.0 * (q[1] * q[2] + q[0] * q[3])
+ m[10] = 1.0 - 2.0 * (q[1] * q[1] + q[0] * q[0])
+ m[11] = 0.0
+
+ m[12] = 0.0
+ m[13] = 0.0
+ m[14] = 0.0
+ m[15] = 1.0
+ return m
+
+
+def project_to_sphere(r, x, y):
+ d = math.sqrt(x * x + y * y)
+ if (d < r * 0.70710678118654752440):
+ return math.sqrt(r * r - d * d)
+ else:
+ t = r / 1.41421356237309504880
+ return t * t / d
+
+
+def mulquat(q1, rq):
+ return [q1[3] * rq[0] + q1[0] * rq[3] + q1[1] * rq[2] - q1[2] * rq[1],
+ q1[3] * rq[1] + q1[1] * rq[3] + q1[2] * rq[0] - q1[0] * rq[2],
+ q1[3] * rq[2] + q1[2] * rq[3] + q1[0] * rq[1] - q1[1] * rq[0],
+ q1[3] * rq[3] - q1[0] * rq[0] - q1[1] * rq[1] - q1[2] * rq[2]]
+
+
+class TestGlPanel(GLPanel):
+
+ def __init__(self, parent, size, id=wx.ID_ANY):
+ super(TestGlPanel, self).__init__(parent, id, wx.DefaultPosition, size, 0)
+ self.batches = []
+ self.rot = 0
+ self.canvas.Bind(wx.EVT_MOUSE_EVENTS, self.move)
+ self.canvas.Bind(wx.EVT_LEFT_DCLICK, self.double)
+ self.initialized = 1
+ self.canvas.Bind(wx.EVT_MOUSEWHEEL, self.wheel)
+ self.parent = parent
+ self.initpos = None
+ self.dist = 200
+ self.bedsize = [200, 200]
+ self.transv = [0, 0, -self.dist]
+ self.basequat = [0, 0, 0, 1]
+ wx.CallAfter(self.forceresize)
+ self.mousepos = [0, 0]
+
+ def double(self, event):
+ p = event.GetPositionTuple()
+ sz = self.GetClientSize()
+ v = map(lambda m, w, b: b * m / w, p, sz, self.bedsize)
+ v[1] = self.bedsize[1] - v[1]
+ v += [300]
+ print v
+ self.add_file("../prusa/metric-prusa/x-end-idler.stl", v)
+
+ def forceresize(self):
+ self.SetClientSize((self.GetClientSize()[0], self.GetClientSize()[1] + 1))
+ self.SetClientSize((self.GetClientSize()[0], self.GetClientSize()[1] - 1))
+ threading.Thread(target=self.update).start()
+ self.initialized = 0
+
+ def move_shape(self, delta):
+ """moves shape (selected in l, which is list ListBox of shapes)
+ by an offset specified in tuple delta.
+ Positive numbers move to (rigt, down)"""
+ name = self.parent.l.GetSelection()
+ if name == wx.NOT_FOUND:
+ return False
+
+ name = self.parent.l.GetString(name)
+
+ model = self.parent.models[name]
+ model.offsets = [
+ model.offsets[0] + delta[0],
+ model.offsets[1] + delta[1],
+ model.offsets[2]
+ ]
+ self.Refresh()
+ return True
+
+ def move(self, event):
+ """react to mouse actions:
+ no mouse: show red mousedrop
+ LMB: move active object,
+ with shift rotate viewport
+ RMB: nothing
+ with shift move viewport
+ """
+ if event.Dragging() and event.LeftIsDown():
+ if self.initpos == None:
+ self.initpos = event.GetPositionTuple()
+ else:
+ if not event.ShiftDown():
+ currentpos = event.GetPositionTuple()
+ delta = (
+ (currentpos[0] - self.initpos[0]),
+ -(currentpos[1] - self.initpos[1])
+ )
+ self.move_shape(delta)
+ self.initpos = None
+ return
+ #print self.initpos
+ p1 = self.initpos
+ self.initpos = None
+ p2 = event.GetPositionTuple()
+ sz = self.GetClientSize()
+ p1x = (float(p1[0]) - sz[0] / 2) / (sz[0] / 2)
+ p1y = -(float(p1[1]) - sz[1] / 2) / (sz[1] / 2)
+ p2x = (float(p2[0]) - sz[0] / 2) / (sz[0] / 2)
+ p2y = -(float(p2[1]) - sz[1] / 2) / (sz[1] / 2)
+ #print p1x,p1y,p2x,p2y
+ quat = trackball(p1x, p1y, p2x, p2y, -self.transv[2] / 250.0)
+ if self.rot:
+ self.basequat = mulquat(self.basequat, quat)
+ #else:
+ glGetDoublev(GL_MODELVIEW_MATRIX, self.mvmat)
+ #self.basequat = quatx
+ mat = build_rotmatrix(self.basequat)
+ glLoadIdentity()
+ glTranslatef(self.transv[0], self.transv[1], 0)
+ glTranslatef(0, 0, self.transv[2])
+ glMultMatrixd(mat)
+ glGetDoublev(GL_MODELVIEW_MATRIX, self.mvmat)
+ self.rot = 1
+
+ elif event.ButtonUp(wx.MOUSE_BTN_LEFT):
+ if self.initpos is not None:
+ self.initpos = None
+ elif event.ButtonUp(wx.MOUSE_BTN_RIGHT):
+ if self.initpos is not None:
+ self.initpos = None
+
+ elif event.Dragging() and event.RightIsDown() and event.ShiftDown():
+ if self.initpos is None:
+ self.initpos = event.GetPositionTuple()
+ else:
+ p1 = self.initpos
+ p2 = event.GetPositionTuple()
+ sz = self.GetClientSize()
+ p1 = list(p1)
+ p2 = list(p2)
+ p1[1] *= -1
+ p2[1] *= -1
+
+ self.transv = map(lambda x, y, z, c: c - self.dist * (x - y) / z, list(p1) + [0], list(p2) + [0], list(sz) + [1], self.transv)
+
+ glLoadIdentity()
+ glTranslatef(self.transv[0], self.transv[1], 0)
+ glTranslatef(0, 0, self.transv[2])
+ if(self.rot):
+ glMultMatrixd(build_rotmatrix(self.basequat))
+ glGetDoublev(GL_MODELVIEW_MATRIX, self.mvmat)
+ self.rot = 1
+ self.initpos = None
+ else:
+ #mouse is moving without a button press
+ p = event.GetPositionTuple()
+ sz = self.GetClientSize()
+ v = map(lambda m, w, b: b * m / w, p, sz, self.bedsize)
+ v[1] = self.bedsize[1] - v[1]
+ self.mousepos = v
+
+ def rotate_shape(self, angle):
+ """rotates acive shape
+ positive angle is clockwise
+ """
+ name = self.parent.l.GetSelection()
+ if name == wx.NOT_FOUND:
+ return False
+ name = self.parent.l.GetString(name)
+ model = self.parent.models[name]
+ model.rot += angle
+
+ def wheel(self, event):
+ """react to mouse wheel actions:
+ rotate object
+ with shift zoom viewport
+ """
+ z = event.GetWheelRotation()
+ angle = 10
+ if not event.ShiftDown():
+ i = self.parent.l.GetSelection()
+
+ if i < 0:
+ try:
+ self.parent.setlayerindex(z)
+ except:
+ pass
+ return
+
+ if z > 0:
+ self.rotate_shape(angle / 2)
+ else:
+ self.rotate_shape(-angle / 2)
+ return
+ if z > 0:
+ self.transv[2] += angle
+ else:
+ self.transv[2] -= angle
+
+ glLoadIdentity()
+ glTranslatef(*self.transv)
+ if(self.rot):
+ glMultMatrixd(build_rotmatrix(self.basequat))
+ glGetDoublev(GL_MODELVIEW_MATRIX, self.mvmat)
+ self.rot = 1
+
+ def keypress(self, event):
+ """gets keypress events and moves/rotates acive shape"""
+ keycode = event.GetKeyCode()
+ print keycode
+ step = 5
+ angle = 18
+ if event.ControlDown():
+ step = 1
+ angle = 1
+ #h
+ if keycode == 72:
+ self.move_shape((-step, 0))
+ #l
+ if keycode == 76:
+ self.move_shape((step, 0))
+ #j
+ if keycode == 75:
+ self.move_shape((0, step))
+ #k
+ if keycode == 74:
+ self.move_shape((0, -step))
+ #[
+ if keycode == 91:
+ self.rotate_shape(-angle)
+ #]
+ if keycode == 93:
+ self.rotate_shape(angle)
+ event.Skip()
+
+ def update(self):
+ while(1):
+ dt = 0.05
+ time.sleep(0.05)
+ try:
+ wx.CallAfter(self.Refresh)
+ except:
+ return
+
+ def anim(self, obj):
+ g = 50 * 9.8
+ v = 20
+ dt = 0.05
+ basepos = obj.offsets[2]
+ obj.offsets[2] += obj.animoffset
+ while obj.offsets[2] > -1:
+ time.sleep(dt)
+ obj.offsets[2] -= v * dt
+ v += g * dt
+ if(obj.offsets[2] < 0):
+ obj.scale[2] *= 1 - 3 * dt
+ #return
+ v = v / 4
+ while obj.offsets[2] < basepos:
+ time.sleep(dt)
+ obj.offsets[2] += v * dt
+ v -= g * dt
+ obj.scale[2] *= 1 + 5 * dt
+ obj.scale[2] = 1.0
+
+ def create_objects(self):
+ '''create opengl objects when opengl is initialized'''
+ self.initialized = 1
+ wx.CallAfter(self.Refresh)
+
+ def drawmodel(self, m, n):
+ batch = pyglet.graphics.Batch()
+ stl = stlview(m.facets, batch=batch)
+ m.batch = batch
+ m.animoffset = 300
+ #print m
+ #threading.Thread(target = self.anim, args = (m, )).start()
+ wx.CallAfter(self.Refresh)
+
+ def update_object_resize(self):
+ '''called when the window recieves only if opengl is initialized'''
+ pass
+
+ def draw_objects(self):
+ '''called in the middle of ondraw after the buffer has been cleared'''
+ if self.vpmat is None:
+ return
+ if not self.initialized:
+ self.create_objects()
+
+ #glLoadIdentity()
+ #print list(self.pmat)
+ if self.rot == 1:
+ glLoadIdentity()
+ glMultMatrixd(self.mvmat)
+ else:
+ glLoadIdentity()
+ glTranslatef(*self.transv)
+ glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, vec(0.2, 0.2, 0.2, 1))
+ glBegin(GL_LINES)
+ glNormal3f(0, 0, 1)
+ rows = 10
+ cols = 10
+ zheight = 50
+ for i in xrange(-rows, rows + 1):
+ if i % 5 == 0:
+ glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, vec(0.6, 0.6, 0.6, 1))
+ else:
+ glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, vec(0.2, 0.2, 0.2, 1))
+ glVertex3f(10 * -cols, 10 * i, 0)
+ glVertex3f(10 * cols, 10 * i, 0)
+ for i in xrange(-cols, cols + 1):
+ if i % 5 == 0:
+ glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, vec(0.6, 0.6, 0.6, 1))
+ else:
+ glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, vec(0.2, 0.2, 0.2, 1))
+ glVertex3f(10 * i, 10 * -rows, 0)
+ glVertex3f(10 * i, 10 * rows, 0)
+ glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, vec(0.6, 0.6, 0.6, 1))
+ glVertex3f(10 * -cols, 10 * -rows, 0)
+ glVertex3f(10 * -cols, 10 * -rows, zheight)
+ glVertex3f(10 * cols, 10 * rows, 0)
+ glVertex3f(10 * cols, 10 * rows, zheight)
+ glVertex3f(10 * cols, 10 * -rows, 0)
+ glVertex3f(10 * cols, 10 * -rows, zheight)
+ glVertex3f(10 * -cols, 10 * rows, 0)
+ glVertex3f(10 * -cols, 10 * rows, zheight)
+
+ glVertex3f(10 * -cols, 10 * rows, zheight)
+ glVertex3f(10 * cols, 10 * rows, zheight)
+ glVertex3f(10 * cols, 10 * rows, zheight)
+ glVertex3f(10 * cols, 10 * -rows, zheight)
+ glVertex3f(10 * cols, 10 * -rows, zheight)
+ glVertex3f(10 * -cols, 10 * -rows, zheight)
+ glVertex3f(10 * -cols, 10 * -rows, zheight)
+ glVertex3f(10 * -cols, 10 * rows, zheight)
+
+ glEnd()
+ glPushMatrix()
+ glTranslatef(self.mousepos[0] - self.bedsize[0] / 2, self.mousepos[1] - self.bedsize[1] / 2, 0)
+ glBegin(GL_TRIANGLES)
+ glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, vec(1, 0, 0, 1))
+ glNormal3f(0, 0, 1)
+ glVertex3f(2, 2, 0)
+ glVertex3f(-2, 2, 0)
+ glVertex3f(-2, -2, 0)
+ glVertex3f(2, -2, 0)
+ glVertex3f(2, 2, 0)
+ glVertex3f(-2, -2, 0)
+ glEnd()
+ glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, vec(0.3, 0.7, 0.5, 1))
+ #glTranslatef(0, 40, 0)
+ glPopMatrix()
+ glPushMatrix()
+ glTranslatef(-100, -100, 0)
+ glEnable(GL_LINE_SMOOTH)
+ glEnable(GL_BLEND)
+ glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
+ glHint (GL_LINE_SMOOTH_HINT, GL_NICEST)
+ glLineWidth (1.5)
+
+ for i in self.parent.models.values():
+ glPushMatrix()
+ glTranslatef(*(i.offsets))
+ glRotatef(i.rot, 0.0, 0.0, 1.0)
+ glScalef(*i.scale)
+ #glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, vec(0.93, 0.37, 0.25, 1))
+ glEnable(GL_COLOR_MATERIAL)
+
+ if i.curlayer == -1:
+ # curlayer == -1 means we are over the top.
+ glLineWidth (0.8)
+ [i.gc.layers[j].draw() for j in i.gc.layerlist]
+ else:
+ glLineWidth (0.6)
+
+ tmpindex = i.gc.layerlist.index(i.curlayer)
+ if tmpindex >= 5:
+ thin_layer = i.gc.layerlist[tmpindex - 5]
+ [i.gc.layers[j].draw() for j in i.gc.layerlist if j <= thin_layer]
+
+ if tmpindex > 4:
+ glLineWidth (0.9)
+ i.gc.layers[i.gc.layerlist[tmpindex - 4]].draw()
+
+ if tmpindex > 3:
+ glLineWidth (1.1)
+ i.gc.layers[i.gc.layerlist[tmpindex - 3]].draw()
+
+ if tmpindex > 2:
+ glLineWidth (1.3)
+ i.gc.layers[i.gc.layerlist[tmpindex - 2]].draw()
+
+ if tmpindex > 1:
+ glLineWidth (2.2)
+ i.gc.layers[i.gc.layerlist[tmpindex - 1]].draw()
+
+ glLineWidth (3.5)
+ i.gc.layers[i.curlayer].draw()
+ glLineWidth (1.5)
+
+ glDisable(GL_COLOR_MATERIAL)
+
+ glPopMatrix()
+ glPopMatrix()
+ #print "drawn batch"
+
+
+class GCFrame(wx.Frame):
+ '''A simple class for using OpenGL with wxPython.'''
+
+ def __init__(self, parent, ID, title, pos=wx.DefaultPosition,
+ size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE):
+ super(GCFrame, self).__init__(parent, ID, title, pos, (size[0] + 150, size[1]), style)
+
+ class d:
+ def GetSelection(self):
+ return wx.NOT_FOUND
+ self.p = self
+ m = d()
+ m.offsets = [0, 0, 0]
+ m.rot = 0
+ m.curlayer = -1
+ m.scale = [1.0, 1.0, 1.0]
+ m.batch = pyglet.graphics.Batch()
+ m.gc = gcview([], batch=m.batch)
+ self.models = {"GCODE": m}
+ self.l = d()
+ self.modelindex = 0
+ self.GLPanel1 = TestGlPanel(self, size)
+
+ def addfile(self, gcode=[]):
+ self.models["GCODE"].gc.delete()
+ self.models["GCODE"].gc = gcview(gcode, batch=self.models["GCODE"].batch)
+ self.setlayerindex(None)
+
+ def clear(self):
+ self.models["GCODE"].gc.delete()
+ self.models["GCODE"].gc = gcview([], batch=self.models["GCODE"].batch)
+
+ def Show(self, arg=True):
+ wx.Frame.Show(self, arg)
+ self.SetClientSize((self.GetClientSize()[0], self.GetClientSize()[1] + 1))
+ self.SetClientSize((self.GetClientSize()[0], self.GetClientSize()[1] - 1))
+ self.Refresh()
+ wx.FutureCall(500, self.GLPanel1.forceresize)
+ #threading.Thread(target = self.update).start()
+ #self.initialized = 0
+
+ def setlayerindex(self, z):
+ m = self.models["GCODE"]
+ try:
+ mlk = m.gc.layerlist
+ except:
+ mlk = []
+ if z is None:
+ self.modelindex = -1
+ elif z > 0:
+ if self.modelindex < len(mlk) - 1:
+ if self.modelindex > -1:
+ self.modelindex += 1
+ else:
+ self.modelindex = -1
+ elif z < 0:
+ if self.modelindex > 0:
+ self.modelindex -= 1
+ elif self.modelindex == -1:
+ self.modelindex = len(mlk)
+
+ if self.modelindex >= 0:
+ m.curlayer = mlk[self.modelindex]
+ wx.CallAfter(self.SetTitle, "Gcode view, shift to move. Layer %d/%d, Z = %f" % (self.modelindex, len(mlk), m.curlayer))
+ else:
+ m.curlayer = -1
+ wx.CallAfter(self.SetTitle, "Gcode view, shift to move view, mousewheel to set layer")
+
+
+
+def main():
+ app = wx.App(redirect=False)
+ frame = GCFrame(None, wx.ID_ANY, 'Gcode view, shift to move view, mousewheel to set layer', size=(400, 400))
+ import sys
+ for filename in sys.argv:
+ if ".gcode" in filename:
+ frame.addfile(list(open(filename)))
+ elif ".stl" in filename:
+ #TODO: add stl here
+ pass
+
+ #frame = wx.Frame(None, -1, "GL Window", size=(400, 400))
+ #panel = TestGlPanel(frame, size=(300,300))
+ frame.Show(True)
+ app.MainLoop()
+ app.Destroy()
+
+if __name__ == "__main__":
+ #import cProfile
+ #print cProfile.run("main()")
+ main()
diff --git a/graph.py b/graph.py
new file mode 100644
index 0000000..d96675f
--- /dev/null
+++ b/graph.py
@@ -0,0 +1,267 @@
+#!/usr/bin/python
+
+# This file is part of the Printrun suite.
+#
+# Printrun is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Printrun is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Printrun. If not, see .
+
+import wx, random
+
+from bufferedcanvas import *
+
+class Graph(BufferedCanvas):
+ '''A class to show a Graph with Pronterface.'''
+
+ def __init__(self, parent, id, pos=wx.DefaultPosition,
+ size=wx.DefaultSize, style=0):
+ # Forcing a no full repaint to stop flickering
+ style = style | wx.NO_FULL_REPAINT_ON_RESIZE
+ #call super function
+ #super(Graph, self).__init__(parent, id, pos, size, style)
+ BufferedCanvas.__init__(self, parent, id)
+
+ self.SetSize(wx.Size(170, 100))
+
+ self.extruder0temps = [0]
+ self.extruder0targettemps = [0]
+ self.extruder1temps = [0]
+ self.extruder1targettemps = [0]
+ self.bedtemps = [0]
+ self.bedtargettemps = [0]
+
+ self.timer = wx.Timer(self)
+ self.Bind(wx.EVT_TIMER, self.updateTemperatures, self.timer)
+
+ self.maxyvalue = 250
+ self.ybars = 5
+ self.xbars = 6 # One bar per 10 second
+ self.xsteps = 60 # Covering 1 minute in the graph
+
+ self.y_offset = 1 # This is to show the line even when value is 0 and maxyvalue
+
+ self._lastyvalue = 0
+
+
+ #self.sizer = wx.BoxSizer(wx.HORIZONTAL)
+ #self.sizer.Add(wx.Button(self, -1, "Button1", (0,0)))
+ #self.SetSizer(self.sizer)
+
+
+
+ def OnPaint(self, evt):
+ dc = wx.PaintDC(self)
+ gc = wx.GraphicsContext.Create(dc)
+
+ def Destroy(self):
+ #call the super method
+ super(wx.Panel, self).Destroy()
+
+
+ def updateTemperatures(self, event):
+ self.AddBedTemperature(self.bedtemps[-1])
+ self.AddBedTargetTemperature(self.bedtargettemps[-1])
+ self.AddExtruder0Temperature(self.extruder0temps[-1])
+ self.AddExtruder0TargetTemperature(self.extruder0targettemps[-1])
+ #self.AddExtruder1Temperature(self.extruder1temps[-1])
+ #self.AddExtruder1TargetTemperature(self.extruder1targettemps[-1])
+ self.Refresh()
+
+
+ def drawgrid(self, dc, gc):
+ #cold,medium,hot = wx.Colour(0,167,223),wx.Colour(239,233,119),wx.Colour(210,50.100)
+ #col1 = wx.Colour(255,0,0, 255)
+ #col2 = wx.Colour(255,255,255, 128)
+
+ #b = gc.CreateLinearGradientBrush(0, 0, w, h, col1, col2)
+
+ gc.SetPen(wx.Pen(wx.Colour(255,0,0,0), 4))
+ #gc.SetBrush(gc.CreateBrush(wx.Brush(wx.Colour(245,245,255,252))))
+ #gc.SetBrush(b)
+ gc.DrawRectangle(0, 0, self.width, self.height)
+
+ #gc.SetBrush(wx.Brush(wx.Colour(245,245,255,52)))
+
+ #gc.SetBrush(gc.CreateBrush(wx.Brush(wx.Colour(0,0,0,255))))
+ #gc.SetPen(wx.Pen(wx.Colour(255,0,0,0), 4))
+
+ #gc.DrawLines(wx.Point(0,0), wx.Point(50,10))
+
+ #path = gc.CreatePath()
+ #path.MoveToPoint(0.0, 0.0)
+ #path.AddLineToPoint(0.0, 100.0)
+ #path.AddLineToPoint(100.0, 0.0)
+ #path.AddCircle( 50.0, 50.0, 50.0 )
+ #path.CloseSubpath()
+ #gc.DrawPath(path)
+ #gc.StrokePath(path)
+
+
+ font = wx.Font(10, wx.DEFAULT, wx.NORMAL, wx.BOLD)
+ gc.SetFont(font, wx.Colour(23,44,44))
+
+ dc.SetPen(wx.Pen(wx.Colour(225,225,225), 1))
+ for x in range(self.xbars):
+ dc.DrawLine(x*(float(self.width)/self.xbars), 0, x*(float(self.width)/self.xbars), self.height)
+
+ dc.SetPen(wx.Pen(wx.Colour(225,225,225), 1))
+ for y in range(self.ybars):
+ y_pos = y*(float(self.height)/self.ybars)
+ dc.DrawLine(0,y_pos, self.width,y_pos)
+ gc.DrawText(unicode(int(self.maxyvalue - (y * (self.maxyvalue/self.ybars)))), 1, y_pos - (font.GetPointSize() / 2))
+
+ if self.timer.IsRunning() == False:
+ font = wx.Font(14, wx.DEFAULT, wx.NORMAL, wx.BOLD)
+ gc.SetFont(font, wx.Colour(3,4,4))
+ gc.DrawText("Graph offline", self.width/2 - (font.GetPointSize() * 3), self.height/2 - (font.GetPointSize() * 1))
+
+ #dc.DrawCircle(50,50, 1)
+
+ #gc.SetPen(wx.Pen(wx.Colour(255,0,0,0), 1))
+ #gc.DrawLines([[20,30], [10,53]])
+ #dc.SetPen(wx.Pen(wx.Colour(255,0,0,0), 1))
+
+ def drawtemperature(self, dc, gc, temperature_list, text, text_xoffset, r, g, b, a):
+ if self.timer.IsRunning() == False:
+ dc.SetPen(wx.Pen(wx.Colour(128,128,128,128), 1))
+ else:
+ dc.SetPen(wx.Pen(wx.Colour(r,g,b,a), 1))
+
+ x_add = float(self.width)/self.xsteps
+ x_pos = float(0.0)
+ lastxvalue = float(0.0)
+
+ for temperature in (temperature_list):
+ y_pos = int((float(self.height-self.y_offset)/self.maxyvalue)*temperature) + self.y_offset
+ if (x_pos > 0.0): # One need 2 points to draw a line.
+ dc.DrawLine(lastxvalue,self.height-self._lastyvalue, x_pos, self.height-y_pos)
+
+ lastxvalue = x_pos
+ x_pos = float(x_pos) + x_add
+ self._lastyvalue = y_pos
+
+ if len(text) > 0:
+ font = wx.Font(8, wx.DEFAULT, wx.NORMAL, wx.BOLD)
+ #font = wx.Font(8, wx.DEFAULT, wx.NORMAL, wx.NORMAL)
+ if self.timer.IsRunning() == False:
+ gc.SetFont(font, wx.Colour(128,128,128))
+ else:
+ gc.SetFont(font, wx.Colour(r,g,b))
+
+ #gc.DrawText(text, self.width - (font.GetPointSize() * ((len(text) * text_xoffset + 1))), self.height - self._lastyvalue - (font.GetPointSize() / 2))
+ gc.DrawText(text, x_pos - x_add - (font.GetPointSize() * ((len(text) * text_xoffset + 1))), self.height - self._lastyvalue - (font.GetPointSize() / 2))
+ #gc.DrawText(text, self.width - (font.GetPixelSize().GetWidth() * ((len(text) * text_xoffset + 1) + 1)), self.height - self._lastyvalue - (font.GetPointSize() / 2))
+
+
+ def drawbedtemp(self, dc, gc):
+ self.drawtemperature(dc, gc, self.bedtemps, "Bed",2, 255,0,0, 128)
+
+ def drawbedtargettemp(self, dc, gc):
+ self.drawtemperature(dc, gc, self.bedtargettemps, "Bed Target",2, 255,120,0, 128)
+
+
+ def drawextruder0temp(self, dc, gc):
+ self.drawtemperature(dc, gc, self.extruder0temps, "Ex0",1, 0,155,255, 128)
+
+ def drawextruder0targettemp(self, dc, gc):
+ self.drawtemperature(dc, gc, self.extruder0targettemps, "Ex0 Target",2, 0,5,255, 128)
+
+
+ def drawextruder1temp(self, dc, gc):
+ self.drawtemperature(dc, gc, self.extruder1temps, "Ex1",3, 55,55,0, 128)
+
+ def drawextruder1targettemp(self, dc, gc):
+ self.drawtemperature(dc, gc, self.extruder1targettemps, "Ex1 Target",2, 55,55,0, 128)
+
+
+ def SetBedTemperature(self, value):
+ self.bedtemps.pop()
+ self.bedtemps.append(value)
+
+ def AddBedTemperature(self, value):
+ self.bedtemps.append(value)
+ if (len(self.bedtemps)-1) * float(self.width)/self.xsteps > self.width:
+ self.bedtemps.pop(0)
+
+
+ def SetBedTargetTemperature(self, value):
+ self.bedtargettemps.pop()
+ self.bedtargettemps.append(value)
+
+ def AddBedTargetTemperature(self, value):
+ self.bedtargettemps.append(value)
+ if (len(self.bedtargettemps)-1) * float(self.width)/self.xsteps > self.width:
+ self.bedtargettemps.pop(0)
+
+
+ def SetExtruder0Temperature(self, value):
+ self.extruder0temps.pop()
+ self.extruder0temps.append(value)
+
+ def AddExtruder0Temperature(self, value):
+ self.extruder0temps.append(value)
+ if (len(self.extruder0temps)-1) * float(self.width)/self.xsteps > self.width:
+ self.extruder0temps.pop(0)
+
+
+ def SetExtruder0TargetTemperature(self, value):
+ self.extruder0targettemps.pop()
+ self.extruder0targettemps.append(value)
+
+ def AddExtruder0TargetTemperature(self, value):
+ self.extruder0targettemps.append(value)
+ if (len(self.extruder0targettemps)-1) * float(self.width)/self.xsteps > self.width:
+ self.extruder0targettemps.pop(0)
+
+
+ def SetExtruder1Temperature(self, value):
+ self.extruder1temps.pop()
+ self.extruder1temps.append(value)
+
+ def AddExtruder1Temperature(self, value):
+ self.extruder1temps.append(value)
+ if (len(self.extruder1temps)-1) * float(self.width)/self.xsteps > self.width:
+ self.extruder1temps.pop(0)
+
+
+ def SetExtruder1TargetTemperature(self, value):
+ self.extruder1targettemps.pop()
+ self.extruder1targettemps.append(value)
+
+ def AddExtruder1TargetTemperature(self, value):
+ self.extruder1targettemps.append(value)
+ if (len(self.extruder1targettemps)-1) * float(self.width)/self.xsteps > self.width:
+ self.extruder1targettemps.pop(0)
+
+
+ def StartPlotting(self, time):
+ self.Refresh()
+ self.timer.Start(time)
+
+ def StopPlotting(self):
+ self.timer.Stop()
+ self.Refresh()
+
+ def draw(self, dc, w, h):
+ dc.Clear()
+ gc = wx.GraphicsContext.Create(dc)
+ self.width = w
+ self.height = h
+ self.drawgrid(dc, gc)
+ self.drawbedtargettemp(dc, gc)
+ self.drawbedtemp(dc, gc)
+ self.drawextruder0targettemp(dc, gc)
+ self.drawextruder0temp(dc, gc)
+ self.drawextruder1targettemp(dc, gc)
+ self.drawextruder1temp(dc, gc)
+
+
diff --git a/gviz.py b/gviz.py
index e2bd119..e919b71 100755
--- a/gviz.py
+++ b/gviz.py
@@ -47,13 +47,21 @@ class window(wx.Frame):
else:
event.Skip()
+
def key(self, event):
x=event.GetKeyCode()
+ if event.ShiftDown():
+ cx,cy=self.p.translate
+ if x==wx.WXK_UP:
+ self.p.zoom(cx,cy,1.2)
+ if x==wx.WXK_DOWN:
+ self.p.zoom(cx,cy,1/1.2)
+ else:
+ if x==wx.WXK_UP:
+ self.p.layerup()
+ if x==wx.WXK_DOWN:
+ self.p.layerdown()
#print x
- if x==wx.WXK_UP:
- self.p.layerup()
- if x==wx.WXK_DOWN:
- self.p.layerdown()
#print p.lines.keys()
def zoom(self, event):
diff --git a/locale/de/LC_MESSAGES/pronterface.mo b/locale/de/LC_MESSAGES/pronterface.mo
index a1a42cd..8caed27 100644
Binary files a/locale/de/LC_MESSAGES/pronterface.mo and b/locale/de/LC_MESSAGES/pronterface.mo differ
diff --git a/locale/de/LC_MESSAGES/pronterface.po b/locale/de/LC_MESSAGES/pronterface.po
index e6c864d..6dc248b 100644
--- a/locale/de/LC_MESSAGES/pronterface.po
+++ b/locale/de/LC_MESSAGES/pronterface.po
@@ -5,77 +5,21 @@
msgid ""
msgstr ""
"Project-Id-Version: Pronterface jm1\n"
-"POT-Creation-Date: 2012-01-19 09:21+CET\n"
+"POT-Creation-Date: 2012-02-26 02:12+CET\n"
"PO-Revision-Date: 2012-01-23 10:01+0100\n"
"Last-Translator: Christian Metzen \n"
"Language-Team: DE \n"
+"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: \n"
"Generated-By: pygettext.py 1.5\n"
-#: pronsole.py:250
-msgid "Communications Speed (default: 115200)"
-msgstr "Kommunikationsgeschwindigkeit (Vorgabe: 115200)"
-
-#: pronsole.py:251
-msgid "Heated Build Platform temp for ABS (default: 110 deg C)"
-msgstr "Heizbett Temp. für ABS (Vorgabe: 110 Grad Celsius)"
-
-#: pronsole.py:252
-msgid "Heated Build Platform temp for PLA (default: 60 deg C)"
-msgstr "Heizbett Temp. für PLA (Vorgabe: 60 Grad Celsius)"
-
-#: pronsole.py:253
-msgid "Feedrate for Control Panel Moves in Extrusions (default: 300mm/min)"
-msgstr "Vorschub Control Panel Bewegungen Extrudierung (Vorgabe: 300mm/min)"
-
-#: pronsole.py:254
-msgid "Port used to communicate with printer"
-msgstr "Port für Druckerkommunikation"
-
-#: pronsole.py:255
-msgid ""
-"Slice command\n"
-" default:\n"
-" python skeinforge/skeinforge_application/skeinforge_utilities/skeinforge_craft.py $s)"
-msgstr ""
-"Kommando Slicing\n"
-" Vorgabe:\n"
-" python skeinforge/skeinforge_application/skeinforge_utilities/skeinforge_craft.py $s)"
-
-#: pronsole.py:256
-msgid ""
-"Slice settings command\n"
-" default:\n"
-" python skeinforge/skeinforge_application/skeinforge.py"
-msgstr ""
-"Kommando Slicing Einstellungen\n"
-" Vorgabe:\n"
-" python skeinforge/skeinforge_application/skeinforge.py"
-
-#: pronsole.py:257
-msgid "Extruder temp for ABS (default: 230 deg C)"
-msgstr "Extruder Temperatur für ABS (Vorgabe: 230 Grad Celsius)"
-
-#: pronsole.py:258
-msgid "Extruder temp for PLA (default: 185 deg C)"
-msgstr "Extruder Temperatur für PLA (Vorgabe: 185 Grad Celsius)"
-
-#: pronsole.py:259
-msgid "Feedrate for Control Panel Moves in X and Y (default: 3000mm/min)"
-msgstr "Vorschub Control Panel Bewegungen X und Y (Vorgabe: 3000mm/min)"
-
-#: pronsole.py:260
-msgid "Feedrate for Control Panel Moves in Z (default: 200mm/min)"
-msgstr "Vorschub Control Panel Bewegungen Z (Vorgabe: 200mm/min)"
-
-#: pronterface.py:15
+#: pronterface.py:30
msgid "WX is not installed. This program requires WX to run."
msgstr "WX ist nicht installiert. Dieses Programm erfordert WX zum Starten."
-#: pronterface.py:66
+#: pronterface.py:81
msgid ""
"Dimensions of Build Platform\n"
" & optional offset of origin\n"
@@ -93,55 +37,55 @@ msgstr ""
" XXX,YYY,ZZZ\n"
" XXXxYYYxZZZ+OffX+OffY+OffZ"
-#: pronterface.py:67
+#: pronterface.py:82
msgid "Last Set Temperature for the Heated Print Bed"
msgstr "Letzte gesetzte Temperatur für das Heizbett"
-#: pronterface.py:68
+#: pronterface.py:83
msgid "Folder of last opened file"
msgstr "Verzeichniss der zuletzt geöffneten Datei"
-#: pronterface.py:69
+#: pronterface.py:84
msgid "Last Temperature of the Hot End"
msgstr "Letzte Hotend Temperatur"
-#: pronterface.py:70
+#: pronterface.py:85
msgid "Width of Extrusion in Preview (default: 0.5)"
msgstr "Vorschaubreite der Extrudierung (Vorgabe: 0.5)"
-#: pronterface.py:71
+#: pronterface.py:86
msgid "Fine Grid Spacing (default: 10)"
msgstr "Feiner Rasterabstand (Vorgabe: 10)"
-#: pronterface.py:72
+#: pronterface.py:87
msgid "Coarse Grid Spacing (default: 50)"
msgstr "Grober Rasterabstand (Vorgabe: 50)"
-#: pronterface.py:73
+#: pronterface.py:88
msgid "Pronterface background color (default: #FFFFFF)"
msgstr "Pronterface Hintergrundfarbe (Vorgabe: #FFFFFF)"
-#: pronterface.py:76
+#: pronterface.py:91
msgid "Printer Interface"
msgstr "Printer Interface"
-#: pronterface.py:93
+#: pronterface.py:108
msgid "Motors off"
msgstr "Motoren aus"
-#: pronterface.py:94
+#: pronterface.py:109
msgid "Check temp"
msgstr "Temperatur prüfen"
-#: pronterface.py:95
+#: pronterface.py:110
msgid "Extrude"
msgstr "Extrudieren"
-#: pronterface.py:96
+#: pronterface.py:111
msgid "Reverse"
msgstr "Rückwärts"
-#: pronterface.py:114
+#: pronterface.py:129
msgid ""
"# I moved all your custom buttons into .pronsolerc.\n"
"# Please don't add them here any more.\n"
@@ -151,552 +95,560 @@ msgstr ""
"# Bitte fügen Sie sie hier nicht mehr ein.\n"
"# Backup Ihrer alten Buttons befindet sich in custombtn.old\n"
-#: pronterface.py:119
-msgid "Note!!! You have specified custom buttons in both custombtn.txt and .pronsolerc"
-msgstr "Achtung! Sie haben benutzerdefinierte Buttons in custombtn.txt und .pronsolerc angegeben"
+#: pronterface.py:134
+msgid ""
+"Note!!! You have specified custom buttons in both custombtn.txt and ."
+"pronsolerc"
+msgstr ""
+"Achtung! Sie haben benutzerdefinierte Buttons in custombtn.txt und ."
+"pronsolerc angegeben"
-#: pronterface.py:120
-msgid "Ignoring custombtn.txt. Remove all current buttons to revert to custombtn.txt"
-msgstr "Ignoriere custombtn.txt. Alle aktuellen Buttons entfernen um wieder zu custombtn.txt zurückzukehren"
+#: pronterface.py:135
+msgid ""
+"Ignoring custombtn.txt. Remove all current buttons to revert to custombtn.txt"
+msgstr ""
+"Ignoriere custombtn.txt. Alle aktuellen Buttons entfernen um wieder zu "
+"custombtn.txt zurückzukehren"
-#: pronterface.py:148
-#: pronterface.py:499
-#: pronterface.py:1319
-#: pronterface.py:1373
-#: pronterface.py:1495
-#: pronterface.py:1529
-#: pronterface.py:1544
+#: pronterface.py:163 pronterface.py:514 pronterface.py:1333
+#: pronterface.py:1387 pronterface.py:1509 pronterface.py:1543
+#: pronterface.py:1558
msgid "Print"
msgstr "Drucken"
-#: pronterface.py:152
+#: pronterface.py:167
msgid "Printer is now online."
msgstr "Drucker ist jetzt Online."
-#: pronterface.py:212
-msgid "Setting hotend temperature to "
-msgstr "Setze Hotend Temperatur auf "
+#: pronterface.py:168
+msgid "Disconnect"
+msgstr "Trennen"
-#: pronterface.py:212
-#: pronterface.py:248
-msgid " degrees Celsius."
-msgstr " Grad Celsius."
+#: pronterface.py:227
+msgid "Setting hotend temperature to %f degrees Celsius."
+msgstr "Setze Hotend Temperatur auf %f Grad Celsius."
-#: pronterface.py:231
-#: pronterface.py:267
-#: pronterface.py:325
+#: pronterface.py:246 pronterface.py:282 pronterface.py:340
msgid "Printer is not online."
msgstr "Drucker ist nicht online."
-#: pronterface.py:233
-msgid "You cannot set negative temperatures. To turn the hotend off entirely, set its temperature to 0."
-msgstr "Sie können keine negativen Temperaturen einstellen. Um das Hotend ganz auszuschalten, Temperatur auf 0 setzen."
-
#: pronterface.py:248
-msgid "Setting bed temperature to "
-msgstr "Setze Heizbett Temperatur auf"
+msgid ""
+"You cannot set negative temperatures. To turn the hotend off entirely, set "
+"its temperature to 0."
+msgstr ""
+"Sie können keine negativen Temperaturen einstellen. Um das Hotend ganz "
+"auszuschalten, Temperatur auf 0 setzen."
-#: pronterface.py:269
-msgid "You cannot set negative temperatures. To turn the bed off entirely, set its temperature to 0."
-msgstr "Sie können keine negativen Temperaturen einstellen. Um das Heizbett ganz auszuschalten, Temperatur auf 0 setzen."
+#: pronterface.py:250
+msgid "You must enter a temperature. (%s)"
+msgstr "Sie müssen eine Temperatur eingeben. (%s)"
-#: pronterface.py:271
+#: pronterface.py:263
+msgid "Setting bed temperature to %f degrees Celsius."
+msgstr "Setze Heizbett Temperatur auf %f Grad Celsius."
+
+#: pronterface.py:284
+msgid ""
+"You cannot set negative temperatures. To turn the bed off entirely, set its "
+"temperature to 0."
+msgstr ""
+"Sie können keine negativen Temperaturen einstellen. Um das Heizbett ganz "
+"auszuschalten, Temperatur auf 0 setzen."
+
+#: pronterface.py:286
msgid "You must enter a temperature."
msgstr "Sie müssen eine Temperatur eingeben."
-#: pronterface.py:286
+#: pronterface.py:301
msgid "Do you want to erase the macro?"
msgstr "Möchten Sie das Makro löschen?"
-#: pronterface.py:290
+#: pronterface.py:305
msgid "Cancelled."
msgstr "Abgebrochen."
-#: pronterface.py:331
+#: pronterface.py:346
msgid " Opens file"
msgstr " Öffnet eine Datei"
-#: pronterface.py:331
+#: pronterface.py:346
msgid "&Open..."
msgstr "&Öffnen..."
-#: pronterface.py:332
+#: pronterface.py:347
msgid " Edit open file"
msgstr " Offene Datei bearbeiten"
-#: pronterface.py:332
+#: pronterface.py:347
msgid "&Edit..."
msgstr "&Bearbeiten..."
-#: pronterface.py:333
+#: pronterface.py:348
msgid " Clear output console"
msgstr " Ausgabe Konsole leeren"
-#: pronterface.py:333
+#: pronterface.py:348
msgid "Clear console"
msgstr "Konsole leeren"
-#: pronterface.py:334
+#: pronterface.py:349
msgid " Project slices"
msgstr " Projekt Slices"
-#: pronterface.py:334
+#: pronterface.py:349
msgid "Projector"
msgstr "Projektor"
-#: pronterface.py:335
+#: pronterface.py:350
msgid " Closes the Window"
msgstr " Schliesst das Fenster"
-#: pronterface.py:335
+#: pronterface.py:350
msgid "E&xit"
msgstr "&Verlassen"
-#: pronterface.py:336
+#: pronterface.py:351
msgid "&File"
msgstr "&Datei"
-#: pronterface.py:341
+#: pronterface.py:356
msgid "&Macros"
msgstr "&Makros"
-#: pronterface.py:342
+#: pronterface.py:357
msgid "<&New...>"
msgstr "<&Neu...>"
-#: pronterface.py:343
+#: pronterface.py:358
msgid " Options dialog"
msgstr " Optionen Dialog"
-#: pronterface.py:343
+#: pronterface.py:358
msgid "&Options"
msgstr "&Optionen"
-#: pronterface.py:345
+#: pronterface.py:360
msgid " Adjust slicing settings"
msgstr " Slicing Einstellungen anpassen"
-#: pronterface.py:345
+#: pronterface.py:360
msgid "Slicing Settings"
msgstr "Slicing Einstellungen"
-#: pronterface.py:352
+#: pronterface.py:367
msgid "&Settings"
msgstr "&Einstellungen"
-#: pronterface.py:368
+#: pronterface.py:383
msgid "Enter macro name"
msgstr "Makro Name eingeben"
-#: pronterface.py:371
+#: pronterface.py:386
msgid "Macro name:"
msgstr "Makro Name:"
-#: pronterface.py:374
+#: pronterface.py:389
msgid "Ok"
msgstr "Ok"
-#: pronterface.py:378
-#: pronterface.py:1330
-#: pronterface.py:1587
+#: pronterface.py:393 pronterface.py:1344 pronterface.py:1601
msgid "Cancel"
msgstr "Abbrechen"
-#: pronterface.py:396
-msgid "' is being used by built-in command"
-msgstr "' wird durch eingebautes Kommando genutzt"
+#: pronterface.py:411
+msgid "Name '%s' is being used by built-in command"
+msgstr "Name '%s' wird durch eingebautes Kommando genutzt"
-#: pronterface.py:396
-msgid "Name '"
-msgstr "Name '"
-
-#: pronterface.py:399
+#: pronterface.py:414
msgid "Macro name may contain only alphanumeric symbols and underscores"
msgstr "Makro Name darf nur alphanumerische Zeichen und Unterstriche enthalten"
-#: pronterface.py:448
+#: pronterface.py:463
msgid "Port"
msgstr "Port:"
-#: pronterface.py:467
+#: pronterface.py:482
msgid "Connect"
msgstr "Verbinden"
-#: pronterface.py:469
+#: pronterface.py:484
msgid "Connect to the printer"
msgstr "Drucker Verbinden"
-#: pronterface.py:471
+#: pronterface.py:486
msgid "Reset"
msgstr "Zurücksetzen"
-#: pronterface.py:474
-#: pronterface.py:751
+#: pronterface.py:489 pronterface.py:766
msgid "Mini mode"
msgstr "Mini-Modus"
-#: pronterface.py:478
+#: pronterface.py:493
msgid "Monitor Printer"
msgstr "Drucker überwachen"
-#: pronterface.py:488
+#: pronterface.py:503
msgid "Load file"
msgstr "Datei laden"
-#: pronterface.py:491
+#: pronterface.py:506
msgid "Compose"
msgstr "Zusammenstellen"
-#: pronterface.py:495
+#: pronterface.py:510
msgid "SD"
msgstr "SD"
-#: pronterface.py:503
-#: pronterface.py:1374
-#: pronterface.py:1419
-#: pronterface.py:1469
-#: pronterface.py:1494
-#: pronterface.py:1528
-#: pronterface.py:1543
+#: pronterface.py:518 pronterface.py:1388 pronterface.py:1433
+#: pronterface.py:1483 pronterface.py:1508 pronterface.py:1542
+#: pronterface.py:1557
msgid "Pause"
msgstr "Pause"
-#: pronterface.py:516
+#: pronterface.py:531
msgid "Send"
msgstr "Senden"
-#: pronterface.py:524
-#: pronterface.py:625
+#: pronterface.py:539 pronterface.py:640
msgid "mm/min"
msgstr "mm/min"
-#: pronterface.py:526
+#: pronterface.py:541
msgid "XY:"
msgstr "XY:"
-#: pronterface.py:528
+#: pronterface.py:543
msgid "Z:"
msgstr "Z:"
-#: pronterface.py:551
-#: pronterface.py:632
+#: pronterface.py:566 pronterface.py:647
msgid "Heater:"
msgstr "Heizelement:"
-#: pronterface.py:554
-#: pronterface.py:574
+#: pronterface.py:569 pronterface.py:589
msgid "Off"
msgstr "Aus"
-#: pronterface.py:566
-#: pronterface.py:586
+#: pronterface.py:581 pronterface.py:601
msgid "Set"
msgstr "Ein"
-#: pronterface.py:571
-#: pronterface.py:634
+#: pronterface.py:586 pronterface.py:649
msgid "Bed:"
msgstr "Heizbett:"
-#: pronterface.py:619
+#: pronterface.py:634
msgid "mm"
msgstr "mm"
-#: pronterface.py:677
-#: pronterface.py:1182
-#: pronterface.py:1413
+#: pronterface.py:692 pronterface.py:1196 pronterface.py:1427
msgid "Not connected to printer."
msgstr "Keine Verbindung zum Drucker."
-#: pronterface.py:706
+#: pronterface.py:721
msgid "SD Upload"
msgstr "SD Laden"
-#: pronterface.py:710
+#: pronterface.py:725
msgid "SD Print"
msgstr "SD Drucken"
-#: pronterface.py:758
+#: pronterface.py:773
msgid "Full mode"
msgstr "Voll-Modus"
-#: pronterface.py:783
+#: pronterface.py:798
msgid "Execute command: "
msgstr "Kommando ausführen:"
-#: pronterface.py:794
+#: pronterface.py:809
msgid "click to add new custom button"
msgstr "Individuellen Button hinzufügen"
-#: pronterface.py:813
-msgid "Defines custom button. Usage: button \"title\" [/c \"colour\"] command"
-msgstr "Definiert einen individuellen Button. Nutzung: button \"title\" [/c \"colour\"] command"
+#: pronterface.py:828
+msgid ""
+"Defines custom button. Usage: button \"title\" [/c \"colour\"] command"
+msgstr ""
+"Definiert einen individuellen Button. Nutzung: button \"title\" [/c "
+"\"colour\"] command"
-#: pronterface.py:835
+#: pronterface.py:850
msgid "Custom button number should be between 0 and 63"
msgstr "Nummer des individuellen Button sollte zwischen 0 und 63 sein."
-#: pronterface.py:927
+#: pronterface.py:942
msgid "Edit custom button '%s'"
msgstr "Individuellen Button '%s' bearbeiten"
-#: pronterface.py:929
+#: pronterface.py:944
msgid "Move left <<"
msgstr "Links bewegen <<"
-#: pronterface.py:932
+#: pronterface.py:947
msgid "Move right >>"
msgstr "Rechts bewegen >>"
-#: pronterface.py:936
+#: pronterface.py:951
msgid "Remove custom button '%s'"
msgstr "Individuellen Button '%s' entfernen"
-#: pronterface.py:939
+#: pronterface.py:954
msgid "Add custom button"
msgstr "Individuellen Button hinzufuegen"
-#: pronterface.py:1084
+#: pronterface.py:1099
msgid "event object missing"
msgstr "Ereigniss Objekt fehlt"
-#: pronterface.py:1112
+#: pronterface.py:1127
msgid "Invalid period given."
msgstr "Ungültiger Abschnitt angegeben."
-#: pronterface.py:1115
+#: pronterface.py:1130
msgid "Monitoring printer."
msgstr "Überwache Drucker."
-#: pronterface.py:1117
+#: pronterface.py:1132
msgid "Done monitoring."
msgstr "Überwachung abgeschlossen."
-#: pronterface.py:1139
+#: pronterface.py:1154
msgid "Printer is online. "
-msgstr "Drucker ist online."
+msgstr "Drucker ist online. "
-#: pronterface.py:1141
-#: pronterface.py:1317
-#: pronterface.py:1372
+#: pronterface.py:1156 pronterface.py:1331
msgid "Loaded "
-msgstr "Geladen"
+msgstr "Geladen "
-#: pronterface.py:1144
+#: pronterface.py:1159
msgid "Bed"
msgstr "Heizbett"
-#: pronterface.py:1144
+#: pronterface.py:1159
msgid "Hotend"
msgstr "Hotend"
-#: pronterface.py:1154
+#: pronterface.py:1169
msgid " SD printing:%04.2f %%"
msgstr "SD Drucken:%04.2f %%"
-#: pronterface.py:1157
+#: pronterface.py:1172
msgid " Printing:%04.2f %% |"
msgstr " Drucken:%04.2f %% |"
-#: pronterface.py:1158
-msgid " Line# "
-msgstr "Zeile#"
+#: pronterface.py:1173
+msgid " Line# %d of %d lines |"
+msgstr " Zeile# %d von %d Zeilen |"
-#: pronterface.py:1158
-msgid " lines |"
-msgstr " Zeilen |"
+#: pronterface.py:1178
+msgid " Est: %s of %s remaining | "
+msgstr " Erw: %s von %s verbleibend | "
-#: pronterface.py:1158
-msgid "of "
-msgstr "von"
-
-#: pronterface.py:1163
-msgid " Est: "
-msgstr " Erw:"
-
-#: pronterface.py:1164
-msgid " of: "
-msgstr " von: "
-
-#: pronterface.py:1165
-msgid " Remaining | "
-msgstr " Verbleibend | "
-
-#: pronterface.py:1166
+#: pronterface.py:1180
msgid " Z: %0.2f mm"
msgstr " Z: %0.2f mm"
-#: pronterface.py:1233
+#: pronterface.py:1247
msgid "Opening file failed."
msgstr "Datei öffnen fehlgeschlagen."
-#: pronterface.py:1239
+#: pronterface.py:1253
msgid "Starting print"
msgstr "Starte Druck"
-#: pronterface.py:1262
+#: pronterface.py:1276
msgid "Pick SD file"
msgstr "Wähle SD Datei"
-#: pronterface.py:1262
+#: pronterface.py:1276
msgid "Select the file to print"
msgstr "Wähle Druckdatei"
-#: pronterface.py:1297
+#: pronterface.py:1311
msgid "Failed to execute slicing software: "
msgstr "Fehler beim Ausführen der Slicing Software:"
-#: pronterface.py:1304
+#: pronterface.py:1318
msgid "Slicing..."
msgstr "Slicing..."
-#: pronterface.py:1317
-#: pronterface.py:1372
+#: pronterface.py:1331
msgid ", %d lines"
msgstr ", %d Zeilen"
-#: pronterface.py:1324
+#: pronterface.py:1338
msgid "Load File"
msgstr "Datei laden"
-#: pronterface.py:1331
+#: pronterface.py:1345
msgid "Slicing "
msgstr "Slicing"
-#: pronterface.py:1350
+#: pronterface.py:1364
msgid "Open file to print"
msgstr "Öffne zu druckende Datei"
-#: pronterface.py:1351
+#: pronterface.py:1365
msgid "OBJ, STL, and GCODE files (;*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ;)"
-msgstr "OBJ,STL und GCODE Dateien (;*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ;)"
+msgstr ""
+"OBJ,STL und GCODE Dateien (;*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ;)"
-#: pronterface.py:1358
+#: pronterface.py:1372
msgid "File not found!"
msgstr "Datei nicht gefunden!"
-#: pronterface.py:1382
+#: pronterface.py:1386
+msgid "Loaded %s, %d lines"
+msgstr "Geladen %s, %d Zeilen"
+
+#: pronterface.py:1396
msgid "mm of filament used in this print\n"
msgstr "mm Filament in Druck genutzt\n"
-#: pronterface.py:1383
+#: pronterface.py:1397
msgid ""
-"mm in X\n"
-"and is"
+"the print goes from %f mm to %f mm in X\n"
+"and is %f mm wide\n"
msgstr ""
-"mm in X\n"
-"und ist"
+"Der Druck verläuft von %f mm bis %f mm in X\n"
+"und ist %f mm breit\n"
-#: pronterface.py:1383
-#: pronterface.py:1384
-msgid "mm wide\n"
-msgstr "mm breit\n"
-
-#: pronterface.py:1383
-#: pronterface.py:1384
-#: pronterface.py:1385
-msgid "mm to"
-msgstr "mm bis"
-
-#: pronterface.py:1383
-#: pronterface.py:1384
-#: pronterface.py:1385
-msgid "the print goes from"
-msgstr "Der Druck verläuft von"
-
-#: pronterface.py:1384
+#: pronterface.py:1398
msgid ""
-"mm in Y\n"
-"and is"
+"the print goes from %f mm to %f mm in Y\n"
+"and is %f mm wide\n"
msgstr ""
-"mm in Y\n"
-"und ist"
+"Der Druck verläuft von %f mm bis %f mm in Y\n"
+"und ist %f mm breit\n"
-#: pronterface.py:1385
-msgid "mm high\n"
-msgstr "mm hoch\n"
-
-#: pronterface.py:1385
+#: pronterface.py:1399
msgid ""
-"mm in Z\n"
-"and is"
+"the print goes from %f mm to %f mm in Z\n"
+"and is %f mm high\n"
msgstr ""
-"mm in Z\n"
-"und ist"
+"Der Druck verläuft von %f mm bis %f mm in Z\n"
+"und ist %f mm hoch\n"
-#: pronterface.py:1386
+#: pronterface.py:1400
msgid "Estimated duration (pessimistic): "
-msgstr "Geschätze Dauer (pessimistisch):"
+msgstr "Geschätze Dauer (pessimistisch): "
-#: pronterface.py:1410
+#: pronterface.py:1424
msgid "No file loaded. Please use load first."
msgstr "Keine Datei geladen. Benutze zuerst laden."
-#: pronterface.py:1421
+#: pronterface.py:1435
msgid "Restart"
msgstr "Neustart"
-#: pronterface.py:1425
+#: pronterface.py:1439
msgid "File upload complete"
msgstr "Datei Upload komplett"
-#: pronterface.py:1444
+#: pronterface.py:1458
msgid "Pick SD filename"
msgstr "Wähle SD Dateiname"
-#: pronterface.py:1452
+#: pronterface.py:1466
msgid "Paused."
msgstr "Pausiert."
-#: pronterface.py:1462
+#: pronterface.py:1476
msgid "Resume"
msgstr "Fortsetzen"
-#: pronterface.py:1478
+#: pronterface.py:1492
msgid "Connecting..."
msgstr "Verbinde..."
-#: pronterface.py:1509
+#: pronterface.py:1523
msgid "Disconnected."
msgstr "Getrennt."
-#: pronterface.py:1536
+#: pronterface.py:1550
msgid "Reset."
msgstr "Zurücksetzen."
-#: pronterface.py:1537
+#: pronterface.py:1551
msgid "Are you sure you want to reset the printer?"
msgstr "Möchten Sie den Drucker wirklich zurücksetzen?"
-#: pronterface.py:1537
+#: pronterface.py:1551
msgid "Reset?"
msgstr "Zurücksetzen?"
-#: pronterface.py:1583
+#: pronterface.py:1597
msgid "Save"
msgstr "Speichern"
-#: pronterface.py:1639
+#: pronterface.py:1653
msgid "Edit settings"
msgstr "Einstellungen bearbeiten"
-#: pronterface.py:1641
+#: pronterface.py:1655
msgid "Defaults"
msgstr "Standardwerte"
-#: pronterface.py:1670
+#: pronterface.py:1684
msgid "Custom button"
msgstr "Individueller Button"
-#: pronterface.py:1675
+#: pronterface.py:1689
msgid "Button title"
msgstr "Button Titel"
-#: pronterface.py:1678
+#: pronterface.py:1692
msgid "Command"
msgstr "Kommando"
-#: pronterface.py:1687
+#: pronterface.py:1701
msgid "Color"
msgstr "Farbe"
+#~ msgid "Communications Speed (default: 115200)"
+#~ msgstr "Kommunikationsgeschwindigkeit (Vorgabe: 115200)"
+
+#~ msgid "Heated Build Platform temp for ABS (default: 110 deg C)"
+#~ msgstr "Heizbett Temp. für ABS (Vorgabe: 110 Grad Celsius)"
+
+#~ msgid "Heated Build Platform temp for PLA (default: 60 deg C)"
+#~ msgstr "Heizbett Temp. für PLA (Vorgabe: 60 Grad Celsius)"
+
+#~ msgid "Feedrate for Control Panel Moves in Extrusions (default: 300mm/min)"
+#~ msgstr "Vorschub Control Panel Bewegungen Extrudierung (Vorgabe: 300mm/min)"
+
+#~ msgid "Port used to communicate with printer"
+#~ msgstr "Port für Druckerkommunikation"
+
+#~ msgid ""
+#~ "Slice command\n"
+#~ " default:\n"
+#~ " python skeinforge/skeinforge_application/skeinforge_utilities/"
+#~ "skeinforge_craft.py $s)"
+#~ msgstr ""
+#~ "Kommando Slicing\n"
+#~ " Vorgabe:\n"
+#~ " python skeinforge/skeinforge_application/skeinforge_utilities/"
+#~ "skeinforge_craft.py $s)"
+
+#~ msgid ""
+#~ "Slice settings command\n"
+#~ " default:\n"
+#~ " python skeinforge/skeinforge_application/skeinforge.py"
+#~ msgstr ""
+#~ "Kommando Slicing Einstellungen\n"
+#~ " Vorgabe:\n"
+#~ " python skeinforge/skeinforge_application/skeinforge.py"
+
+#~ msgid "Extruder temp for ABS (default: 230 deg C)"
+#~ msgstr "Extruder Temperatur für ABS (Vorgabe: 230 Grad Celsius)"
+
+#~ msgid "Extruder temp for PLA (default: 185 deg C)"
+#~ msgstr "Extruder Temperatur für PLA (Vorgabe: 185 Grad Celsius)"
+
+#~ msgid "Feedrate for Control Panel Moves in X and Y (default: 3000mm/min)"
+#~ msgstr "Vorschub Control Panel Bewegungen X und Y (Vorgabe: 3000mm/min)"
+
+#~ msgid "Feedrate for Control Panel Moves in Z (default: 200mm/min)"
+#~ msgstr "Vorschub Control Panel Bewegungen Z (Vorgabe: 200mm/min)"
diff --git a/locale/fr/LC_MESSAGES/fr.po b/locale/fr/LC_MESSAGES/fr.po
deleted file mode 100755
index 14926e7..0000000
--- a/locale/fr/LC_MESSAGES/fr.po
+++ /dev/null
@@ -1,572 +0,0 @@
-# Pronterface Message Catalog Template
-# Copyright (C) 2011 Jonathan Marsden
-# Jonathan Marsden , 2011.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Pronterface jm1\n"
-"POT-Creation-Date: 2011-08-06 13:27+PDT\n"
-"PO-Revision-Date: 2011-11-16 16:53+0100\n"
-"Last-Translator: Cyril Laguilhon-Debat \n"
-"Language-Team: FR \n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: pygettext.py 1.5\n"
-
-#: pronterface.py:15
-msgid "WX is not installed. This program requires WX to run."
-msgstr "wxWidgets n'est pas installé. Ce programme nécessite la librairie wxWidgets pour fonctionner."
-
-#: pronterface.py:67
-msgid "Printer Interface"
-msgstr "Interface imprimante"
-
-#: pronterface.py:80
-msgid "Motors off"
-msgstr "Arrêter les moteurs"
-
-#: pronterface.py:81
-msgid "Check temp"
-msgstr "Lire les températures"
-
-#: pronterface.py:82
-msgid "Extrude"
-msgstr "Extruder"
-
-#: pronterface.py:83
-msgid "Reverse"
-msgstr "Inverser"
-
-#: pronterface.py:99
-msgid ""
-"# I moved all your custom buttons into .pronsolerc.\n"
-"# Please don't add them here any more.\n"
-"# Backup of your old buttons is in custombtn.old\n"
-msgstr ""
-"# I moved all your custom buttons into .pronsolerc.\n"
-"# Please don't add them here any more.\n"
-"# Backup of your old buttons is in custombtn.old\n"
-
-#: pronterface.py:104
-msgid "Note!!! You have specified custom buttons in both custombtn.txt and .pronsolerc"
-msgstr "Remarque! Vous avez spécifié des boutons personnalisés dans custombtn.txt et aussi dans .pronsolerc"
-
-#: pronterface.py:105
-msgid "Ignoring custombtn.txt. Remove all current buttons to revert to custombtn.txt"
-msgstr "Ignorant custombtn.txt. Retirez tous les boutons en cours pour revenir à custombtn.txt"
-
-#: pronterface.py:130
-#: pronterface.py:476
-#: pronterface.py:1228
-#: pronterface.py:1279
-#: pronterface.py:1396
-#: pronterface.py:1428
-#: pronterface.py:1443
-msgid "Print"
-msgstr "Imprimer"
-
-#: pronterface.py:134
-msgid "Printer is now online."
-msgstr "L'imprimante est connectée"
-
-#: pronterface.py:188
-msgid "Setting hotend temperature to "
-msgstr "Réglage de la température de la buse à"
-
-#: pronterface.py:188
-#: pronterface.py:224
-msgid " degrees Celsius."
-msgstr " degrés Celsius."
-
-#: pronterface.py:207
-#: pronterface.py:242
-msgid "Printer is not online."
-msgstr "L'imprimante est déconnectée"
-
-#: pronterface.py:209
-msgid "You cannot set negative temperatures. To turn the hotend off entirely, set its temperature to 0."
-msgstr "Vous ne pouvez pas régler une température négative.Pour éteindre le chauffage de la buse, réglez sa température à 0°c."
-
-#: pronterface.py:224
-msgid "Setting bed temperature to "
-msgstr "Réglage de la température du plateau à "
-
-#: pronterface.py:244
-msgid "You cannot set negative temperatures. To turn the bed off entirely, set its temperature to 0."
-msgstr "Vous ne pouvez pas régler une température négative. Pour désactiver votre plateau chauffant, réglez sa température à 0°c."
-
-#: pronterface.py:246
-msgid "You must enter a temperature."
-msgstr "Vous devez saisir une température."
-
-#: pronterface.py:261
-msgid "Do you want to erase the macro?"
-msgstr "Voulez-vous effacer la macro ?"
-
-#: pronterface.py:265
-msgid "Cancelled."
-msgstr "Annulé"
-
-#: pronterface.py:295
-msgid " Opens file"
-msgstr " Ouvrir un fichier"
-
-#: pronterface.py:295
-msgid "&Open..."
-msgstr "&Ouvrir..."
-
-#: pronterface.py:296
-msgid " Edit open file"
-msgstr " Éditer le fichier ouvert"
-
-#: pronterface.py:296
-msgid "&Edit..."
-msgstr "&Éditer..."
-
-#: pronterface.py:297
-msgid " Clear output console"
-msgstr "Effacer le contenu de la console de sortie"
-
-#: pronterface.py:297
-msgid "Clear console"
-msgstr "Effacer la console"
-
-#: pronterface.py:298
-msgid " Closes the Window"
-msgstr " Quitter le programme"
-
-#: pronterface.py:298
-msgid "E&xit"
-msgstr "&Quitter"
-
-#: pronterface.py:299
-msgid "&File"
-msgstr "&Fichier"
-
-#: pronterface.py:304
-msgid "&Macros"
-msgstr "&Macros"
-
-#: pronterface.py:305
-msgid "<&New...>"
-msgstr "<&Nouvelle...>"
-
-#: pronterface.py:306
-msgid " Options dialog"
-msgstr " Fenêtre des options"
-
-#: pronterface.py:306
-msgid "&Options"
-msgstr "&Options"
-
-#: pronterface.py:308
-msgid " Adjust SFACT settings"
-msgstr " Régler les paramètres SFACT"
-
-#: pronterface.py:308
-msgid "SFACT Settings"
-msgstr "Paramètres &SFACT..."
-
-#: pronterface.py:311
-msgid " Quickly adjust SFACT settings for active profile"
-msgstr " Réglages rapides des paramètres SFACT pour le profil actif."
-
-#: pronterface.py:311
-msgid "SFACT Quick Settings"
-msgstr "Réglages rapides SFACT"
-
-#: pronterface.py:315
-msgid "&Settings"
-msgstr "&Paramètres"
-
-#: pronterface.py:331
-msgid "Enter macro name"
-msgstr "Saisissez le nom de la macro"
-
-#: pronterface.py:334
-msgid "Macro name:"
-msgstr "Nom :"
-
-#: pronterface.py:337
-msgid "Ok"
-msgstr "Valider"
-
-#: pronterface.py:341
-#: pronterface.py:1465
-msgid "Cancel"
-msgstr "Annuler"
-
-#: pronterface.py:359
-msgid "' is being used by built-in command"
-msgstr "' est utilisé par des commandes internes."
-
-#: pronterface.py:359
-msgid "Name '"
-msgstr "Le nom '"
-
-#: pronterface.py:362
-msgid "Macro name may contain only alphanumeric symbols and underscores"
-msgstr "Un nom de macro ne peut contenir que des caractères alphanumérique et des underscore (_)"
-
-#: pronterface.py:411
-msgid "Port"
-msgstr "Port :"
-
-#: pronterface.py:430
-msgid "Connect"
-msgstr "Connecter"
-
-#: pronterface.py:432
-msgid "Connect to the printer"
-msgstr "Connecter l'imprimante"
-
-#: pronterface.py:434
-msgid "Disconnect"
-msgstr "Déconnecter"
-
-#: pronterface.py:438
-msgid "Reset"
-msgstr "Réinitialiser"
-
-#: pronterface.py:441
-#: pronterface.py:687
-msgid "Mini mode"
-msgstr "Mode réduit"
-
-#: pronterface.py:455
-msgid ""
-"Monitor\n"
-"printer"
-msgstr ""
-"Surveiller\n"
-"l'imprimante"
-
-#: pronterface.py:465
-msgid "Load file"
-msgstr "Charger un fichier"
-
-#: pronterface.py:468
-msgid "SD Upload"
-msgstr "Copier sur SD"
-
-#: pronterface.py:472
-msgid "SD Print"
-msgstr "Imprimer depuis SD"
-
-#: pronterface.py:480
-#: pronterface.py:1280
-#: pronterface.py:1321
-#: pronterface.py:1370
-#: pronterface.py:1395
-#: pronterface.py:1427
-#: pronterface.py:1442
-msgid "Pause"
-msgstr "Pause"
-
-#: pronterface.py:494
-msgid "Send"
-msgstr "Envoyer"
-
-#: pronterface.py:502
-#: pronterface.py:603
-msgid "mm/min"
-msgstr "mm/min"
-
-#: pronterface.py:504
-msgid "XY:"
-msgstr "XY:"
-
-#: pronterface.py:506
-msgid "Z:"
-msgstr "Z:"
-
-#: pronterface.py:529
-msgid "Heater:"
-msgstr "Buse :"
-
-#: pronterface.py:532
-#: pronterface.py:552
-msgid "Off"
-msgstr "Off"
-
-#: pronterface.py:544
-#: pronterface.py:564
-msgid "Set"
-msgstr "Régler"
-
-#: pronterface.py:549
-msgid "Bed:"
-msgstr "Plateau :"
-
-#: pronterface.py:597
-msgid "mm"
-msgstr "mm"
-
-#: pronterface.py:636
-#: pronterface.py:1099
-#: pronterface.py:1315
-msgid "Not connected to printer."
-msgstr "Imprimante non connectée"
-
-#: pronterface.py:694
-msgid "Full mode"
-msgstr "Mode complet"
-
-#: pronterface.py:719
-msgid "Execute command: "
-msgstr "Exécuter la commande :"
-
-#: pronterface.py:730
-msgid "click to add new custom button"
-msgstr "Ajouter un bouton personnalisé"
-
-#: pronterface.py:751
-msgid "Defines custom button. Usage: button \"title\" [/c \"colour\"] command"
-msgstr "Définit des boutons personnalidés. Utilisation : \"Libelle\" [/c \"couleur\"] commande"
-
-#: pronterface.py:773
-msgid "Custom button number should be between 0 and 63"
-msgstr "Les numéros des boutons personnalisés doivent être compris entre 0 et 63."
-
-#: pronterface.py:865
-msgid "Edit custom button '%s'"
-msgstr "Editer le bouton personnalisé n°'%s'"
-
-#: pronterface.py:867
-msgid "Move left <<"
-msgstr "Déplacer vers la gauche <<"
-
-#: pronterface.py:870
-msgid "Move right >>"
-msgstr "Déplacer vers la droite >>"
-
-#: pronterface.py:874
-msgid "Remove custom button '%s'"
-msgstr "Supprimer le bouton personnalisé n°'%s'"
-
-#: pronterface.py:877
-msgid "Add custom button"
-msgstr "Ajouter un bouton personnalisé"
-
-#: pronterface.py:1022
-msgid "event object missing"
-msgstr "evennement d'objet manquant"
-
-#: pronterface.py:1050
-msgid "Invalid period given."
-msgstr "La période donnée est invalide"
-
-#: pronterface.py:1053
-msgid "Monitoring printer."
-msgstr "Surveillance de l'imprimante"
-
-#: pronterface.py:1055
-msgid "Done monitoring."
-msgstr "Surveillance de l'imprimante effectuée."
-
-#: pronterface.py:1077
-msgid "Printer is online. "
-msgstr "L'imprimante est connectée"
-
-#: pronterface.py:1079
-#: pronterface.py:1226
-#: pronterface.py:1278
-msgid "Loaded "
-msgstr "Chargé "
-
-#: pronterface.py:1082
-msgid "Bed"
-msgstr "Plateau"
-
-#: pronterface.py:1082
-msgid "Hotend"
-msgstr "Buse"
-
-#: pronterface.py:1089
-msgid " SD printing:%04.2f %%"
-msgstr "Impression SD : %04.2f %%"
-
-#: pronterface.py:1091
-msgid " Printing:%04.2f %%"
-msgstr "Impression : %04.2f %%"
-
-#: pronterface.py:1149
-msgid "Opening file failed."
-msgstr "L'ouverture du fichier a échoué"
-
-#: pronterface.py:1155
-msgid "Starting print"
-msgstr "Début de l'impression..."
-
-#: pronterface.py:1178
-msgid "Pick SD file"
-msgstr "Choisir un fichier sur la carte SD"
-
-#: pronterface.py:1178
-msgid "Select the file to print"
-msgstr "Sélectionnez le fichier à imprimer :"
-
-#: pronterface.py:1206
-msgid "Skeinforge execution failed."
-msgstr "Exécution de Skeinforge échoué"
-
-#: pronterface.py:1213
-msgid "Skeining..."
-msgstr "Skeining..."
-
-#: pronterface.py:1226
-#: pronterface.py:1278
-msgid ", %d lines"
-msgstr ", %d lignes"
-
-#: pronterface.py:1235
-msgid "Skeining "
-msgstr "Skeining "
-
-#: pronterface.py:1237
-msgid ""
-"Skeinforge not found. \n"
-"Please copy Skeinforge into a directory named \"skeinforge\" in the same directory as this file."
-msgstr ""
-"Skeinforge non trouvé. \n"
-"Veuillez copier Skeinforge dans un répertoire nommé \"skeinforge\" placé dans le repertoire du programme."
-
-#: pronterface.py:1256
-msgid "Open file to print"
-msgstr "Ouvrir un fichier à imprimer"
-
-#: pronterface.py:1257
-msgid "OBJ, STL, and GCODE files (;*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ;)"
-msgstr "Fichiers OBJ, STL et GCODE (;*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ;)"
-
-#: pronterface.py:1264
-msgid "File not found!"
-msgstr "Fichier non trouvé"
-
-#: pronterface.py:1288
-msgid "mm of filament used in this print\n"
-msgstr "mm de filament utilisés pour cette impression\n"
-
-#: pronterface.py:1289
-msgid ""
-"mm in X\n"
-"and is"
-msgstr ""
-"mm en X\n"
-"et mesure"
-
-#: pronterface.py:1289
-#: pronterface.py:1290
-msgid "mm wide\n"
-msgstr "mm de large\n"
-
-#: pronterface.py:1289
-#: pronterface.py:1290
-#: pronterface.py:1291
-msgid "mm to"
-msgstr "mm à"
-
-#: pronterface.py:1289
-#: pronterface.py:1290
-#: pronterface.py:1291
-msgid "the print goes from"
-msgstr "L'impression va de"
-
-#: pronterface.py:1290
-msgid ""
-"mm in Y\n"
-"and is"
-msgstr ""
-"mm en Y\n"
-"et mesure"
-
-#: pronterface.py:1291
-msgid "mm high\n"
-msgstr "mm de haut\n"
-
-#: pronterface.py:1291
-msgid ""
-"mm in Z\n"
-"and is"
-msgstr ""
-"mm en Z\n"
-"et mesure"
-
-#: pronterface.py:1292
-msgid "Estimated duration (pessimistic): "
-msgstr "Durée estimée (pessimiste)"
-
-#: pronterface.py:1312
-msgid "No file loaded. Please use load first."
-msgstr "Aucun fichier chargé. Veuillez charger un fichier avant."
-
-#: pronterface.py:1323
-msgid "Restart"
-msgstr "Recommencer"
-
-#: pronterface.py:1327
-msgid "File upload complete"
-msgstr "Envoi du fichier terminé"
-
-#: pronterface.py:1346
-msgid "Pick SD filename"
-msgstr "Lister les fichiers sur la carte SD"
-
-#: pronterface.py:1353
-msgid "Paused."
-msgstr "En pause"
-
-#: pronterface.py:1363
-msgid "Resume"
-msgstr "Reprendre"
-
-#: pronterface.py:1379
-msgid "Connecting..."
-msgstr "Connection en cours..."
-
-#: pronterface.py:1410
-msgid "Disconnected."
-msgstr "Déconnecté"
-
-#: pronterface.py:1435
-msgid "Reset."
-msgstr "Réinitialiser"
-
-#: pronterface.py:1436
-msgid "Are you sure you want to reset the printer?"
-msgstr "Etes-vous sûr de vouloir réinitialiser l'imprimante?"
-
-#: pronterface.py:1436
-msgid "Reset?"
-msgstr "Réinitialiser ?"
-
-#: pronterface.py:1461
-msgid "Save"
-msgstr "Enregistrer"
-
-#: pronterface.py:1519
-msgid "Edit settings"
-msgstr "Modifier les paramètres"
-
-#: pronterface.py:1521
-msgid "Defaults"
-msgstr "Paramètres par défaut"
-
-#: pronterface.py:1543
-msgid "Custom button"
-msgstr "Commande personnalisée"
-
-#: pronterface.py:1551
-msgid "Button title"
-msgstr "Titre du bouton"
-
-#: pronterface.py:1554
-msgid "Command"
-msgstr "Commande"
-
-#: pronterface.py:1563
-msgid "Color"
-msgstr "Couleur"
-
diff --git a/locale/fr/LC_MESSAGES/plater.mo b/locale/fr/LC_MESSAGES/plater.mo
new file mode 100644
index 0000000..d3690d4
Binary files /dev/null and b/locale/fr/LC_MESSAGES/plater.mo differ
diff --git a/locale/fr/LC_MESSAGES/plater.po b/locale/fr/LC_MESSAGES/plater.po
new file mode 100644
index 0000000..9113445
--- /dev/null
+++ b/locale/fr/LC_MESSAGES/plater.po
@@ -0,0 +1,95 @@
+# French Plater Message Catalog
+# Copyright (C) 2012 Guillaume Seguin
+# Guillaume Seguin , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Plater\n"
+"POT-Creation-Date: 2012-02-26 02:40+CET\n"
+"PO-Revision-Date: 2012-02-26 02:41+0100\n"
+"Last-Translator: Guillaume Seguin \n"
+"Language-Team: FR \n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: pygettext.py 1.5\n"
+
+#: plater.py:247
+msgid "Plate building tool"
+msgstr "Outil d'assemblage de plateau"
+
+#: plater.py:253
+msgid "Clear"
+msgstr "Vider"
+
+#: plater.py:254
+msgid "Load"
+msgstr "Charger"
+
+#: plater.py:256
+msgid "Export"
+msgstr "Exporter"
+
+#: plater.py:259
+msgid "Done"
+msgstr "Terminé"
+
+#: plater.py:261
+msgid "Cancel"
+msgstr "Annuler"
+
+#: plater.py:263
+msgid "Snap to Z = 0"
+msgstr "Poser en Z = 0"
+
+#: plater.py:264
+msgid "Put at 100, 100"
+msgstr "Placer en 100, 100"
+
+#: plater.py:265
+msgid "Delete"
+msgstr "Supprimer"
+
+#: plater.py:266
+msgid "Auto"
+msgstr "Auto"
+
+#: plater.py:290
+msgid "Autoplating"
+msgstr "Placement auto"
+
+#: plater.py:318
+msgid "Bed full, sorry sir :("
+msgstr "Le lit est plein, désolé :("
+
+#: plater.py:328
+msgid ""
+"Are you sure you want to clear the grid? All unsaved changes will be lost."
+msgstr ""
+"Êtes vous sur de vouloir vider la grille ? Toutes les modifications non "
+"enregistrées seront perdues."
+
+#: plater.py:328
+msgid "Clear the grid?"
+msgstr "Vider la grille ?"
+
+#: plater.py:370
+msgid "Pick file to save to"
+msgstr "Choisir le fichier dans lequel enregistrer"
+
+#: plater.py:371
+msgid "STL files (;*.stl;*.STL;)"
+msgstr "Fichiers STL (;*.stl;*.STL;)"
+
+#: plater.py:391
+msgid "wrote %s"
+msgstr "%s écrit"
+
+#: plater.py:394
+msgid "Pick file to load"
+msgstr "Choisir le fichier à charger"
+
+#: plater.py:395
+msgid "STL files (;*.stl;*.STL;)|*.stl|OpenSCAD files (;*.scad;)|*.scad"
+msgstr "Fichiers STL (;*.stl;*.STL;)|*.stl|Fichiers OpenSCAD (;*.scad;)|*.scad"
diff --git a/locale/fr/LC_MESSAGES/pronterface.mo b/locale/fr/LC_MESSAGES/pronterface.mo
index ffc7689..27908bd 100644
Binary files a/locale/fr/LC_MESSAGES/pronterface.mo and b/locale/fr/LC_MESSAGES/pronterface.mo differ
diff --git a/locale/fr/LC_MESSAGES/pronterface.po b/locale/fr/LC_MESSAGES/pronterface.po
new file mode 100644
index 0000000..cccef81
--- /dev/null
+++ b/locale/fr/LC_MESSAGES/pronterface.po
@@ -0,0 +1,609 @@
+# Pronterface Message Catalog Template
+# Copyright (C) 2011 Jonathan Marsden
+# Jonathan Marsden , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Pronterface jm1\n"
+"POT-Creation-Date: 2012-03-16 03:48+CET\n"
+"PO-Revision-Date: 2012-03-16 03:50+0100\n"
+"Last-Translator: Guillaume Seguin \n"
+"Language-Team: FR \n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: pygettext.py 1.5\n"
+
+#: pronterface.py:30
+msgid "WX is not installed. This program requires WX to run."
+msgstr ""
+"wxWidgets n'est pas installé. Ce programme nécessite la librairie wxWidgets "
+"pour fonctionner."
+
+#: pronterface.py:81
+msgid ""
+"Dimensions of Build Platform\n"
+" & optional offset of origin\n"
+"\n"
+"Examples:\n"
+" XXXxYYY\n"
+" XXX,YYY,ZZZ\n"
+" XXXxYYYxZZZ+OffX+OffY+OffZ"
+msgstr ""
+
+#: pronterface.py:82
+msgid "Last Set Temperature for the Heated Print Bed"
+msgstr "Dernière température du plateau chauffant définie"
+
+#: pronterface.py:83
+msgid "Folder of last opened file"
+msgstr "Dossier du dernier fichier ouvert"
+
+#: pronterface.py:84
+msgid "Last Temperature of the Hot End"
+msgstr "Dernière température de la buse définie"
+
+#: pronterface.py:85
+msgid "Width of Extrusion in Preview (default: 0.5)"
+msgstr "Largeur de l'extrusion dans la prévisualisation (défaut : 0.5)"
+
+#: pronterface.py:86
+msgid "Fine Grid Spacing (default: 10)"
+msgstr "Espacement fin de la grille (défaut : 10)"
+
+#: pronterface.py:87
+msgid "Coarse Grid Spacing (default: 50)"
+msgstr "Espacement large de la grille (défaut : 50)"
+
+#: pronterface.py:88
+msgid "Pronterface background color (default: #FFFFFF)"
+msgstr "Couleur de fond de la Pronterface (défaut : #FFFFFF)"
+
+#: pronterface.py:91
+msgid "Printer Interface"
+msgstr "Interface de l'imprimante"
+
+#: pronterface.py:109
+msgid "Motors off"
+msgstr "Arrêter les moteurs"
+
+#: pronterface.py:110
+msgid "Check temp"
+msgstr "Lire les températures"
+
+#: pronterface.py:111
+msgid "Extrude"
+msgstr "Extruder"
+
+#: pronterface.py:112
+msgid "Reverse"
+msgstr "Inverser"
+
+#: pronterface.py:130
+msgid ""
+"# I moved all your custom buttons into .pronsolerc.\n"
+"# Please don't add them here any more.\n"
+"# Backup of your old buttons is in custombtn.old\n"
+msgstr ""
+"# Tous vos boutons personalisés ont été déplacés dans le fichier ."
+"pronsolerc.\n"
+"# Veuillez ne plus en ajouter ici.\n"
+"# Une sauvegarde de vos anciens boutons est dans le fichier custombtn.old\n"
+
+#: pronterface.py:135
+msgid ""
+"Note!!! You have specified custom buttons in both custombtn.txt and ."
+"pronsolerc"
+msgstr ""
+"Remarque! Vous avez spécifié des boutons personnalisés dans custombtn.txt et "
+"aussi dans .pronsolerc"
+
+#: pronterface.py:136
+msgid ""
+"Ignoring custombtn.txt. Remove all current buttons to revert to custombtn.txt"
+msgstr ""
+"custombtn.txt ignoré. Retirez tous les boutons en cours pour revenir à "
+"custombtn.txt"
+
+#: pronterface.py:165 pronterface.py:520 pronterface.py:1343
+#: pronterface.py:1397 pronterface.py:1521 pronterface.py:1555
+#: pronterface.py:1567
+msgid "Print"
+msgstr "Imprimer"
+
+#: pronterface.py:169
+msgid "Printer is now online."
+msgstr "L'imprimante est connectée"
+
+#: pronterface.py:170
+msgid "Disconnect"
+msgstr "Déconnecter"
+
+#: pronterface.py:229
+msgid "Setting hotend temperature to %f degrees Celsius."
+msgstr "Réglage de la température de la buse à %f degrés Celsius."
+
+#: pronterface.py:248 pronterface.py:284 pronterface.py:346
+msgid "Printer is not online."
+msgstr "L'imprimante est déconnectée"
+
+#: pronterface.py:250
+msgid ""
+"You cannot set negative temperatures. To turn the hotend off entirely, set "
+"its temperature to 0."
+msgstr ""
+"Vous ne pouvez pas régler une température négative. Pour éteindre la buse, "
+"réglez sa température à 0°C."
+
+#: pronterface.py:252
+msgid "You must enter a temperature. (%s)"
+msgstr "Vous devez saisir une température. (%s)"
+
+#: pronterface.py:265
+msgid "Setting bed temperature to %f degrees Celsius."
+msgstr "Réglage de la température du plateau à %f degrés Celsius."
+
+#: pronterface.py:286
+msgid ""
+"You cannot set negative temperatures. To turn the bed off entirely, set its "
+"temperature to 0."
+msgstr ""
+"Vous ne pouvez pas régler une température négative. Pour désactiver votre "
+"plateau chauffant, réglez sa température à 0°C."
+
+#: pronterface.py:288
+msgid "You must enter a temperature."
+msgstr "Vous devez saisir une température."
+
+#: pronterface.py:303
+msgid "Do you want to erase the macro?"
+msgstr "Voulez-vous effacer la macro ?"
+
+#: pronterface.py:307
+msgid "Cancelled."
+msgstr "Annulé"
+
+#: pronterface.py:352
+msgid " Opens file"
+msgstr " Ouvrir un fichier"
+
+#: pronterface.py:352
+msgid "&Open..."
+msgstr "&Ouvrir..."
+
+#: pronterface.py:353
+msgid " Edit open file"
+msgstr " Éditer le fichier ouvert"
+
+#: pronterface.py:353
+msgid "&Edit..."
+msgstr "&Éditer..."
+
+#: pronterface.py:354
+msgid " Clear output console"
+msgstr " Effacer le contenu de la console de sortie"
+
+#: pronterface.py:354
+msgid "Clear console"
+msgstr "Effacer la console"
+
+#: pronterface.py:355
+msgid " Project slices"
+msgstr " Projeter les couches"
+
+#: pronterface.py:355
+msgid "Projector"
+msgstr "Projecteur"
+
+#: pronterface.py:356
+msgid " Closes the Window"
+msgstr " Quitter le programme"
+
+#: pronterface.py:356
+msgid "E&xit"
+msgstr "&Quitter"
+
+#: pronterface.py:357
+msgid "&File"
+msgstr "&Fichier"
+
+#: pronterface.py:362
+msgid "&Macros"
+msgstr "&Macros"
+
+#: pronterface.py:363
+msgid "<&New...>"
+msgstr "<&Nouvelle...>"
+
+#: pronterface.py:364
+msgid " Options dialog"
+msgstr " Fenêtre des options"
+
+#: pronterface.py:364
+msgid "&Options"
+msgstr "&Options"
+
+#: pronterface.py:366
+msgid " Adjust slicing settings"
+msgstr " Régler les paramètres de slicing"
+
+#: pronterface.py:366
+msgid "Slicing Settings"
+msgstr "Paramètres de slicing"
+
+#: pronterface.py:373
+msgid "&Settings"
+msgstr "&Paramètres"
+
+#: pronterface.py:389
+msgid "Enter macro name"
+msgstr "Saisissez le nom de la macro"
+
+#: pronterface.py:392
+msgid "Macro name:"
+msgstr "Nom :"
+
+#: pronterface.py:395
+msgid "Ok"
+msgstr "Valider"
+
+#: pronterface.py:399 pronterface.py:1354 pronterface.py:1613
+msgid "Cancel"
+msgstr "Annuler"
+
+#: pronterface.py:417
+msgid "Name '%s' is being used by built-in command"
+msgstr "Le nom '%s' est utilisé par une commande interne"
+
+#: pronterface.py:420
+msgid "Macro name may contain only alphanumeric symbols and underscores"
+msgstr ""
+"Un nom de macro ne peut contenir que des caractères alphanumérique et des "
+"underscore (_)"
+
+#: pronterface.py:469
+msgid "Port"
+msgstr "Port"
+
+#: pronterface.py:488
+msgid "Connect"
+msgstr "Connecter"
+
+#: pronterface.py:490
+msgid "Connect to the printer"
+msgstr "Connecter l'imprimante"
+
+#: pronterface.py:492
+msgid "Reset"
+msgstr "Réinitialiser"
+
+#: pronterface.py:495 pronterface.py:772
+msgid "Mini mode"
+msgstr "Mode réduit"
+
+#: pronterface.py:499
+msgid "Monitor Printer"
+msgstr "Surveiller l'imprimante"
+
+#: pronterface.py:509
+msgid "Load file"
+msgstr "Charger un fichier"
+
+#: pronterface.py:512
+msgid "Compose"
+msgstr "Composer"
+
+#: pronterface.py:516
+msgid "SD"
+msgstr "SD"
+
+#: pronterface.py:524 pronterface.py:1398 pronterface.py:1444
+#: pronterface.py:1495 pronterface.py:1520 pronterface.py:1554
+#: pronterface.py:1570
+msgid "Pause"
+msgstr "Pause"
+
+#: pronterface.py:537
+msgid "Send"
+msgstr "Envoyer"
+
+#: pronterface.py:545 pronterface.py:646
+msgid "mm/min"
+msgstr "mm/min"
+
+#: pronterface.py:547
+msgid "XY:"
+msgstr "XY:"
+
+#: pronterface.py:549
+msgid "Z:"
+msgstr "Z:"
+
+#: pronterface.py:572 pronterface.py:653
+msgid "Heater:"
+msgstr "Buse :"
+
+#: pronterface.py:575 pronterface.py:595
+msgid "Off"
+msgstr "Off"
+
+#: pronterface.py:587 pronterface.py:607
+msgid "Set"
+msgstr "Régler"
+
+#: pronterface.py:592 pronterface.py:655
+msgid "Bed:"
+msgstr "Plateau :"
+
+#: pronterface.py:640
+msgid "mm"
+msgstr "mm"
+
+#: pronterface.py:698 pronterface.py:1206 pronterface.py:1438
+msgid "Not connected to printer."
+msgstr "Imprimante non connectée."
+
+#: pronterface.py:727
+msgid "SD Upload"
+msgstr "Copier sur SD"
+
+#: pronterface.py:731
+msgid "SD Print"
+msgstr "Imprimer depuis SD"
+
+#: pronterface.py:779
+msgid "Full mode"
+msgstr "Mode complet"
+
+#: pronterface.py:804
+msgid "Execute command: "
+msgstr "Exécuter la commande :"
+
+#: pronterface.py:815
+msgid "click to add new custom button"
+msgstr "Ajouter un bouton personnalisé"
+
+#: pronterface.py:834
+msgid ""
+"Defines custom button. Usage: button \"title\" [/c \"colour\"] command"
+msgstr ""
+"Définit des boutons personnalidés. Utilisation : \"Libelle\" [/c "
+"\"couleur\"] commande"
+
+#: pronterface.py:856
+msgid "Custom button number should be between 0 and 63"
+msgstr ""
+"Les numéros des boutons personnalisés doivent être compris entre 0 et 63."
+
+#: pronterface.py:948
+msgid "Edit custom button '%s'"
+msgstr "Editer le bouton personnalisé '%s'"
+
+#: pronterface.py:950
+msgid "Move left <<"
+msgstr "Déplacer vers la gauche <<"
+
+#: pronterface.py:953
+msgid "Move right >>"
+msgstr "Déplacer vers la droite >>"
+
+#: pronterface.py:957
+msgid "Remove custom button '%s'"
+msgstr "Supprimer le bouton personnalisé '%s'"
+
+#: pronterface.py:960
+msgid "Add custom button"
+msgstr "Ajouter un bouton personnalisé"
+
+#: pronterface.py:1105
+msgid "event object missing"
+msgstr "événement d'objet manquant"
+
+#: pronterface.py:1133
+msgid "Invalid period given."
+msgstr "La période donnée est invalide"
+
+#: pronterface.py:1136
+msgid "Monitoring printer."
+msgstr "Imprimante sous surveillance."
+
+#: pronterface.py:1138
+msgid "Done monitoring."
+msgstr "Surveillance de l'imprimante effectuée."
+
+#: pronterface.py:1160
+msgid "Printer is online. "
+msgstr "L'imprimante est connectée. "
+
+#: pronterface.py:1162 pronterface.py:1341
+msgid "Loaded "
+msgstr "Chargé "
+
+#: pronterface.py:1165
+msgid "Bed"
+msgstr "Plateau"
+
+#: pronterface.py:1165
+msgid "Hotend"
+msgstr "Buse"
+
+#: pronterface.py:1175
+msgid " SD printing:%04.2f %%"
+msgstr " Impression SD : %04.2f %%"
+
+#: pronterface.py:1178
+msgid " Printing:%04.2f %% |"
+msgstr " Impression : %04.2f %% |"
+
+#: pronterface.py:1179
+msgid " Line# %d of %d lines |"
+msgstr " Ligne# %d sur %d lignes |"
+
+#: pronterface.py:1184
+msgid " Est: %s of %s remaining | "
+msgstr " ETA: %s restant sur %s | "
+
+#: pronterface.py:1186
+msgid " Z: %0.2f mm"
+msgstr " Z: %0.2f mm"
+
+#: pronterface.py:1257
+msgid "Opening file failed."
+msgstr "L'ouverture du fichier a échoué"
+
+#: pronterface.py:1263
+msgid "Starting print"
+msgstr "Début de l'impression..."
+
+#: pronterface.py:1286
+msgid "Pick SD file"
+msgstr "Choisir un fichier sur la carte SD"
+
+#: pronterface.py:1286
+msgid "Select the file to print"
+msgstr "Sélectionnez le fichier à imprimer :"
+
+#: pronterface.py:1321
+msgid "Failed to execute slicing software: "
+msgstr "Une erreur s'est produite lors du slicing : "
+
+#: pronterface.py:1328
+msgid "Slicing..."
+msgstr "Slicing..."
+
+#: pronterface.py:1341
+msgid ", %d lines"
+msgstr ", %d lignes"
+
+#: pronterface.py:1348
+msgid "Load File"
+msgstr "Charger un fichier"
+
+#: pronterface.py:1355
+msgid "Slicing "
+msgstr "Slicing "
+
+#: pronterface.py:1374
+msgid "Open file to print"
+msgstr "Ouvrir un fichier à imprimer"
+
+#: pronterface.py:1375
+msgid ""
+"OBJ, STL, and GCODE files (*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ)|*."
+"gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ|All Files (*.*)|*.*"
+msgstr ""
+"Fichiers OBJ, STL et GCODE (;*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ;)|*."
+"gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ|Tous les fichiers (*.*)|*.*"
+
+#: pronterface.py:1382
+msgid "File not found!"
+msgstr "Fichier non trouvé"
+
+#: pronterface.py:1396
+msgid "Loaded %s, %d lines"
+msgstr "%s chargé, %d lignes"
+
+#: pronterface.py:1406
+msgid "mm of filament used in this print\n"
+msgstr "mm de filament utilisés pour cette impression\n"
+
+#: pronterface.py:1407
+msgid ""
+"the print goes from %f mm to %f mm in X\n"
+"and is %f mm wide\n"
+msgstr ""
+"L'impression va de %f mm à %f m en X\n"
+"et mesure %f mm de large\n"
+
+#: pronterface.py:1408
+msgid ""
+"the print goes from %f mm to %f mm in Y\n"
+"and is %f mm wide\n"
+msgstr ""
+"L'impression va de %f mm à %f m en Y\n"
+"et mesure %f mm de large\n"
+
+#: pronterface.py:1409
+msgid ""
+"the print goes from %f mm to %f mm in Z\n"
+"and is %f mm high\n"
+msgstr ""
+"L'impression va de %f mm à %f m en Y\n"
+"et mesure %f mm de haut\n"
+
+#: pronterface.py:1410
+msgid "Estimated duration (pessimistic): "
+msgstr "Durée estimée (pessimiste) : "
+
+#: pronterface.py:1435
+msgid "No file loaded. Please use load first."
+msgstr "Aucun fichier chargé. Veuillez charger un fichier avant."
+
+#: pronterface.py:1446
+msgid "Restart"
+msgstr "Recommencer"
+
+#: pronterface.py:1450
+msgid "File upload complete"
+msgstr "Envoi du fichier terminé"
+
+#: pronterface.py:1469
+msgid "Pick SD filename"
+msgstr "Lister les fichiers sur la carte SD"
+
+#: pronterface.py:1477
+msgid "Paused."
+msgstr "En pause."
+
+#: pronterface.py:1488
+msgid "Resume"
+msgstr "Reprendre"
+
+#: pronterface.py:1504
+msgid "Connecting..."
+msgstr "Connection en cours..."
+
+#: pronterface.py:1535
+msgid "Disconnected."
+msgstr "Déconnecté."
+
+#: pronterface.py:1562
+msgid "Reset."
+msgstr "Réinitialisée."
+
+#: pronterface.py:1563
+msgid "Are you sure you want to reset the printer?"
+msgstr "Etes-vous sûr de vouloir réinitialiser l'imprimante?"
+
+#: pronterface.py:1563
+msgid "Reset?"
+msgstr "Réinitialiser ?"
+
+#: pronterface.py:1609
+msgid "Save"
+msgstr "Enregistrer"
+
+#: pronterface.py:1665
+msgid "Edit settings"
+msgstr "Modifier les paramètres"
+
+#: pronterface.py:1667
+msgid "Defaults"
+msgstr "Paramètres par défaut"
+
+#: pronterface.py:1696
+msgid "Custom button"
+msgstr "Commande personnalisée"
+
+#: pronterface.py:1701
+msgid "Button title"
+msgstr "Titre du bouton"
+
+#: pronterface.py:1704
+msgid "Command"
+msgstr "Commande"
+
+#: pronterface.py:1713
+msgid "Color"
+msgstr "Couleur"
diff --git a/locale/it/LC_MESSAGES/pronterface.mo b/locale/it/LC_MESSAGES/pronterface.mo
index 0bbc057..e796d8e 100644
Binary files a/locale/it/LC_MESSAGES/pronterface.mo and b/locale/it/LC_MESSAGES/pronterface.mo differ
diff --git a/locale/it/LC_MESSAGES/pronterface.po b/locale/it/LC_MESSAGES/pronterface.po
index 0d70178..757cdfc 100644
--- a/locale/it/LC_MESSAGES/pronterface.po
+++ b/locale/it/LC_MESSAGES/pronterface.po
@@ -5,77 +5,21 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2012-01-19 09:21+CET\n"
+"POT-Creation-Date: 2012-02-26 02:12+CET\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Italian RepRap Community \n"
"Language-Team: Italian RepRap Community \n"
+"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
-
-#: pronsole.py:250
-msgid "Communications Speed (default: 115200)"
-msgstr "Velocità di comunicazione (default: 115200)"
-
-#: pronsole.py:251
-msgid "Heated Build Platform temp for ABS (default: 110 deg C)"
-msgstr "Temperatura piano di stampa per ABS (default: 110° C) "
-
-#: pronsole.py:252
-msgid "Heated Build Platform temp for PLA (default: 60 deg C)"
-msgstr "Temperatura piano di stampa per PLA (default: 60° C)"
-
-#: pronsole.py:253
-msgid "Feedrate for Control Panel Moves in Extrusions (default: 300mm/min)"
-msgstr "Velocità dei movimenti dell'estrusore in modalità manuale (default: 300mm/min)"
-
-#: pronsole.py:254
-msgid "Port used to communicate with printer"
-msgstr "Porta usata per comunicare con la stampante"
-
-#: pronsole.py:255
-msgid ""
-"Slice command\n"
-" default:\n"
-" python skeinforge/skeinforge_application/skeinforge_utilities/skeinforge_craft.py $s)"
-msgstr ""
-"Comando del generatore di percorso\n"
-" default:\n"
-" python skeinforge/skeinforge_application/skeinforge_utilities/skeinforge_craft.py $s)"
-
-#: pronsole.py:256
-msgid ""
-"Slice settings command\n"
-" default:\n"
-" python skeinforge/skeinforge_application/skeinforge.py"
-msgstr ""
-"Comando di configurazione del generatore di percorso\n"
-" default:\n"
-" python skeinforge/skeinforge_application/skeinforge.py"
-
-#: pronsole.py:257
-msgid "Extruder temp for ABS (default: 230 deg C)"
-msgstr "Temperatura di estrusione per ABS (default: 230° C)"
-
-#: pronsole.py:258
-msgid "Extruder temp for PLA (default: 185 deg C)"
-msgstr "Temperatura di estrusione per PLA (default: 185° C"
-
-#: pronsole.py:259
-msgid "Feedrate for Control Panel Moves in X and Y (default: 3000mm/min)"
-msgstr "Velocità dei movimenti degli assi X e Y in modalità manuale (default: 3000mm/min)"
-
-#: pronsole.py:260
-msgid "Feedrate for Control Panel Moves in Z (default: 200mm/min)"
-msgstr "Velocità dei movimenti dell'asse Z in modalità manuale (default: 200mm/min)"
-
-#: pronterface.py:15
+#: pronterface.py:30
msgid "WX is not installed. This program requires WX to run."
msgstr "WX non è installato. Questo software richiede WX per funzionare."
-#: pronterface.py:66
+#: pronterface.py:81
msgid ""
"Dimensions of Build Platform\n"
" & optional offset of origin\n"
@@ -93,55 +37,55 @@ msgstr ""
" XXX,YYY,ZZZ\n"
" XXXxYYYxZZZ+SposX+SposY+SposZ"
-#: pronterface.py:67
+#: pronterface.py:82
msgid "Last Set Temperature for the Heated Print Bed"
msgstr "Ultima temperatura impostata per il letto riscaldato"
-#: pronterface.py:68
+#: pronterface.py:83
msgid "Folder of last opened file"
msgstr "Cartella dell'ultimo file aperto"
-#: pronterface.py:69
+#: pronterface.py:84
msgid "Last Temperature of the Hot End"
msgstr "Ultima temperatura dell'estrusore"
-#: pronterface.py:70
+#: pronterface.py:85
msgid "Width of Extrusion in Preview (default: 0.5)"
msgstr "Larghezza dell'estrusione nell'anteprima (default: 0.5)"
-#: pronterface.py:71
+#: pronterface.py:86
msgid "Fine Grid Spacing (default: 10)"
msgstr "Spaziatura fine della griglia (default: 10)"
-#: pronterface.py:72
+#: pronterface.py:87
msgid "Coarse Grid Spacing (default: 50)"
msgstr "Spaziatura larga della griglia (default: 50)"
-#: pronterface.py:73
+#: pronterface.py:88
msgid "Pronterface background color (default: #FFFFFF)"
msgstr "Colore di sfondo di Pronterface (default: #FFFFFF)"
-#: pronterface.py:76
+#: pronterface.py:91
msgid "Printer Interface"
msgstr "Interfaccia di stampa"
-#: pronterface.py:93
+#: pronterface.py:108
msgid "Motors off"
msgstr "Spegni motori"
-#: pronterface.py:94
+#: pronterface.py:109
msgid "Check temp"
msgstr "Leggi temperatura"
-#: pronterface.py:95
+#: pronterface.py:110
msgid "Extrude"
msgstr "Estrudi"
-#: pronterface.py:96
+#: pronterface.py:111
msgid "Reverse"
msgstr "Ritrai"
-#: pronterface.py:114
+#: pronterface.py:129
msgid ""
"# I moved all your custom buttons into .pronsolerc.\n"
"# Please don't add them here any more.\n"
@@ -151,528 +95,566 @@ msgstr ""
"# Per favore non aggiungerne altri qui.\n"
"# Un backup dei tuoi vecchi pulsanti è in custombtn.old\n"
-#: pronterface.py:119
-msgid "Note!!! You have specified custom buttons in both custombtn.txt and .pronsolerc"
-msgstr "Nota!!! Hai specificato pulsanti personalizzati sia in custombtn.txt che in .pronsolerc"
+#: pronterface.py:134
+msgid ""
+"Note!!! You have specified custom buttons in both custombtn.txt and ."
+"pronsolerc"
+msgstr ""
+"Nota!!! Hai specificato pulsanti personalizzati sia in custombtn.txt che in ."
+"pronsolerc"
-#: pronterface.py:120
-msgid "Ignoring custombtn.txt. Remove all current buttons to revert to custombtn.txt"
-msgstr "Ignoro custombtn.txt. Elimina tutti i pulsanti attuali per tornare a custombtn.txt"
+#: pronterface.py:135
+msgid ""
+"Ignoring custombtn.txt. Remove all current buttons to revert to custombtn.txt"
+msgstr ""
+"Ignoro custombtn.txt. Elimina tutti i pulsanti attuali per tornare a "
+"custombtn.txt"
-#: pronterface.py:148 pronterface.py:499 pronterface.py:1319
-#: pronterface.py:1373 pronterface.py:1495 pronterface.py:1529
-#: pronterface.py:1544
+#: pronterface.py:163 pronterface.py:514 pronterface.py:1333
+#: pronterface.py:1387 pronterface.py:1509 pronterface.py:1543
+#: pronterface.py:1558
msgid "Print"
msgstr "Stampa"
-#: pronterface.py:152
+#: pronterface.py:167
msgid "Printer is now online."
msgstr "La stampante ora è connessa."
-#: pronterface.py:212
-msgid "Setting hotend temperature to "
-msgstr "Imposto la temperatura dell'estrusore a "
+#: pronterface.py:168
+msgid "Disconnect"
+msgstr "Disconnettere."
-#: pronterface.py:212 pronterface.py:248
-msgid " degrees Celsius."
-msgstr " gradi Celsius"
+#: pronterface.py:227
+msgid "Setting hotend temperature to %f degrees Celsius."
+msgstr "Imposto la temperatura dell'estrusore a %f gradi Celsius."
-#: pronterface.py:231 pronterface.py:267 pronterface.py:325
+#: pronterface.py:246 pronterface.py:282 pronterface.py:340
msgid "Printer is not online."
msgstr "La stampante non è connessa."
-#: pronterface.py:233
-msgid "You cannot set negative temperatures. To turn the hotend off entirely, set its temperature to 0."
-msgstr "Non è possibile impostare temperature negative. Per raffreddare l'ugello imposta la sua temperatura a 0."
-
#: pronterface.py:248
-msgid "Setting bed temperature to "
-msgstr "Imposto la temperatura del piano di stampa a "
+msgid ""
+"You cannot set negative temperatures. To turn the hotend off entirely, set "
+"its temperature to 0."
+msgstr ""
+"Non è possibile impostare temperature negative. Per raffreddare l'ugello "
+"imposta la sua temperatura a 0."
-#: pronterface.py:269
-msgid "You cannot set negative temperatures. To turn the bed off entirely, set its temperature to 0."
-msgstr "Non è possibile impostare temperature negative. Per raffreddare il piano di stampa imposta la sua temperatura a 0."
+#: pronterface.py:250
+msgid "You must enter a temperature. (%s)"
+msgstr "Devi inserire una temperatura. (%s)"
-#: pronterface.py:271
+#: pronterface.py:263
+msgid "Setting bed temperature to %f degrees Celsius."
+msgstr "Imposto la temperatura del piano di stampa a %f gradi Celsius."
+
+#: pronterface.py:284
+msgid ""
+"You cannot set negative temperatures. To turn the bed off entirely, set its "
+"temperature to 0."
+msgstr ""
+"Non è possibile impostare temperature negative. Per raffreddare il piano di "
+"stampa imposta la sua temperatura a 0."
+
+#: pronterface.py:286
msgid "You must enter a temperature."
msgstr "Devi inserire una temperatura."
-#: pronterface.py:286
+#: pronterface.py:301
msgid "Do you want to erase the macro?"
msgstr "Vuoi cancellare la macro?"
-#: pronterface.py:290
+#: pronterface.py:305
msgid "Cancelled."
msgstr "Annullato."
-#: pronterface.py:331
+#: pronterface.py:346
msgid " Opens file"
msgstr " Apre un file"
-#: pronterface.py:331
+#: pronterface.py:346
msgid "&Open..."
msgstr "&Apri..."
-#: pronterface.py:332
+#: pronterface.py:347
msgid " Edit open file"
msgstr " Modifica file aperto"
-#: pronterface.py:332
+#: pronterface.py:347
msgid "&Edit..."
msgstr "&Modifica"
-#: pronterface.py:333
+#: pronterface.py:348
msgid " Clear output console"
msgstr " Svuota la console"
-#: pronterface.py:333
+#: pronterface.py:348
msgid "Clear console"
msgstr "Pulisci console"
-#: pronterface.py:334
+#: pronterface.py:349
msgid " Project slices"
msgstr " Proietta i layer"
-#: pronterface.py:334
+#: pronterface.py:349
msgid "Projector"
msgstr "Proiettore"
-#: pronterface.py:335
+#: pronterface.py:350
msgid " Closes the Window"
msgstr " Chiude la finestra"
-#: pronterface.py:335
+#: pronterface.py:350
msgid "E&xit"
msgstr "&Esci"
-#: pronterface.py:336
+#: pronterface.py:351
msgid "&File"
msgstr "&File"
-#: pronterface.py:341
+#: pronterface.py:356
msgid "&Macros"
msgstr "&Macro"
-#: pronterface.py:342
+#: pronterface.py:357
msgid "<&New...>"
msgstr "<&Nuovo...>"
-#: pronterface.py:343
+#: pronterface.py:358
msgid " Options dialog"
msgstr " Finestra di opzioni"
-#: pronterface.py:343
+#: pronterface.py:358
msgid "&Options"
msgstr "&Opzioni"
-#: pronterface.py:345
+#: pronterface.py:360
msgid " Adjust slicing settings"
msgstr " Configura la generazione del percorso"
-#: pronterface.py:345
+#: pronterface.py:360
msgid "Slicing Settings"
msgstr "Impostazioni di generazione del percorso"
-#: pronterface.py:352
+#: pronterface.py:367
msgid "&Settings"
msgstr "&Impostazioni"
-#: pronterface.py:368
+#: pronterface.py:383
msgid "Enter macro name"
msgstr "Inserisci il nome della macro"
-#: pronterface.py:371
+#: pronterface.py:386
msgid "Macro name:"
msgstr "Nome macro:"
-#: pronterface.py:374
+#: pronterface.py:389
msgid "Ok"
msgstr "Ok"
-#: pronterface.py:378 pronterface.py:1330 pronterface.py:1587
+#: pronterface.py:393 pronterface.py:1344 pronterface.py:1601
msgid "Cancel"
msgstr "Annulla"
-#: pronterface.py:396
-msgid "' is being used by built-in command"
-msgstr "' è usato da un comando interno"
+#: pronterface.py:411
+msgid "Name '%s' is being used by built-in command"
+msgstr "Nome '%s' è usato da un comando interno"
-#: pronterface.py:396
-msgid "Name '"
-msgstr "Nome '"
-
-#: pronterface.py:399
+#: pronterface.py:414
msgid "Macro name may contain only alphanumeric symbols and underscores"
-msgstr "I nomi delle macro possono contenere solo simboli alfanumerici e underscore"
+msgstr ""
+"I nomi delle macro possono contenere solo simboli alfanumerici e underscore"
-#: pronterface.py:448
+#: pronterface.py:463
msgid "Port"
msgstr "Porta"
-#: pronterface.py:467
+#: pronterface.py:482
msgid "Connect"
msgstr "Connetti"
-#: pronterface.py:469
+#: pronterface.py:484
msgid "Connect to the printer"
msgstr "Connetti alla stampante"
-#: pronterface.py:471
+#: pronterface.py:486
msgid "Reset"
msgstr "Reset"
-#: pronterface.py:474 pronterface.py:751
+#: pronterface.py:489 pronterface.py:766
msgid "Mini mode"
msgstr "Contrai"
-#: pronterface.py:478
+#: pronterface.py:493
msgid "Monitor Printer"
msgstr "Controllo automatico temperatura"
-#: pronterface.py:488
+#: pronterface.py:503
msgid "Load file"
msgstr "Carica file"
-#: pronterface.py:491
+#: pronterface.py:506
msgid "Compose"
msgstr "Componi"
-#: pronterface.py:495
+#: pronterface.py:510
msgid "SD"
msgstr "SD"
-#: pronterface.py:503 pronterface.py:1374 pronterface.py:1419
-#: pronterface.py:1469 pronterface.py:1494 pronterface.py:1528
-#: pronterface.py:1543
+#: pronterface.py:518 pronterface.py:1388 pronterface.py:1433
+#: pronterface.py:1483 pronterface.py:1508 pronterface.py:1542
+#: pronterface.py:1557
msgid "Pause"
msgstr "Pausa"
-#: pronterface.py:516
+#: pronterface.py:531
msgid "Send"
msgstr "Invia"
-#: pronterface.py:524 pronterface.py:625
+#: pronterface.py:539 pronterface.py:640
msgid "mm/min"
msgstr "mm/min"
-#: pronterface.py:526
+#: pronterface.py:541
msgid "XY:"
msgstr "XY:"
-#: pronterface.py:528
+#: pronterface.py:543
msgid "Z:"
msgstr "Z:"
-#: pronterface.py:551 pronterface.py:632
+#: pronterface.py:566 pronterface.py:647
msgid "Heater:"
msgstr "Estrusore:"
-#: pronterface.py:554 pronterface.py:574
+#: pronterface.py:569 pronterface.py:589
msgid "Off"
msgstr "Off"
-#: pronterface.py:566 pronterface.py:586
+#: pronterface.py:581 pronterface.py:601
msgid "Set"
msgstr "On"
-#: pronterface.py:571 pronterface.py:634
+#: pronterface.py:586 pronterface.py:649
msgid "Bed:"
msgstr "Piano:"
-#: pronterface.py:619
+#: pronterface.py:634
msgid "mm"
msgstr "mm"
-#: pronterface.py:677 pronterface.py:1182 pronterface.py:1413
+#: pronterface.py:692 pronterface.py:1196 pronterface.py:1427
msgid "Not connected to printer."
msgstr "Non connesso alla stampante."
-#: pronterface.py:706
+#: pronterface.py:721
msgid "SD Upload"
msgstr "Carica SD"
-#: pronterface.py:710
+#: pronterface.py:725
msgid "SD Print"
msgstr "Stampa SD"
-#: pronterface.py:758
+#: pronterface.py:773
msgid "Full mode"
msgstr "Espandi"
-#: pronterface.py:783
+#: pronterface.py:798
msgid "Execute command: "
msgstr "Esegui comando: "
-#: pronterface.py:794
+#: pronterface.py:809
msgid "click to add new custom button"
msgstr "clicca per aggiungere un nuovo pulsante personalizzato"
-#: pronterface.py:813
-msgid "Defines custom button. Usage: button \"title\" [/c \"colour\"] command"
-msgstr "Definisce un pulsante personalizzato. Uso: button \"titolo\" [/c \"colore\"] comando"
+#: pronterface.py:828
+msgid ""
+"Defines custom button. Usage: button \"title\" [/c \"colour\"] command"
+msgstr ""
+"Definisce un pulsante personalizzato. Uso: button \"titolo\" [/c "
+"\"colore\"] comando"
-#: pronterface.py:835
+#: pronterface.py:850
msgid "Custom button number should be between 0 and 63"
msgstr "Il numero del pulsante personalizzato dev'essere tra 0 e 63"
-#: pronterface.py:927
+#: pronterface.py:942
msgid "Edit custom button '%s'"
msgstr "Modifica pulsante personalizzato '%s'"
-#: pronterface.py:929
+#: pronterface.py:944
msgid "Move left <<"
msgstr "Muovi a sinistra <<"
-#: pronterface.py:932
+#: pronterface.py:947
msgid "Move right >>"
msgstr "Muovi a destra >>"
-#: pronterface.py:936
+#: pronterface.py:951
msgid "Remove custom button '%s'"
msgstr "Elimina pulsante personalizzato '%s'"
-#: pronterface.py:939
+#: pronterface.py:954
msgid "Add custom button"
msgstr "Aggiungi pulsante personalizzato"
-#: pronterface.py:1084
+#: pronterface.py:1099
msgid "event object missing"
msgstr "oggetto dell'evento mancante"
-#: pronterface.py:1112
+#: pronterface.py:1127
msgid "Invalid period given."
msgstr "Periodo non valido."
-#: pronterface.py:1115
+#: pronterface.py:1130
msgid "Monitoring printer."
msgstr "Sto controllando la stampante."
-#: pronterface.py:1117
+#: pronterface.py:1132
msgid "Done monitoring."
msgstr "Controllo terminato."
-#: pronterface.py:1139
+#: pronterface.py:1154
msgid "Printer is online. "
msgstr "La stampante è online. "
-#: pronterface.py:1141 pronterface.py:1317 pronterface.py:1372
+#: pronterface.py:1156 pronterface.py:1331
msgid "Loaded "
msgstr "Caricato "
-#: pronterface.py:1144
+#: pronterface.py:1159
msgid "Bed"
msgstr "Letto"
-#: pronterface.py:1144
+#: pronterface.py:1159
msgid "Hotend"
msgstr "Estrusore"
-#: pronterface.py:1154
+#: pronterface.py:1169
msgid " SD printing:%04.2f %%"
msgstr " stampa da scheda SD:%04.2f %%"
-#: pronterface.py:1157
+#: pronterface.py:1172
msgid " Printing:%04.2f %% |"
msgstr " Stampa in corso:%04.2f %% |"
-#: pronterface.py:1158
-msgid " Line# "
-msgstr " Linea# "
+#: pronterface.py:1173
+msgid " Line# %d of %d lines |"
+msgstr " Linea# %d di %d linee |"
-#: pronterface.py:1158
-msgid " lines |"
-msgstr " linee |"
+#: pronterface.py:1178
+msgid " Est: %s of %s remaining | "
+msgstr " Stima: %s di %s rimanente | "
-#: pronterface.py:1158
-msgid "of "
-msgstr "di "
-
-#: pronterface.py:1163
-msgid " Est: "
-msgstr " Stima: "
-
-#: pronterface.py:1164
-msgid " of: "
-msgstr " di: "
-
-#: pronterface.py:1165
-msgid " Remaining | "
-msgstr " Rimanente | "
-
-#: pronterface.py:1166
+#: pronterface.py:1180
msgid " Z: %0.2f mm"
msgstr " Z: %0.2f mm"
-#: pronterface.py:1233
+#: pronterface.py:1247
msgid "Opening file failed."
msgstr "Apertura del file fallita."
-#: pronterface.py:1239
+#: pronterface.py:1253
msgid "Starting print"
msgstr "Inizio della stampa"
-#: pronterface.py:1262
+#: pronterface.py:1276
msgid "Pick SD file"
msgstr "Scegli un file dalla scheda SD"
-#: pronterface.py:1262
+#: pronterface.py:1276
msgid "Select the file to print"
msgstr "Seleziona il file da stampare"
-#: pronterface.py:1297
+#: pronterface.py:1311
msgid "Failed to execute slicing software: "
msgstr "Imposibile eseguire il software di generazione percorso: "
-#: pronterface.py:1304
+#: pronterface.py:1318
msgid "Slicing..."
msgstr "Generazione percorso..."
-#: pronterface.py:1317 pronterface.py:1372
+#: pronterface.py:1331
msgid ", %d lines"
msgstr ", %d linee"
-#: pronterface.py:1324
+#: pronterface.py:1338
msgid "Load File"
msgstr "Apri file"
-#: pronterface.py:1331
+#: pronterface.py:1345
msgid "Slicing "
msgstr "Generazione del percorso "
-#: pronterface.py:1350
+#: pronterface.py:1364
msgid "Open file to print"
msgstr "Apri il file da stampare"
-#: pronterface.py:1351
+#: pronterface.py:1365
msgid "OBJ, STL, and GCODE files (;*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ;)"
msgstr "files OBJ, STL e GCODE (;*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ;)"
-#: pronterface.py:1358
+#: pronterface.py:1372
msgid "File not found!"
msgstr "File non trovato!"
-#: pronterface.py:1382
-msgid ""
-"mm of filament used in this print\n"
-msgstr ""
-"mm di filamento usato in questa stampa\n"
-
-#: pronterface.py:1383
-msgid ""
-"mm in X\n"
-"and is"
-msgstr ""
-"mm in X\n"
-"ed è"
-
-#: pronterface.py:1383 pronterface.py:1384
-msgid ""
-"mm wide\n"
-msgstr ""
-"mm di larghezza\n"
-
-#: pronterface.py:1383 pronterface.py:1384 pronterface.py:1385
-msgid "mm to"
-msgstr "mm a"
-
-#: pronterface.py:1383 pronterface.py:1384 pronterface.py:1385
-msgid "the print goes from"
-msgstr "la stampa va da"
-
-#: pronterface.py:1384
-msgid ""
-"mm in Y\n"
-"and is"
-msgstr ""
-"mm in Y\n"
-"ed è"
-
-#: pronterface.py:1385
-msgid ""
-"mm high\n"
-msgstr ""
-"mm di altezza\n"
-
-#: pronterface.py:1385
-msgid ""
-"mm in Z\n"
-"and is"
-msgstr ""
-"mm in Z\n"
-"ed è"
-
#: pronterface.py:1386
+msgid "Loaded %s, %d lines"
+msgstr "Caricato %s, %d linee"
+
+#: pronterface.py:1396
+msgid "mm of filament used in this print\n"
+msgstr "mm di filamento usato in questa stampa\n"
+
+#: pronterface.py:1397
+msgid ""
+"the print goes from %f mm to %f mm in X\n"
+"and is %f mm wide\n"
+msgstr ""
+"la stampa va da %f mm a %f mm in X\n"
+"ed è %f mm di larghezza\n"
+
+#: pronterface.py:1398
+msgid ""
+"the print goes from %f mm to %f mm in Y\n"
+"and is %f mm wide\n"
+msgstr ""
+"la stampa va da %f mm a %f mm in Y\n"
+"ed è %f mm di larghezza\n"
+
+#: pronterface.py:1399
+msgid ""
+"the print goes from %f mm to %f mm in Z\n"
+"and is %f mm high\n"
+msgstr ""
+"la stampa va da %f mm a %f mm in Z\n"
+"ed è %f mm di altezza\n"
+
+#: pronterface.py:1400
msgid "Estimated duration (pessimistic): "
msgstr "Durata stimata (pessimistica): "
-#: pronterface.py:1410
+#: pronterface.py:1424
msgid "No file loaded. Please use load first."
msgstr "Nessub file caricato. Usare Apri prima."
-#: pronterface.py:1421
+#: pronterface.py:1435
msgid "Restart"
msgstr "Ricomincia"
-#: pronterface.py:1425
+#: pronterface.py:1439
msgid "File upload complete"
msgstr "Caricamento file completato"
-#: pronterface.py:1444
+#: pronterface.py:1458
msgid "Pick SD filename"
msgstr "Scegli un file dalla scheda SD"
-#: pronterface.py:1452
+#: pronterface.py:1466
msgid "Paused."
msgstr "In pausa."
-#: pronterface.py:1462
+#: pronterface.py:1476
msgid "Resume"
msgstr "Ripristina"
-#: pronterface.py:1478
+#: pronterface.py:1492
msgid "Connecting..."
msgstr "Connessione..."
-#: pronterface.py:1509
+#: pronterface.py:1523
msgid "Disconnected."
msgstr "Disconnesso."
-#: pronterface.py:1536
+#: pronterface.py:1550
msgid "Reset."
msgstr "Reset."
-#: pronterface.py:1537
+#: pronterface.py:1551
msgid "Are you sure you want to reset the printer?"
msgstr "Sei sicuro di voler resettare la stampante?"
-#: pronterface.py:1537
+#: pronterface.py:1551
msgid "Reset?"
msgstr "Reset?"
-#: pronterface.py:1583
+#: pronterface.py:1597
msgid "Save"
msgstr "Salva"
-#: pronterface.py:1639
+#: pronterface.py:1653
msgid "Edit settings"
msgstr "Modifica impostazioni"
-#: pronterface.py:1641
+#: pronterface.py:1655
msgid "Defaults"
msgstr "Valori di default"
-#: pronterface.py:1670
+#: pronterface.py:1684
msgid "Custom button"
msgstr "Personalizza bottone"
-#: pronterface.py:1675
+#: pronterface.py:1689
msgid "Button title"
msgstr "Titolo bottone"
-#: pronterface.py:1678
+#: pronterface.py:1692
msgid "Command"
msgstr "Comando"
-#: pronterface.py:1687
+#: pronterface.py:1701
msgid "Color"
msgstr "Colore"
+
+#~ msgid "Communications Speed (default: 115200)"
+#~ msgstr "Velocità di comunicazione (default: 115200)"
+
+#~ msgid "Heated Build Platform temp for ABS (default: 110 deg C)"
+#~ msgstr "Temperatura piano di stampa per ABS (default: 110° C) "
+
+#~ msgid "Heated Build Platform temp for PLA (default: 60 deg C)"
+#~ msgstr "Temperatura piano di stampa per PLA (default: 60° C)"
+
+#~ msgid "Feedrate for Control Panel Moves in Extrusions (default: 300mm/min)"
+#~ msgstr ""
+#~ "Velocità dei movimenti dell'estrusore in modalità manuale (default: 300mm/"
+#~ "min)"
+
+#~ msgid "Port used to communicate with printer"
+#~ msgstr "Porta usata per comunicare con la stampante"
+
+#~ msgid ""
+#~ "Slice command\n"
+#~ " default:\n"
+#~ " python skeinforge/skeinforge_application/skeinforge_utilities/"
+#~ "skeinforge_craft.py $s)"
+#~ msgstr ""
+#~ "Comando del generatore di percorso\n"
+#~ " default:\n"
+#~ " python skeinforge/skeinforge_application/skeinforge_utilities/"
+#~ "skeinforge_craft.py $s)"
+
+#~ msgid ""
+#~ "Slice settings command\n"
+#~ " default:\n"
+#~ " python skeinforge/skeinforge_application/skeinforge.py"
+#~ msgstr ""
+#~ "Comando di configurazione del generatore di percorso\n"
+#~ " default:\n"
+#~ " python skeinforge/skeinforge_application/skeinforge.py"
+
+#~ msgid "Extruder temp for ABS (default: 230 deg C)"
+#~ msgstr "Temperatura di estrusione per ABS (default: 230° C)"
+
+#~ msgid "Extruder temp for PLA (default: 185 deg C)"
+#~ msgstr "Temperatura di estrusione per PLA (default: 185° C"
+
+#~ msgid "Feedrate for Control Panel Moves in X and Y (default: 3000mm/min)"
+#~ msgstr ""
+#~ "Velocità dei movimenti degli assi X e Y in modalità manuale (default: "
+#~ "3000mm/min)"
+
+#~ msgid "Feedrate for Control Panel Moves in Z (default: 200mm/min)"
+#~ msgstr ""
+#~ "Velocità dei movimenti dell'asse Z in modalità manuale (default: 200mm/"
+#~ "min)"
diff --git a/locale/nl/LC_MESSAGES/nl.po b/locale/nl/LC_MESSAGES/nl.po
index 7c422bb..4dfcac8 100755
--- a/locale/nl/LC_MESSAGES/nl.po
+++ b/locale/nl/LC_MESSAGES/nl.po
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: Pronterface rl1\n"
-"POT-Creation-Date: 2011-09-06 16:31+0100\n"
+"POT-Creation-Date: 2012-02-26 02:12+CET\n"
"PO-Revision-Date: 2011-09-06 16:31+0100\n"
"Last-Translator: Ruben Lubbes \n"
"Language-Team: NL \n"
@@ -15,135 +15,70 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
-#: pronterface.py:10
+#: pronterface.py:30
msgid "WX is not installed. This program requires WX to run."
msgstr "WX is niet geïnstalleerd. Dit programma vereist WX."
-#: pronterface.py:60
+#: pronterface.py:81
+msgid ""
+"Dimensions of Build Platform\n"
+" & optional offset of origin\n"
+"\n"
+"Examples:\n"
+" XXXxYYY\n"
+" XXX,YYY,ZZZ\n"
+" XXXxYYYxZZZ+OffX+OffY+OffZ"
+msgstr ""
+
+#: pronterface.py:82
+msgid "Last Set Temperature for the Heated Print Bed"
+msgstr ""
+
+#: pronterface.py:83
+msgid "Folder of last opened file"
+msgstr ""
+
+#: pronterface.py:84
+msgid "Last Temperature of the Hot End"
+msgstr ""
+
+#: pronterface.py:85
+msgid "Width of Extrusion in Preview (default: 0.5)"
+msgstr ""
+
+#: pronterface.py:86
+msgid "Fine Grid Spacing (default: 10)"
+msgstr ""
+
+#: pronterface.py:87
+msgid "Coarse Grid Spacing (default: 50)"
+msgstr ""
+
+#: pronterface.py:88
+msgid "Pronterface background color (default: #FFFFFF)"
+msgstr ""
+
+#: pronterface.py:91
msgid "Printer Interface"
msgstr "Printer Interface"
-#: pronterface.py:72
-msgid "X+100"
-msgstr "X+100"
-
-#: pronterface.py:73
-msgid "X+10"
-msgstr "X+10"
-
-#: pronterface.py:74
-msgid "X+1"
-msgstr "X+1"
-
-#: pronterface.py:75
-msgid "X+0.1"
-msgstr "X+0.1"
-
-#: pronterface.py:76
-msgid "HomeX"
-msgstr "0-puntX"
-
-#: pronterface.py:77
-msgid "X-0.1"
-msgstr "X-0.1"
-
-#: pronterface.py:78
-msgid "X-1"
-msgstr "X-1"
-
-#: pronterface.py:79
-msgid "X-10"
-msgstr "X-10"
-
-#: pronterface.py:80
-msgid "X-100"
-msgstr "X-100"
-
-#: pronterface.py:81
-msgid "Y+100"
-msgstr "Y+100"
-
-#: pronterface.py:82
-msgid "Y+10"
-msgstr "Y+10"
-
-#: pronterface.py:83
-msgid "Y+1"
-msgstr "Y+1"
-
-#: pronterface.py:84
-msgid "Y+0.1"
-msgstr "Y+0.1"
-
-#: pronterface.py:85
-msgid "HomeY"
-msgstr "0-puntY"
-
-#: pronterface.py:86
-msgid "Y-0.1"
-msgstr "Y-0.1"
-
-#: pronterface.py:87
-msgid "Y-1"
-msgstr "Y-1"
-
-#: pronterface.py:88
-msgid "Y-10"
-msgstr "Y-10"
-
-#: pronterface.py:89
-msgid "Y-100"
-msgstr "Y-100"
-
-#: pronterface.py:90
+#: pronterface.py:108
msgid "Motors off"
msgstr "Motoren uit"
-#: pronterface.py:91
-msgid "Z+10"
-msgstr "Z+10"
-
-#: pronterface.py:92
-msgid "Z+1"
-msgstr "Z+1"
-
-#: pronterface.py:93
-msgid "Z+0.1"
-msgstr "Z+0.1"
-
-#: pronterface.py:94
-msgid "HomeZ"
-msgstr "0-puntZ"
-
-#: pronterface.py:95
-msgid "Z-0.1"
-msgstr "Z-0.1"
-
-#: pronterface.py:96
-msgid "Z-1"
-msgstr "Z-1"
-
-#: pronterface.py:97
-msgid "Z-10"
-msgstr "Z-10"
-
-#: pronterface.py:98
-msgid "Home"
-msgstr "0-punt"
-
-#: pronterface.py:99
+#: pronterface.py:109
msgid "Check temp"
msgstr "Controleer Temp."
-#: pronterface.py:100
+#: pronterface.py:110
msgid "Extrude"
msgstr "Extruden"
-#: pronterface.py:101
+#: pronterface.py:111
msgid "Reverse"
msgstr "Terug"
-#: pronterface.py:117
+#: pronterface.py:129
msgid ""
"# I moved all your custom buttons into .pronsolerc.\n"
"# Please don't add them here any more.\n"
@@ -153,484 +88,621 @@ msgstr ""
"# Hier geen nieuwe knoppen definiëren.\n"
"# Een backup van de oude knoppen staat in custombtn.old\n"
-#: pronterface.py:122
-msgid "Note!!! You have specified custom buttons in both custombtn.txt and .pronsolerc"
-msgstr "Let op!!! Er zijn gedefinieerde knoppen in zowel custombtn.txt en .pronsolerc"
+#: pronterface.py:134
+msgid ""
+"Note!!! You have specified custom buttons in both custombtn.txt and ."
+"pronsolerc"
+msgstr ""
+"Let op!!! Er zijn gedefinieerde knoppen in zowel custombtn.txt en .pronsolerc"
-#: pronterface.py:123
-msgid "Ignoring custombtn.txt. Remove all current buttons to revert to custombtn.txt"
-msgstr "Negeer custombtn.txt. Verwijder alle gedefinieerde knoppen om gebruik te maken van custombtn.txt"
+#: pronterface.py:135
+msgid ""
+"Ignoring custombtn.txt. Remove all current buttons to revert to custombtn.txt"
+msgstr ""
+"Negeer custombtn.txt. Verwijder alle gedefinieerde knoppen om gebruik te "
+"maken van custombtn.txt"
-#: pronterface.py:146
-#: pronterface.py:434
-#: pronterface.py:971
-#: pronterface.py:1020
-#: pronterface.py:1134
-#: pronterface.py:1161
-#: pronterface.py:1175
+#: pronterface.py:163 pronterface.py:514 pronterface.py:1333
+#: pronterface.py:1387 pronterface.py:1509 pronterface.py:1543
+#: pronterface.py:1558
msgid "Print"
msgstr "Printen"
-#: pronterface.py:150
-msgid "Printer is now online"
-msgstr "Printer is nu verbonden"
+#: pronterface.py:167
+msgid "Printer is now online."
+msgstr "Printer is nu verbonden."
-#: pronterface.py:199
-msgid "Setting hotend temperature to "
-msgstr "Stel elementtemperatuur in op "
-
-#: pronterface.py:199
-#: pronterface.py:220
-msgid " degrees Celsius."
-msgstr " graden Celsius."
-
-#: pronterface.py:203
-#: pronterface.py:224
-msgid "Printer is not online."
-msgstr "Printer is niet verbonden."
-
-#: pronterface.py:205
-msgid "You cannot set negative temperatures. To turn the hotend off entirely, set its temperature to 0."
-msgstr "Negatieve temperatuur is niet instelbaar. Om het element uit te schakelen wordt temperatuur 0 ingesteld."
-
-#: pronterface.py:207
-#: pronterface.py:228
-msgid "You must enter a temperature."
-msgstr "Er moet een temperatuur worden ingesteld."
-
-#: pronterface.py:220
-msgid "Setting bed temperature to "
-msgstr "Bed teperatuur ingesteld op "
-
-#: pronterface.py:226
-msgid "You cannot set negative temperatures. To turn the bed off entirely, set its temperature to 0."
-msgstr "Negatieve temperatuur is niet instelbaar. Om het printbed uit te schakelen wordt temperatuur 0 ingesteld."
-
-#: pronterface.py:243
-msgid "Do you want to erase the macro?"
-msgstr "Wilt u de macro verwijderen?"
-
-#: pronterface.py:247
-msgid "Cancelled."
-msgstr "Afgebroken"
-
-#: pronterface.py:277
-msgid "&Open..."
-msgstr "&Open..."
-
-#: pronterface.py:277
-msgid " Opens file"
-msgstr " Opent bestand"
-
-#: pronterface.py:278
-msgid "&Edit..."
-msgstr "&Wijzig..."
-
-#: pronterface.py:278
-msgid " Edit open file"
-msgstr " Wijzig geopend bestand"
-
-#: pronterface.py:279
-msgid "E&xit"
-msgstr "&Stoppen"
-
-#: pronterface.py:279
-msgid " Closes the Window"
-msgstr " Sluit het venster"
-
-#: pronterface.py:280
-msgid "&File"
-msgstr ""
-
-#: pronterface.py:285
-msgid "&Macros"
-msgstr "&Macros"
-
-#: pronterface.py:286
-msgid "<&New...>"
-msgstr "<&Nieuw...>"
-
-#: pronterface.py:287
-msgid "&Options"
-msgstr "&Opties"
-
-#: pronterface.py:287
-msgid " Options dialog"
-msgstr "Optievenster"
-
-#: pronterface.py:289
-msgid "SFACT Settings"
-msgstr "SFACT Instellingen"
-
-#: pronterface.py:289
-msgid " Adjust SFACT settings"
-msgstr "Instellen SFACT"
-
-#: pronterface.py:292
-msgid "SFACT Quick Settings"
-msgstr "SFACT Snelinstelling"
-
-#: pronterface.py:292
-msgid " Quickly adjust SFACT settings for active profile"
-msgstr " Eenvoudig SFACT's huidige profiel instellen"
-
-#: pronterface.py:295
-msgid "&Settings"
-msgstr "&Instellingen"
-
-#: pronterface.py:311
-msgid "Enter macro name"
-msgstr "Voer macronaam in"
-
-#: pronterface.py:314
-msgid "Macro name:"
-msgstr "Macronaam:"
-
-#: pronterface.py:317
-msgid "Ok"
-msgstr "Ok"
-
-#: pronterface.py:321
-#: pronterface.py:1197
-msgid "Cancel"
-msgstr "Annuleer"
-
-#: pronterface.py:339
-msgid "Name '"
-msgstr "Naam '"
-
-#: pronterface.py:339
-msgid "' is being used by built-in command"
-msgstr "' wordt gebruikt door ingebouwde instructie"
-
-#: pronterface.py:342
-msgid "Macro name may contain only alphanumeric symbols and underscores"
-msgstr ""
-
-#: pronterface.py:375
-msgid "Port:"
-msgstr "Poort"
-
-#: pronterface.py:397
-msgid "Connect"
-msgstr "Verbind"
-
-#: pronterface.py:399
-msgid "Connect to the printer"
-msgstr "Verbind met printer"
-
-#: pronterface.py:401
+#: pronterface.py:168
msgid "Disconnect"
msgstr "Ontkoppel"
-#: pronterface.py:405
+#: pronterface.py:227
+msgid "Setting hotend temperature to %f degrees Celsius."
+msgstr "Stel elementtemperatuur in op %f graden Celsius."
+
+#: pronterface.py:246 pronterface.py:282 pronterface.py:340
+msgid "Printer is not online."
+msgstr "Printer is niet verbonden."
+
+#: pronterface.py:248
+msgid ""
+"You cannot set negative temperatures. To turn the hotend off entirely, set "
+"its temperature to 0."
+msgstr ""
+"Negatieve temperatuur is niet instelbaar. Om het element uit te schakelen "
+"wordt temperatuur 0 ingesteld."
+
+#: pronterface.py:250
+msgid "You must enter a temperature. (%s)"
+msgstr "Er moet een temperatuur worden ingesteld. (%s)"
+
+#: pronterface.py:263
+msgid "Setting bed temperature to %f degrees Celsius."
+msgstr "Bed teperatuur ingesteld op %f graden Celsius."
+
+#: pronterface.py:284
+msgid ""
+"You cannot set negative temperatures. To turn the bed off entirely, set its "
+"temperature to 0."
+msgstr ""
+"Negatieve temperatuur is niet instelbaar. Om het printbed uit te schakelen "
+"wordt temperatuur 0 ingesteld."
+
+#: pronterface.py:286
+msgid "You must enter a temperature."
+msgstr "Er moet een temperatuur worden ingesteld."
+
+#: pronterface.py:301
+msgid "Do you want to erase the macro?"
+msgstr "Wilt u de macro verwijderen?"
+
+#: pronterface.py:305
+msgid "Cancelled."
+msgstr "Afgebroken"
+
+#: pronterface.py:346
+msgid " Opens file"
+msgstr " Opent bestand"
+
+#: pronterface.py:346
+msgid "&Open..."
+msgstr "&Open..."
+
+#: pronterface.py:347
+msgid " Edit open file"
+msgstr " Wijzig geopend bestand"
+
+#: pronterface.py:347
+msgid "&Edit..."
+msgstr "&Wijzig..."
+
+#: pronterface.py:348
+msgid " Clear output console"
+msgstr ""
+
+#: pronterface.py:348
+msgid "Clear console"
+msgstr ""
+
+#: pronterface.py:349
+msgid " Project slices"
+msgstr ""
+
+#: pronterface.py:349
+msgid "Projector"
+msgstr ""
+
+#: pronterface.py:350
+msgid " Closes the Window"
+msgstr " Sluit het venster"
+
+#: pronterface.py:350
+msgid "E&xit"
+msgstr "&Stoppen"
+
+#: pronterface.py:351
+msgid "&File"
+msgstr ""
+
+#: pronterface.py:356
+msgid "&Macros"
+msgstr "&Macros"
+
+#: pronterface.py:357
+msgid "<&New...>"
+msgstr "<&Nieuw...>"
+
+#: pronterface.py:358
+msgid " Options dialog"
+msgstr "Optievenster"
+
+#: pronterface.py:358
+msgid "&Options"
+msgstr "&Opties"
+
+#: pronterface.py:360
+#, fuzzy
+msgid " Adjust slicing settings"
+msgstr "Instellen SFACT"
+
+#: pronterface.py:360
+#, fuzzy
+msgid "Slicing Settings"
+msgstr "SFACT Instellingen"
+
+#: pronterface.py:367
+msgid "&Settings"
+msgstr "&Instellingen"
+
+#: pronterface.py:383
+msgid "Enter macro name"
+msgstr "Voer macronaam in"
+
+#: pronterface.py:386
+msgid "Macro name:"
+msgstr "Macronaam:"
+
+#: pronterface.py:389
+msgid "Ok"
+msgstr "Ok"
+
+#: pronterface.py:393 pronterface.py:1344 pronterface.py:1601
+msgid "Cancel"
+msgstr "Annuleer"
+
+#: pronterface.py:411
+msgid "Name '%s' is being used by built-in command"
+msgstr "Naam '%s' wordt gebruikt door ingebouwde instructie"
+
+#: pronterface.py:414
+msgid "Macro name may contain only alphanumeric symbols and underscores"
+msgstr ""
+
+#: pronterface.py:463
+msgid "Port"
+msgstr "Poort"
+
+#: pronterface.py:482
+msgid "Connect"
+msgstr "Verbind"
+
+#: pronterface.py:484
+msgid "Connect to the printer"
+msgstr "Verbind met printer"
+
+#: pronterface.py:486
msgid "Reset"
msgstr "Reset"
-#: pronterface.py:408
-#: pronterface.py:592
+#: pronterface.py:489 pronterface.py:766
msgid "Mini mode"
msgstr "Mini-venster"
-#: pronterface.py:414
-msgid ""
-"Monitor\n"
-"printer"
+#: pronterface.py:493
+#, fuzzy
+msgid "Monitor Printer"
msgstr "Printercommunicatie volgen"
-#: pronterface.py:423
+#: pronterface.py:503
msgid "Load file"
msgstr "open bestand"
-#: pronterface.py:426
-msgid "SD Upload"
-msgstr "uploaden naar SD"
+#: pronterface.py:506
+msgid "Compose"
+msgstr ""
-#: pronterface.py:430
-msgid "SD Print"
-msgstr "Afdruk van SD"
+#: pronterface.py:510
+msgid "SD"
+msgstr ""
-#: pronterface.py:438
-#: pronterface.py:1021
-#: pronterface.py:1061
-#: pronterface.py:1109
-#: pronterface.py:1133
-#: pronterface.py:1160
-#: pronterface.py:1174
+#: pronterface.py:518 pronterface.py:1388 pronterface.py:1433
+#: pronterface.py:1483 pronterface.py:1508 pronterface.py:1542
+#: pronterface.py:1557
msgid "Pause"
msgstr "Pauze"
-#: pronterface.py:452
+#: pronterface.py:531
msgid "Send"
msgstr "Zend"
-#: pronterface.py:460
-#: pronterface.py:518
+#: pronterface.py:539 pronterface.py:640
msgid "mm/min"
msgstr "mm/min"
-#: pronterface.py:462
+#: pronterface.py:541
msgid "XY:"
msgstr "XY:"
-#: pronterface.py:464
+#: pronterface.py:543
msgid "Z:"
msgstr "Z:"
-#: pronterface.py:481
+#: pronterface.py:566 pronterface.py:647
msgid "Heater:"
msgstr "Element:"
-#: pronterface.py:489
-#: pronterface.py:501
+#: pronterface.py:569 pronterface.py:589
+msgid "Off"
+msgstr ""
+
+#: pronterface.py:581 pronterface.py:601
msgid "Set"
msgstr "Stel in"
-#: pronterface.py:493
+#: pronterface.py:586 pronterface.py:649
msgid "Bed:"
msgstr "Bed:"
-#: pronterface.py:512
+#: pronterface.py:634
msgid "mm"
msgstr "mm"
-#: pronterface.py:551
-#: pronterface.py:846
-#: pronterface.py:1055
+#: pronterface.py:692 pronterface.py:1196 pronterface.py:1427
msgid "Not connected to printer."
msgstr "Printer is niet verbonden."
-#: pronterface.py:599
+#: pronterface.py:721
+msgid "SD Upload"
+msgstr "uploaden naar SD"
+
+#: pronterface.py:725
+msgid "SD Print"
+msgstr "Afdruk van SD"
+
+#: pronterface.py:773
msgid "Full mode"
msgstr "Volledig venster"
-#: pronterface.py:637
-msgid "Defines custom button. Usage: button \"title\" [/c \"colour\"] command"
-msgstr "Definieert eigen knop. Gebruik: knop \"titel\" [/c \"kleur\"] commando"
+#: pronterface.py:798
+msgid "Execute command: "
+msgstr ""
-#: pronterface.py:659
+#: pronterface.py:809
+#, fuzzy
+msgid "click to add new custom button"
+msgstr "Definieer eigen knop."
+
+#: pronterface.py:828
+msgid ""
+"Defines custom button. Usage: button \"title\" [/c \"colour\"] command"
+msgstr ""
+"Definieert eigen knop. Gebruik: knop \"titel\" [/c \"kleur\"] commando"
+
+#: pronterface.py:850
msgid "Custom button number should be between 0 and 63"
msgstr "Knopnummer moet tussen 0 en 63 zijn"
-#: pronterface.py:749
-#, python-format
+#: pronterface.py:942
msgid "Edit custom button '%s'"
msgstr "Wijzig gedefineerde knop '%s'"
-#: pronterface.py:751
+#: pronterface.py:944
msgid "Move left <<"
msgstr "Verplaats links <<"
-#: pronterface.py:754
+#: pronterface.py:947
msgid "Move right >>"
msgstr "Verplaats rechts >>"
-#: pronterface.py:758
-#, python-format
+#: pronterface.py:951
msgid "Remove custom button '%s'"
msgstr "Verwijder gedefinieerde knop '%s'"
-#: pronterface.py:761
+#: pronterface.py:954
msgid "Add custom button"
msgstr "Definieer eigen knop."
-#: pronterface.py:776
+#: pronterface.py:1099
msgid "event object missing"
msgstr "vermist object"
-#: pronterface.py:804
+#: pronterface.py:1127
msgid "Invalid period given."
msgstr "Foute gegevens ingevoerd"
-#: pronterface.py:807
+#: pronterface.py:1130
msgid "Monitoring printer."
msgstr "Printercommunicatie wordt gevolgd."
-#: pronterface.py:809
+#: pronterface.py:1132
msgid "Done monitoring."
msgstr "Klaar met volgen."
-#: pronterface.py:828
+#: pronterface.py:1154
msgid "Printer is online. "
msgstr "Printer is verbonden. "
-#: pronterface.py:830
-#: pronterface.py:969
-#: pronterface.py:1019
+#: pronterface.py:1156 pronterface.py:1331
msgid "Loaded "
-msgstr "Geladen"
+msgstr "Geladen "
-#: pronterface.py:833
-msgid "Hotend"
-msgstr "Element"
-
-#: pronterface.py:833
+#: pronterface.py:1159
msgid "Bed"
msgstr "Bed"
-#: pronterface.py:836
-#, python-format
+#: pronterface.py:1159
+msgid "Hotend"
+msgstr "Element"
+
+#: pronterface.py:1169
msgid " SD printing:%04.2f %%"
msgstr " SD printen:%04.2f %%"
-#: pronterface.py:838
-#, python-format
-msgid " Printing:%04.2f %%"
-msgstr " Printen:%04.2f %%"
+#: pronterface.py:1172
+msgid " Printing:%04.2f %% |"
+msgstr " Printen:%04.2f %% |"
-#: pronterface.py:892
+#: pronterface.py:1173
+msgid " Line# %d of %d lines |"
+msgstr ""
+
+#: pronterface.py:1178
+msgid " Est: %s of %s remaining | "
+msgstr ""
+
+#: pronterface.py:1180
+msgid " Z: %0.2f mm"
+msgstr " Z: %0.2f mm"
+
+#: pronterface.py:1247
msgid "Opening file failed."
msgstr "Bestand openen mislukt"
-#: pronterface.py:898
+#: pronterface.py:1253
msgid "Starting print"
msgstr "Start het printen"
-#: pronterface.py:921
-msgid "Select the file to print"
-msgstr "Kies het te printen bestand"
-
-#: pronterface.py:921
+#: pronterface.py:1276
msgid "Pick SD file"
msgstr "Kies bestand op SD"
-#: pronterface.py:949
-msgid "Skeinforge execution failed."
-msgstr "Skeinforge was niet succesvol."
+#: pronterface.py:1276
+msgid "Select the file to print"
+msgstr "Kies het te printen bestand"
-#: pronterface.py:956
-msgid "Skeining..."
+#: pronterface.py:1311
+msgid "Failed to execute slicing software: "
+msgstr ""
+
+#: pronterface.py:1318
+#, fuzzy
+msgid "Slicing..."
msgstr "Skeinforge draait..."
-#: pronterface.py:969
-#: pronterface.py:1019
-#, python-format
+#: pronterface.py:1331
msgid ", %d lines"
-msgstr ",%d regels"
+msgstr ", %d regels"
-#: pronterface.py:978
-msgid "Skeining "
+#: pronterface.py:1338
+#, fuzzy
+msgid "Load File"
+msgstr "open bestand"
+
+#: pronterface.py:1345
+#, fuzzy
+msgid "Slicing "
msgstr "Skeinforge draait"
-#: pronterface.py:980
-msgid ""
-"Skeinforge not found. \n"
-"Please copy Skeinforge into a directory named \"skeinforge\" in the same directory as this file."
-msgstr ""
-"Skeinforge niet gevonden.\n"
-"Plaats Skeinforge in een map met de naam \"skeinforge\" in dezelfde map als dit bestand."
-
-#: pronterface.py:999
+#: pronterface.py:1364
msgid "Open file to print"
msgstr "Open het te printen bestand"
-#: pronterface.py:1000
-msgid "STL and GCODE files (;*.gcode;*.g;*.stl;*.STL;)"
+#: pronterface.py:1365
+#, fuzzy
+msgid "OBJ, STL, and GCODE files (;*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ;)"
msgstr "STL en GCODE bestanden (;*.gcode;*.g;*.stl;*.STL;)"
-#: pronterface.py:1007
+#: pronterface.py:1372
msgid "File not found!"
msgstr "Bestand niet gevonden!"
-#: pronterface.py:1029
-#, fuzzy
+#: pronterface.py:1386
+msgid "Loaded %s, %d lines"
+msgstr "Geladen %s, %d regels"
+
+#: pronterface.py:1396
msgid "mm of filament used in this print\n"
-msgstr "mm fillament wordt gebruikt in deze print"
+msgstr "mm fillament wordt gebruikt in deze print\n"
-#: pronterface.py:1030
-#: pronterface.py:1031
-#: pronterface.py:1032
-msgid "the print goes from"
-msgstr ""
-
-#: pronterface.py:1030
-#: pronterface.py:1031
-#: pronterface.py:1032
-msgid "mm to"
-msgstr ""
-
-#: pronterface.py:1030
+#: pronterface.py:1397
msgid ""
-"mm in X\n"
-"and is"
+"the print goes from %f mm to %f mm in X\n"
+"and is %f mm wide\n"
msgstr ""
-#: pronterface.py:1030
-#: pronterface.py:1031
-msgid "mm wide\n"
-msgstr ""
-
-#: pronterface.py:1031
+#: pronterface.py:1398
msgid ""
-"mm in Y\n"
-"and is"
+"the print goes from %f mm to %f mm in Y\n"
+"and is %f mm wide\n"
msgstr ""
-#: pronterface.py:1032
+#: pronterface.py:1399
msgid ""
-"mm in Z\n"
-"and is"
+"the print goes from %f mm to %f mm in Z\n"
+"and is %f mm high\n"
msgstr ""
-#: pronterface.py:1032
-msgid "mm high\n"
+#: pronterface.py:1400
+msgid "Estimated duration (pessimistic): "
msgstr ""
-#: pronterface.py:1052
+#: pronterface.py:1424
msgid "No file loaded. Please use load first."
msgstr "Geen bestand geladen. Eerst bestand inladen."
-#: pronterface.py:1063
+#: pronterface.py:1435
msgid "Restart"
msgstr "Herstart"
-#: pronterface.py:1067
+#: pronterface.py:1439
msgid "File upload complete"
msgstr "Bestandsupload voltooid"
-#: pronterface.py:1086
+#: pronterface.py:1458
msgid "Pick SD filename"
msgstr "Kies bestandsnaam op SD"
-#: pronterface.py:1102
+#: pronterface.py:1466
+#, fuzzy
+msgid "Paused."
+msgstr "Pauze"
+
+#: pronterface.py:1476
msgid "Resume"
msgstr "Hervat"
-#: pronterface.py:1168
+#: pronterface.py:1492
+#, fuzzy
+msgid "Connecting..."
+msgstr "Verbind"
+
+#: pronterface.py:1523
+#, fuzzy
+msgid "Disconnected."
+msgstr "Ontkoppel"
+
+#: pronterface.py:1550
+#, fuzzy
+msgid "Reset."
+msgstr "Reset"
+
+#: pronterface.py:1551
msgid "Are you sure you want to reset the printer?"
msgstr "Weet je zeker dat je de printer wilt resetten?"
-#: pronterface.py:1168
+#: pronterface.py:1551
msgid "Reset?"
msgstr "resetten?"
-#: pronterface.py:1193
+#: pronterface.py:1597
msgid "Save"
msgstr ""
-#: pronterface.py:1248
+#: pronterface.py:1653
msgid "Edit settings"
msgstr "Wijzig instellingen"
-#: pronterface.py:1250
+#: pronterface.py:1655
msgid "Defaults"
msgstr "Standaardinstelling"
-#: pronterface.py:1272
+#: pronterface.py:1684
msgid "Custom button"
msgstr "Gedefinieerde knop"
-#: pronterface.py:1280
+#: pronterface.py:1689
msgid "Button title"
msgstr "Knoptitel"
-#: pronterface.py:1283
+#: pronterface.py:1692
msgid "Command"
msgstr "Commando"
-#: pronterface.py:1292
+#: pronterface.py:1701
msgid "Color"
msgstr "Kleur"
+#~ msgid "X+100"
+#~ msgstr "X+100"
+
+#~ msgid "X+10"
+#~ msgstr "X+10"
+
+#~ msgid "X+1"
+#~ msgstr "X+1"
+
+#~ msgid "X+0.1"
+#~ msgstr "X+0.1"
+
+#~ msgid "HomeX"
+#~ msgstr "0-puntX"
+
+#~ msgid "X-0.1"
+#~ msgstr "X-0.1"
+
+#~ msgid "X-1"
+#~ msgstr "X-1"
+
+#~ msgid "X-10"
+#~ msgstr "X-10"
+
+#~ msgid "X-100"
+#~ msgstr "X-100"
+
+#~ msgid "Y+100"
+#~ msgstr "Y+100"
+
+#~ msgid "Y+10"
+#~ msgstr "Y+10"
+
+#~ msgid "Y+1"
+#~ msgstr "Y+1"
+
+#~ msgid "Y+0.1"
+#~ msgstr "Y+0.1"
+
+#~ msgid "HomeY"
+#~ msgstr "0-puntY"
+
+#~ msgid "Y-0.1"
+#~ msgstr "Y-0.1"
+
+#~ msgid "Y-1"
+#~ msgstr "Y-1"
+
+#~ msgid "Y-10"
+#~ msgstr "Y-10"
+
+#~ msgid "Y-100"
+#~ msgstr "Y-100"
+
+#~ msgid "Z+10"
+#~ msgstr "Z+10"
+
+#~ msgid "Z+1"
+#~ msgstr "Z+1"
+
+#~ msgid "Z+0.1"
+#~ msgstr "Z+0.1"
+
+#~ msgid "HomeZ"
+#~ msgstr "0-puntZ"
+
+#~ msgid "Z-0.1"
+#~ msgstr "Z-0.1"
+
+#~ msgid "Z-1"
+#~ msgstr "Z-1"
+
+#~ msgid "Z-10"
+#~ msgstr "Z-10"
+
+#~ msgid "Home"
+#~ msgstr "0-punt"
+
+#~ msgid " degrees Celsius."
+#~ msgstr " graden Celsius."
+
+#~ msgid "SFACT Quick Settings"
+#~ msgstr "SFACT Snelinstelling"
+
+#~ msgid " Quickly adjust SFACT settings for active profile"
+#~ msgstr " Eenvoudig SFACT's huidige profiel instellen"
+
+#~ msgid "Name '"
+#~ msgstr "Naam '"
+
+#~ msgid "Skeinforge execution failed."
+#~ msgstr "Skeinforge was niet succesvol."
+
+#~ msgid ""
+#~ "Skeinforge not found. \n"
+#~ "Please copy Skeinforge into a directory named \"skeinforge\" in the same "
+#~ "directory as this file."
+#~ msgstr ""
+#~ "Skeinforge niet gevonden.\n"
+#~ "Plaats Skeinforge in een map met de naam \"skeinforge\" in dezelfde map "
+#~ "als dit bestand."
+
#~ msgid "&Print"
#~ msgstr "&Printen"
diff --git a/locale/nl/LC_MESSAGES/pronterface.mo b/locale/nl/LC_MESSAGES/pronterface.mo
index dc2606e..9198c7e 100644
Binary files a/locale/nl/LC_MESSAGES/pronterface.mo and b/locale/nl/LC_MESSAGES/pronterface.mo differ
diff --git a/locale/plater.pot b/locale/plater.pot
index c4daabd..2db698d 100644
--- a/locale/plater.pot
+++ b/locale/plater.pot
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2012-01-09 15:07+CET\n"
+"POT-Creation-Date: 2012-02-26 02:40+CET\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -15,79 +15,79 @@ msgstr ""
"Generated-By: pygettext.py 1.5\n"
-#: plater.py:223
+#: plater.py:247
msgid "Plate building tool"
msgstr ""
-#: plater.py:229
+#: plater.py:253
msgid "Clear"
msgstr ""
-#: plater.py:230
+#: plater.py:254
msgid "Load"
msgstr ""
-#: plater.py:232
+#: plater.py:256
msgid "Export"
msgstr ""
-#: plater.py:235
+#: plater.py:259
msgid "Done"
msgstr ""
-#: plater.py:237
+#: plater.py:261
msgid "Cancel"
msgstr ""
-#: plater.py:239
+#: plater.py:263
msgid "Snap to Z = 0"
msgstr ""
-#: plater.py:240
+#: plater.py:264
msgid "Put at 100, 100"
msgstr ""
-#: plater.py:241
+#: plater.py:265
msgid "Delete"
msgstr ""
-#: plater.py:242
+#: plater.py:266
msgid "Auto"
msgstr ""
-#: plater.py:266
+#: plater.py:290
msgid "Autoplating"
msgstr ""
-#: plater.py:294
+#: plater.py:318
msgid "Bed full, sorry sir :("
msgstr ""
-#: plater.py:304
+#: plater.py:328
msgid "Are you sure you want to clear the grid? All unsaved changes will be lost."
msgstr ""
-#: plater.py:304
+#: plater.py:328
msgid "Clear the grid?"
msgstr ""
-#: plater.py:346
+#: plater.py:370
msgid "Pick file to save to"
msgstr ""
-#: plater.py:347
-msgid "STL files (;*.stl;)"
+#: plater.py:371
+msgid "STL files (;*.stl;*.STL;)"
msgstr ""
-#: plater.py:367
-msgid "wrote "
+#: plater.py:391
+msgid "wrote %s"
msgstr ""
-#: plater.py:370
+#: plater.py:394
msgid "Pick file to load"
msgstr ""
-#: plater.py:371
-msgid "STL files (;*.stl;)|*.stl|OpenSCAD files (;*.scad;)|*.scad"
+#: plater.py:395
+msgid "STL files (;*.stl;*.STL;)|*.stl|OpenSCAD files (;*.scad;)|*.scad"
msgstr ""
diff --git a/locale/pronterface.pot b/locale/pronterface.pot
index 3429d9a..7f3ab68 100644
--- a/locale/pronterface.pot
+++ b/locale/pronterface.pot
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2012-01-19 09:21+CET\n"
+"POT-Creation-Date: 2012-03-16 03:48+CET\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -15,61 +15,11 @@ msgstr ""
"Generated-By: pygettext.py 1.5\n"
-#: pronsole.py:250
-msgid "Communications Speed (default: 115200)"
-msgstr ""
-
-#: pronsole.py:251
-msgid "Heated Build Platform temp for ABS (default: 110 deg C)"
-msgstr ""
-
-#: pronsole.py:252
-msgid "Heated Build Platform temp for PLA (default: 60 deg C)"
-msgstr ""
-
-#: pronsole.py:253
-msgid "Feedrate for Control Panel Moves in Extrusions (default: 300mm/min)"
-msgstr ""
-
-#: pronsole.py:254
-msgid "Port used to communicate with printer"
-msgstr ""
-
-#: pronsole.py:255
-msgid ""
-"Slice command\n"
-" default:\n"
-" python skeinforge/skeinforge_application/skeinforge_utilities/skeinforge_craft.py $s)"
-msgstr ""
-
-#: pronsole.py:256
-msgid ""
-"Slice settings command\n"
-" default:\n"
-" python skeinforge/skeinforge_application/skeinforge.py"
-msgstr ""
-
-#: pronsole.py:257
-msgid "Extruder temp for ABS (default: 230 deg C)"
-msgstr ""
-
-#: pronsole.py:258
-msgid "Extruder temp for PLA (default: 185 deg C)"
-msgstr ""
-
-#: pronsole.py:259
-msgid "Feedrate for Control Panel Moves in X and Y (default: 3000mm/min)"
-msgstr ""
-
-#: pronsole.py:260
-msgid "Feedrate for Control Panel Moves in Z (default: 200mm/min)"
-msgstr ""
-
-#: pronterface.py:15
+#: pronterface.py:30
msgid "WX is not installed. This program requires WX to run."
msgstr ""
-#: pronterface.py:66
+#: pronterface.py:81
msgid ""
"Dimensions of Build Platform\n"
" & optional offset of origin\n"
@@ -80,575 +30,545 @@ msgid ""
" XXXxYYYxZZZ+OffX+OffY+OffZ"
msgstr ""
-#: pronterface.py:67
+#: pronterface.py:82
msgid "Last Set Temperature for the Heated Print Bed"
msgstr ""
-#: pronterface.py:68
+#: pronterface.py:83
msgid "Folder of last opened file"
msgstr ""
-#: pronterface.py:69
+#: pronterface.py:84
msgid "Last Temperature of the Hot End"
msgstr ""
-#: pronterface.py:70
+#: pronterface.py:85
msgid "Width of Extrusion in Preview (default: 0.5)"
msgstr ""
-#: pronterface.py:71
+#: pronterface.py:86
msgid "Fine Grid Spacing (default: 10)"
msgstr ""
-#: pronterface.py:72
+#: pronterface.py:87
msgid "Coarse Grid Spacing (default: 50)"
msgstr ""
-#: pronterface.py:73
+#: pronterface.py:88
msgid "Pronterface background color (default: #FFFFFF)"
msgstr ""
-#: pronterface.py:76
+#: pronterface.py:91
msgid "Printer Interface"
msgstr ""
-#: pronterface.py:93
+#: pronterface.py:109
msgid "Motors off"
msgstr ""
-#: pronterface.py:94
+#: pronterface.py:110
msgid "Check temp"
msgstr ""
-#: pronterface.py:95
+#: pronterface.py:111
msgid "Extrude"
msgstr ""
-#: pronterface.py:96
+#: pronterface.py:112
msgid "Reverse"
msgstr ""
-#: pronterface.py:114
+#: pronterface.py:130
msgid ""
"# I moved all your custom buttons into .pronsolerc.\n"
"# Please don't add them here any more.\n"
"# Backup of your old buttons is in custombtn.old\n"
msgstr ""
-#: pronterface.py:119
+#: pronterface.py:135
msgid "Note!!! You have specified custom buttons in both custombtn.txt and .pronsolerc"
msgstr ""
-#: pronterface.py:120
+#: pronterface.py:136
msgid "Ignoring custombtn.txt. Remove all current buttons to revert to custombtn.txt"
msgstr ""
-#: pronterface.py:148 pronterface.py:499 pronterface.py:1319
-#: pronterface.py:1373 pronterface.py:1495 pronterface.py:1529
-#: pronterface.py:1544
+#: pronterface.py:165 pronterface.py:520 pronterface.py:1343
+#: pronterface.py:1397 pronterface.py:1521 pronterface.py:1555
+#: pronterface.py:1567
msgid "Print"
msgstr ""
-#: pronterface.py:152
+#: pronterface.py:169
msgid "Printer is now online."
msgstr ""
-#: pronterface.py:212
-msgid "Setting hotend temperature to "
+#: pronterface.py:170
+msgid "Disconnect"
msgstr ""
-#: pronterface.py:212 pronterface.py:248
-msgid " degrees Celsius."
+#: pronterface.py:229
+msgid "Setting hotend temperature to %f degrees Celsius."
msgstr ""
-#: pronterface.py:231 pronterface.py:267 pronterface.py:325
+#: pronterface.py:248 pronterface.py:284 pronterface.py:346
msgid "Printer is not online."
msgstr ""
-#: pronterface.py:233
+#: pronterface.py:250
msgid "You cannot set negative temperatures. To turn the hotend off entirely, set its temperature to 0."
msgstr ""
-#: pronterface.py:248
-msgid "Setting bed temperature to "
+#: pronterface.py:252
+msgid "You must enter a temperature. (%s)"
msgstr ""
-#: pronterface.py:269
-msgid "You cannot set negative temperatures. To turn the bed off entirely, set its temperature to 0."
-msgstr ""
-
-#: pronterface.py:271
-msgid "You must enter a temperature."
+#: pronterface.py:265
+msgid "Setting bed temperature to %f degrees Celsius."
msgstr ""
#: pronterface.py:286
+msgid "You cannot set negative temperatures. To turn the bed off entirely, set its temperature to 0."
+msgstr ""
+
+#: pronterface.py:288
+msgid "You must enter a temperature."
+msgstr ""
+
+#: pronterface.py:303
msgid "Do you want to erase the macro?"
msgstr ""
-#: pronterface.py:290
+#: pronterface.py:307
msgid "Cancelled."
msgstr ""
-#: pronterface.py:331
+#: pronterface.py:352
msgid " Opens file"
msgstr ""
-#: pronterface.py:331
+#: pronterface.py:352
msgid "&Open..."
msgstr ""
-#: pronterface.py:332
+#: pronterface.py:353
msgid " Edit open file"
msgstr ""
-#: pronterface.py:332
+#: pronterface.py:353
msgid "&Edit..."
msgstr ""
-#: pronterface.py:333
+#: pronterface.py:354
msgid " Clear output console"
msgstr ""
-#: pronterface.py:333
+#: pronterface.py:354
msgid "Clear console"
msgstr ""
-#: pronterface.py:334
+#: pronterface.py:355
msgid " Project slices"
msgstr ""
-#: pronterface.py:334
+#: pronterface.py:355
msgid "Projector"
msgstr ""
-#: pronterface.py:335
+#: pronterface.py:356
msgid " Closes the Window"
msgstr ""
-#: pronterface.py:335
+#: pronterface.py:356
msgid "E&xit"
msgstr ""
-#: pronterface.py:336
+#: pronterface.py:357
msgid "&File"
msgstr ""
-#: pronterface.py:341
+#: pronterface.py:362
msgid "&Macros"
msgstr ""
-#: pronterface.py:342
+#: pronterface.py:363
msgid "<&New...>"
msgstr ""
-#: pronterface.py:343
+#: pronterface.py:364
msgid " Options dialog"
msgstr ""
-#: pronterface.py:343
+#: pronterface.py:364
msgid "&Options"
msgstr ""
-#: pronterface.py:345
+#: pronterface.py:366
msgid " Adjust slicing settings"
msgstr ""
-#: pronterface.py:345
+#: pronterface.py:366
msgid "Slicing Settings"
msgstr ""
-#: pronterface.py:352
+#: pronterface.py:373
msgid "&Settings"
msgstr ""
-#: pronterface.py:368
+#: pronterface.py:389
msgid "Enter macro name"
msgstr ""
-#: pronterface.py:371
+#: pronterface.py:392
msgid "Macro name:"
msgstr ""
-#: pronterface.py:374
+#: pronterface.py:395
msgid "Ok"
msgstr ""
-#: pronterface.py:378 pronterface.py:1330 pronterface.py:1587
+#: pronterface.py:399 pronterface.py:1354 pronterface.py:1613
msgid "Cancel"
msgstr ""
-#: pronterface.py:396
-msgid "' is being used by built-in command"
+#: pronterface.py:417
+msgid "Name '%s' is being used by built-in command"
msgstr ""
-#: pronterface.py:396
-msgid "Name '"
-msgstr ""
-
-#: pronterface.py:399
+#: pronterface.py:420
msgid "Macro name may contain only alphanumeric symbols and underscores"
msgstr ""
-#: pronterface.py:448
+#: pronterface.py:469
msgid "Port"
msgstr ""
-#: pronterface.py:467
+#: pronterface.py:488
msgid "Connect"
msgstr ""
-#: pronterface.py:469
+#: pronterface.py:490
msgid "Connect to the printer"
msgstr ""
-#: pronterface.py:471
+#: pronterface.py:492
msgid "Reset"
msgstr ""
-#: pronterface.py:474 pronterface.py:751
+#: pronterface.py:495 pronterface.py:772
msgid "Mini mode"
msgstr ""
-#: pronterface.py:478
+#: pronterface.py:499
msgid "Monitor Printer"
msgstr ""
-#: pronterface.py:488
+#: pronterface.py:509
msgid "Load file"
msgstr ""
-#: pronterface.py:491
+#: pronterface.py:512
msgid "Compose"
msgstr ""
-#: pronterface.py:495
+#: pronterface.py:516
msgid "SD"
msgstr ""
-#: pronterface.py:503 pronterface.py:1374 pronterface.py:1419
-#: pronterface.py:1469 pronterface.py:1494 pronterface.py:1528
-#: pronterface.py:1543
+#: pronterface.py:524 pronterface.py:1398 pronterface.py:1444
+#: pronterface.py:1495 pronterface.py:1520 pronterface.py:1554
+#: pronterface.py:1570
msgid "Pause"
msgstr ""
-#: pronterface.py:516
+#: pronterface.py:537
msgid "Send"
msgstr ""
-#: pronterface.py:524 pronterface.py:625
+#: pronterface.py:545 pronterface.py:646
msgid "mm/min"
msgstr ""
-#: pronterface.py:526
+#: pronterface.py:547
msgid "XY:"
msgstr ""
-#: pronterface.py:528
+#: pronterface.py:549
msgid "Z:"
msgstr ""
-#: pronterface.py:551 pronterface.py:632
+#: pronterface.py:572 pronterface.py:653
msgid "Heater:"
msgstr ""
-#: pronterface.py:554 pronterface.py:574
+#: pronterface.py:575 pronterface.py:595
msgid "Off"
msgstr ""
-#: pronterface.py:566 pronterface.py:586
+#: pronterface.py:587 pronterface.py:607
msgid "Set"
msgstr ""
-#: pronterface.py:571 pronterface.py:634
+#: pronterface.py:592 pronterface.py:655
msgid "Bed:"
msgstr ""
-#: pronterface.py:619
+#: pronterface.py:640
msgid "mm"
msgstr ""
-#: pronterface.py:677 pronterface.py:1182 pronterface.py:1413
+#: pronterface.py:698 pronterface.py:1206 pronterface.py:1438
msgid "Not connected to printer."
msgstr ""
-#: pronterface.py:706
+#: pronterface.py:727
msgid "SD Upload"
msgstr ""
-#: pronterface.py:710
+#: pronterface.py:731
msgid "SD Print"
msgstr ""
-#: pronterface.py:758
+#: pronterface.py:779
msgid "Full mode"
msgstr ""
-#: pronterface.py:783
+#: pronterface.py:804
msgid "Execute command: "
msgstr ""
-#: pronterface.py:794
+#: pronterface.py:815
msgid "click to add new custom button"
msgstr ""
-#: pronterface.py:813
+#: pronterface.py:834
msgid "Defines custom button. Usage: button \"title\" [/c \"colour\"] command"
msgstr ""
-#: pronterface.py:835
+#: pronterface.py:856
msgid "Custom button number should be between 0 and 63"
msgstr ""
-#: pronterface.py:927
+#: pronterface.py:948
msgid "Edit custom button '%s'"
msgstr ""
-#: pronterface.py:929
+#: pronterface.py:950
msgid "Move left <<"
msgstr ""
-#: pronterface.py:932
+#: pronterface.py:953
msgid "Move right >>"
msgstr ""
-#: pronterface.py:936
+#: pronterface.py:957
msgid "Remove custom button '%s'"
msgstr ""
-#: pronterface.py:939
+#: pronterface.py:960
msgid "Add custom button"
msgstr ""
-#: pronterface.py:1084
+#: pronterface.py:1105
msgid "event object missing"
msgstr ""
-#: pronterface.py:1112
+#: pronterface.py:1133
msgid "Invalid period given."
msgstr ""
-#: pronterface.py:1115
+#: pronterface.py:1136
msgid "Monitoring printer."
msgstr ""
-#: pronterface.py:1117
+#: pronterface.py:1138
msgid "Done monitoring."
msgstr ""
-#: pronterface.py:1139
+#: pronterface.py:1160
msgid "Printer is online. "
msgstr ""
-#: pronterface.py:1141 pronterface.py:1317 pronterface.py:1372
+#: pronterface.py:1162 pronterface.py:1341
msgid "Loaded "
msgstr ""
-#: pronterface.py:1144
+#: pronterface.py:1165
msgid "Bed"
msgstr ""
-#: pronterface.py:1144
+#: pronterface.py:1165
msgid "Hotend"
msgstr ""
-#: pronterface.py:1154
+#: pronterface.py:1175
msgid " SD printing:%04.2f %%"
msgstr ""
-#: pronterface.py:1157
+#: pronterface.py:1178
msgid " Printing:%04.2f %% |"
msgstr ""
-#: pronterface.py:1158
-msgid " Line# "
+#: pronterface.py:1179
+msgid " Line# %d of %d lines |"
msgstr ""
-#: pronterface.py:1158
-msgid " lines |"
+#: pronterface.py:1184
+msgid " Est: %s of %s remaining | "
msgstr ""
-#: pronterface.py:1158
-msgid "of "
-msgstr ""
-
-#: pronterface.py:1163
-msgid " Est: "
-msgstr ""
-
-#: pronterface.py:1164
-msgid " of: "
-msgstr ""
-
-#: pronterface.py:1165
-msgid " Remaining | "
-msgstr ""
-
-#: pronterface.py:1166
+#: pronterface.py:1186
msgid " Z: %0.2f mm"
msgstr ""
-#: pronterface.py:1233
+#: pronterface.py:1257
msgid "Opening file failed."
msgstr ""
-#: pronterface.py:1239
+#: pronterface.py:1263
msgid "Starting print"
msgstr ""
-#: pronterface.py:1262
+#: pronterface.py:1286
msgid "Pick SD file"
msgstr ""
-#: pronterface.py:1262
+#: pronterface.py:1286
msgid "Select the file to print"
msgstr ""
-#: pronterface.py:1297
+#: pronterface.py:1321
msgid "Failed to execute slicing software: "
msgstr ""
-#: pronterface.py:1304
+#: pronterface.py:1328
msgid "Slicing..."
msgstr ""
-#: pronterface.py:1317 pronterface.py:1372
+#: pronterface.py:1341
msgid ", %d lines"
msgstr ""
-#: pronterface.py:1324
+#: pronterface.py:1348
msgid "Load File"
msgstr ""
-#: pronterface.py:1331
+#: pronterface.py:1355
msgid "Slicing "
msgstr ""
-#: pronterface.py:1350
+#: pronterface.py:1374
msgid "Open file to print"
msgstr ""
-#: pronterface.py:1351
-msgid "OBJ, STL, and GCODE files (;*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ;)"
-msgstr ""
-
-#: pronterface.py:1358
-msgid "File not found!"
+#: pronterface.py:1375
+msgid "OBJ, STL, and GCODE files (*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ)|*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ|All Files (*.*)|*.*"
msgstr ""
#: pronterface.py:1382
+msgid "File not found!"
+msgstr ""
+
+#: pronterface.py:1396
+msgid "Loaded %s, %d lines"
+msgstr ""
+
+#: pronterface.py:1406
msgid ""
"mm of filament used in this print\n"
msgstr ""
-#: pronterface.py:1383
+#: pronterface.py:1407
msgid ""
-"mm in X\n"
-"and is"
+"the print goes from %f mm to %f mm in X\n"
+"and is %f mm wide\n"
msgstr ""
-#: pronterface.py:1383 pronterface.py:1384
+#: pronterface.py:1408
msgid ""
-"mm wide\n"
+"the print goes from %f mm to %f mm in Y\n"
+"and is %f mm wide\n"
msgstr ""
-#: pronterface.py:1383 pronterface.py:1384 pronterface.py:1385
-msgid "mm to"
-msgstr ""
-
-#: pronterface.py:1383 pronterface.py:1384 pronterface.py:1385
-msgid "the print goes from"
-msgstr ""
-
-#: pronterface.py:1384
+#: pronterface.py:1409
msgid ""
-"mm in Y\n"
-"and is"
-msgstr ""
-
-#: pronterface.py:1385
-msgid ""
-"mm high\n"
-msgstr ""
-
-#: pronterface.py:1385
-msgid ""
-"mm in Z\n"
-"and is"
-msgstr ""
-
-#: pronterface.py:1386
-msgid "Estimated duration (pessimistic): "
+"the print goes from %f mm to %f mm in Z\n"
+"and is %f mm high\n"
msgstr ""
#: pronterface.py:1410
+msgid "Estimated duration (pessimistic): "
+msgstr ""
+
+#: pronterface.py:1435
msgid "No file loaded. Please use load first."
msgstr ""
-#: pronterface.py:1421
+#: pronterface.py:1446
msgid "Restart"
msgstr ""
-#: pronterface.py:1425
+#: pronterface.py:1450
msgid "File upload complete"
msgstr ""
-#: pronterface.py:1444
+#: pronterface.py:1469
msgid "Pick SD filename"
msgstr ""
-#: pronterface.py:1452
+#: pronterface.py:1477
msgid "Paused."
msgstr ""
-#: pronterface.py:1462
+#: pronterface.py:1488
msgid "Resume"
msgstr ""
-#: pronterface.py:1478
+#: pronterface.py:1504
msgid "Connecting..."
msgstr ""
-#: pronterface.py:1509
+#: pronterface.py:1535
msgid "Disconnected."
msgstr ""
-#: pronterface.py:1536
+#: pronterface.py:1562
msgid "Reset."
msgstr ""
-#: pronterface.py:1537
+#: pronterface.py:1563
msgid "Are you sure you want to reset the printer?"
msgstr ""
-#: pronterface.py:1537
+#: pronterface.py:1563
msgid "Reset?"
msgstr ""
-#: pronterface.py:1583
+#: pronterface.py:1609
msgid "Save"
msgstr ""
-#: pronterface.py:1639
+#: pronterface.py:1665
msgid "Edit settings"
msgstr ""
-#: pronterface.py:1641
+#: pronterface.py:1667
msgid "Defaults"
msgstr ""
-#: pronterface.py:1670
+#: pronterface.py:1696
msgid "Custom button"
msgstr ""
-#: pronterface.py:1675
+#: pronterface.py:1701
msgid "Button title"
msgstr ""
-#: pronterface.py:1678
+#: pronterface.py:1704
msgid "Command"
msgstr ""
-#: pronterface.py:1687
+#: pronterface.py:1713
msgid "Color"
msgstr ""
diff --git a/plater.py b/plater.py
index 28f4e5a..dc7d72a 100755
--- a/plater.py
+++ b/plater.py
@@ -256,8 +256,10 @@ class stlwin(wx.Frame):
self.eb = wx.Button(self.panel, label=_("Export"), pos=(100, 0))
self.eb.Bind(wx.EVT_BUTTON, self.export)
else:
- self.eb = wx.Button(self.panel, label=_("Done"), pos=(100, 0))
- self.eb.Bind(wx.EVT_BUTTON, lambda e: self.done(e, callback))
+ self.eb = wx.Button(self.panel, label=_("Export"), pos=(200, 205))
+ self.eb.Bind(wx.EVT_BUTTON, self.export)
+ self.edb = wx.Button(self.panel, label=_("Done"), pos=(100, 0))
+ self.edb.Bind(wx.EVT_BUTTON, lambda e: self.done(e, callback))
self.eb = wx.Button(self.panel, label=_("Cancel"), pos=(200, 0))
self.eb.Bind(wx.EVT_BUTTON, lambda e: self.Destroy())
self.sb = wx.Button(self.panel, label=_("Snap to Z = 0"), pos=(00, 255))
@@ -388,7 +390,7 @@ class stlwin(wx.Frame):
facets += i.facets
sf.close()
stltool.emitstl(name, facets, "plater_export")
- print _("wrote "), name
+ print _("wrote %s") % name
def right(self, event):
dlg = wx.FileDialog(self, _("Pick file to load"), self.basedir, style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST)
diff --git a/printcore.py b/printcore.py
index cadbc0e..f021c52 100755
--- a/printcore.py
+++ b/printcore.py
@@ -15,7 +15,7 @@
# You should have received a copy of the GNU General Public License
# along with Printrun. If not, see .
-from serial import Serial
+from serial import Serial, SerialException
from threading import Thread
from select import error as SelectError
import time, getopt, sys
@@ -47,6 +47,7 @@ class printcore():
self.endcb=None#impl ()
self.onlinecb=None#impl ()
self.loud=False#emit sent and received lines to terminal
+ self.greetings=['start','Grbl ']
if port is not None and baud is not None:
#print port, baud
self.connect(port, baud)
@@ -100,6 +101,12 @@ class printcore():
break
else:
raise
+ except SerialException, e:
+ print "Can't read from printer (disconnected?)."
+ break
+ except OSError, e:
+ print "Can't read from printer (disconnected?)."
+ break
if(len(line)>1):
self.log+=[line]
@@ -112,10 +119,10 @@ class printcore():
print "RECV: ",line.rstrip()
if(line.startswith('DEBUG_')):
continue
- if(line.startswith('start') or line.startswith('ok')):
+ if(line.startswith(tuple(self.greetings)) or line.startswith('ok')):
self.clear=True
- if(line.startswith('start') or line.startswith('ok') or "T:" in line):
- if (not self.online or line.startswith('start')) and self.onlinecb is not None:
+ if(line.startswith(tuple(self.greetings)) or line.startswith('ok') or "T:" in line):
+ if (not self.online or line.startswith(tuple(self.greetings))) and self.onlinecb is not None:
try:
self.onlinecb()
except:
@@ -279,7 +286,10 @@ class printcore():
self.sendcb(command)
except:
pass
- self.printer.write(str(command+"\n"))
+ try:
+ self.printer.write(str(command+"\n"))
+ except SerialException, e:
+ print "Can't write to printer (disconnected?)."
if __name__ == '__main__':
baud = 115200
diff --git a/projectlayer.py b/projectlayer.py
index e50ce8b..4db5f85 100644
--- a/projectlayer.py
+++ b/projectlayer.py
@@ -37,6 +37,13 @@ class dispframe(wx.Frame):
self.p=printer
self.pic=wx.StaticBitmap(self)
self.bitmap=wx.EmptyBitmap(*res)
+ self.bbitmap=wx.EmptyBitmap(*res)
+ dc=wx.MemoryDC()
+ dc.SelectObject(self.bbitmap)
+ dc.SetBackground(wx.Brush("black"))
+ dc.Clear()
+ dc.SelectObject(wx.NullBitmap)
+
self.SetBackgroundColour("black")
self.pic.Hide()
self.pen=wx.Pen("white")
@@ -61,20 +68,33 @@ class dispframe(wx.Frame):
self.pic.SetBitmap(self.bitmap)
self.pic.Show()
self.Refresh()
+
+ #self.pic.SetBitmap(self.bitmap)
+
except:
+ raise
pass
- def nextimg(self,event):
- if self.index.
@@ -21,7 +21,7 @@ import os, gettext, Queue, re
if os.path.exists('/usr/share/pronterface/locale'):
gettext.install('pronterface', '/usr/share/pronterface/locale', unicode=1)
-else:
+else:
gettext.install('pronterface', './locale', unicode=1)
try:
@@ -35,7 +35,7 @@ try:
except:
pass
StringIO=cStringIO
-
+
thread=threading.Thread
winsize=(800,500)
if os.name=="nt":
@@ -48,6 +48,7 @@ if os.name=="nt":
from xybuttons import XYButtons
from zbuttons import ZButtons
+from graph import Graph
import pronsole
def dosify(name):
@@ -93,7 +94,8 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.panel=wx.Panel(self,-1,size=size)
self.statuscheck=False
- self.capture_skip=[]
+ self.capture_skip={}
+ self.capture_skip_newline=False
self.tempreport=""
self.monitor=0
self.f=None
@@ -118,7 +120,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
customdict={}
try:
execfile("custombtn.txt",customdict)
- if len(customdict["btns"]):
+ if len(customdict["btns"]):
if not len(self.custombuttons):
try:
self.custombuttons = customdict["btns"]
@@ -133,7 +135,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
else:
print _("Note!!! You have specified custom buttons in both custombtn.txt and .pronsolerc")
print _("Ignoring custombtn.txt. Remove all current buttons to revert to custombtn.txt")
-
+
except:
pass
self.popmenu()
@@ -146,26 +148,27 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.p.startcb=self.startcb
self.p.endcb=self.endcb
self.starttime=0
+ self.extra_print_time=0
self.curlayer=0
self.cur_button=None
self.hsetpoint=0.0
self.bsetpoint=0.0
-
+
def startcb(self):
self.starttime=time.time()
print "Print Started at: " +time.strftime('%H:%M:%S',time.localtime(self.starttime))
-
+
def endcb(self):
if(self.p.queueindex==0):
print "Print ended at: " +time.strftime('%H:%M:%S',time.localtime(time.time()))
- print "and took: "+time.strftime('%H:%M:%S', time.gmtime(int(time.time()-self.starttime))) #+str(int(time.time()-self.starttime)/60)+" minutes "+str(int(time.time()-self.starttime)%60)+" seconds."
+ print "and took: "+time.strftime('%H:%M:%S', time.gmtime(int(time.time()-self.starttime+self.extra_print_time))) #+str(int(time.time()-self.starttime)/60)+" minutes "+str(int(time.time()-self.starttime)%60)+" seconds."
wx.CallAfter(self.pausebtn.Disable)
wx.CallAfter(self.printbtn.SetLabel,_("Print"))
-
-
+
+
def online(self):
print _("Printer is now online.")
- self.connectbtn.SetLabel("Disconnect")
+ self.connectbtn.SetLabel(_("Disconnect"))
self.connectbtn.Bind(wx.EVT_BUTTON,self.disconnect)
for i in self.printerControls:
@@ -177,8 +180,8 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
if self.filename:
wx.CallAfter(self.printbtn.Enable)
-
-
+
+
def sentcb(self,line):
if("G1" in line):
if("Z" in line):
@@ -196,7 +199,31 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
pass
#threading.Thread(target=self.gviz.addgcode,args=(line,1)).start()
#self.gwindow.p.addgcode(line,hilight=1)
-
+ if("M104" in line or "M109" in line):
+ if("S" in line):
+ try:
+ temp=float(line.split("S")[1].split("*")[0])
+ self.hottgauge.SetTarget(temp)
+ self.graph.SetExtruder0TargetTemperature(temp)
+ except:
+ pass
+ try:
+ self.sentlines.put_nowait(line)
+ except:
+ pass
+ if("M140" in line):
+ if("S" in line):
+ try:
+ temp=float(line.split("S")[1].split("*")[0])
+ self.bedtgauge.SetTarget(temp)
+ self.graph.SetBedTargetTemperature(temp)
+ except:
+ pass
+ try:
+ self.sentlines.put_nowait(line)
+ except:
+ pass
+
def do_extrude(self,l=""):
try:
if not (l.__class__=="".__class__ or l.__class__==u"".__class__) or (not len(l)):
@@ -204,7 +231,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
pronsole.pronsole.do_extrude(self,l)
except:
raise
-
+
def do_reverse(self,l=""):
try:
if not (l.__class__=="".__class__ or l.__class__==u"".__class__) or (not len(l)):
@@ -212,7 +239,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
pronsole.pronsole.do_extrude(self,l)
except:
pass
-
+
def do_settemp(self,l=""):
try:
if not (l.__class__=="".__class__ or l.__class__==u"".__class__) or (not len(l)):
@@ -224,10 +251,11 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
if f>=0:
if self.p.online:
self.p.send_now("M104 S"+l)
- print _("Setting hotend temperature to "),f,_(" degrees Celsius.")
+ print _("Setting hotend temperature to %f degrees Celsius.") % f
self.hsetpoint=f
self.hottgauge.SetTarget(int(f))
- if f>0:
+ self.graph.SetExtruder0TargetTemperature(int(f))
+ if f>0:
wx.CallAfter(self.htemp.SetValue,l)
self.set("last_temperature",str(f))
wx.CallAfter(self.settoff.SetBackgroundColour,"")
@@ -248,7 +276,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
print _("You cannot set negative temperatures. To turn the hotend off entirely, set its temperature to 0.")
except Exception,x:
print _("You must enter a temperature. (%s)" % (repr(x),))
-
+
def do_bedtemp(self,l=""):
try:
if not (l.__class__=="".__class__ or l.__class__==u"".__class__) or (not len(l)):
@@ -260,10 +288,11 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
if f>=0:
if self.p.online:
self.p.send_now("M140 S"+l)
- print _("Setting bed temperature to "),f,_(" degrees Celsius.")
+ print _("Setting bed temperature to %f degrees Celsius.") % f
self.bsetpoint=f
self.bedtgauge.SetTarget(int(f))
- if f>0:
+ self.graph.SetBedTargetTemperature(int(f))
+ if f>0:
wx.CallAfter(self.btemp.SetValue,l)
self.set("last_bed_temperature",str(f))
wx.CallAfter(self.setboff.SetBackgroundColour,"")
@@ -284,15 +313,15 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
print _("You cannot set negative temperatures. To turn the bed off entirely, set its temperature to 0.")
except:
print _("You must enter a temperature.")
-
+
def end_macro(self):
pronsole.pronsole.end_macro(self)
self.update_macros_menu()
-
+
def delete_macro(self,macro_name):
pronsole.pronsole.delete_macro(self,macro_name)
self.update_macros_menu()
-
+
def start_macro(self,macro_name,old_macro_definition=""):
if not self.processing_rc:
def cb(definition):
@@ -310,14 +339,18 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
macroed(macro_name,old_macro_definition,cb)
else:
pronsole.pronsole.start_macro(self,macro_name,old_macro_definition)
-
+
def catchprint(self,l):
- for pat in self.capture_skip:
- if pat.match(l):
- self.capture_skip.remove(pat)
+ if self.capture_skip_newline and len(l) and not len(l.strip("\n\r")):
+ self.capture_skip_newline = False
+ return
+ for pat in self.capture_skip.keys():
+ if self.capture_skip[pat] > 0 and pat.match(l):
+ self.capture_skip[pat] -= 1
+ self.capture_skip_newline = True
return
wx.CallAfter(self.logbox.AppendText,l)
-
+
def scanserial(self):
"""scan for available ports. return a list of device names."""
baselist=[]
@@ -331,14 +364,14 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
except:
pass
return baselist+glob.glob('/dev/ttyUSB*') + glob.glob('/dev/ttyACM*') +glob.glob("/dev/tty.*")+glob.glob("/dev/cu.*")+glob.glob("/dev/rfcomm*")
-
+
def project(self,event):
import projectlayer
if(self.p.online):
projectlayer.setframe(self,self.p).Show()
else:
print _("Printer is not online.")
-
+
def popmenu(self):
self.menustrip = wx.MenuBar()
# File menu
@@ -349,14 +382,14 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.Bind(wx.EVT_MENU, self.project, m.Append(-1,_("Projector"),_(" Project slices")))
self.Bind(wx.EVT_MENU, self.OnExit, m.Append(wx.ID_EXIT,_("E&xit"),_(" Closes the Window")))
self.menustrip.Append(m,_("&File"))
-
+
# Settings menu
m = wx.Menu()
self.macros_menu = wx.Menu()
m.AppendSubMenu(self.macros_menu, _("&Macros"))
self.Bind(wx.EVT_MENU, self.new_macro, self.macros_menu.Append(-1, _("<&New...>")))
self.Bind(wx.EVT_MENU, lambda *e:options(self), m.Append(-1,_("&Options"),_(" Options dialog")))
-
+
self.Bind(wx.EVT_MENU, lambda x:threading.Thread(target=lambda :self.do_skein("set")).start(), m.Append(-1,_("Slicing Settings"),_(" Adjust slicing settings")))
#try:
# from SkeinforgeQuickEditDialog import SkeinforgeQuickEditDialog
@@ -367,18 +400,18 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.menustrip.Append(m,_("&Settings"))
self.update_macros_menu()
self.SetMenuBar(self.menustrip)
-
-
+
+
def doneediting(self,gcode):
f=open(self.filename,"w")
f.write("\n".join(gcode))
f.close()
wx.CallAfter(self.loadfile,None,self.filename)
-
+
def do_editgcode(self,e=None):
if(self.filename is not None):
macroed(self.filename,self.f,self.doneediting,1)
-
+
def new_macro(self,e=None):
dialog = wx.Dialog(self,-1,_("Enter macro name"),size=(260,85))
panel = wx.Panel(dialog,-1)
@@ -402,13 +435,13 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
wx.CallAfter(self.edit_macro,macro)
dialog.Destroy()
return macro
-
+
def edit_macro(self,macro):
if macro == "": return self.new_macro()
if self.macros.has_key(macro):
old_def = self.macros[macro]
elif hasattr(self.__class__,"do_"+macro):
- print _("Name '")+macro+_("' is being used by built-in command")
+ print _("Name '%s' is being used by built-in command") % macro
return
elif len([c for c in macro if not c.isalnum() and c != "_"]):
print _("Macro name may contain only alphanumeric symbols and underscores")
@@ -417,7 +450,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
old_def = ""
self.start_macro(macro,old_def)
return macro
-
+
def update_macros_menu(self):
if not hasattr(self,"macros_menu"):
return # too early, menu not yet built
@@ -433,7 +466,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
def OnExit(self, event):
self.Close()
-
+
def rescanports(self,event=None):
scan=self.scanserial()
portslist=list(scan)
@@ -448,13 +481,13 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.serialport.SetValue(portslist[0])
except:
pass
-
-
+
+
def popwindow(self):
# this list will contain all controls that should be only enabled
# when we're connected to a printer
self.printerControls = []
-
+
#sizer layout: topsizer is a column sizer containing two sections
#upper section contains the mini view buttons
#lower section contains the rest of the window - manual controls, console, visualizations
@@ -462,7 +495,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
uts=self.uppertopsizer=wx.BoxSizer(wx.HORIZONTAL)
self.rescanbtn=wx.Button(self.panel,-1,_("Port"))
self.rescanbtn.Bind(wx.EVT_BUTTON,self.rescanports)
-
+
uts.Add(self.rescanbtn,0,wx.TOP|wx.LEFT,0)
self.serialport = wx.ComboBox(self.panel, -1,
choices=self.scanserial(),
@@ -488,18 +521,18 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
uts.Add(self.resetbtn)
self.minibtn=wx.Button(self.panel,-1,_("Mini mode"))
self.minibtn.Bind(wx.EVT_BUTTON,self.toggleview)
-
+
uts.Add((25,-1))
self.monitorbox=wx.CheckBox(self.panel,-1,_("Monitor Printer"))
uts.Add(self.monitorbox,0,wx.ALIGN_CENTER)
self.monitorbox.Bind(wx.EVT_CHECKBOX,self.setmonitor)
-
+
uts.Add((15,-1),flag=wx.EXPAND)
uts.Add(self.minibtn,0,wx.ALIGN_CENTER)
-
+
#SECOND ROW
ubs=self.upperbottomsizer=wx.BoxSizer(wx.HORIZONTAL)
-
+
self.loadbtn=wx.Button(self.panel,-1,_("Load file"))
self.loadbtn.Bind(wx.EVT_BUTTON,self.loadfile)
ubs.Add(self.loadbtn)
@@ -533,7 +566,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
#self.printerControls.append(self.sendbtn)
lbrs.Add(self.sendbtn)
lrs.Add(lbrs,0,wx.EXPAND)
-
+
#left pane
lls=self.lowerlsizer=wx.GridBagSizer()
lls.Add(wx.StaticText(self.panel,-1,_("mm/min")),pos=(0,4),span=(1,4))
@@ -543,15 +576,15 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
lls.Add(wx.StaticText(self.panel,-1,_("Z:")),pos=(1,6),span=(1,1), flag=wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL)
self.zfeedc=wx.SpinCtrl(self.panel,-1,str(self.settings.z_feedrate),min=0,max=50000,size=(70,-1))
lls.Add(self.zfeedc,pos=(1,7),span=(1,3))
-
+
#lls.Add((200,375))
-
+
self.xyb = XYButtons(self.panel, self.moveXY, self.homeButtonClicked)
lls.Add(self.xyb, pos=(2,0), span=(1,6), flag=wx.ALIGN_CENTER)
self.zb = ZButtons(self.panel, self.moveZ)
lls.Add(self.zb, pos=(2,7), span=(1,2), flag=wx.ALIGN_CENTER)
wx.CallAfter(self.xyb.SetFocus)
-
+
for i in self.cpbuttons:
btn=wx.Button(self.panel,-1,i[0])#)
btn.SetBackgroundColour(i[3])
@@ -561,16 +594,16 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.btndict[i[1]]=btn
self.printerControls.append(btn)
lls.Add(btn,pos=i[2],span=i[4])
-
-
+
+
lls.Add(wx.StaticText(self.panel,-1,_("Heater:")),pos=(3,0),span=(1,1),flag=wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT)
htemp_choices=[self.temps[i]+" ("+i+")" for i in sorted(self.temps.keys(),key=lambda x:self.temps[x])]
-
+
self.settoff=wx.Button(self.panel,-1,_("Off"),size=(36,-1))
self.settoff.Bind(wx.EVT_BUTTON,lambda e:self.do_settemp("off"))
self.printerControls.append(self.settoff)
lls.Add(self.settoff,pos=(3,1),span=(1,1))
-
+
if self.settings.last_temperature not in map(float,self.temps.values()):
htemp_choices = [str(self.settings.last_temperature)] + htemp_choices
self.htemp=wx.ComboBox(self.panel, -1,
@@ -582,34 +615,34 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.settbtn.Bind(wx.EVT_BUTTON,self.do_settemp)
self.printerControls.append(self.settbtn)
lls.Add(self.settbtn,pos=(3,4),span=(1,1))
-
+
lls.Add(wx.StaticText(self.panel,-1,_("Bed:")),pos=(4,0),span=(1,1),flag=wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT)
btemp_choices=[self.bedtemps[i]+" ("+i+")" for i in sorted(self.bedtemps.keys(),key=lambda x:self.temps[x])]
-
+
self.setboff=wx.Button(self.panel,-1,_("Off"),size=(36,-1))
self.setboff.Bind(wx.EVT_BUTTON,lambda e:self.do_bedtemp("off"))
self.printerControls.append(self.setboff)
lls.Add(self.setboff,pos=(4,1),span=(1,1))
-
+
if self.settings.last_bed_temperature not in map(float,self.bedtemps.values()):
btemp_choices = [str(self.settings.last_bed_temperature)] + btemp_choices
self.btemp=wx.ComboBox(self.panel, -1,
choices=btemp_choices,style=wx.CB_DROPDOWN, size=(80,-1))
self.btemp.Bind(wx.EVT_COMBOBOX,self.btemp_change)
lls.Add(self.btemp,pos=(4,2),span=(1,2))
-
+
self.setbbtn=wx.Button(self.panel,-1,_("Set"),size=(38,-1))
self.setbbtn.Bind(wx.EVT_BUTTON,self.do_bedtemp)
self.printerControls.append(self.setbbtn)
lls.Add(self.setbbtn,pos=(4,4),span=(1,1))
-
+
self.btemp.SetValue(str(self.settings.last_bed_temperature))
self.htemp.SetValue(str(self.settings.last_temperature))
- ## added for an error where only the bed would get (pla) or (abs).
+ ## added for an error where only the bed would get (pla) or (abs).
#This ensures, if last temp is a default pla or abs, it will be marked so.
# if it is not, then a (user) remark is added. This denotes a manual entry
-
+
for i in btemp_choices:
if i.split()[0] == str(self.settings.last_bed_temperature).split('.')[0] or i.split()[0] == str(self.settings.last_bed_temperature):
self.btemp.SetValue(i)
@@ -620,34 +653,34 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
if( '(' not in self.btemp.Value):
self.btemp.SetValue(self.btemp.Value + ' (user)')
if( '(' not in self.htemp.Value):
- self.htemp.SetValue(self.htemp.Value + ' (user)')
+ self.htemp.SetValue(self.htemp.Value + ' (user)')
#lls.Add(self.btemp,pos=(4,1),span=(1,3))
#lls.Add(self.setbbtn,pos=(4,4),span=(1,2))
self.tempdisp=wx.StaticText(self.panel,-1,"")
lls.Add(self.tempdisp,pos=(4,5),span=(1,3))
-
+
self.edist=wx.SpinCtrl(self.panel,-1,"5",min=0,max=1000,size=(60,-1))
self.edist.SetBackgroundColour((225,200,200))
self.edist.SetForegroundColour("black")
lls.Add(self.edist,pos=(5,2),span=(1,1))
- lls.Add(wx.StaticText(self.panel,-1,_("mm")),pos=(5,3),span=(1,2))
+ lls.Add(wx.StaticText(self.panel,-1,_("mm")),pos=(5,3),span=(1,1))
self.efeedc=wx.SpinCtrl(self.panel,-1,str(self.settings.e_feedrate),min=0,max=50000,size=(60,-1))
self.efeedc.SetBackgroundColour((225,200,200))
self.efeedc.SetForegroundColour("black")
self.efeedc.Bind(wx.EVT_SPINCTRL,self.setfeeds)
lls.Add(self.efeedc,pos=(6,2),span=(1,1))
- lls.Add(wx.StaticText(self.panel,-1,_("mm/min")),pos=(6,3),span=(1,2))
+ lls.Add(wx.StaticText(self.panel,-1,_("mm/min")),pos=(6,3),span=(1,1))
self.xyfeedc.Bind(wx.EVT_SPINCTRL,self.setfeeds)
self.zfeedc.Bind(wx.EVT_SPINCTRL,self.setfeeds)
self.zfeedc.SetBackgroundColour((180,255,180))
self.zfeedc.SetForegroundColour("black")
# lls.Add((10,0),pos=(0,11),span=(1,1))
-
- self.hottgauge=TempGauge(self.panel,size=(300,24),title=_("Heater:"),maxval=230)
- lls.Add(self.hottgauge,pos=(7,0),span=(1,8))
- self.bedtgauge=TempGauge(self.panel,size=(300,24),title=_("Bed:"),maxval=130)
- lls.Add(self.bedtgauge,pos=(8,0),span=(1,8))
+
+ self.hottgauge=TempGauge(self.panel,size=(200,24),title=_("Heater:"),maxval=230)
+ lls.Add(self.hottgauge,pos=(7,0),span=(1,4))
+ self.bedtgauge=TempGauge(self.panel,size=(200,24),title=_("Bed:"),maxval=130)
+ lls.Add(self.bedtgauge,pos=(8,0),span=(1,4))
#def scroll_setpoint(e):
# if e.GetWheelRotation()>0:
# self.do_settemp(str(self.hsetpoint+1))
@@ -655,6 +688,9 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
# self.do_settemp(str(max(0,self.hsetpoint-1)))
#self.tgauge.Bind(wx.EVT_MOUSEWHEEL,scroll_setpoint)
+ self.graph = Graph(self.panel, wx.ID_ANY)
+ lls.Add(self.graph, pos=(5, 4), span=(4,4), flag=wx.ALIGN_LEFT)
+
self.gviz=gviz.gviz(self.panel,(300,300),
build_dimensions=self.build_dimensions_list,
grid=(self.settings.preview_grid_step1,self.settings.preview_grid_step2),
@@ -675,11 +711,11 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
vcs.Add(self.gviz,1,flag=wx.SHAPED)
cs=self.centersizer=wx.GridBagSizer()
vcs.Add(cs,0,flag=wx.EXPAND)
-
+
self.uppersizer=wx.BoxSizer(wx.VERTICAL)
self.uppersizer.Add(self.uppertopsizer)
self.uppersizer.Add(self.upperbottomsizer)
-
+
self.lowersizer=wx.BoxSizer(wx.HORIZONTAL)
self.lowersizer.Add(lls)
self.lowersizer.Add(vcs,1,wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL)
@@ -692,29 +728,29 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.status.SetStatusText(_("Not connected to printer."))
self.panel.Bind(wx.EVT_MOUSE_EVENTS,self.editbutton)
self.Bind(wx.EVT_CLOSE, self.kill)
-
+
self.topsizer.Layout()
self.topsizer.Fit(self)
-
+
# disable all printer controls until we connect to a printer
self.pausebtn.Disable()
for i in self.printerControls:
i.Disable()
-
+
#self.panel.Fit()
#uts.Layout()
self.cbuttons_reload()
-
-
+
+
def plate(self,e):
import plater
print "plate function activated"
plater.stlwin(size=(800,580),callback=self.platecb,parent=self).Show()
-
+
def platecb(self,name):
print "plated: "+name
self.loadfile(None,name)
-
+
def sdmenu(self,e):
obj = e.GetEventObject()
popupmenu=wx.Menu()
@@ -725,7 +761,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
item = popupmenu.Append(-1,_("SD Print"))
self.Bind(wx.EVT_MENU,self.sdprintfile,id=item.GetId())
self.panel.PopupMenu(popupmenu, obj.GetPosition())
-
+
def htemp_change(self,event):
if self.hsetpoint > 0:
self.do_settemp("")
@@ -735,7 +771,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
if self.bsetpoint > 0:
self.do_bedtemp("")
wx.CallAfter(self.btemp.SetInsertionPoint,0)
-
+
def showwin(self,event):
if(self.f is not None):
self.gwindow.Show(True)
@@ -755,23 +791,23 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.settings._set("xy_feedrate",self.xyfeedc.GetValue())
except:
pass
-
-
+
+
def toggleview(self,e):
if(self.mini):
self.mini=False
self.topsizer.Fit(self)
-
+
#self.SetSize(winsize)
wx.CallAfter(self.minibtn.SetLabel, _("Mini mode"))
-
+
else:
self.mini=True
self.uppersizer.Fit(self)
-
+
#self.SetSize(winssize)
wx.CallAfter(self.minibtn.SetLabel, _("Full mode"))
-
+
def cbuttons_reload(self):
allcbs = []
ubs=self.upperbottomsizer
@@ -823,10 +859,10 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
else:
cs.Add(b,pos=((i-4)/3,(i-4)%3))
self.topsizer.Layout()
-
+
def help_button(self):
print _('Defines custom button. Usage: button "title" [/c "colour"] command')
-
+
def do_button(self,argstr):
def nextarg(rest):
rest=rest.lstrip()
@@ -859,7 +895,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
#except Exception,x:
# print "Bad syntax for button definition, see 'help button'"
# print x
-
+
def cbutton_save(self,n,bdef,new_n=None):
if new_n is None: new_n=n
@@ -915,7 +951,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
#while len(self.custombuttons) and self.custombuttons[-1] is None:
# del self.custombuttons[-1]
wx.CallAfter(self.cbuttons_reload)
-
+
def cbutton_order(self,e,button,dir):
n = button.custombutton
if dir<0:
@@ -929,7 +965,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
#if self.custombuttons[-1] is None:
# del self.custombuttons[-1]
self.cbuttons_reload()
-
+
def editbutton(self,e):
if e.IsCommandEvent() or e.ButtonUp(wx.MOUSE_BTN_RIGHT):
if e.IsCommandEvent():
@@ -961,7 +997,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.dragpos = scrpos
e.Skip()
return
- else:
+ else:
dx,dy=self.dragpos[0]-scrpos[0],self.dragpos[1]-scrpos[1]
if dx*dx+dy*dy < 5*5: # threshold to detect dragging for jittery mice
e.Skip()
@@ -992,11 +1028,11 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.dragging.label = obj.s_label = obj.GetLabel()
self.dragging.bgc = obj.s_bgc = obj.GetBackgroundColour()
self.dragging.fgc = obj.s_fgc = obj.GetForegroundColour()
- else:
+ else:
# dragging in progress
self.dragging.SetPosition(self.panel.ScreenToClient(scrpos))
wx.CallAfter(self.dragging.Refresh)
- btns = self.custombuttonbuttons
+ btns = self.custombuttonbuttons
dst = None
src = self.dragging.sourcebutton
drg = self.dragging
@@ -1066,7 +1102,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
del self.dragpos
else:
e.Skip()
-
+
def homeButtonClicked(self, corner):
if corner == 0: # upper-left
self.onecmd('home X')
@@ -1076,17 +1112,17 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.onecmd('home Z')
if corner == 3: # lower-left
self.onecmd('home')
-
+
def moveXY(self, x, y):
if x != 0:
self.onecmd('move X %s' % x)
if y != 0:
self.onecmd('move Y %s' % y)
-
+
def moveZ(self, z):
if z != 0:
self.onecmd('move Z %s' % z)
-
+
def procbutton(self,e):
try:
if hasattr(e.GetEventObject(),"custombutton"):
@@ -1099,7 +1135,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
print _("event object missing")
self.cur_button=None
raise
-
+
def kill(self,e):
self.statuscheck=0
self.p.recvcb=None
@@ -1113,7 +1149,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
except:
pass
self.Destroy()
-
+
def do_monitor(self,l=""):
if l.strip()=="":
self.monitorbox.SetValue(not self.monitorbox.GetValue())
@@ -1130,11 +1166,17 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
print _("Monitoring printer.")
else:
print _("Done monitoring.")
-
-
+
+
def setmonitor(self,e):
self.monitor=self.monitorbox.GetValue()
-
+ if self.monitor:
+ self.graph.StartPlotting(1000)
+ else:
+ self.graph.StopPlotting()
+
+
+
def sendline(self,e):
command=self.commandbox.GetValue()
if not len(command):
@@ -1145,7 +1187,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
def clearOutput(self,e):
self.logbox.Clear()
-
+
def statuschecker(self):
try:
while(self.statuscheck):
@@ -1156,11 +1198,13 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
string+=_("Loaded ")+os.path.split(self.filename)[1]+" "
except:
pass
- string+=(self.tempreport.replace("\r","").replace("T",_("Hotend")).replace("B",_("Bed")).replace("\n","").replace("ok ",""))+" "
+ string+=(self.tempreport.replace("\r","").replace("T:",_("Hotend") + ":").replace("B:",_("Bed") + ":").replace("\n","").replace("ok ",""))+" "
wx.CallAfter(self.tempdisp.SetLabel,self.tempreport.strip().replace("ok ",""))
try:
self.hottgauge.SetValue(float(filter(lambda x:x.startswith("T:"),self.tempreport.split())[0].split(":")[1]))
+ self.graph.SetExtruder0Temperature(float(filter(lambda x:x.startswith("T:"),self.tempreport.split())[0].split(":")[1]))
self.bedtgauge.SetValue(float(filter(lambda x:x.startswith("B:"),self.tempreport.split())[0].split(":")[1]))
+ self.graph.SetBedTemperature(float(filter(lambda x:x.startswith("B:"),self.tempreport.split())[0].split(":")[1]))
except:
pass
fractioncomplete = 0.0
@@ -1170,22 +1214,22 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
if self.p.printing:
fractioncomplete = float(self.p.queueindex)/len(self.p.mainqueue)
string+= _(" Printing:%04.2f %% |") % (100*float(self.p.queueindex)/len(self.p.mainqueue),)
- string+= _(" Line# ") + str(self.p.queueindex) + _("of ") + str(len(self.p.mainqueue)) + _(" lines |" )
+ string+= _(" Line# %d of %d lines |" ) % (self.p.queueindex, len(self.p.mainqueue))
if fractioncomplete > 0.0:
- secondselapsed = int(time.time()-self.starttime)
+ secondselapsed = int(time.time()-self.starttime+self.extra_print_time)
secondsestimate = secondselapsed/fractioncomplete
secondsremain = secondsestimate - secondselapsed
- string+= _(" Est: ") + time.strftime('%H:%M:%S', time.gmtime(secondsremain))
- string+= _(" of: ") + time.strftime('%H:%M:%S', time.gmtime(secondsestimate))
- string+= _(" Remaining | ")
+ string+= _(" Est: %s of %s remaining | ") % (time.strftime('%H:%M:%S', time.gmtime(secondsremain)),
+ time.strftime('%H:%M:%S', time.gmtime(secondsestimate)))
string+= _(" Z: %0.2f mm") % self.curlayer
wx.CallAfter(self.status.SetStatusText,string)
wx.CallAfter(self.gviz.Refresh)
if(self.monitor and self.p.online):
if self.sdprinting:
self.p.send_now("M27")
- self.capture_skip.append(re.compile(r"ok T:[\d\.]+( B:[\d\.]+)?( @:[\d\.]+)?\s*"))
- self.capture_skip.append(re.compile(r"\n"))
+ if not hasattr(self,"auto_monitor_pattern"):
+ self.auto_monitor_pattern = re.compile(r"(ok\s+)?T:[\d\.]+(\s+B:[\d\.]+)?(\s+@:[\d\.]+)?\s*")
+ self.capture_skip[self.auto_monitor_pattern]=self.capture_skip.setdefault(self.auto_monitor_pattern,0)+1
self.p.send_now("M105")
time.sleep(self.monitor_interval)
while not self.sentlines.empty():
@@ -1206,7 +1250,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
pass
if cout is None:
cout=cStringIO.StringIO()
-
+
sys.stdout=cout
retval=None
try:
@@ -1222,7 +1266,8 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
wx.CallAfter(self.tempdisp.SetLabel,self.tempreport.strip().replace("ok ",""))
try:
self.hottgauge.SetValue(float(filter(lambda x:x.startswith("T:"),self.tempreport.split())[0].split(":")[1]))
- self.bedtgauge.SetValue(float(filter(lambda x:x.startswith("B:"),self.tempreport.split())[0].split(":")[1]))
+ self.graph.SetExtruder0Temperature(float(filter(lambda x:x.startswith("T:"),self.tempreport.split())[0].split(":")[1]))
+ self.graph.SetBedTemperature(float(filter(lambda x:x.startswith("B:"),self.tempreport.split())[0].split(":")[1]))
except:
pass
tstring=l.rstrip()
@@ -1232,7 +1277,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
#wx.CallAfter(self.logbox.AppendText,tstring+"\n")
for i in self.recvlisteners:
i(l)
-
+
def listfiles(self,line):
if "Begin file list" in line:
self.listing=1
@@ -1242,7 +1287,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
wx.CallAfter(self.filesloaded)
elif self.listing:
self.sdfiles+=[line.replace("\n","").replace("\r","").lower()]
-
+
def waitforsdresponse(self,l):
if "file.open failed" in l:
wx.CallAfter(self.status.SetStatusText,_("Opening file failed."))
@@ -1270,9 +1315,9 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.percentdone=100.0*int(vals[0])/int(vals[1])
except:
pass
-
-
-
+
+
+
def filesloaded(self):
dlg=wx.SingleChoiceDialog(self, _("Select the file to print"), _("Pick SD file"), self.sdfiles)
if(dlg.ShowModal()==wx.ID_OK):
@@ -1280,7 +1325,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
if len(target):
self.recvlisteners+=[self.waitforsdresponse]
self.p.send_now("M23 "+target.lower())
-
+
#print self.sdfiles
pass
@@ -1293,7 +1338,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.recvlisteners+=[self.listfiles]
self.p.send_now("M21")
self.p.send_now("M20")
-
+
def skein_func(self):
try:
import shlex
@@ -1312,7 +1357,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
print _("Failed to execute slicing software: ")
self.stopsf=1
traceback.print_exc(file=sys.stdout)
-
+
def skein_monitor(self):
while(not self.stopsf):
try:
@@ -1328,7 +1373,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
of.close
if self.p.online:
wx.CallAfter(self.printbtn.Enable)
-
+
wx.CallAfter(self.status.SetStatusText,_("Loaded ")+self.filename+_(", %d lines") % (len(self.f),))
wx.CallAfter(self.pausebtn.Disable)
wx.CallAfter(self.printbtn.SetLabel,_("Print"))
@@ -1339,8 +1384,8 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
wx.CallAfter(self.loadbtn.SetLabel,_("Load File"))
self.skeining=0
self.skeinp=None
-
-
+
+
def skein(self,filename):
wx.CallAfter(self.loadbtn.SetLabel,_("Cancel"))
print _("Slicing ") + filename
@@ -1350,7 +1395,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.skeining=1
thread(target=self.skein_func).start()
thread(target=self.skein_monitor).start()
-
+
def loadfile(self,event,filename=None):
if self.skeining and self.skeinp is not None:
self.skeinp.terminate()
@@ -1384,20 +1429,20 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
of=open(self.filename)
self.f=[i.replace("\n","").replace("\r","") for i in of]
of.close
- self.status.SetStatusText(_("Loaded ") + name + _(", %d lines") % (len(self.f),))
+ self.status.SetStatusText(_("Loaded %s, %d lines") % (name, len(self.f)))
wx.CallAfter(self.printbtn.SetLabel, _("Print"))
wx.CallAfter(self.pausebtn.SetLabel, _("Pause"))
wx.CallAfter(self.pausebtn.Disable)
if self.p.online:
wx.CallAfter(self.printbtn.Enable)
threading.Thread(target=self.loadviz).start()
-
+
def loadviz(self):
Xtot,Ytot,Ztot,Xmin,Xmax,Ymin,Ymax,Zmin,Zmax = pronsole.measurements(self.f)
print pronsole.totalelength(self.f), _("mm of filament used in this print\n")
- print _("the print goes from"),Xmin,_("mm to"),Xmax,_("mm in X\nand is"),Xtot,_("mm wide\n")
- print _("the print goes from"),Ymin,_("mm to"),Ymax,_("mm in Y\nand is"),Ytot,_("mm wide\n")
- print _("the print goes from"),Zmin,_("mm to"),Zmax,_("mm in Z\nand is"),Ztot,_("mm high\n")
+ print _("the print goes from %f mm to %f mm in X\nand is %f mm wide\n") % (Xmin, Xmax, Xtot)
+ print _("the print goes from %f mm to %f mm in Y\nand is %f mm wide\n") % (Ymin, Ymax, Ytot)
+ print _("the print goes from %f mm to %f mm in Z\nand is %f mm high\n") % (Zmin, Zmax, Ztot)
print _("Estimated duration (pessimistic): "), pronsole.estimate_duration(self.f)
#import time
#t0=time.time()
@@ -1410,8 +1455,9 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
#print "generated 3d view in %f s"%(time.time()-t0)
self.gviz.showall=1
wx.CallAfter(self.gviz.Refresh)
-
+
def printfile(self,event):
+ self.extra_print_time=0
if self.paused:
self.p.paused=0
self.paused=0
@@ -1420,7 +1466,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.p.send_now("M26 S0")
self.p.send_now("M24")
return
-
+
if self.f is None or not len(self.f):
wx.CallAfter(self.status.SetStatusText, _("No file loaded. Please use load first."))
return
@@ -1429,19 +1475,19 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
return
self.on_startprint()
self.p.startprint(self.f)
-
+
def on_startprint(self):
wx.CallAfter(self.pausebtn.SetLabel, _("Pause"))
wx.CallAfter(self.pausebtn.Enable)
wx.CallAfter(self.printbtn.SetLabel, _("Restart"))
-
+
def endupload(self):
self.p.send_now("M29 ")
wx.CallAfter(self.status.SetStatusText, _("File upload complete"))
time.sleep(0.5)
self.p.clear=True
self.uploading=False
-
+
def uploadtrigger(self,l):
if "Writing to file" in l:
self.uploading=True
@@ -1450,7 +1496,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.recvlisteners.remove(self.uploadtrigger)
elif "open failed, File" in l:
self.recvlisteners.remove(self.uploadtrigger)
-
+
def upload(self,event):
if not self.f or not len(self.f):
return
@@ -1462,7 +1508,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.p.send_now("M28 "+str(dlg.GetValue()))
self.recvlisteners+=[self.uploadtrigger]
pass
-
+
def pause(self,event):
print _("Paused.")
if not self.paused:
@@ -1474,6 +1520,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
return
self.p.pause()
self.paused=True
+ self.extra_print_time += int(time.time() - self.starttime)
wx.CallAfter(self.pausebtn.SetLabel, _("Resume"))
else:
self.paused=False
@@ -1482,13 +1529,13 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
else:
self.p.resume()
wx.CallAfter(self.pausebtn.SetLabel, _("Pause"))
-
-
+
+
def sdprintfile(self,event):
self.on_startprint()
threading.Thread(target=self.getfiles).start()
pass
-
+
def connect(self,event):
print _("Connecting...")
port=None
@@ -1518,13 +1565,13 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
if baud != self.settings.baudrate:
self.set("baudrate",str(baud))
threading.Thread(target=self.statuschecker).start()
-
-
+
+
def disconnect(self,event):
print _("Disconnected.")
self.p.disconnect()
self.statuscheck=False
-
+
self.connectbtn.SetLabel("Connect")
self.connectbtn.Bind(wx.EVT_BUTTON,self.connect)
@@ -1536,7 +1583,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
# Disable XYButtons and ZButtons
wx.CallAfter(self.xyb.disable)
wx.CallAfter(self.zb.disable)
-
+
if self.paused:
self.p.paused=0
self.p.printing=0
@@ -1545,20 +1592,20 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.paused=0
if self.sdprinting:
self.p.send_now("M26 S0")
-
-
+
+
def reset(self,event):
print _("Reset.")
dlg=wx.MessageDialog(self, _("Are you sure you want to reset the printer?"), _("Reset?"), wx.YES|wx.NO)
if dlg.ShowModal()==wx.ID_YES:
self.p.reset()
+ self.p.printing=0
+ wx.CallAfter(self.printbtn.SetLabel, _("Print"))
if self.paused:
self.p.paused=0
- self.p.printing=0
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
@@ -1670,7 +1717,7 @@ class options(wx.Dialog):
grid.Add(ctrls[k,0],0,wx.ALIGN_CENTER_VERTICAL|wx.ALL|wx.ALIGN_RIGHT)
grid.Add(ctrls[k,1],1,wx.ALIGN_CENTER_VERTICAL|wx.ALL|wx.EXPAND)
topsizer.Add(self.CreateSeparatedButtonSizer(wx.OK+wx.CANCEL),0,wx.EXPAND)
- self.SetSizer(topsizer)
+ self.SetSizer(topsizer)
topsizer.Layout()
topsizer.Fit(self)
if self.ShowModal()==wx.ID_OK:
@@ -1678,7 +1725,7 @@ class options(wx.Dialog):
if ctrls[k,1].GetValue() != str(v):
pronterface.set(k,str(ctrls[k,1].GetValue()))
self.Destroy()
-
+
class ButtonEdit(wx.Dialog):
"""Custom button edit dialog"""
def __init__(self,pronterface):
@@ -1726,7 +1773,7 @@ class ButtonEdit(wx.Dialog):
self.command.SetValue(macro)
if self.name.GetValue()=="":
self.name.SetValue(macro)
-
+
class TempGauge(wx.Panel):
def __init__(self,parent,size=(200,22),title="",maxval=240,gaugeColour=None):
wx.Panel.__init__(self,parent,-1,size=size)
@@ -1821,12 +1868,12 @@ class TempGauge(wx.Panel):
#gc.SetFont(gc.CreateFont(wx.Font(12,wx.FONTFAMILY_DEFAULT,wx.FONTSTYLE_NORMAL,wx.FONTWEIGHT_BOLD),wx.WHITE))
#gc.DrawText(text,29,-2)
gc.SetFont(gc.CreateFont(wx.Font(10,wx.FONTFAMILY_DEFAULT,wx.FONTSTYLE_NORMAL,wx.FONTWEIGHT_BOLD),wx.WHITE))
- gc.DrawText(self.title,x0+19,y0+1)
- gc.DrawText(text, x0+153,y0+1)
+ gc.DrawText(self.title,x0+19,y0+4)
+ gc.DrawText(text, x0+133,y0+4)
gc.SetFont(gc.CreateFont(wx.Font(10,wx.FONTFAMILY_DEFAULT,wx.FONTSTYLE_NORMAL,wx.FONTWEIGHT_BOLD)))
- gc.DrawText(self.title,x0+18,y0+0)
- gc.DrawText(text, x0+152,y0+0)
-
+ gc.DrawText(self.title,x0+18,y0+3)
+ gc.DrawText(text, x0+132,y0+3)
+
if __name__ == '__main__':
app = wx.App(False)
main = PronterWindow()