Commit 05058c5b authored by kliment's avatar kliment

Merge pull request #201 from kliment/experimental

Merge experimental back into master
parents 65e01214 2a15576a
...@@ -25,6 +25,10 @@ now there is only one, for German. New ones can be created: ...@@ -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 # Edit the .po file to add messages for newlang
msgfmt -o ${newlang}.mo ${newlang}.po 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 As currently coded, the default location for these message catalogs is
/usr/share/pronterface/locale/ /usr/share/pronterface/locale/
......
#!/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()
#!/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 <http://www.gnu.org/licenses/>.
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)
...@@ -47,13 +47,21 @@ class window(wx.Frame): ...@@ -47,13 +47,21 @@ class window(wx.Frame):
else: else:
event.Skip() event.Skip()
def key(self, event): def key(self, event):
x=event.GetKeyCode() 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 #print x
if x==wx.WXK_UP:
self.p.layerup()
if x==wx.WXK_DOWN:
self.p.layerdown()
#print p.lines.keys() #print p.lines.keys()
def zoom(self, event): def zoom(self, event):
......
...@@ -5,77 +5,21 @@ ...@@ -5,77 +5,21 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Pronterface jm1\n" "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" "PO-Revision-Date: 2012-01-23 10:01+0100\n"
"Last-Translator: Christian Metzen <metzench@ccux-linux.de>\n" "Last-Translator: Christian Metzen <metzench@ccux-linux.de>\n"
"Language-Team: DE <LL@li.org>\n" "Language-Team: DE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Language: \n"
"Generated-By: pygettext.py 1.5\n" "Generated-By: pygettext.py 1.5\n"
#: pronsole.py:250 #: pronterface.py:30
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
msgid "WX is not installed. This program requires WX to run." msgid "WX is not installed. This program requires WX to run."
msgstr "WX ist nicht installiert. Dieses Programm erfordert WX zum Starten." msgstr "WX ist nicht installiert. Dieses Programm erfordert WX zum Starten."
#: pronterface.py:66 #: pronterface.py:81
msgid "" msgid ""
"Dimensions of Build Platform\n" "Dimensions of Build Platform\n"
" & optional offset of origin\n" " & optional offset of origin\n"
...@@ -93,55 +37,55 @@ msgstr "" ...@@ -93,55 +37,55 @@ msgstr ""
" XXX,YYY,ZZZ\n" " XXX,YYY,ZZZ\n"
" XXXxYYYxZZZ+OffX+OffY+OffZ" " XXXxYYYxZZZ+OffX+OffY+OffZ"
#: pronterface.py:67 #: pronterface.py:82
msgid "Last Set Temperature for the Heated Print Bed" msgid "Last Set Temperature for the Heated Print Bed"
msgstr "Letzte gesetzte Temperatur für das Heizbett" msgstr "Letzte gesetzte Temperatur für das Heizbett"
#: pronterface.py:68 #: pronterface.py:83
msgid "Folder of last opened file" msgid "Folder of last opened file"
msgstr "Verzeichniss der zuletzt geöffneten Datei" msgstr "Verzeichniss der zuletzt geöffneten Datei"
#: pronterface.py:69 #: pronterface.py:84
msgid "Last Temperature of the Hot End" msgid "Last Temperature of the Hot End"
msgstr "Letzte Hotend Temperatur" msgstr "Letzte Hotend Temperatur"
#: pronterface.py:70 #: pronterface.py:85
msgid "Width of Extrusion in Preview (default: 0.5)" msgid "Width of Extrusion in Preview (default: 0.5)"
msgstr "Vorschaubreite der Extrudierung (Vorgabe: 0.5)" msgstr "Vorschaubreite der Extrudierung (Vorgabe: 0.5)"
#: pronterface.py:71 #: pronterface.py:86
msgid "Fine Grid Spacing (default: 10)" msgid "Fine Grid Spacing (default: 10)"
msgstr "Feiner Rasterabstand (Vorgabe: 10)" msgstr "Feiner Rasterabstand (Vorgabe: 10)"
#: pronterface.py:72 #: pronterface.py:87
msgid "Coarse Grid Spacing (default: 50)" msgid "Coarse Grid Spacing (default: 50)"
msgstr "Grober Rasterabstand (Vorgabe: 50)" msgstr "Grober Rasterabstand (Vorgabe: 50)"
#: pronterface.py:73 #: pronterface.py:88
msgid "Pronterface background color (default: #FFFFFF)" msgid "Pronterface background color (default: #FFFFFF)"
msgstr "Pronterface Hintergrundfarbe (Vorgabe: #FFFFFF)" msgstr "Pronterface Hintergrundfarbe (Vorgabe: #FFFFFF)"
#: pronterface.py:76 #: pronterface.py:91
msgid "Printer Interface" msgid "Printer Interface"
msgstr "Printer Interface" msgstr "Printer Interface"
#: pronterface.py:93 #: pronterface.py:108
msgid "Motors off" msgid "Motors off"
msgstr "Motoren aus" msgstr "Motoren aus"
#: pronterface.py:94 #: pronterface.py:109
msgid "Check temp" msgid "Check temp"
msgstr "Temperatur prüfen" msgstr "Temperatur prüfen"
#: pronterface.py:95 #: pronterface.py:110
msgid "Extrude" msgid "Extrude"
msgstr "Extrudieren" msgstr "Extrudieren"
#: pronterface.py:96 #: pronterface.py:111
msgid "Reverse" msgid "Reverse"
msgstr "Rückwärts" msgstr "Rückwärts"
#: pronterface.py:114 #: pronterface.py:129
msgid "" msgid ""
"# I moved all your custom buttons into .pronsolerc.\n" "# I moved all your custom buttons into .pronsolerc.\n"
"# Please don't add them here any more.\n" "# Please don't add them here any more.\n"
...@@ -151,552 +95,560 @@ msgstr "" ...@@ -151,552 +95,560 @@ msgstr ""
"# Bitte fügen Sie sie hier nicht mehr ein.\n" "# Bitte fügen Sie sie hier nicht mehr ein.\n"
"# Backup Ihrer alten Buttons befindet sich in custombtn.old\n" "# Backup Ihrer alten Buttons befindet sich in custombtn.old\n"
#: pronterface.py:119 #: pronterface.py:134
msgid "Note!!! You have specified custom buttons in both custombtn.txt and .pronsolerc" msgid ""
msgstr "Achtung! Sie haben benutzerdefinierte Buttons in custombtn.txt und .pronsolerc angegeben" "Note!!! You have specified custom buttons in both custombtn.txt and ."
"pronsolerc"
#: pronterface.py:120 msgstr ""
msgid "Ignoring custombtn.txt. Remove all current buttons to revert to custombtn.txt" "Achtung! Sie haben benutzerdefinierte Buttons in custombtn.txt und ."
msgstr "Ignoriere custombtn.txt. Alle aktuellen Buttons entfernen um wieder zu custombtn.txt zurückzukehren" "pronsolerc angegeben"
#: pronterface.py:148 #: pronterface.py:135
#: pronterface.py:499 msgid ""
#: pronterface.py:1319 "Ignoring custombtn.txt. Remove all current buttons to revert to custombtn.txt"
#: pronterface.py:1373 msgstr ""
#: pronterface.py:1495 "Ignoriere custombtn.txt. Alle aktuellen Buttons entfernen um wieder zu "
#: pronterface.py:1529 "custombtn.txt zurückzukehren"
#: 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" msgid "Print"
msgstr "Drucken" msgstr "Drucken"
#: pronterface.py:152 #: pronterface.py:167
msgid "Printer is now online." msgid "Printer is now online."
msgstr "Drucker ist jetzt Online." msgstr "Drucker ist jetzt Online."
#: pronterface.py:212 #: pronterface.py:168
msgid "Setting hotend temperature to " msgid "Disconnect"
msgstr "Setze Hotend Temperatur auf " msgstr "Trennen"
#: pronterface.py:212 #: pronterface.py:227
#: pronterface.py:248 msgid "Setting hotend temperature to %f degrees Celsius."
msgid " degrees Celsius." msgstr "Setze Hotend Temperatur auf %f Grad Celsius."
msgstr " Grad Celsius."
#: pronterface.py:231 #: pronterface.py:246 pronterface.py:282 pronterface.py:340
#: pronterface.py:267
#: pronterface.py:325
msgid "Printer is not online." msgid "Printer is not online."
msgstr "Drucker ist nicht 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 #: pronterface.py:248
msgid "Setting bed temperature to " msgid ""
msgstr "Setze Heizbett Temperatur auf" "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:250
msgid "You must enter a temperature. (%s)"
msgstr "Sie müssen eine Temperatur eingeben. (%s)"
#: pronterface.py:269 #: pronterface.py:263
msgid "You cannot set negative temperatures. To turn the bed off entirely, set its temperature to 0." msgid "Setting bed temperature to %f degrees Celsius."
msgstr "Sie können keine negativen Temperaturen einstellen. Um das Heizbett ganz auszuschalten, Temperatur auf 0 setzen." 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:271 #: pronterface.py:286
msgid "You must enter a temperature." msgid "You must enter a temperature."
msgstr "Sie müssen eine Temperatur eingeben." msgstr "Sie müssen eine Temperatur eingeben."
#: pronterface.py:286 #: pronterface.py:301
msgid "Do you want to erase the macro?" msgid "Do you want to erase the macro?"
msgstr "Möchten Sie das Makro löschen?" msgstr "Möchten Sie das Makro löschen?"
#: pronterface.py:290 #: pronterface.py:305
msgid "Cancelled." msgid "Cancelled."
msgstr "Abgebrochen." msgstr "Abgebrochen."
#: pronterface.py:331 #: pronterface.py:346
msgid " Opens file" msgid " Opens file"
msgstr " Öffnet eine Datei" msgstr " Öffnet eine Datei"
#: pronterface.py:331 #: pronterface.py:346
msgid "&Open..." msgid "&Open..."
msgstr "&Öffnen..." msgstr "&Öffnen..."
#: pronterface.py:332 #: pronterface.py:347
msgid " Edit open file" msgid " Edit open file"
msgstr " Offene Datei bearbeiten" msgstr " Offene Datei bearbeiten"
#: pronterface.py:332 #: pronterface.py:347
msgid "&Edit..." msgid "&Edit..."
msgstr "&Bearbeiten..." msgstr "&Bearbeiten..."
#: pronterface.py:333 #: pronterface.py:348
msgid " Clear output console" msgid " Clear output console"
msgstr " Ausgabe Konsole leeren" msgstr " Ausgabe Konsole leeren"
#: pronterface.py:333 #: pronterface.py:348
msgid "Clear console" msgid "Clear console"
msgstr "Konsole leeren" msgstr "Konsole leeren"
#: pronterface.py:334 #: pronterface.py:349
msgid " Project slices" msgid " Project slices"
msgstr " Projekt Slices" msgstr " Projekt Slices"
#: pronterface.py:334 #: pronterface.py:349
msgid "Projector" msgid "Projector"
msgstr "Projektor" msgstr "Projektor"
#: pronterface.py:335 #: pronterface.py:350
msgid " Closes the Window" msgid " Closes the Window"
msgstr " Schliesst das Fenster" msgstr " Schliesst das Fenster"
#: pronterface.py:335 #: pronterface.py:350
msgid "E&xit" msgid "E&xit"
msgstr "&Verlassen" msgstr "&Verlassen"
#: pronterface.py:336 #: pronterface.py:351
msgid "&File" msgid "&File"
msgstr "&Datei" msgstr "&Datei"
#: pronterface.py:341 #: pronterface.py:356
msgid "&Macros" msgid "&Macros"
msgstr "&Makros" msgstr "&Makros"
#: pronterface.py:342 #: pronterface.py:357
msgid "<&New...>" msgid "<&New...>"
msgstr "<&Neu...>" msgstr "<&Neu...>"
#: pronterface.py:343 #: pronterface.py:358
msgid " Options dialog" msgid " Options dialog"
msgstr " Optionen Dialog" msgstr " Optionen Dialog"
#: pronterface.py:343 #: pronterface.py:358
msgid "&Options" msgid "&Options"
msgstr "&Optionen" msgstr "&Optionen"
#: pronterface.py:345 #: pronterface.py:360
msgid " Adjust slicing settings" msgid " Adjust slicing settings"
msgstr " Slicing Einstellungen anpassen" msgstr " Slicing Einstellungen anpassen"
#: pronterface.py:345 #: pronterface.py:360
msgid "Slicing Settings" msgid "Slicing Settings"
msgstr "Slicing Einstellungen" msgstr "Slicing Einstellungen"
#: pronterface.py:352 #: pronterface.py:367
msgid "&Settings" msgid "&Settings"
msgstr "&Einstellungen" msgstr "&Einstellungen"
#: pronterface.py:368 #: pronterface.py:383
msgid "Enter macro name" msgid "Enter macro name"
msgstr "Makro Name eingeben" msgstr "Makro Name eingeben"
#: pronterface.py:371 #: pronterface.py:386
msgid "Macro name:" msgid "Macro name:"
msgstr "Makro Name:" msgstr "Makro Name:"
#: pronterface.py:374 #: pronterface.py:389
msgid "Ok" msgid "Ok"
msgstr "Ok" msgstr "Ok"
#: pronterface.py:378 #: pronterface.py:393 pronterface.py:1344 pronterface.py:1601
#: pronterface.py:1330
#: pronterface.py:1587
msgid "Cancel" msgid "Cancel"
msgstr "Abbrechen" msgstr "Abbrechen"
#: pronterface.py:396 #: pronterface.py:411
msgid "' is being used by built-in command" msgid "Name '%s' is being used by built-in command"
msgstr "' wird durch eingebautes Kommando genutzt" 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" msgid "Macro name may contain only alphanumeric symbols and underscores"
msgstr "Makro Name darf nur alphanumerische Zeichen und Unterstriche enthalten" msgstr "Makro Name darf nur alphanumerische Zeichen und Unterstriche enthalten"
#: pronterface.py:448 #: pronterface.py:463
msgid "Port" msgid "Port"
msgstr "Port:" msgstr "Port:"
#: pronterface.py:467 #: pronterface.py:482
msgid "Connect" msgid "Connect"
msgstr "Verbinden" msgstr "Verbinden"
#: pronterface.py:469 #: pronterface.py:484
msgid "Connect to the printer" msgid "Connect to the printer"
msgstr "Drucker Verbinden" msgstr "Drucker Verbinden"
#: pronterface.py:471 #: pronterface.py:486
msgid "Reset" msgid "Reset"
msgstr "Zurücksetzen" msgstr "Zurücksetzen"
#: pronterface.py:474 #: pronterface.py:489 pronterface.py:766
#: pronterface.py:751
msgid "Mini mode" msgid "Mini mode"
msgstr "Mini-Modus" msgstr "Mini-Modus"
#: pronterface.py:478 #: pronterface.py:493
msgid "Monitor Printer" msgid "Monitor Printer"
msgstr "Drucker überwachen" msgstr "Drucker überwachen"
#: pronterface.py:488 #: pronterface.py:503
msgid "Load file" msgid "Load file"
msgstr "Datei laden" msgstr "Datei laden"
#: pronterface.py:491 #: pronterface.py:506
msgid "Compose" msgid "Compose"
msgstr "Zusammenstellen" msgstr "Zusammenstellen"
#: pronterface.py:495 #: pronterface.py:510
msgid "SD" msgid "SD"
msgstr "SD" msgstr "SD"
#: pronterface.py:503 #: pronterface.py:518 pronterface.py:1388 pronterface.py:1433
#: pronterface.py:1374 #: pronterface.py:1483 pronterface.py:1508 pronterface.py:1542
#: pronterface.py:1419 #: pronterface.py:1557
#: pronterface.py:1469
#: pronterface.py:1494
#: pronterface.py:1528
#: pronterface.py:1543
msgid "Pause" msgid "Pause"
msgstr "Pause" msgstr "Pause"
#: pronterface.py:516 #: pronterface.py:531
msgid "Send" msgid "Send"
msgstr "Senden" msgstr "Senden"
#: pronterface.py:524 #: pronterface.py:539 pronterface.py:640
#: pronterface.py:625
msgid "mm/min" msgid "mm/min"
msgstr "mm/min" msgstr "mm/min"
#: pronterface.py:526 #: pronterface.py:541
msgid "XY:" msgid "XY:"
msgstr "XY:" msgstr "XY:"
#: pronterface.py:528 #: pronterface.py:543
msgid "Z:" msgid "Z:"
msgstr "Z:" msgstr "Z:"
#: pronterface.py:551 #: pronterface.py:566 pronterface.py:647
#: pronterface.py:632
msgid "Heater:" msgid "Heater:"
msgstr "Heizelement:" msgstr "Heizelement:"
#: pronterface.py:554 #: pronterface.py:569 pronterface.py:589
#: pronterface.py:574
msgid "Off" msgid "Off"
msgstr "Aus" msgstr "Aus"
#: pronterface.py:566 #: pronterface.py:581 pronterface.py:601
#: pronterface.py:586
msgid "Set" msgid "Set"
msgstr "Ein" msgstr "Ein"
#: pronterface.py:571 #: pronterface.py:586 pronterface.py:649
#: pronterface.py:634
msgid "Bed:" msgid "Bed:"
msgstr "Heizbett:" msgstr "Heizbett:"
#: pronterface.py:619 #: pronterface.py:634
msgid "mm" msgid "mm"
msgstr "mm" msgstr "mm"
#: pronterface.py:677 #: pronterface.py:692 pronterface.py:1196 pronterface.py:1427
#: pronterface.py:1182
#: pronterface.py:1413
msgid "Not connected to printer." msgid "Not connected to printer."
msgstr "Keine Verbindung zum Drucker." msgstr "Keine Verbindung zum Drucker."
#: pronterface.py:706 #: pronterface.py:721
msgid "SD Upload" msgid "SD Upload"
msgstr "SD Laden" msgstr "SD Laden"
#: pronterface.py:710 #: pronterface.py:725
msgid "SD Print" msgid "SD Print"
msgstr "SD Drucken" msgstr "SD Drucken"
#: pronterface.py:758 #: pronterface.py:773
msgid "Full mode" msgid "Full mode"
msgstr "Voll-Modus" msgstr "Voll-Modus"
#: pronterface.py:783 #: pronterface.py:798
msgid "Execute command: " msgid "Execute command: "
msgstr "Kommando ausführen:" msgstr "Kommando ausführen:"
#: pronterface.py:794 #: pronterface.py:809
msgid "click to add new custom button" msgid "click to add new custom button"
msgstr "Individuellen Button hinzufügen" msgstr "Individuellen Button hinzufügen"
#: pronterface.py:813 #: pronterface.py:828
msgid "Defines custom button. Usage: button <num> \"title\" [/c \"colour\"] command" msgid ""
msgstr "Definiert einen individuellen Button. Nutzung: button <num> \"title\" [/c \"colour\"] command" "Defines custom button. Usage: button <num> \"title\" [/c \"colour\"] command"
msgstr ""
"Definiert einen individuellen Button. Nutzung: button <num> \"title\" [/c "
"\"colour\"] command"
#: pronterface.py:835 #: pronterface.py:850
msgid "Custom button number should be between 0 and 63" msgid "Custom button number should be between 0 and 63"
msgstr "Nummer des individuellen Button sollte zwischen 0 und 63 sein." msgstr "Nummer des individuellen Button sollte zwischen 0 und 63 sein."
#: pronterface.py:927 #: pronterface.py:942
msgid "Edit custom button '%s'" msgid "Edit custom button '%s'"
msgstr "Individuellen Button '%s' bearbeiten" msgstr "Individuellen Button '%s' bearbeiten"
#: pronterface.py:929 #: pronterface.py:944
msgid "Move left <<" msgid "Move left <<"
msgstr "Links bewegen <<" msgstr "Links bewegen <<"
#: pronterface.py:932 #: pronterface.py:947
msgid "Move right >>" msgid "Move right >>"
msgstr "Rechts bewegen >>" msgstr "Rechts bewegen >>"
#: pronterface.py:936 #: pronterface.py:951
msgid "Remove custom button '%s'" msgid "Remove custom button '%s'"
msgstr "Individuellen Button '%s' entfernen" msgstr "Individuellen Button '%s' entfernen"
#: pronterface.py:939 #: pronterface.py:954
msgid "Add custom button" msgid "Add custom button"
msgstr "Individuellen Button hinzufuegen" msgstr "Individuellen Button hinzufuegen"
#: pronterface.py:1084 #: pronterface.py:1099
msgid "event object missing" msgid "event object missing"
msgstr "Ereigniss Objekt fehlt" msgstr "Ereigniss Objekt fehlt"
#: pronterface.py:1112 #: pronterface.py:1127
msgid "Invalid period given." msgid "Invalid period given."
msgstr "Ungültiger Abschnitt angegeben." msgstr "Ungültiger Abschnitt angegeben."
#: pronterface.py:1115 #: pronterface.py:1130
msgid "Monitoring printer." msgid "Monitoring printer."
msgstr "Überwache Drucker." msgstr "Überwache Drucker."
#: pronterface.py:1117 #: pronterface.py:1132
msgid "Done monitoring." msgid "Done monitoring."
msgstr "Überwachung abgeschlossen." msgstr "Überwachung abgeschlossen."
#: pronterface.py:1139 #: pronterface.py:1154
msgid "Printer is online. " msgid "Printer is online. "
msgstr "Drucker ist online." msgstr "Drucker ist online. "
#: pronterface.py:1141 #: pronterface.py:1156 pronterface.py:1331
#: pronterface.py:1317
#: pronterface.py:1372
msgid "Loaded " msgid "Loaded "
msgstr "Geladen" msgstr "Geladen "
#: pronterface.py:1144 #: pronterface.py:1159
msgid "Bed" msgid "Bed"
msgstr "Heizbett" msgstr "Heizbett"
#: pronterface.py:1144 #: pronterface.py:1159
msgid "Hotend" msgid "Hotend"
msgstr "Hotend" msgstr "Hotend"
#: pronterface.py:1154 #: pronterface.py:1169
msgid " SD printing:%04.2f %%" msgid " SD printing:%04.2f %%"
msgstr "SD Drucken:%04.2f %%" msgstr "SD Drucken:%04.2f %%"
#: pronterface.py:1157 #: pronterface.py:1172
msgid " Printing:%04.2f %% |" msgid " Printing:%04.2f %% |"
msgstr " Drucken:%04.2f %% |" msgstr " Drucken:%04.2f %% |"
#: pronterface.py:1158 #: pronterface.py:1173
msgid " Line# " msgid " Line# %d of %d lines |"
msgstr "Zeile#" msgstr " Zeile# %d von %d Zeilen |"
#: pronterface.py:1158 #: pronterface.py:1178
msgid " lines |" msgid " Est: %s of %s remaining | "
msgstr " Zeilen |" msgstr " Erw: %s von %s verbleibend | "
#: pronterface.py:1158 #: pronterface.py:1180
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
msgid " Z: %0.2f mm" msgid " Z: %0.2f mm"
msgstr " Z: %0.2f mm" msgstr " Z: %0.2f mm"
#: pronterface.py:1233 #: pronterface.py:1247
msgid "Opening file failed." msgid "Opening file failed."
msgstr "Datei öffnen fehlgeschlagen." msgstr "Datei öffnen fehlgeschlagen."
#: pronterface.py:1239 #: pronterface.py:1253
msgid "Starting print" msgid "Starting print"
msgstr "Starte Druck" msgstr "Starte Druck"
#: pronterface.py:1262 #: pronterface.py:1276
msgid "Pick SD file" msgid "Pick SD file"
msgstr "Wähle SD Datei" msgstr "Wähle SD Datei"
#: pronterface.py:1262 #: pronterface.py:1276
msgid "Select the file to print" msgid "Select the file to print"
msgstr "Wähle Druckdatei" msgstr "Wähle Druckdatei"
#: pronterface.py:1297 #: pronterface.py:1311
msgid "Failed to execute slicing software: " msgid "Failed to execute slicing software: "
msgstr "Fehler beim Ausführen der Slicing Software:" msgstr "Fehler beim Ausführen der Slicing Software:"
#: pronterface.py:1304 #: pronterface.py:1318
msgid "Slicing..." msgid "Slicing..."
msgstr "Slicing..." msgstr "Slicing..."
#: pronterface.py:1317 #: pronterface.py:1331
#: pronterface.py:1372
msgid ", %d lines" msgid ", %d lines"
msgstr ", %d Zeilen" msgstr ", %d Zeilen"
#: pronterface.py:1324 #: pronterface.py:1338
msgid "Load File" msgid "Load File"
msgstr "Datei laden" msgstr "Datei laden"
#: pronterface.py:1331 #: pronterface.py:1345
msgid "Slicing " msgid "Slicing "
msgstr "Slicing" msgstr "Slicing"
#: pronterface.py:1350 #: pronterface.py:1364
msgid "Open file to print" msgid "Open file to print"
msgstr "Öffne zu druckende Datei" msgstr "Öffne zu druckende Datei"
#: pronterface.py:1351 #: pronterface.py:1365
msgid "OBJ, STL, and GCODE files (;*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ;)" 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!" msgid "File not found!"
msgstr "Datei nicht gefunden!" 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" msgid "mm of filament used in this print\n"
msgstr "mm Filament in Druck genutzt\n" msgstr "mm Filament in Druck genutzt\n"
#: pronterface.py:1383 #: pronterface.py:1397
msgid "" msgid ""
"mm in X\n" "the print goes from %f mm to %f mm in X\n"
"and is" "and is %f mm wide\n"
msgstr "" msgstr ""
"mm in X\n" "Der Druck verläuft von %f mm bis %f mm in X\n"
"und ist" "und ist %f mm breit\n"
#: pronterface.py:1383 #: pronterface.py:1398
#: 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
msgid "" msgid ""
"mm in Y\n" "the print goes from %f mm to %f mm in Y\n"
"and is" "and is %f mm wide\n"
msgstr "" msgstr ""
"mm in Y\n" "Der Druck verläuft von %f mm bis %f mm in Y\n"
"und ist" "und ist %f mm breit\n"
#: pronterface.py:1385 #: pronterface.py:1399
msgid "mm high\n"
msgstr "mm hoch\n"
#: pronterface.py:1385
msgid "" msgid ""
"mm in Z\n" "the print goes from %f mm to %f mm in Z\n"
"and is" "and is %f mm high\n"
msgstr "" msgstr ""
"mm in Z\n" "Der Druck verläuft von %f mm bis %f mm in Z\n"
"und ist" "und ist %f mm hoch\n"
#: pronterface.py:1386 #: pronterface.py:1400
msgid "Estimated duration (pessimistic): " 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." msgid "No file loaded. Please use load first."
msgstr "Keine Datei geladen. Benutze zuerst laden." msgstr "Keine Datei geladen. Benutze zuerst laden."
#: pronterface.py:1421 #: pronterface.py:1435
msgid "Restart" msgid "Restart"
msgstr "Neustart" msgstr "Neustart"
#: pronterface.py:1425 #: pronterface.py:1439
msgid "File upload complete" msgid "File upload complete"
msgstr "Datei Upload komplett" msgstr "Datei Upload komplett"
#: pronterface.py:1444 #: pronterface.py:1458
msgid "Pick SD filename" msgid "Pick SD filename"
msgstr "Wähle SD Dateiname" msgstr "Wähle SD Dateiname"
#: pronterface.py:1452 #: pronterface.py:1466
msgid "Paused." msgid "Paused."
msgstr "Pausiert." msgstr "Pausiert."
#: pronterface.py:1462 #: pronterface.py:1476
msgid "Resume" msgid "Resume"
msgstr "Fortsetzen" msgstr "Fortsetzen"
#: pronterface.py:1478 #: pronterface.py:1492
msgid "Connecting..." msgid "Connecting..."
msgstr "Verbinde..." msgstr "Verbinde..."
#: pronterface.py:1509 #: pronterface.py:1523
msgid "Disconnected." msgid "Disconnected."
msgstr "Getrennt." msgstr "Getrennt."
#: pronterface.py:1536 #: pronterface.py:1550
msgid "Reset." msgid "Reset."
msgstr "Zurücksetzen." msgstr "Zurücksetzen."
#: pronterface.py:1537 #: pronterface.py:1551
msgid "Are you sure you want to reset the printer?" msgid "Are you sure you want to reset the printer?"
msgstr "Möchten Sie den Drucker wirklich zurücksetzen?" msgstr "Möchten Sie den Drucker wirklich zurücksetzen?"
#: pronterface.py:1537 #: pronterface.py:1551
msgid "Reset?" msgid "Reset?"
msgstr "Zurücksetzen?" msgstr "Zurücksetzen?"
#: pronterface.py:1583 #: pronterface.py:1597
msgid "Save" msgid "Save"
msgstr "Speichern" msgstr "Speichern"
#: pronterface.py:1639 #: pronterface.py:1653
msgid "Edit settings" msgid "Edit settings"
msgstr "Einstellungen bearbeiten" msgstr "Einstellungen bearbeiten"
#: pronterface.py:1641 #: pronterface.py:1655
msgid "Defaults" msgid "Defaults"
msgstr "Standardwerte" msgstr "Standardwerte"
#: pronterface.py:1670 #: pronterface.py:1684
msgid "Custom button" msgid "Custom button"
msgstr "Individueller Button" msgstr "Individueller Button"
#: pronterface.py:1675 #: pronterface.py:1689
msgid "Button title" msgid "Button title"
msgstr "Button Titel" msgstr "Button Titel"
#: pronterface.py:1678 #: pronterface.py:1692
msgid "Command" msgid "Command"
msgstr "Kommando" msgstr "Kommando"
#: pronterface.py:1687 #: pronterface.py:1701
msgid "Color" msgid "Color"
msgstr "Farbe" 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)"
# French Plater Message Catalog
# Copyright (C) 2012 Guillaume Seguin
# Guillaume Seguin <guillaume@segu.in>, 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 <guillaume@segu.in>\n"
"Language-Team: FR <guillaume@segu.in>\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"
...@@ -5,9 +5,9 @@ ...@@ -5,9 +5,9 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Pronterface jm1\n" "Project-Id-Version: Pronterface jm1\n"
"POT-Creation-Date: 2011-08-06 13:27+PDT\n" "POT-Creation-Date: 2012-03-16 03:48+CET\n"
"PO-Revision-Date: 2011-11-16 16:53+0100\n" "PO-Revision-Date: 2012-03-16 03:50+0100\n"
"Last-Translator: Cyril Laguilhon-Debat <c.laguilhon.debat@gmail.com>\n" "Last-Translator: Guillaume Seguin <guillaume@segu.in>\n"
"Language-Team: FR <c.laguilhon.debat@gmail.com>\n" "Language-Team: FR <c.laguilhon.debat@gmail.com>\n"
"Language: \n" "Language: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
...@@ -15,558 +15,595 @@ msgstr "" ...@@ -15,558 +15,595 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n" "Generated-By: pygettext.py 1.5\n"
#: pronterface.py:15 #: pronterface.py:30
msgid "WX is not installed. This program requires WX to run." 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." 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:67 #: 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" msgid "Printer Interface"
msgstr "Interface imprimante" msgstr "Interface de l'imprimante"
#: pronterface.py:80 #: pronterface.py:109
msgid "Motors off" msgid "Motors off"
msgstr "Arrêter les moteurs" msgstr "Arrêter les moteurs"
#: pronterface.py:81 #: pronterface.py:110
msgid "Check temp" msgid "Check temp"
msgstr "Lire les températures" msgstr "Lire les températures"
#: pronterface.py:82 #: pronterface.py:111
msgid "Extrude" msgid "Extrude"
msgstr "Extruder" msgstr "Extruder"
#: pronterface.py:83 #: pronterface.py:112
msgid "Reverse" msgid "Reverse"
msgstr "Inverser" msgstr "Inverser"
#: pronterface.py:99 #: pronterface.py:130
msgid "" msgid ""
"# I moved all your custom buttons into .pronsolerc.\n" "# I moved all your custom buttons into .pronsolerc.\n"
"# Please don't add them here any more.\n" "# Please don't add them here any more.\n"
"# Backup of your old buttons is in custombtn.old\n" "# Backup of your old buttons is in custombtn.old\n"
msgstr "" msgstr ""
"# I moved all your custom buttons into .pronsolerc.\n" "# Tous vos boutons personalisés ont été déplacés dans le fichier ."
"# Please don't add them here any more.\n" "pronsolerc.\n"
"# Backup of your old buttons is in custombtn.old\n" "# Veuillez ne plus en ajouter ici.\n"
"# Une sauvegarde de vos anciens boutons est dans le fichier custombtn.old\n"
#: pronterface.py:104 #: pronterface.py:135
msgid "Note!!! You have specified custom buttons in both custombtn.txt and .pronsolerc" msgid ""
msgstr "Remarque! Vous avez spécifié des boutons personnalisés dans custombtn.txt et aussi dans .pronsolerc" "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 #: pronterface.py:136
msgid "Ignoring custombtn.txt. Remove all current buttons to revert to custombtn.txt" msgid ""
msgstr "Ignorant custombtn.txt. Retirez tous les boutons en cours pour revenir à custombtn.txt" "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:130 #: pronterface.py:165 pronterface.py:520 pronterface.py:1343
#: pronterface.py:476 #: pronterface.py:1397 pronterface.py:1521 pronterface.py:1555
#: pronterface.py:1228 #: pronterface.py:1567
#: pronterface.py:1279
#: pronterface.py:1396
#: pronterface.py:1428
#: pronterface.py:1443
msgid "Print" msgid "Print"
msgstr "Imprimer" msgstr "Imprimer"
#: pronterface.py:134 #: pronterface.py:169
msgid "Printer is now online." msgid "Printer is now online."
msgstr "L'imprimante est connectée" msgstr "L'imprimante est connectée"
#: pronterface.py:188 #: pronterface.py:170
msgid "Setting hotend temperature to " msgid "Disconnect"
msgstr "Réglage de la température de la buse à" msgstr "Déconnecter"
#: pronterface.py:188 #: pronterface.py:229
#: pronterface.py:224 msgid "Setting hotend temperature to %f degrees Celsius."
msgid " degrees Celsius." msgstr "Réglage de la température de la buse à %f degrés Celsius."
msgstr " degrés Celsius."
#: pronterface.py:207 #: pronterface.py:248 pronterface.py:284 pronterface.py:346
#: pronterface.py:242
msgid "Printer is not online." msgid "Printer is not online."
msgstr "L'imprimante est déconnectée" msgstr "L'imprimante est déconnectée"
#: pronterface.py:209 #: pronterface.py:250
msgid "You cannot set negative temperatures. To turn the hotend off entirely, set its temperature to 0." msgid ""
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." "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:224 #: pronterface.py:265
msgid "Setting bed temperature to " msgid "Setting bed temperature to %f degrees Celsius."
msgstr "Réglage de la température du plateau à " msgstr "Réglage de la température du plateau à %f degrés Celsius."
#: pronterface.py:244 #: pronterface.py:286
msgid "You cannot set negative temperatures. To turn the bed off entirely, set its temperature to 0." msgid ""
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." "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 #: pronterface.py:288
msgid "You must enter a temperature." msgid "You must enter a temperature."
msgstr "Vous devez saisir une température." msgstr "Vous devez saisir une température."
#: pronterface.py:261 #: pronterface.py:303
msgid "Do you want to erase the macro?" msgid "Do you want to erase the macro?"
msgstr "Voulez-vous effacer la macro ?" msgstr "Voulez-vous effacer la macro ?"
#: pronterface.py:265 #: pronterface.py:307
msgid "Cancelled." msgid "Cancelled."
msgstr "Annulé" msgstr "Annulé"
#: pronterface.py:295 #: pronterface.py:352
msgid " Opens file" msgid " Opens file"
msgstr " Ouvrir un fichier" msgstr " Ouvrir un fichier"
#: pronterface.py:295 #: pronterface.py:352
msgid "&Open..." msgid "&Open..."
msgstr "&Ouvrir..." msgstr "&Ouvrir..."
#: pronterface.py:296 #: pronterface.py:353
msgid " Edit open file" msgid " Edit open file"
msgstr " Éditer le fichier ouvert" msgstr " Éditer le fichier ouvert"
#: pronterface.py:296 #: pronterface.py:353
msgid "&Edit..." msgid "&Edit..."
msgstr "&Éditer..." msgstr "&Éditer..."
#: pronterface.py:297 #: pronterface.py:354
msgid " Clear output console" msgid " Clear output console"
msgstr "Effacer le contenu de la console de sortie" msgstr " Effacer le contenu de la console de sortie"
#: pronterface.py:297 #: pronterface.py:354
msgid "Clear console" msgid "Clear console"
msgstr "Effacer la console" msgstr "Effacer la console"
#: pronterface.py:298 #: pronterface.py:355
msgid " Project slices"
msgstr " Projeter les couches"
#: pronterface.py:355
msgid "Projector"
msgstr "Projecteur"
#: pronterface.py:356
msgid " Closes the Window" msgid " Closes the Window"
msgstr " Quitter le programme" msgstr " Quitter le programme"
#: pronterface.py:298 #: pronterface.py:356
msgid "E&xit" msgid "E&xit"
msgstr "&Quitter" msgstr "&Quitter"
#: pronterface.py:299 #: pronterface.py:357
msgid "&File" msgid "&File"
msgstr "&Fichier" msgstr "&Fichier"
#: pronterface.py:304 #: pronterface.py:362
msgid "&Macros" msgid "&Macros"
msgstr "&Macros" msgstr "&Macros"
#: pronterface.py:305 #: pronterface.py:363
msgid "<&New...>" msgid "<&New...>"
msgstr "<&Nouvelle...>" msgstr "<&Nouvelle...>"
#: pronterface.py:306 #: pronterface.py:364
msgid " Options dialog" msgid " Options dialog"
msgstr " Fenêtre des options" msgstr " Fenêtre des options"
#: pronterface.py:306 #: pronterface.py:364
msgid "&Options" msgid "&Options"
msgstr "&Options" msgstr "&Options"
#: pronterface.py:308 #: pronterface.py:366
msgid " Adjust SFACT settings" msgid " Adjust slicing settings"
msgstr " Régler les paramètres SFACT" msgstr " Régler les paramètres de slicing"
#: pronterface.py:308 #: pronterface.py:366
msgid "SFACT Settings" msgid "Slicing Settings"
msgstr "Paramètres &SFACT..." msgstr "Paramètres de slicing"
#: pronterface.py:311 #: pronterface.py:373
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" msgid "&Settings"
msgstr "&Paramètres" msgstr "&Paramètres"
#: pronterface.py:331 #: pronterface.py:389
msgid "Enter macro name" msgid "Enter macro name"
msgstr "Saisissez le nom de la macro" msgstr "Saisissez le nom de la macro"
#: pronterface.py:334 #: pronterface.py:392
msgid "Macro name:" msgid "Macro name:"
msgstr "Nom :" msgstr "Nom :"
#: pronterface.py:337 #: pronterface.py:395
msgid "Ok" msgid "Ok"
msgstr "Valider" msgstr "Valider"
#: pronterface.py:341 #: pronterface.py:399 pronterface.py:1354 pronterface.py:1613
#: pronterface.py:1465
msgid "Cancel" msgid "Cancel"
msgstr "Annuler" msgstr "Annuler"
#: pronterface.py:359 #: pronterface.py:417
msgid "' is being used by built-in command" msgid "Name '%s' is being used by built-in command"
msgstr "' est utilisé par des commandes internes." msgstr "Le nom '%s' est utilisé par une commande interne"
#: pronterface.py:359
msgid "Name '"
msgstr "Le nom '"
#: pronterface.py:362 #: pronterface.py:420
msgid "Macro name may contain only alphanumeric symbols and underscores" 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 (_)" msgstr ""
"Un nom de macro ne peut contenir que des caractères alphanumérique et des "
"underscore (_)"
#: pronterface.py:411 #: pronterface.py:469
msgid "Port" msgid "Port"
msgstr "Port :" msgstr "Port"
#: pronterface.py:430 #: pronterface.py:488
msgid "Connect" msgid "Connect"
msgstr "Connecter" msgstr "Connecter"
#: pronterface.py:432 #: pronterface.py:490
msgid "Connect to the printer" msgid "Connect to the printer"
msgstr "Connecter l'imprimante" msgstr "Connecter l'imprimante"
#: pronterface.py:434 #: pronterface.py:492
msgid "Disconnect"
msgstr "Déconnecter"
#: pronterface.py:438
msgid "Reset" msgid "Reset"
msgstr "Réinitialiser" msgstr "Réinitialiser"
#: pronterface.py:441 #: pronterface.py:495 pronterface.py:772
#: pronterface.py:687
msgid "Mini mode" msgid "Mini mode"
msgstr "Mode réduit" msgstr "Mode réduit"
#: pronterface.py:455 #: pronterface.py:499
msgid "" msgid "Monitor Printer"
"Monitor\n" msgstr "Surveiller l'imprimante"
"printer"
msgstr ""
"Surveiller\n"
"l'imprimante"
#: pronterface.py:465 #: pronterface.py:509
msgid "Load file" msgid "Load file"
msgstr "Charger un fichier" msgstr "Charger un fichier"
#: pronterface.py:468 #: pronterface.py:512
msgid "SD Upload" msgid "Compose"
msgstr "Copier sur SD" msgstr "Composer"
#: pronterface.py:472 #: pronterface.py:516
msgid "SD Print" msgid "SD"
msgstr "Imprimer depuis SD" msgstr "SD"
#: pronterface.py:480 #: pronterface.py:524 pronterface.py:1398 pronterface.py:1444
#: pronterface.py:1280 #: pronterface.py:1495 pronterface.py:1520 pronterface.py:1554
#: pronterface.py:1321 #: pronterface.py:1570
#: pronterface.py:1370
#: pronterface.py:1395
#: pronterface.py:1427
#: pronterface.py:1442
msgid "Pause" msgid "Pause"
msgstr "Pause" msgstr "Pause"
#: pronterface.py:494 #: pronterface.py:537
msgid "Send" msgid "Send"
msgstr "Envoyer" msgstr "Envoyer"
#: pronterface.py:502 #: pronterface.py:545 pronterface.py:646
#: pronterface.py:603
msgid "mm/min" msgid "mm/min"
msgstr "mm/min" msgstr "mm/min"
#: pronterface.py:504 #: pronterface.py:547
msgid "XY:" msgid "XY:"
msgstr "XY:" msgstr "XY:"
#: pronterface.py:506 #: pronterface.py:549
msgid "Z:" msgid "Z:"
msgstr "Z:" msgstr "Z:"
#: pronterface.py:529 #: pronterface.py:572 pronterface.py:653
msgid "Heater:" msgid "Heater:"
msgstr "Buse :" msgstr "Buse :"
#: pronterface.py:532 #: pronterface.py:575 pronterface.py:595
#: pronterface.py:552
msgid "Off" msgid "Off"
msgstr "Off" msgstr "Off"
#: pronterface.py:544 #: pronterface.py:587 pronterface.py:607
#: pronterface.py:564
msgid "Set" msgid "Set"
msgstr "Régler" msgstr "Régler"
#: pronterface.py:549 #: pronterface.py:592 pronterface.py:655
msgid "Bed:" msgid "Bed:"
msgstr "Plateau :" msgstr "Plateau :"
#: pronterface.py:597 #: pronterface.py:640
msgid "mm" msgid "mm"
msgstr "mm" msgstr "mm"
#: pronterface.py:636 #: pronterface.py:698 pronterface.py:1206 pronterface.py:1438
#: pronterface.py:1099
#: pronterface.py:1315
msgid "Not connected to printer." msgid "Not connected to printer."
msgstr "Imprimante non connectée" msgstr "Imprimante non connectée."
#: pronterface.py:727
msgid "SD Upload"
msgstr "Copier sur SD"
#: pronterface.py:694 #: pronterface.py:731
msgid "SD Print"
msgstr "Imprimer depuis SD"
#: pronterface.py:779
msgid "Full mode" msgid "Full mode"
msgstr "Mode complet" msgstr "Mode complet"
#: pronterface.py:719 #: pronterface.py:804
msgid "Execute command: " msgid "Execute command: "
msgstr "Exécuter la commande :" msgstr "Exécuter la commande :"
#: pronterface.py:730 #: pronterface.py:815
msgid "click to add new custom button" msgid "click to add new custom button"
msgstr "Ajouter un bouton personnalisé" msgstr "Ajouter un bouton personnalisé"
#: pronterface.py:751 #: pronterface.py:834
msgid "Defines custom button. Usage: button <num> \"title\" [/c \"colour\"] command" msgid ""
msgstr "Définit des boutons personnalidés. Utilisation : <numero> \"Libelle\" [/c \"couleur\"] commande" "Defines custom button. Usage: button <num> \"title\" [/c \"colour\"] command"
msgstr ""
"Définit des boutons personnalidés. Utilisation : <numero> \"Libelle\" [/c "
"\"couleur\"] commande"
#: pronterface.py:773 #: pronterface.py:856
msgid "Custom button number should be between 0 and 63" 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." msgstr ""
"Les numéros des boutons personnalisés doivent être compris entre 0 et 63."
#: pronterface.py:865 #: pronterface.py:948
msgid "Edit custom button '%s'" msgid "Edit custom button '%s'"
msgstr "Editer le bouton personnalisé '%s'" msgstr "Editer le bouton personnalisé '%s'"
#: pronterface.py:867 #: pronterface.py:950
msgid "Move left <<" msgid "Move left <<"
msgstr "Déplacer vers la gauche <<" msgstr "Déplacer vers la gauche <<"
#: pronterface.py:870 #: pronterface.py:953
msgid "Move right >>" msgid "Move right >>"
msgstr "Déplacer vers la droite >>" msgstr "Déplacer vers la droite >>"
#: pronterface.py:874 #: pronterface.py:957
msgid "Remove custom button '%s'" msgid "Remove custom button '%s'"
msgstr "Supprimer le bouton personnalisé '%s'" msgstr "Supprimer le bouton personnalisé '%s'"
#: pronterface.py:877 #: pronterface.py:960
msgid "Add custom button" msgid "Add custom button"
msgstr "Ajouter un bouton personnalisé" msgstr "Ajouter un bouton personnalisé"
#: pronterface.py:1022 #: pronterface.py:1105
msgid "event object missing" msgid "event object missing"
msgstr "evennement d'objet manquant" msgstr "événement d'objet manquant"
#: pronterface.py:1050 #: pronterface.py:1133
msgid "Invalid period given." msgid "Invalid period given."
msgstr "La période donnée est invalide" msgstr "La période donnée est invalide"
#: pronterface.py:1053 #: pronterface.py:1136
msgid "Monitoring printer." msgid "Monitoring printer."
msgstr "Surveillance de l'imprimante" msgstr "Imprimante sous surveillance."
#: pronterface.py:1055 #: pronterface.py:1138
msgid "Done monitoring." msgid "Done monitoring."
msgstr "Surveillance de l'imprimante effectuée." msgstr "Surveillance de l'imprimante effectuée."
#: pronterface.py:1077 #: pronterface.py:1160
msgid "Printer is online. " msgid "Printer is online. "
msgstr "L'imprimante est connectée" msgstr "L'imprimante est connectée. "
#: pronterface.py:1079 #: pronterface.py:1162 pronterface.py:1341
#: pronterface.py:1226
#: pronterface.py:1278
msgid "Loaded " msgid "Loaded "
msgstr "Chargé " msgstr "Chargé "
#: pronterface.py:1082 #: pronterface.py:1165
msgid "Bed" msgid "Bed"
msgstr "Plateau" msgstr "Plateau"
#: pronterface.py:1082 #: pronterface.py:1165
msgid "Hotend" msgid "Hotend"
msgstr "Buse" msgstr "Buse"
#: pronterface.py:1089 #: pronterface.py:1175
msgid " SD printing:%04.2f %%" msgid " SD printing:%04.2f %%"
msgstr "Impression SD : %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:1091 #: pronterface.py:1186
msgid " Printing:%04.2f %%" msgid " Z: %0.2f mm"
msgstr "Impression : %04.2f %%" msgstr " Z: %0.2f mm"
#: pronterface.py:1149 #: pronterface.py:1257
msgid "Opening file failed." msgid "Opening file failed."
msgstr "L'ouverture du fichier a échoué" msgstr "L'ouverture du fichier a échoué"
#: pronterface.py:1155 #: pronterface.py:1263
msgid "Starting print" msgid "Starting print"
msgstr "Début de l'impression..." msgstr "Début de l'impression..."
#: pronterface.py:1178 #: pronterface.py:1286
msgid "Pick SD file" msgid "Pick SD file"
msgstr "Choisir un fichier sur la carte SD" msgstr "Choisir un fichier sur la carte SD"
#: pronterface.py:1178 #: pronterface.py:1286
msgid "Select the file to print" msgid "Select the file to print"
msgstr "Sélectionnez le fichier à imprimer :" msgstr "Sélectionnez le fichier à imprimer :"
#: pronterface.py:1206 #: pronterface.py:1321
msgid "Skeinforge execution failed." msgid "Failed to execute slicing software: "
msgstr "Exécution de Skeinforge échoué" msgstr "Une erreur s'est produite lors du slicing : "
#: pronterface.py:1213 #: pronterface.py:1328
msgid "Skeining..." msgid "Slicing..."
msgstr "Skeining..." msgstr "Slicing..."
#: pronterface.py:1226 #: pronterface.py:1341
#: pronterface.py:1278
msgid ", %d lines" msgid ", %d lines"
msgstr ", %d lignes" msgstr ", %d lignes"
#: pronterface.py:1235 #: pronterface.py:1348
msgid "Skeining " msgid "Load File"
msgstr "Skeining " msgstr "Charger un fichier"
#: pronterface.py:1237 #: pronterface.py:1355
msgid "" msgid "Slicing "
"Skeinforge not found. \n" msgstr "Slicing "
"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 #: pronterface.py:1374
msgid "Open file to print" msgid "Open file to print"
msgstr "Ouvrir un fichier à imprimer" msgstr "Ouvrir un fichier à imprimer"
#: pronterface.py:1257 #: pronterface.py:1375
msgid "OBJ, STL, and GCODE files (;*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ;)" msgid ""
msgstr "Fichiers OBJ, STL et GCODE (;*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ;)" "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:1264 #: pronterface.py:1382
msgid "File not found!" msgid "File not found!"
msgstr "Fichier non trouvé" msgstr "Fichier non trouvé"
#: pronterface.py:1288 #: 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" msgid "mm of filament used in this print\n"
msgstr "mm de filament utilisés pour cette impression\n" msgstr "mm de filament utilisés pour cette impression\n"
#: pronterface.py:1289 #: pronterface.py:1407
msgid "" msgid ""
"mm in X\n" "the print goes from %f mm to %f mm in X\n"
"and is" "and is %f mm wide\n"
msgstr "" msgstr ""
"mm en X\n" "L'impression va de %f mm à %f m en X\n"
"et mesure" "et mesure %f mm de large\n"
#: pronterface.py:1289 #: pronterface.py:1408
#: 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 "" msgid ""
"mm in Y\n" "the print goes from %f mm to %f mm in Y\n"
"and is" "and is %f mm wide\n"
msgstr "" msgstr ""
"mm en Y\n" "L'impression va de %f mm à %f m en Y\n"
"et mesure" "et mesure %f mm de large\n"
#: pronterface.py:1291
msgid "mm high\n"
msgstr "mm de haut\n"
#: pronterface.py:1291 #: pronterface.py:1409
msgid "" msgid ""
"mm in Z\n" "the print goes from %f mm to %f mm in Z\n"
"and is" "and is %f mm high\n"
msgstr "" msgstr ""
"mm en Z\n" "L'impression va de %f mm à %f m en Y\n"
"et mesure" "et mesure %f mm de haut\n"
#: pronterface.py:1292 #: pronterface.py:1410
msgid "Estimated duration (pessimistic): " msgid "Estimated duration (pessimistic): "
msgstr "Durée estimée (pessimiste)" msgstr "Durée estimée (pessimiste) : "
#: pronterface.py:1312 #: pronterface.py:1435
msgid "No file loaded. Please use load first." msgid "No file loaded. Please use load first."
msgstr "Aucun fichier chargé. Veuillez charger un fichier avant." msgstr "Aucun fichier chargé. Veuillez charger un fichier avant."
#: pronterface.py:1323 #: pronterface.py:1446
msgid "Restart" msgid "Restart"
msgstr "Recommencer" msgstr "Recommencer"
#: pronterface.py:1327 #: pronterface.py:1450
msgid "File upload complete" msgid "File upload complete"
msgstr "Envoi du fichier terminé" msgstr "Envoi du fichier terminé"
#: pronterface.py:1346 #: pronterface.py:1469
msgid "Pick SD filename" msgid "Pick SD filename"
msgstr "Lister les fichiers sur la carte SD" msgstr "Lister les fichiers sur la carte SD"
#: pronterface.py:1353 #: pronterface.py:1477
msgid "Paused." msgid "Paused."
msgstr "En pause" msgstr "En pause."
#: pronterface.py:1363 #: pronterface.py:1488
msgid "Resume" msgid "Resume"
msgstr "Reprendre" msgstr "Reprendre"
#: pronterface.py:1379 #: pronterface.py:1504
msgid "Connecting..." msgid "Connecting..."
msgstr "Connection en cours..." msgstr "Connection en cours..."
#: pronterface.py:1410 #: pronterface.py:1535
msgid "Disconnected." msgid "Disconnected."
msgstr "Déconnecté" msgstr "Déconnecté."
#: pronterface.py:1435 #: pronterface.py:1562
msgid "Reset." msgid "Reset."
msgstr "Réinitialiser" msgstr "Réinitialisée."
#: pronterface.py:1436 #: pronterface.py:1563
msgid "Are you sure you want to reset the printer?" msgid "Are you sure you want to reset the printer?"
msgstr "Etes-vous sûr de vouloir réinitialiser l'imprimante?" msgstr "Etes-vous sûr de vouloir réinitialiser l'imprimante?"
#: pronterface.py:1436 #: pronterface.py:1563
msgid "Reset?" msgid "Reset?"
msgstr "Réinitialiser ?" msgstr "Réinitialiser ?"
#: pronterface.py:1461 #: pronterface.py:1609
msgid "Save" msgid "Save"
msgstr "Enregistrer" msgstr "Enregistrer"
#: pronterface.py:1519 #: pronterface.py:1665
msgid "Edit settings" msgid "Edit settings"
msgstr "Modifier les paramètres" msgstr "Modifier les paramètres"
#: pronterface.py:1521 #: pronterface.py:1667
msgid "Defaults" msgid "Defaults"
msgstr "Paramètres par défaut" msgstr "Paramètres par défaut"
#: pronterface.py:1543 #: pronterface.py:1696
msgid "Custom button" msgid "Custom button"
msgstr "Commande personnalisée" msgstr "Commande personnalisée"
#: pronterface.py:1551 #: pronterface.py:1701
msgid "Button title" msgid "Button title"
msgstr "Titre du bouton" msgstr "Titre du bouton"
#: pronterface.py:1554 #: pronterface.py:1704
msgid "Command" msgid "Command"
msgstr "Commande" msgstr "Commande"
#: pronterface.py:1563 #: pronterface.py:1713
msgid "Color" msgid "Color"
msgstr "Couleur" msgstr "Couleur"
...@@ -5,77 +5,21 @@ ...@@ -5,77 +5,21 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "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" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Italian RepRap Community <reprap-italia@googlegroups.com>\n" "Last-Translator: Italian RepRap Community <reprap-italia@googlegroups.com>\n"
"Language-Team: Italian RepRap Community <reprap-italia@googlegroups.com>\n" "Language-Team: Italian RepRap Community <reprap-italia@googlegroups.com>\n"
"Language: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n" "Generated-By: pygettext.py 1.5\n"
#: pronterface.py:30
#: 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
msgid "WX is not installed. This program requires WX to run." msgid "WX is not installed. This program requires WX to run."
msgstr "WX non è installato. Questo software richiede WX per funzionare." msgstr "WX non è installato. Questo software richiede WX per funzionare."
#: pronterface.py:66 #: pronterface.py:81
msgid "" msgid ""
"Dimensions of Build Platform\n" "Dimensions of Build Platform\n"
" & optional offset of origin\n" " & optional offset of origin\n"
...@@ -93,55 +37,55 @@ msgstr "" ...@@ -93,55 +37,55 @@ msgstr ""
" XXX,YYY,ZZZ\n" " XXX,YYY,ZZZ\n"
" XXXxYYYxZZZ+SposX+SposY+SposZ" " XXXxYYYxZZZ+SposX+SposY+SposZ"
#: pronterface.py:67 #: pronterface.py:82
msgid "Last Set Temperature for the Heated Print Bed" msgid "Last Set Temperature for the Heated Print Bed"
msgstr "Ultima temperatura impostata per il letto riscaldato" msgstr "Ultima temperatura impostata per il letto riscaldato"
#: pronterface.py:68 #: pronterface.py:83
msgid "Folder of last opened file" msgid "Folder of last opened file"
msgstr "Cartella dell'ultimo file aperto" msgstr "Cartella dell'ultimo file aperto"
#: pronterface.py:69 #: pronterface.py:84
msgid "Last Temperature of the Hot End" msgid "Last Temperature of the Hot End"
msgstr "Ultima temperatura dell'estrusore" msgstr "Ultima temperatura dell'estrusore"
#: pronterface.py:70 #: pronterface.py:85
msgid "Width of Extrusion in Preview (default: 0.5)" msgid "Width of Extrusion in Preview (default: 0.5)"
msgstr "Larghezza dell'estrusione nell'anteprima (default: 0.5)" msgstr "Larghezza dell'estrusione nell'anteprima (default: 0.5)"
#: pronterface.py:71 #: pronterface.py:86
msgid "Fine Grid Spacing (default: 10)" msgid "Fine Grid Spacing (default: 10)"
msgstr "Spaziatura fine della griglia (default: 10)" msgstr "Spaziatura fine della griglia (default: 10)"
#: pronterface.py:72 #: pronterface.py:87
msgid "Coarse Grid Spacing (default: 50)" msgid "Coarse Grid Spacing (default: 50)"
msgstr "Spaziatura larga della griglia (default: 50)" msgstr "Spaziatura larga della griglia (default: 50)"
#: pronterface.py:73 #: pronterface.py:88
msgid "Pronterface background color (default: #FFFFFF)" msgid "Pronterface background color (default: #FFFFFF)"
msgstr "Colore di sfondo di Pronterface (default: #FFFFFF)" msgstr "Colore di sfondo di Pronterface (default: #FFFFFF)"
#: pronterface.py:76 #: pronterface.py:91
msgid "Printer Interface" msgid "Printer Interface"
msgstr "Interfaccia di stampa" msgstr "Interfaccia di stampa"
#: pronterface.py:93 #: pronterface.py:108
msgid "Motors off" msgid "Motors off"
msgstr "Spegni motori" msgstr "Spegni motori"
#: pronterface.py:94 #: pronterface.py:109
msgid "Check temp" msgid "Check temp"
msgstr "Leggi temperatura" msgstr "Leggi temperatura"
#: pronterface.py:95 #: pronterface.py:110
msgid "Extrude" msgid "Extrude"
msgstr "Estrudi" msgstr "Estrudi"
#: pronterface.py:96 #: pronterface.py:111
msgid "Reverse" msgid "Reverse"
msgstr "Ritrai" msgstr "Ritrai"
#: pronterface.py:114 #: pronterface.py:129
msgid "" msgid ""
"# I moved all your custom buttons into .pronsolerc.\n" "# I moved all your custom buttons into .pronsolerc.\n"
"# Please don't add them here any more.\n" "# Please don't add them here any more.\n"
...@@ -151,528 +95,566 @@ msgstr "" ...@@ -151,528 +95,566 @@ msgstr ""
"# Per favore non aggiungerne altri qui.\n" "# Per favore non aggiungerne altri qui.\n"
"# Un backup dei tuoi vecchi pulsanti è in custombtn.old\n" "# Un backup dei tuoi vecchi pulsanti è in custombtn.old\n"
#: pronterface.py:119 #: pronterface.py:134
msgid "Note!!! You have specified custom buttons in both custombtn.txt and .pronsolerc" msgid ""
msgstr "Nota!!! Hai specificato pulsanti personalizzati sia in custombtn.txt che in .pronsolerc" "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 #: pronterface.py:135
msgid "Ignoring custombtn.txt. Remove all current buttons to revert to custombtn.txt" msgid ""
msgstr "Ignoro custombtn.txt. Elimina tutti i pulsanti attuali per tornare a custombtn.txt" "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:163 pronterface.py:514 pronterface.py:1333
#: pronterface.py:1373 pronterface.py:1495 pronterface.py:1529 #: pronterface.py:1387 pronterface.py:1509 pronterface.py:1543
#: pronterface.py:1544 #: pronterface.py:1558
msgid "Print" msgid "Print"
msgstr "Stampa" msgstr "Stampa"
#: pronterface.py:152 #: pronterface.py:167
msgid "Printer is now online." msgid "Printer is now online."
msgstr "La stampante ora è connessa." msgstr "La stampante ora è connessa."
#: pronterface.py:212 #: pronterface.py:168
msgid "Setting hotend temperature to " msgid "Disconnect"
msgstr "Imposto la temperatura dell'estrusore a " msgstr "Disconnettere."
#: pronterface.py:212 pronterface.py:248 #: pronterface.py:227
msgid " degrees Celsius." msgid "Setting hotend temperature to %f degrees Celsius."
msgstr " gradi 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." msgid "Printer is not online."
msgstr "La stampante non è connessa." 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 #: pronterface.py:248
msgid "Setting bed temperature to " msgid ""
msgstr "Imposto la temperatura del piano di stampa a " "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:250
msgid "You must enter a temperature. (%s)"
msgstr "Devi inserire una temperatura. (%s)"
#: pronterface.py:269 #: pronterface.py:263
msgid "You cannot set negative temperatures. To turn the bed off entirely, set its temperature to 0." msgid "Setting bed temperature to %f degrees Celsius."
msgstr "Non è possibile impostare temperature negative. Per raffreddare il piano di stampa imposta la sua temperatura a 0." 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:271 #: pronterface.py:286
msgid "You must enter a temperature." msgid "You must enter a temperature."
msgstr "Devi inserire una temperatura." msgstr "Devi inserire una temperatura."
#: pronterface.py:286 #: pronterface.py:301
msgid "Do you want to erase the macro?" msgid "Do you want to erase the macro?"
msgstr "Vuoi cancellare la macro?" msgstr "Vuoi cancellare la macro?"
#: pronterface.py:290 #: pronterface.py:305
msgid "Cancelled." msgid "Cancelled."
msgstr "Annullato." msgstr "Annullato."
#: pronterface.py:331 #: pronterface.py:346
msgid " Opens file" msgid " Opens file"
msgstr " Apre un file" msgstr " Apre un file"
#: pronterface.py:331 #: pronterface.py:346
msgid "&Open..." msgid "&Open..."
msgstr "&Apri..." msgstr "&Apri..."
#: pronterface.py:332 #: pronterface.py:347
msgid " Edit open file" msgid " Edit open file"
msgstr " Modifica file aperto" msgstr " Modifica file aperto"
#: pronterface.py:332 #: pronterface.py:347
msgid "&Edit..." msgid "&Edit..."
msgstr "&Modifica" msgstr "&Modifica"
#: pronterface.py:333 #: pronterface.py:348
msgid " Clear output console" msgid " Clear output console"
msgstr " Svuota la console" msgstr " Svuota la console"
#: pronterface.py:333 #: pronterface.py:348
msgid "Clear console" msgid "Clear console"
msgstr "Pulisci console" msgstr "Pulisci console"
#: pronterface.py:334 #: pronterface.py:349
msgid " Project slices" msgid " Project slices"
msgstr " Proietta i layer" msgstr " Proietta i layer"
#: pronterface.py:334 #: pronterface.py:349
msgid "Projector" msgid "Projector"
msgstr "Proiettore" msgstr "Proiettore"
#: pronterface.py:335 #: pronterface.py:350
msgid " Closes the Window" msgid " Closes the Window"
msgstr " Chiude la finestra" msgstr " Chiude la finestra"
#: pronterface.py:335 #: pronterface.py:350
msgid "E&xit" msgid "E&xit"
msgstr "&Esci" msgstr "&Esci"
#: pronterface.py:336 #: pronterface.py:351
msgid "&File" msgid "&File"
msgstr "&File" msgstr "&File"
#: pronterface.py:341 #: pronterface.py:356
msgid "&Macros" msgid "&Macros"
msgstr "&Macro" msgstr "&Macro"
#: pronterface.py:342 #: pronterface.py:357
msgid "<&New...>" msgid "<&New...>"
msgstr "<&Nuovo...>" msgstr "<&Nuovo...>"
#: pronterface.py:343 #: pronterface.py:358
msgid " Options dialog" msgid " Options dialog"
msgstr " Finestra di opzioni" msgstr " Finestra di opzioni"
#: pronterface.py:343 #: pronterface.py:358
msgid "&Options" msgid "&Options"
msgstr "&Opzioni" msgstr "&Opzioni"
#: pronterface.py:345 #: pronterface.py:360
msgid " Adjust slicing settings" msgid " Adjust slicing settings"
msgstr " Configura la generazione del percorso" msgstr " Configura la generazione del percorso"
#: pronterface.py:345 #: pronterface.py:360
msgid "Slicing Settings" msgid "Slicing Settings"
msgstr "Impostazioni di generazione del percorso" msgstr "Impostazioni di generazione del percorso"
#: pronterface.py:352 #: pronterface.py:367
msgid "&Settings" msgid "&Settings"
msgstr "&Impostazioni" msgstr "&Impostazioni"
#: pronterface.py:368 #: pronterface.py:383
msgid "Enter macro name" msgid "Enter macro name"
msgstr "Inserisci il nome della macro" msgstr "Inserisci il nome della macro"
#: pronterface.py:371 #: pronterface.py:386
msgid "Macro name:" msgid "Macro name:"
msgstr "Nome macro:" msgstr "Nome macro:"
#: pronterface.py:374 #: pronterface.py:389
msgid "Ok" msgid "Ok"
msgstr "Ok" msgstr "Ok"
#: pronterface.py:378 pronterface.py:1330 pronterface.py:1587 #: pronterface.py:393 pronterface.py:1344 pronterface.py:1601
msgid "Cancel" msgid "Cancel"
msgstr "Annulla" msgstr "Annulla"
#: pronterface.py:396 #: pronterface.py:411
msgid "' is being used by built-in command" msgid "Name '%s' is being used by built-in command"
msgstr "' è usato da un comando interno" msgstr "Nome '%s' è usato da un comando interno"
#: pronterface.py:396 #: pronterface.py:414
msgid "Name '"
msgstr "Nome '"
#: pronterface.py:399
msgid "Macro name may contain only alphanumeric symbols and underscores" 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" msgid "Port"
msgstr "Porta" msgstr "Porta"
#: pronterface.py:467 #: pronterface.py:482
msgid "Connect" msgid "Connect"
msgstr "Connetti" msgstr "Connetti"
#: pronterface.py:469 #: pronterface.py:484
msgid "Connect to the printer" msgid "Connect to the printer"
msgstr "Connetti alla stampante" msgstr "Connetti alla stampante"
#: pronterface.py:471 #: pronterface.py:486
msgid "Reset" msgid "Reset"
msgstr "Reset" msgstr "Reset"
#: pronterface.py:474 pronterface.py:751 #: pronterface.py:489 pronterface.py:766
msgid "Mini mode" msgid "Mini mode"
msgstr "Contrai" msgstr "Contrai"
#: pronterface.py:478 #: pronterface.py:493
msgid "Monitor Printer" msgid "Monitor Printer"
msgstr "Controllo automatico temperatura" msgstr "Controllo automatico temperatura"
#: pronterface.py:488 #: pronterface.py:503
msgid "Load file" msgid "Load file"
msgstr "Carica file" msgstr "Carica file"
#: pronterface.py:491 #: pronterface.py:506
msgid "Compose" msgid "Compose"
msgstr "Componi" msgstr "Componi"
#: pronterface.py:495 #: pronterface.py:510
msgid "SD" msgid "SD"
msgstr "SD" msgstr "SD"
#: pronterface.py:503 pronterface.py:1374 pronterface.py:1419 #: pronterface.py:518 pronterface.py:1388 pronterface.py:1433
#: pronterface.py:1469 pronterface.py:1494 pronterface.py:1528 #: pronterface.py:1483 pronterface.py:1508 pronterface.py:1542
#: pronterface.py:1543 #: pronterface.py:1557
msgid "Pause" msgid "Pause"
msgstr "Pausa" msgstr "Pausa"
#: pronterface.py:516 #: pronterface.py:531
msgid "Send" msgid "Send"
msgstr "Invia" msgstr "Invia"
#: pronterface.py:524 pronterface.py:625 #: pronterface.py:539 pronterface.py:640
msgid "mm/min" msgid "mm/min"
msgstr "mm/min" msgstr "mm/min"
#: pronterface.py:526 #: pronterface.py:541
msgid "XY:" msgid "XY:"
msgstr "XY:" msgstr "XY:"
#: pronterface.py:528 #: pronterface.py:543
msgid "Z:" msgid "Z:"
msgstr "Z:" msgstr "Z:"
#: pronterface.py:551 pronterface.py:632 #: pronterface.py:566 pronterface.py:647
msgid "Heater:" msgid "Heater:"
msgstr "Estrusore:" msgstr "Estrusore:"
#: pronterface.py:554 pronterface.py:574 #: pronterface.py:569 pronterface.py:589
msgid "Off" msgid "Off"
msgstr "Off" msgstr "Off"
#: pronterface.py:566 pronterface.py:586 #: pronterface.py:581 pronterface.py:601
msgid "Set" msgid "Set"
msgstr "On" msgstr "On"
#: pronterface.py:571 pronterface.py:634 #: pronterface.py:586 pronterface.py:649
msgid "Bed:" msgid "Bed:"
msgstr "Piano:" msgstr "Piano:"
#: pronterface.py:619 #: pronterface.py:634
msgid "mm" msgid "mm"
msgstr "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." msgid "Not connected to printer."
msgstr "Non connesso alla stampante." msgstr "Non connesso alla stampante."
#: pronterface.py:706 #: pronterface.py:721
msgid "SD Upload" msgid "SD Upload"
msgstr "Carica SD" msgstr "Carica SD"
#: pronterface.py:710 #: pronterface.py:725
msgid "SD Print" msgid "SD Print"
msgstr "Stampa SD" msgstr "Stampa SD"
#: pronterface.py:758 #: pronterface.py:773
msgid "Full mode" msgid "Full mode"
msgstr "Espandi" msgstr "Espandi"
#: pronterface.py:783 #: pronterface.py:798
msgid "Execute command: " msgid "Execute command: "
msgstr "Esegui comando: " msgstr "Esegui comando: "
#: pronterface.py:794 #: pronterface.py:809
msgid "click to add new custom button" msgid "click to add new custom button"
msgstr "clicca per aggiungere un nuovo pulsante personalizzato" msgstr "clicca per aggiungere un nuovo pulsante personalizzato"
#: pronterface.py:813 #: pronterface.py:828
msgid "Defines custom button. Usage: button <num> \"title\" [/c \"colour\"] command" msgid ""
msgstr "Definisce un pulsante personalizzato. Uso: button <num> \"titolo\" [/c \"colore\"] comando" "Defines custom button. Usage: button <num> \"title\" [/c \"colour\"] command"
msgstr ""
"Definisce un pulsante personalizzato. Uso: button <num> \"titolo\" [/c "
"\"colore\"] comando"
#: pronterface.py:835 #: pronterface.py:850
msgid "Custom button number should be between 0 and 63" msgid "Custom button number should be between 0 and 63"
msgstr "Il numero del pulsante personalizzato dev'essere tra 0 e 63" msgstr "Il numero del pulsante personalizzato dev'essere tra 0 e 63"
#: pronterface.py:927 #: pronterface.py:942
msgid "Edit custom button '%s'" msgid "Edit custom button '%s'"
msgstr "Modifica pulsante personalizzato '%s'" msgstr "Modifica pulsante personalizzato '%s'"
#: pronterface.py:929 #: pronterface.py:944
msgid "Move left <<" msgid "Move left <<"
msgstr "Muovi a sinistra <<" msgstr "Muovi a sinistra <<"
#: pronterface.py:932 #: pronterface.py:947
msgid "Move right >>" msgid "Move right >>"
msgstr "Muovi a destra >>" msgstr "Muovi a destra >>"
#: pronterface.py:936 #: pronterface.py:951
msgid "Remove custom button '%s'" msgid "Remove custom button '%s'"
msgstr "Elimina pulsante personalizzato '%s'" msgstr "Elimina pulsante personalizzato '%s'"
#: pronterface.py:939 #: pronterface.py:954
msgid "Add custom button" msgid "Add custom button"
msgstr "Aggiungi pulsante personalizzato" msgstr "Aggiungi pulsante personalizzato"
#: pronterface.py:1084 #: pronterface.py:1099
msgid "event object missing" msgid "event object missing"
msgstr "oggetto dell'evento mancante" msgstr "oggetto dell'evento mancante"
#: pronterface.py:1112 #: pronterface.py:1127
msgid "Invalid period given." msgid "Invalid period given."
msgstr "Periodo non valido." msgstr "Periodo non valido."
#: pronterface.py:1115 #: pronterface.py:1130
msgid "Monitoring printer." msgid "Monitoring printer."
msgstr "Sto controllando la stampante." msgstr "Sto controllando la stampante."
#: pronterface.py:1117 #: pronterface.py:1132
msgid "Done monitoring." msgid "Done monitoring."
msgstr "Controllo terminato." msgstr "Controllo terminato."
#: pronterface.py:1139 #: pronterface.py:1154
msgid "Printer is online. " msgid "Printer is online. "
msgstr "La stampante è online. " msgstr "La stampante è online. "
#: pronterface.py:1141 pronterface.py:1317 pronterface.py:1372 #: pronterface.py:1156 pronterface.py:1331
msgid "Loaded " msgid "Loaded "
msgstr "Caricato " msgstr "Caricato "
#: pronterface.py:1144 #: pronterface.py:1159
msgid "Bed" msgid "Bed"
msgstr "Letto" msgstr "Letto"
#: pronterface.py:1144 #: pronterface.py:1159
msgid "Hotend" msgid "Hotend"
msgstr "Estrusore" msgstr "Estrusore"
#: pronterface.py:1154 #: pronterface.py:1169
msgid " SD printing:%04.2f %%" msgid " SD printing:%04.2f %%"
msgstr " stampa da scheda SD:%04.2f %%" msgstr " stampa da scheda SD:%04.2f %%"
#: pronterface.py:1157 #: pronterface.py:1172
msgid " Printing:%04.2f %% |" msgid " Printing:%04.2f %% |"
msgstr " Stampa in corso:%04.2f %% |" msgstr " Stampa in corso:%04.2f %% |"
#: pronterface.py:1158 #: pronterface.py:1173
msgid " Line# " msgid " Line# %d of %d lines |"
msgstr " Linea# " msgstr " Linea# %d di %d linee |"
#: pronterface.py:1158
msgid " lines |"
msgstr " linee |"
#: pronterface.py:1158
msgid "of "
msgstr "di "
#: pronterface.py:1163 #: pronterface.py:1178
msgid " Est: " msgid " Est: %s of %s remaining | "
msgstr " Stima: " msgstr " Stima: %s di %s rimanente | "
#: pronterface.py:1164 #: pronterface.py:1180
msgid " of: "
msgstr " di: "
#: pronterface.py:1165
msgid " Remaining | "
msgstr " Rimanente | "
#: pronterface.py:1166
msgid " Z: %0.2f mm" msgid " Z: %0.2f mm"
msgstr " Z: %0.2f mm" msgstr " Z: %0.2f mm"
#: pronterface.py:1233 #: pronterface.py:1247
msgid "Opening file failed." msgid "Opening file failed."
msgstr "Apertura del file fallita." msgstr "Apertura del file fallita."
#: pronterface.py:1239 #: pronterface.py:1253
msgid "Starting print" msgid "Starting print"
msgstr "Inizio della stampa" msgstr "Inizio della stampa"
#: pronterface.py:1262 #: pronterface.py:1276
msgid "Pick SD file" msgid "Pick SD file"
msgstr "Scegli un file dalla scheda SD" msgstr "Scegli un file dalla scheda SD"
#: pronterface.py:1262 #: pronterface.py:1276
msgid "Select the file to print" msgid "Select the file to print"
msgstr "Seleziona il file da stampare" msgstr "Seleziona il file da stampare"
#: pronterface.py:1297 #: pronterface.py:1311
msgid "Failed to execute slicing software: " msgid "Failed to execute slicing software: "
msgstr "Imposibile eseguire il software di generazione percorso: " msgstr "Imposibile eseguire il software di generazione percorso: "
#: pronterface.py:1304 #: pronterface.py:1318
msgid "Slicing..." msgid "Slicing..."
msgstr "Generazione percorso..." msgstr "Generazione percorso..."
#: pronterface.py:1317 pronterface.py:1372 #: pronterface.py:1331
msgid ", %d lines" msgid ", %d lines"
msgstr ", %d linee" msgstr ", %d linee"
#: pronterface.py:1324 #: pronterface.py:1338
msgid "Load File" msgid "Load File"
msgstr "Apri file" msgstr "Apri file"
#: pronterface.py:1331 #: pronterface.py:1345
msgid "Slicing " msgid "Slicing "
msgstr "Generazione del percorso " msgstr "Generazione del percorso "
#: pronterface.py:1350 #: pronterface.py:1364
msgid "Open file to print" msgid "Open file to print"
msgstr "Apri il file da stampare" 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;)" 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;)" msgstr "files OBJ, STL e GCODE (;*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ;)"
#: pronterface.py:1358 #: pronterface.py:1372
msgid "File not found!" msgid "File not found!"
msgstr "File non trovato!" msgstr "File non trovato!"
#: pronterface.py:1382 #: pronterface.py:1386
msgid "" msgid "Loaded %s, %d lines"
"mm of filament used in this print\n" msgstr "Caricato %s, %d linee"
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 #: pronterface.py:1396
msgid "the print goes from" msgid "mm of filament used in this print\n"
msgstr "la stampa va da" msgstr "mm di filamento usato in questa stampa\n"
#: pronterface.py:1384 #: pronterface.py:1397
msgid "" msgid ""
"mm in Y\n" "the print goes from %f mm to %f mm in X\n"
"and is" "and is %f mm wide\n"
msgstr "" msgstr ""
"mm in Y\n" "la stampa va da %f mm a %f mm in X\n"
"ed è" "ed è %f mm di larghezza\n"
#: pronterface.py:1385 #: pronterface.py:1398
msgid "" msgid ""
"mm high\n" "the print goes from %f mm to %f mm in Y\n"
"and is %f mm wide\n"
msgstr "" msgstr ""
"mm di altezza\n" "la stampa va da %f mm a %f mm in Y\n"
"ed è %f mm di larghezza\n"
#: pronterface.py:1385 #: pronterface.py:1399
msgid "" msgid ""
"mm in Z\n" "the print goes from %f mm to %f mm in Z\n"
"and is" "and is %f mm high\n"
msgstr "" msgstr ""
"mm in Z\n" "la stampa va da %f mm a %f mm in Z\n"
"ed è" "ed è %f mm di altezza\n"
#: pronterface.py:1386 #: pronterface.py:1400
msgid "Estimated duration (pessimistic): " msgid "Estimated duration (pessimistic): "
msgstr "Durata stimata (pessimistica): " msgstr "Durata stimata (pessimistica): "
#: pronterface.py:1410 #: pronterface.py:1424
msgid "No file loaded. Please use load first." msgid "No file loaded. Please use load first."
msgstr "Nessub file caricato. Usare Apri prima." msgstr "Nessub file caricato. Usare Apri prima."
#: pronterface.py:1421 #: pronterface.py:1435
msgid "Restart" msgid "Restart"
msgstr "Ricomincia" msgstr "Ricomincia"
#: pronterface.py:1425 #: pronterface.py:1439
msgid "File upload complete" msgid "File upload complete"
msgstr "Caricamento file completato" msgstr "Caricamento file completato"
#: pronterface.py:1444 #: pronterface.py:1458
msgid "Pick SD filename" msgid "Pick SD filename"
msgstr "Scegli un file dalla scheda SD" msgstr "Scegli un file dalla scheda SD"
#: pronterface.py:1452 #: pronterface.py:1466
msgid "Paused." msgid "Paused."
msgstr "In pausa." msgstr "In pausa."
#: pronterface.py:1462 #: pronterface.py:1476
msgid "Resume" msgid "Resume"
msgstr "Ripristina" msgstr "Ripristina"
#: pronterface.py:1478 #: pronterface.py:1492
msgid "Connecting..." msgid "Connecting..."
msgstr "Connessione..." msgstr "Connessione..."
#: pronterface.py:1509 #: pronterface.py:1523
msgid "Disconnected." msgid "Disconnected."
msgstr "Disconnesso." msgstr "Disconnesso."
#: pronterface.py:1536 #: pronterface.py:1550
msgid "Reset." msgid "Reset."
msgstr "Reset." msgstr "Reset."
#: pronterface.py:1537 #: pronterface.py:1551
msgid "Are you sure you want to reset the printer?" msgid "Are you sure you want to reset the printer?"
msgstr "Sei sicuro di voler resettare la stampante?" msgstr "Sei sicuro di voler resettare la stampante?"
#: pronterface.py:1537 #: pronterface.py:1551
msgid "Reset?" msgid "Reset?"
msgstr "Reset?" msgstr "Reset?"
#: pronterface.py:1583 #: pronterface.py:1597
msgid "Save" msgid "Save"
msgstr "Salva" msgstr "Salva"
#: pronterface.py:1639 #: pronterface.py:1653
msgid "Edit settings" msgid "Edit settings"
msgstr "Modifica impostazioni" msgstr "Modifica impostazioni"
#: pronterface.py:1641 #: pronterface.py:1655
msgid "Defaults" msgid "Defaults"
msgstr "Valori di default" msgstr "Valori di default"
#: pronterface.py:1670 #: pronterface.py:1684
msgid "Custom button" msgid "Custom button"
msgstr "Personalizza bottone" msgstr "Personalizza bottone"
#: pronterface.py:1675 #: pronterface.py:1689
msgid "Button title" msgid "Button title"
msgstr "Titolo bottone" msgstr "Titolo bottone"
#: pronterface.py:1678 #: pronterface.py:1692
msgid "Command" msgid "Command"
msgstr "Comando" msgstr "Comando"
#: pronterface.py:1687 #: pronterface.py:1701
msgid "Color" msgid "Color"
msgstr "Colore" 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)"
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Pronterface rl1\n" "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" "PO-Revision-Date: 2011-09-06 16:31+0100\n"
"Last-Translator: Ruben Lubbes <ruben.lubbes@gmx.net>\n" "Last-Translator: Ruben Lubbes <ruben.lubbes@gmx.net>\n"
"Language-Team: NL <LL@li.org>\n" "Language-Team: NL <LL@li.org>\n"
...@@ -15,135 +15,70 @@ msgstr "" ...@@ -15,135 +15,70 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\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." msgid "WX is not installed. This program requires WX to run."
msgstr "WX is niet geïnstalleerd. Dit programma vereist WX." msgstr "WX is niet geïnstalleerd. Dit programma vereist WX."
#: pronterface.py:60
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 #: pronterface.py:81
msgid "Y+100" msgid ""
msgstr "Y+100" "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 #: pronterface.py:82
msgid "Y+10" msgid "Last Set Temperature for the Heated Print Bed"
msgstr "Y+10" msgstr ""
#: pronterface.py:83 #: pronterface.py:83
msgid "Y+1" msgid "Folder of last opened file"
msgstr "Y+1" msgstr ""
#: pronterface.py:84 #: pronterface.py:84
msgid "Y+0.1" msgid "Last Temperature of the Hot End"
msgstr "Y+0.1" msgstr ""
#: pronterface.py:85 #: pronterface.py:85
msgid "HomeY" msgid "Width of Extrusion in Preview (default: 0.5)"
msgstr "0-puntY" msgstr ""
#: pronterface.py:86 #: pronterface.py:86
msgid "Y-0.1" msgid "Fine Grid Spacing (default: 10)"
msgstr "Y-0.1" msgstr ""
#: pronterface.py:87 #: pronterface.py:87
msgid "Y-1" msgid "Coarse Grid Spacing (default: 50)"
msgstr "Y-1" msgstr ""
#: pronterface.py:88 #: pronterface.py:88
msgid "Y-10" msgid "Pronterface background color (default: #FFFFFF)"
msgstr "Y-10" msgstr ""
#: pronterface.py:89 #: pronterface.py:91
msgid "Y-100" msgid "Printer Interface"
msgstr "Y-100" msgstr "Printer Interface"
#: pronterface.py:90 #: pronterface.py:108
msgid "Motors off" msgid "Motors off"
msgstr "Motoren uit" msgstr "Motoren uit"
#: pronterface.py:91 #: pronterface.py:109
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
msgid "Check temp" msgid "Check temp"
msgstr "Controleer Temp." msgstr "Controleer Temp."
#: pronterface.py:100 #: pronterface.py:110
msgid "Extrude" msgid "Extrude"
msgstr "Extruden" msgstr "Extruden"
#: pronterface.py:101 #: pronterface.py:111
msgid "Reverse" msgid "Reverse"
msgstr "Terug" msgstr "Terug"
#: pronterface.py:117 #: pronterface.py:129
msgid "" msgid ""
"# I moved all your custom buttons into .pronsolerc.\n" "# I moved all your custom buttons into .pronsolerc.\n"
"# Please don't add them here any more.\n" "# Please don't add them here any more.\n"
...@@ -153,484 +88,621 @@ msgstr "" ...@@ -153,484 +88,621 @@ msgstr ""
"# Hier geen nieuwe knoppen definiëren.\n" "# Hier geen nieuwe knoppen definiëren.\n"
"# Een backup van de oude knoppen staat in custombtn.old\n" "# Een backup van de oude knoppen staat in custombtn.old\n"
#: pronterface.py:122 #: pronterface.py:134
msgid "Note!!! You have specified custom buttons in both custombtn.txt and .pronsolerc" msgid ""
msgstr "Let op!!! Er zijn gedefinieerde knoppen in zowel custombtn.txt en .pronsolerc" "Note!!! You have specified custom buttons in both custombtn.txt and ."
"pronsolerc"
#: pronterface.py:123 msgstr ""
msgid "Ignoring custombtn.txt. Remove all current buttons to revert to custombtn.txt" "Let op!!! Er zijn gedefinieerde knoppen in zowel custombtn.txt en .pronsolerc"
msgstr "Negeer custombtn.txt. Verwijder alle gedefinieerde knoppen om gebruik te maken van custombtn.txt"
#: pronterface.py:135
#: pronterface.py:146 msgid ""
#: pronterface.py:434 "Ignoring custombtn.txt. Remove all current buttons to revert to custombtn.txt"
#: pronterface.py:971 msgstr ""
#: pronterface.py:1020 "Negeer custombtn.txt. Verwijder alle gedefinieerde knoppen om gebruik te "
#: pronterface.py:1134 "maken van custombtn.txt"
#: 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" msgid "Print"
msgstr "Printen" msgstr "Printen"
#: pronterface.py:150 #: pronterface.py:167
msgid "Printer is now online" msgid "Printer is now online."
msgstr "Printer is nu verbonden" msgstr "Printer is nu verbonden."
#: pronterface.py:199 #: pronterface.py:168
msgid "Setting hotend temperature to " msgid "Disconnect"
msgstr "Stel elementtemperatuur in op " msgstr "Ontkoppel"
#: pronterface.py:199 #: pronterface.py:227
#: pronterface.py:220 msgid "Setting hotend temperature to %f degrees Celsius."
msgid " degrees Celsius." msgstr "Stel elementtemperatuur in op %f graden Celsius."
msgstr " graden Celsius."
#: pronterface.py:203 #: pronterface.py:246 pronterface.py:282 pronterface.py:340
#: pronterface.py:224
msgid "Printer is not online." msgid "Printer is not online."
msgstr "Printer is niet verbonden." msgstr "Printer is niet verbonden."
#: pronterface.py:205 #: pronterface.py:248
msgid "You cannot set negative temperatures. To turn the hotend off entirely, set its temperature to 0." msgid ""
msgstr "Negatieve temperatuur is niet instelbaar. Om het element uit te schakelen wordt temperatuur 0 ingesteld." "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:207 #: pronterface.py:263
#: pronterface.py:228 msgid "Setting bed temperature to %f degrees Celsius."
msgid "You must enter a temperature." msgstr "Bed teperatuur ingesteld op %f graden Celsius."
msgstr "Er moet een temperatuur worden ingesteld."
#: pronterface.py:220 #: pronterface.py:284
msgid "Setting bed temperature to " msgid ""
msgstr "Bed teperatuur ingesteld op " "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:226 #: pronterface.py:286
msgid "You cannot set negative temperatures. To turn the bed off entirely, set its temperature to 0." msgid "You must enter a temperature."
msgstr "Negatieve temperatuur is niet instelbaar. Om het printbed uit te schakelen wordt temperatuur 0 ingesteld." msgstr "Er moet een temperatuur worden ingesteld."
#: pronterface.py:243 #: pronterface.py:301
msgid "Do you want to erase the macro?" msgid "Do you want to erase the macro?"
msgstr "Wilt u de macro verwijderen?" msgstr "Wilt u de macro verwijderen?"
#: pronterface.py:247 #: pronterface.py:305
msgid "Cancelled." msgid "Cancelled."
msgstr "Afgebroken" msgstr "Afgebroken"
#: pronterface.py:277 #: pronterface.py:346
msgid " Opens file"
msgstr " Opent bestand"
#: pronterface.py:346
msgid "&Open..." msgid "&Open..."
msgstr "&Open..." msgstr "&Open..."
#: pronterface.py:277 #: pronterface.py:347
msgid " Opens file" msgid " Edit open file"
msgstr " Opent bestand" msgstr " Wijzig geopend bestand"
#: pronterface.py:278 #: pronterface.py:347
msgid "&Edit..." msgid "&Edit..."
msgstr "&Wijzig..." msgstr "&Wijzig..."
#: pronterface.py:278 #: pronterface.py:348
msgid " Edit open file" msgid " Clear output console"
msgstr " Wijzig geopend bestand" msgstr ""
#: pronterface.py:279 #: pronterface.py:348
msgid "E&xit" msgid "Clear console"
msgstr "&Stoppen" msgstr ""
#: pronterface.py:349
msgid " Project slices"
msgstr ""
#: pronterface.py:349
msgid "Projector"
msgstr ""
#: pronterface.py:279 #: pronterface.py:350
msgid " Closes the Window" msgid " Closes the Window"
msgstr " Sluit het venster" msgstr " Sluit het venster"
#: pronterface.py:280 #: pronterface.py:350
msgid "E&xit"
msgstr "&Stoppen"
#: pronterface.py:351
msgid "&File" msgid "&File"
msgstr "" msgstr ""
#: pronterface.py:285 #: pronterface.py:356
msgid "&Macros" msgid "&Macros"
msgstr "&Macros" msgstr "&Macros"
#: pronterface.py:286 #: pronterface.py:357
msgid "<&New...>" msgid "<&New...>"
msgstr "<&Nieuw...>" msgstr "<&Nieuw...>"
#: pronterface.py:287 #: pronterface.py:358
msgid "&Options"
msgstr "&Opties"
#: pronterface.py:287
msgid " Options dialog" msgid " Options dialog"
msgstr "Optievenster" msgstr "Optievenster"
#: pronterface.py:289 #: pronterface.py:358
msgid "SFACT Settings" msgid "&Options"
msgstr "SFACT Instellingen" msgstr "&Opties"
#: pronterface.py:289 #: pronterface.py:360
msgid " Adjust SFACT settings" #, fuzzy
msgid " Adjust slicing settings"
msgstr "Instellen SFACT" msgstr "Instellen SFACT"
#: pronterface.py:292 #: pronterface.py:360
msgid "SFACT Quick Settings" #, fuzzy
msgstr "SFACT Snelinstelling" msgid "Slicing Settings"
msgstr "SFACT Instellingen"
#: pronterface.py:292
msgid " Quickly adjust SFACT settings for active profile"
msgstr " Eenvoudig SFACT's huidige profiel instellen"
#: pronterface.py:295 #: pronterface.py:367
msgid "&Settings" msgid "&Settings"
msgstr "&Instellingen" msgstr "&Instellingen"
#: pronterface.py:311 #: pronterface.py:383
msgid "Enter macro name" msgid "Enter macro name"
msgstr "Voer macronaam in" msgstr "Voer macronaam in"
#: pronterface.py:314 #: pronterface.py:386
msgid "Macro name:" msgid "Macro name:"
msgstr "Macronaam:" msgstr "Macronaam:"
#: pronterface.py:317 #: pronterface.py:389
msgid "Ok" msgid "Ok"
msgstr "Ok" msgstr "Ok"
#: pronterface.py:321 #: pronterface.py:393 pronterface.py:1344 pronterface.py:1601
#: pronterface.py:1197
msgid "Cancel" msgid "Cancel"
msgstr "Annuleer" msgstr "Annuleer"
#: pronterface.py:339 #: pronterface.py:411
msgid "Name '" msgid "Name '%s' is being used by built-in command"
msgstr "Naam '" msgstr "Naam '%s' wordt gebruikt door ingebouwde instructie"
#: pronterface.py:339
msgid "' is being used by built-in command"
msgstr "' wordt gebruikt door ingebouwde instructie"
#: pronterface.py:342 #: pronterface.py:414
msgid "Macro name may contain only alphanumeric symbols and underscores" msgid "Macro name may contain only alphanumeric symbols and underscores"
msgstr "" msgstr ""
#: pronterface.py:375 #: pronterface.py:463
msgid "Port:" msgid "Port"
msgstr "Poort" msgstr "Poort"
#: pronterface.py:397 #: pronterface.py:482
msgid "Connect" msgid "Connect"
msgstr "Verbind" msgstr "Verbind"
#: pronterface.py:399 #: pronterface.py:484
msgid "Connect to the printer" msgid "Connect to the printer"
msgstr "Verbind met printer" msgstr "Verbind met printer"
#: pronterface.py:401 #: pronterface.py:486
msgid "Disconnect"
msgstr "Ontkoppel"
#: pronterface.py:405
msgid "Reset" msgid "Reset"
msgstr "Reset" msgstr "Reset"
#: pronterface.py:408 #: pronterface.py:489 pronterface.py:766
#: pronterface.py:592
msgid "Mini mode" msgid "Mini mode"
msgstr "Mini-venster" msgstr "Mini-venster"
#: pronterface.py:414 #: pronterface.py:493
msgid "" #, fuzzy
"Monitor\n" msgid "Monitor Printer"
"printer"
msgstr "Printercommunicatie volgen" msgstr "Printercommunicatie volgen"
#: pronterface.py:423 #: pronterface.py:503
msgid "Load file" msgid "Load file"
msgstr "open bestand" msgstr "open bestand"
#: pronterface.py:426 #: pronterface.py:506
msgid "SD Upload" msgid "Compose"
msgstr "uploaden naar SD" msgstr ""
#: pronterface.py:430 #: pronterface.py:510
msgid "SD Print" msgid "SD"
msgstr "Afdruk van SD" msgstr ""
#: pronterface.py:438 #: pronterface.py:518 pronterface.py:1388 pronterface.py:1433
#: pronterface.py:1021 #: pronterface.py:1483 pronterface.py:1508 pronterface.py:1542
#: pronterface.py:1061 #: pronterface.py:1557
#: pronterface.py:1109
#: pronterface.py:1133
#: pronterface.py:1160
#: pronterface.py:1174
msgid "Pause" msgid "Pause"
msgstr "Pauze" msgstr "Pauze"
#: pronterface.py:452 #: pronterface.py:531
msgid "Send" msgid "Send"
msgstr "Zend" msgstr "Zend"
#: pronterface.py:460 #: pronterface.py:539 pronterface.py:640
#: pronterface.py:518
msgid "mm/min" msgid "mm/min"
msgstr "mm/min" msgstr "mm/min"
#: pronterface.py:462 #: pronterface.py:541
msgid "XY:" msgid "XY:"
msgstr "XY:" msgstr "XY:"
#: pronterface.py:464 #: pronterface.py:543
msgid "Z:" msgid "Z:"
msgstr "Z:" msgstr "Z:"
#: pronterface.py:481 #: pronterface.py:566 pronterface.py:647
msgid "Heater:" msgid "Heater:"
msgstr "Element:" msgstr "Element:"
#: pronterface.py:489 #: pronterface.py:569 pronterface.py:589
#: pronterface.py:501 msgid "Off"
msgstr ""
#: pronterface.py:581 pronterface.py:601
msgid "Set" msgid "Set"
msgstr "Stel in" msgstr "Stel in"
#: pronterface.py:493 #: pronterface.py:586 pronterface.py:649
msgid "Bed:" msgid "Bed:"
msgstr "Bed:" msgstr "Bed:"
#: pronterface.py:512 #: pronterface.py:634
msgid "mm" msgid "mm"
msgstr "mm" msgstr "mm"
#: pronterface.py:551 #: pronterface.py:692 pronterface.py:1196 pronterface.py:1427
#: pronterface.py:846
#: pronterface.py:1055
msgid "Not connected to printer." msgid "Not connected to printer."
msgstr "Printer is niet verbonden." 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" msgid "Full mode"
msgstr "Volledig venster" msgstr "Volledig venster"
#: pronterface.py:637 #: pronterface.py:798
msgid "Defines custom button. Usage: button <num> \"title\" [/c \"colour\"] command" msgid "Execute command: "
msgstr "Definieert eigen knop. Gebruik: knop <num> \"titel\" [/c \"kleur\"] commando" msgstr ""
#: pronterface.py:809
#, fuzzy
msgid "click to add new custom button"
msgstr "Definieer eigen knop."
#: pronterface.py:659 #: pronterface.py:828
msgid ""
"Defines custom button. Usage: button <num> \"title\" [/c \"colour\"] command"
msgstr ""
"Definieert eigen knop. Gebruik: knop <num> \"titel\" [/c \"kleur\"] commando"
#: pronterface.py:850
msgid "Custom button number should be between 0 and 63" msgid "Custom button number should be between 0 and 63"
msgstr "Knopnummer moet tussen 0 en 63 zijn" msgstr "Knopnummer moet tussen 0 en 63 zijn"
#: pronterface.py:749 #: pronterface.py:942
#, python-format
msgid "Edit custom button '%s'" msgid "Edit custom button '%s'"
msgstr "Wijzig gedefineerde knop '%s'" msgstr "Wijzig gedefineerde knop '%s'"
#: pronterface.py:751 #: pronterface.py:944
msgid "Move left <<" msgid "Move left <<"
msgstr "Verplaats links <<" msgstr "Verplaats links <<"
#: pronterface.py:754 #: pronterface.py:947
msgid "Move right >>" msgid "Move right >>"
msgstr "Verplaats rechts >>" msgstr "Verplaats rechts >>"
#: pronterface.py:758 #: pronterface.py:951
#, python-format
msgid "Remove custom button '%s'" msgid "Remove custom button '%s'"
msgstr "Verwijder gedefinieerde knop '%s'" msgstr "Verwijder gedefinieerde knop '%s'"
#: pronterface.py:761 #: pronterface.py:954
msgid "Add custom button" msgid "Add custom button"
msgstr "Definieer eigen knop." msgstr "Definieer eigen knop."
#: pronterface.py:776 #: pronterface.py:1099
msgid "event object missing" msgid "event object missing"
msgstr "vermist object" msgstr "vermist object"
#: pronterface.py:804 #: pronterface.py:1127
msgid "Invalid period given." msgid "Invalid period given."
msgstr "Foute gegevens ingevoerd" msgstr "Foute gegevens ingevoerd"
#: pronterface.py:807 #: pronterface.py:1130
msgid "Monitoring printer." msgid "Monitoring printer."
msgstr "Printercommunicatie wordt gevolgd." msgstr "Printercommunicatie wordt gevolgd."
#: pronterface.py:809 #: pronterface.py:1132
msgid "Done monitoring." msgid "Done monitoring."
msgstr "Klaar met volgen." msgstr "Klaar met volgen."
#: pronterface.py:828 #: pronterface.py:1154
msgid "Printer is online. " msgid "Printer is online. "
msgstr "Printer is verbonden. " msgstr "Printer is verbonden. "
#: pronterface.py:830 #: pronterface.py:1156 pronterface.py:1331
#: pronterface.py:969
#: pronterface.py:1019
msgid "Loaded " msgid "Loaded "
msgstr "Geladen" msgstr "Geladen "
#: pronterface.py:833 #: pronterface.py:1159
msgid "Hotend"
msgstr "Element"
#: pronterface.py:833
msgid "Bed" msgid "Bed"
msgstr "Bed" msgstr "Bed"
#: pronterface.py:836 #: pronterface.py:1159
#, python-format msgid "Hotend"
msgstr "Element"
#: pronterface.py:1169
msgid " SD printing:%04.2f %%" msgid " SD printing:%04.2f %%"
msgstr " SD printen:%04.2f %%" msgstr " SD printen:%04.2f %%"
#: pronterface.py:838 #: pronterface.py:1172
#, python-format msgid " Printing:%04.2f %% |"
msgid " Printing:%04.2f %%" msgstr " Printen:%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." msgid "Opening file failed."
msgstr "Bestand openen mislukt" msgstr "Bestand openen mislukt"
#: pronterface.py:898 #: pronterface.py:1253
msgid "Starting print" msgid "Starting print"
msgstr "Start het printen" msgstr "Start het printen"
#: pronterface.py:921 #: pronterface.py:1276
msgid "Select the file to print"
msgstr "Kies het te printen bestand"
#: pronterface.py:921
msgid "Pick SD file" msgid "Pick SD file"
msgstr "Kies bestand op SD" msgstr "Kies bestand op SD"
#: pronterface.py:949 #: pronterface.py:1276
msgid "Skeinforge execution failed." msgid "Select the file to print"
msgstr "Skeinforge was niet succesvol." msgstr "Kies het te printen bestand"
#: pronterface.py:1311
msgid "Failed to execute slicing software: "
msgstr ""
#: pronterface.py:956 #: pronterface.py:1318
msgid "Skeining..." #, fuzzy
msgid "Slicing..."
msgstr "Skeinforge draait..." msgstr "Skeinforge draait..."
#: pronterface.py:969 #: pronterface.py:1331
#: pronterface.py:1019
#, python-format
msgid ", %d lines" msgid ", %d lines"
msgstr ",%d regels" msgstr ", %d regels"
#: pronterface.py:978 #: pronterface.py:1338
msgid "Skeining " #, fuzzy
msgstr "Skeinforge draait" msgid "Load File"
msgstr "open bestand"
#: pronterface.py:980 #: pronterface.py:1345
msgid "" #, fuzzy
"Skeinforge not found. \n" msgid "Slicing "
"Please copy Skeinforge into a directory named \"skeinforge\" in the same directory as this file." msgstr "Skeinforge draait"
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" msgid "Open file to print"
msgstr "Open het te printen bestand" msgstr "Open het te printen bestand"
#: pronterface.py:1000 #: pronterface.py:1365
msgid "STL and GCODE files (;*.gcode;*.g;*.stl;*.STL;)" #, fuzzy
msgid "OBJ, STL, and GCODE files (;*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ;)"
msgstr "STL en GCODE bestanden (;*.gcode;*.g;*.stl;*.STL;)" msgstr "STL en GCODE bestanden (;*.gcode;*.g;*.stl;*.STL;)"
#: pronterface.py:1007 #: pronterface.py:1372
msgid "File not found!" msgid "File not found!"
msgstr "Bestand niet gevonden!" msgstr "Bestand niet gevonden!"
#: pronterface.py:1029 #: pronterface.py:1386
#, fuzzy msgid "Loaded %s, %d lines"
msgid "mm of filament used in this print\n" msgstr "Geladen %s, %d regels"
msgstr "mm fillament wordt gebruikt in deze print"
#: pronterface.py:1030
#: pronterface.py:1031
#: pronterface.py:1032
msgid "the print goes from"
msgstr ""
#: pronterface.py:1030 #: pronterface.py:1396
#: pronterface.py:1031 msgid "mm of filament used in this print\n"
#: pronterface.py:1032 msgstr "mm fillament wordt gebruikt in deze print\n"
msgid "mm to"
msgstr ""
#: pronterface.py:1030 #: pronterface.py:1397
msgid "" msgid ""
"mm in X\n" "the print goes from %f mm to %f mm in X\n"
"and is" "and is %f mm wide\n"
msgstr "" msgstr ""
#: pronterface.py:1030 #: pronterface.py:1398
#: pronterface.py:1031
msgid "mm wide\n"
msgstr ""
#: pronterface.py:1031
msgid "" msgid ""
"mm in Y\n" "the print goes from %f mm to %f mm in Y\n"
"and is" "and is %f mm wide\n"
msgstr "" msgstr ""
#: pronterface.py:1032 #: pronterface.py:1399
msgid "" msgid ""
"mm in Z\n" "the print goes from %f mm to %f mm in Z\n"
"and is" "and is %f mm high\n"
msgstr "" msgstr ""
#: pronterface.py:1032 #: pronterface.py:1400
msgid "mm high\n" msgid "Estimated duration (pessimistic): "
msgstr "" msgstr ""
#: pronterface.py:1052 #: pronterface.py:1424
msgid "No file loaded. Please use load first." msgid "No file loaded. Please use load first."
msgstr "Geen bestand geladen. Eerst bestand inladen." msgstr "Geen bestand geladen. Eerst bestand inladen."
#: pronterface.py:1063 #: pronterface.py:1435
msgid "Restart" msgid "Restart"
msgstr "Herstart" msgstr "Herstart"
#: pronterface.py:1067 #: pronterface.py:1439
msgid "File upload complete" msgid "File upload complete"
msgstr "Bestandsupload voltooid" msgstr "Bestandsupload voltooid"
#: pronterface.py:1086 #: pronterface.py:1458
msgid "Pick SD filename" msgid "Pick SD filename"
msgstr "Kies bestandsnaam op SD" msgstr "Kies bestandsnaam op SD"
#: pronterface.py:1102 #: pronterface.py:1466
#, fuzzy
msgid "Paused."
msgstr "Pauze"
#: pronterface.py:1476
msgid "Resume" msgid "Resume"
msgstr "Hervat" 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?" msgid "Are you sure you want to reset the printer?"
msgstr "Weet je zeker dat je de printer wilt resetten?" msgstr "Weet je zeker dat je de printer wilt resetten?"
#: pronterface.py:1168 #: pronterface.py:1551
msgid "Reset?" msgid "Reset?"
msgstr "resetten?" msgstr "resetten?"
#: pronterface.py:1193 #: pronterface.py:1597
msgid "Save" msgid "Save"
msgstr "" msgstr ""
#: pronterface.py:1248 #: pronterface.py:1653
msgid "Edit settings" msgid "Edit settings"
msgstr "Wijzig instellingen" msgstr "Wijzig instellingen"
#: pronterface.py:1250 #: pronterface.py:1655
msgid "Defaults" msgid "Defaults"
msgstr "Standaardinstelling" msgstr "Standaardinstelling"
#: pronterface.py:1272 #: pronterface.py:1684
msgid "Custom button" msgid "Custom button"
msgstr "Gedefinieerde knop" msgstr "Gedefinieerde knop"
#: pronterface.py:1280 #: pronterface.py:1689
msgid "Button title" msgid "Button title"
msgstr "Knoptitel" msgstr "Knoptitel"
#: pronterface.py:1283 #: pronterface.py:1692
msgid "Command" msgid "Command"
msgstr "Commando" msgstr "Commando"
#: pronterface.py:1292 #: pronterface.py:1701
msgid "Color" msgid "Color"
msgstr "Kleur" 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" #~ msgid "&Print"
#~ msgstr "&Printen" #~ msgstr "&Printen"
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "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" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
...@@ -15,79 +15,79 @@ msgstr "" ...@@ -15,79 +15,79 @@ msgstr ""
"Generated-By: pygettext.py 1.5\n" "Generated-By: pygettext.py 1.5\n"
#: plater.py:223 #: plater.py:247
msgid "Plate building tool" msgid "Plate building tool"
msgstr "" msgstr ""
#: plater.py:229 #: plater.py:253
msgid "Clear" msgid "Clear"
msgstr "" msgstr ""
#: plater.py:230 #: plater.py:254
msgid "Load" msgid "Load"
msgstr "" msgstr ""
#: plater.py:232 #: plater.py:256
msgid "Export" msgid "Export"
msgstr "" msgstr ""
#: plater.py:235 #: plater.py:259
msgid "Done" msgid "Done"
msgstr "" msgstr ""
#: plater.py:237 #: plater.py:261
msgid "Cancel" msgid "Cancel"
msgstr "" msgstr ""
#: plater.py:239 #: plater.py:263
msgid "Snap to Z = 0" msgid "Snap to Z = 0"
msgstr "" msgstr ""
#: plater.py:240 #: plater.py:264
msgid "Put at 100, 100" msgid "Put at 100, 100"
msgstr "" msgstr ""
#: plater.py:241 #: plater.py:265
msgid "Delete" msgid "Delete"
msgstr "" msgstr ""
#: plater.py:242 #: plater.py:266
msgid "Auto" msgid "Auto"
msgstr "" msgstr ""
#: plater.py:266 #: plater.py:290
msgid "Autoplating" msgid "Autoplating"
msgstr "" msgstr ""
#: plater.py:294 #: plater.py:318
msgid "Bed full, sorry sir :(" msgid "Bed full, sorry sir :("
msgstr "" msgstr ""
#: plater.py:304 #: plater.py:328
msgid "Are you sure you want to clear the grid? All unsaved changes will be lost." msgid "Are you sure you want to clear the grid? All unsaved changes will be lost."
msgstr "" msgstr ""
#: plater.py:304 #: plater.py:328
msgid "Clear the grid?" msgid "Clear the grid?"
msgstr "" msgstr ""
#: plater.py:346 #: plater.py:370
msgid "Pick file to save to" msgid "Pick file to save to"
msgstr "" msgstr ""
#: plater.py:347 #: plater.py:371
msgid "STL files (;*.stl;)" msgid "STL files (;*.stl;*.STL;)"
msgstr "" msgstr ""
#: plater.py:367 #: plater.py:391
msgid "wrote " msgid "wrote %s"
msgstr "" msgstr ""
#: plater.py:370 #: plater.py:394
msgid "Pick file to load" msgid "Pick file to load"
msgstr "" msgstr ""
#: plater.py:371 #: plater.py:395
msgid "STL files (;*.stl;)|*.stl|OpenSCAD files (;*.scad;)|*.scad" msgid "STL files (;*.stl;*.STL;)|*.stl|OpenSCAD files (;*.scad;)|*.scad"
msgstr "" msgstr ""
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "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" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
...@@ -15,61 +15,11 @@ msgstr "" ...@@ -15,61 +15,11 @@ msgstr ""
"Generated-By: pygettext.py 1.5\n" "Generated-By: pygettext.py 1.5\n"
#: pronsole.py:250 #: pronterface.py:30
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
msgid "WX is not installed. This program requires WX to run." msgid "WX is not installed. This program requires WX to run."
msgstr "" msgstr ""
#: pronterface.py:66 #: pronterface.py:81
msgid "" msgid ""
"Dimensions of Build Platform\n" "Dimensions of Build Platform\n"
" & optional offset of origin\n" " & optional offset of origin\n"
...@@ -80,575 +30,545 @@ msgid "" ...@@ -80,575 +30,545 @@ msgid ""
" XXXxYYYxZZZ+OffX+OffY+OffZ" " XXXxYYYxZZZ+OffX+OffY+OffZ"
msgstr "" msgstr ""
#: pronterface.py:67 #: pronterface.py:82
msgid "Last Set Temperature for the Heated Print Bed" msgid "Last Set Temperature for the Heated Print Bed"
msgstr "" msgstr ""
#: pronterface.py:68 #: pronterface.py:83
msgid "Folder of last opened file" msgid "Folder of last opened file"
msgstr "" msgstr ""
#: pronterface.py:69 #: pronterface.py:84
msgid "Last Temperature of the Hot End" msgid "Last Temperature of the Hot End"
msgstr "" msgstr ""
#: pronterface.py:70 #: pronterface.py:85
msgid "Width of Extrusion in Preview (default: 0.5)" msgid "Width of Extrusion in Preview (default: 0.5)"
msgstr "" msgstr ""
#: pronterface.py:71 #: pronterface.py:86
msgid "Fine Grid Spacing (default: 10)" msgid "Fine Grid Spacing (default: 10)"
msgstr "" msgstr ""
#: pronterface.py:72 #: pronterface.py:87
msgid "Coarse Grid Spacing (default: 50)" msgid "Coarse Grid Spacing (default: 50)"
msgstr "" msgstr ""
#: pronterface.py:73 #: pronterface.py:88
msgid "Pronterface background color (default: #FFFFFF)" msgid "Pronterface background color (default: #FFFFFF)"
msgstr "" msgstr ""
#: pronterface.py:76 #: pronterface.py:91
msgid "Printer Interface" msgid "Printer Interface"
msgstr "" msgstr ""
#: pronterface.py:93 #: pronterface.py:109
msgid "Motors off" msgid "Motors off"
msgstr "" msgstr ""
#: pronterface.py:94 #: pronterface.py:110
msgid "Check temp" msgid "Check temp"
msgstr "" msgstr ""
#: pronterface.py:95 #: pronterface.py:111
msgid "Extrude" msgid "Extrude"
msgstr "" msgstr ""
#: pronterface.py:96 #: pronterface.py:112
msgid "Reverse" msgid "Reverse"
msgstr "" msgstr ""
#: pronterface.py:114 #: pronterface.py:130
msgid "" msgid ""
"# I moved all your custom buttons into .pronsolerc.\n" "# I moved all your custom buttons into .pronsolerc.\n"
"# Please don't add them here any more.\n" "# Please don't add them here any more.\n"
"# Backup of your old buttons is in custombtn.old\n" "# Backup of your old buttons is in custombtn.old\n"
msgstr "" msgstr ""
#: pronterface.py:119 #: pronterface.py:135
msgid "Note!!! You have specified custom buttons in both custombtn.txt and .pronsolerc" msgid "Note!!! You have specified custom buttons in both custombtn.txt and .pronsolerc"
msgstr "" msgstr ""
#: pronterface.py:120 #: pronterface.py:136
msgid "Ignoring custombtn.txt. Remove all current buttons to revert to custombtn.txt" msgid "Ignoring custombtn.txt. Remove all current buttons to revert to custombtn.txt"
msgstr "" msgstr ""
#: pronterface.py:148 pronterface.py:499 pronterface.py:1319 #: pronterface.py:165 pronterface.py:520 pronterface.py:1343
#: pronterface.py:1373 pronterface.py:1495 pronterface.py:1529 #: pronterface.py:1397 pronterface.py:1521 pronterface.py:1555
#: pronterface.py:1544 #: pronterface.py:1567
msgid "Print" msgid "Print"
msgstr "" msgstr ""
#: pronterface.py:152 #: pronterface.py:169
msgid "Printer is now online." msgid "Printer is now online."
msgstr "" msgstr ""
#: pronterface.py:212 #: pronterface.py:170
msgid "Setting hotend temperature to " msgid "Disconnect"
msgstr "" msgstr ""
#: pronterface.py:212 pronterface.py:248 #: pronterface.py:229
msgid " degrees Celsius." msgid "Setting hotend temperature to %f degrees Celsius."
msgstr "" msgstr ""
#: pronterface.py:231 pronterface.py:267 pronterface.py:325 #: pronterface.py:248 pronterface.py:284 pronterface.py:346
msgid "Printer is not online." msgid "Printer is not online."
msgstr "" msgstr ""
#: pronterface.py:233 #: pronterface.py:250
msgid "You cannot set negative temperatures. To turn the hotend off entirely, set its temperature to 0." msgid "You cannot set negative temperatures. To turn the hotend off entirely, set its temperature to 0."
msgstr "" msgstr ""
#: pronterface.py:248 #: pronterface.py:252
msgid "Setting bed temperature to " msgid "You must enter a temperature. (%s)"
msgstr "" msgstr ""
#: pronterface.py:269 #: 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." msgid "You cannot set negative temperatures. To turn the bed off entirely, set its temperature to 0."
msgstr "" msgstr ""
#: pronterface.py:271 #: pronterface.py:288
msgid "You must enter a temperature." msgid "You must enter a temperature."
msgstr "" msgstr ""
#: pronterface.py:286 #: pronterface.py:303
msgid "Do you want to erase the macro?" msgid "Do you want to erase the macro?"
msgstr "" msgstr ""
#: pronterface.py:290 #: pronterface.py:307
msgid "Cancelled." msgid "Cancelled."
msgstr "" msgstr ""
#: pronterface.py:331 #: pronterface.py:352
msgid " Opens file" msgid " Opens file"
msgstr "" msgstr ""
#: pronterface.py:331 #: pronterface.py:352
msgid "&Open..." msgid "&Open..."
msgstr "" msgstr ""
#: pronterface.py:332 #: pronterface.py:353
msgid " Edit open file" msgid " Edit open file"
msgstr "" msgstr ""
#: pronterface.py:332 #: pronterface.py:353
msgid "&Edit..." msgid "&Edit..."
msgstr "" msgstr ""
#: pronterface.py:333 #: pronterface.py:354
msgid " Clear output console" msgid " Clear output console"
msgstr "" msgstr ""
#: pronterface.py:333 #: pronterface.py:354
msgid "Clear console" msgid "Clear console"
msgstr "" msgstr ""
#: pronterface.py:334 #: pronterface.py:355
msgid " Project slices" msgid " Project slices"
msgstr "" msgstr ""
#: pronterface.py:334 #: pronterface.py:355
msgid "Projector" msgid "Projector"
msgstr "" msgstr ""
#: pronterface.py:335 #: pronterface.py:356
msgid " Closes the Window" msgid " Closes the Window"
msgstr "" msgstr ""
#: pronterface.py:335 #: pronterface.py:356
msgid "E&xit" msgid "E&xit"
msgstr "" msgstr ""
#: pronterface.py:336 #: pronterface.py:357
msgid "&File" msgid "&File"
msgstr "" msgstr ""
#: pronterface.py:341 #: pronterface.py:362
msgid "&Macros" msgid "&Macros"
msgstr "" msgstr ""
#: pronterface.py:342 #: pronterface.py:363
msgid "<&New...>" msgid "<&New...>"
msgstr "" msgstr ""
#: pronterface.py:343 #: pronterface.py:364
msgid " Options dialog" msgid " Options dialog"
msgstr "" msgstr ""
#: pronterface.py:343 #: pronterface.py:364
msgid "&Options" msgid "&Options"
msgstr "" msgstr ""
#: pronterface.py:345 #: pronterface.py:366
msgid " Adjust slicing settings" msgid " Adjust slicing settings"
msgstr "" msgstr ""
#: pronterface.py:345 #: pronterface.py:366
msgid "Slicing Settings" msgid "Slicing Settings"
msgstr "" msgstr ""
#: pronterface.py:352 #: pronterface.py:373
msgid "&Settings" msgid "&Settings"
msgstr "" msgstr ""
#: pronterface.py:368 #: pronterface.py:389
msgid "Enter macro name" msgid "Enter macro name"
msgstr "" msgstr ""
#: pronterface.py:371 #: pronterface.py:392
msgid "Macro name:" msgid "Macro name:"
msgstr "" msgstr ""
#: pronterface.py:374 #: pronterface.py:395
msgid "Ok" msgid "Ok"
msgstr "" msgstr ""
#: pronterface.py:378 pronterface.py:1330 pronterface.py:1587 #: pronterface.py:399 pronterface.py:1354 pronterface.py:1613
msgid "Cancel" msgid "Cancel"
msgstr "" msgstr ""
#: pronterface.py:396 #: pronterface.py:417
msgid "' is being used by built-in command" msgid "Name '%s' is being used by built-in command"
msgstr ""
#: pronterface.py:396
msgid "Name '"
msgstr "" msgstr ""
#: pronterface.py:399 #: pronterface.py:420
msgid "Macro name may contain only alphanumeric symbols and underscores" msgid "Macro name may contain only alphanumeric symbols and underscores"
msgstr "" msgstr ""
#: pronterface.py:448 #: pronterface.py:469
msgid "Port" msgid "Port"
msgstr "" msgstr ""
#: pronterface.py:467 #: pronterface.py:488
msgid "Connect" msgid "Connect"
msgstr "" msgstr ""
#: pronterface.py:469 #: pronterface.py:490
msgid "Connect to the printer" msgid "Connect to the printer"
msgstr "" msgstr ""
#: pronterface.py:471 #: pronterface.py:492
msgid "Reset" msgid "Reset"
msgstr "" msgstr ""
#: pronterface.py:474 pronterface.py:751 #: pronterface.py:495 pronterface.py:772
msgid "Mini mode" msgid "Mini mode"
msgstr "" msgstr ""
#: pronterface.py:478 #: pronterface.py:499
msgid "Monitor Printer" msgid "Monitor Printer"
msgstr "" msgstr ""
#: pronterface.py:488 #: pronterface.py:509
msgid "Load file" msgid "Load file"
msgstr "" msgstr ""
#: pronterface.py:491 #: pronterface.py:512
msgid "Compose" msgid "Compose"
msgstr "" msgstr ""
#: pronterface.py:495 #: pronterface.py:516
msgid "SD" msgid "SD"
msgstr "" msgstr ""
#: pronterface.py:503 pronterface.py:1374 pronterface.py:1419 #: pronterface.py:524 pronterface.py:1398 pronterface.py:1444
#: pronterface.py:1469 pronterface.py:1494 pronterface.py:1528 #: pronterface.py:1495 pronterface.py:1520 pronterface.py:1554
#: pronterface.py:1543 #: pronterface.py:1570
msgid "Pause" msgid "Pause"
msgstr "" msgstr ""
#: pronterface.py:516 #: pronterface.py:537
msgid "Send" msgid "Send"
msgstr "" msgstr ""
#: pronterface.py:524 pronterface.py:625 #: pronterface.py:545 pronterface.py:646
msgid "mm/min" msgid "mm/min"
msgstr "" msgstr ""
#: pronterface.py:526 #: pronterface.py:547
msgid "XY:" msgid "XY:"
msgstr "" msgstr ""
#: pronterface.py:528 #: pronterface.py:549
msgid "Z:" msgid "Z:"
msgstr "" msgstr ""
#: pronterface.py:551 pronterface.py:632 #: pronterface.py:572 pronterface.py:653
msgid "Heater:" msgid "Heater:"
msgstr "" msgstr ""
#: pronterface.py:554 pronterface.py:574 #: pronterface.py:575 pronterface.py:595
msgid "Off" msgid "Off"
msgstr "" msgstr ""
#: pronterface.py:566 pronterface.py:586 #: pronterface.py:587 pronterface.py:607
msgid "Set" msgid "Set"
msgstr "" msgstr ""
#: pronterface.py:571 pronterface.py:634 #: pronterface.py:592 pronterface.py:655
msgid "Bed:" msgid "Bed:"
msgstr "" msgstr ""
#: pronterface.py:619 #: pronterface.py:640
msgid "mm" msgid "mm"
msgstr "" msgstr ""
#: pronterface.py:677 pronterface.py:1182 pronterface.py:1413 #: pronterface.py:698 pronterface.py:1206 pronterface.py:1438
msgid "Not connected to printer." msgid "Not connected to printer."
msgstr "" msgstr ""
#: pronterface.py:706 #: pronterface.py:727
msgid "SD Upload" msgid "SD Upload"
msgstr "" msgstr ""
#: pronterface.py:710 #: pronterface.py:731
msgid "SD Print" msgid "SD Print"
msgstr "" msgstr ""
#: pronterface.py:758 #: pronterface.py:779
msgid "Full mode" msgid "Full mode"
msgstr "" msgstr ""
#: pronterface.py:783 #: pronterface.py:804
msgid "Execute command: " msgid "Execute command: "
msgstr "" msgstr ""
#: pronterface.py:794 #: pronterface.py:815
msgid "click to add new custom button" msgid "click to add new custom button"
msgstr "" msgstr ""
#: pronterface.py:813 #: pronterface.py:834
msgid "Defines custom button. Usage: button <num> \"title\" [/c \"colour\"] command" msgid "Defines custom button. Usage: button <num> \"title\" [/c \"colour\"] command"
msgstr "" msgstr ""
#: pronterface.py:835 #: pronterface.py:856
msgid "Custom button number should be between 0 and 63" msgid "Custom button number should be between 0 and 63"
msgstr "" msgstr ""
#: pronterface.py:927 #: pronterface.py:948
msgid "Edit custom button '%s'" msgid "Edit custom button '%s'"
msgstr "" msgstr ""
#: pronterface.py:929 #: pronterface.py:950
msgid "Move left <<" msgid "Move left <<"
msgstr "" msgstr ""
#: pronterface.py:932 #: pronterface.py:953
msgid "Move right >>" msgid "Move right >>"
msgstr "" msgstr ""
#: pronterface.py:936 #: pronterface.py:957
msgid "Remove custom button '%s'" msgid "Remove custom button '%s'"
msgstr "" msgstr ""
#: pronterface.py:939 #: pronterface.py:960
msgid "Add custom button" msgid "Add custom button"
msgstr "" msgstr ""
#: pronterface.py:1084 #: pronterface.py:1105
msgid "event object missing" msgid "event object missing"
msgstr "" msgstr ""
#: pronterface.py:1112 #: pronterface.py:1133
msgid "Invalid period given." msgid "Invalid period given."
msgstr "" msgstr ""
#: pronterface.py:1115 #: pronterface.py:1136
msgid "Monitoring printer." msgid "Monitoring printer."
msgstr "" msgstr ""
#: pronterface.py:1117 #: pronterface.py:1138
msgid "Done monitoring." msgid "Done monitoring."
msgstr "" msgstr ""
#: pronterface.py:1139 #: pronterface.py:1160
msgid "Printer is online. " msgid "Printer is online. "
msgstr "" msgstr ""
#: pronterface.py:1141 pronterface.py:1317 pronterface.py:1372 #: pronterface.py:1162 pronterface.py:1341
msgid "Loaded " msgid "Loaded "
msgstr "" msgstr ""
#: pronterface.py:1144 #: pronterface.py:1165
msgid "Bed" msgid "Bed"
msgstr "" msgstr ""
#: pronterface.py:1144 #: pronterface.py:1165
msgid "Hotend" msgid "Hotend"
msgstr "" msgstr ""
#: pronterface.py:1154 #: pronterface.py:1175
msgid " SD printing:%04.2f %%" msgid " SD printing:%04.2f %%"
msgstr "" msgstr ""
#: pronterface.py:1157 #: pronterface.py:1178
msgid " Printing:%04.2f %% |" msgid " Printing:%04.2f %% |"
msgstr "" msgstr ""
#: pronterface.py:1158 #: pronterface.py:1179
msgid " Line# " msgid " Line# %d of %d lines |"
msgstr ""
#: pronterface.py:1158
msgid " lines |"
msgstr ""
#: pronterface.py:1158
msgid "of "
msgstr ""
#: pronterface.py:1163
msgid " Est: "
msgstr ""
#: pronterface.py:1164
msgid " of: "
msgstr "" msgstr ""
#: pronterface.py:1165 #: pronterface.py:1184
msgid " Remaining | " msgid " Est: %s of %s remaining | "
msgstr "" msgstr ""
#: pronterface.py:1166 #: pronterface.py:1186
msgid " Z: %0.2f mm" msgid " Z: %0.2f mm"
msgstr "" msgstr ""
#: pronterface.py:1233 #: pronterface.py:1257
msgid "Opening file failed." msgid "Opening file failed."
msgstr "" msgstr ""
#: pronterface.py:1239 #: pronterface.py:1263
msgid "Starting print" msgid "Starting print"
msgstr "" msgstr ""
#: pronterface.py:1262 #: pronterface.py:1286
msgid "Pick SD file" msgid "Pick SD file"
msgstr "" msgstr ""
#: pronterface.py:1262 #: pronterface.py:1286
msgid "Select the file to print" msgid "Select the file to print"
msgstr "" msgstr ""
#: pronterface.py:1297 #: pronterface.py:1321
msgid "Failed to execute slicing software: " msgid "Failed to execute slicing software: "
msgstr "" msgstr ""
#: pronterface.py:1304 #: pronterface.py:1328
msgid "Slicing..." msgid "Slicing..."
msgstr "" msgstr ""
#: pronterface.py:1317 pronterface.py:1372 #: pronterface.py:1341
msgid ", %d lines" msgid ", %d lines"
msgstr "" msgstr ""
#: pronterface.py:1324 #: pronterface.py:1348
msgid "Load File" msgid "Load File"
msgstr "" msgstr ""
#: pronterface.py:1331 #: pronterface.py:1355
msgid "Slicing " msgid "Slicing "
msgstr "" msgstr ""
#: pronterface.py:1350 #: pronterface.py:1374
msgid "Open file to print" msgid "Open file to print"
msgstr "" msgstr ""
#: pronterface.py:1351 #: pronterface.py:1375
msgid "OBJ, STL, and GCODE files (;*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ;)" 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:1358
msgid "File not found!"
msgstr "" msgstr ""
#: pronterface.py:1382 #: pronterface.py:1382
msgid "" msgid "File not found!"
"mm of filament used in this print\n"
msgstr "" msgstr ""
#: pronterface.py:1383 #: pronterface.py:1396
msgid "" msgid "Loaded %s, %d lines"
"mm in X\n"
"and is"
msgstr "" msgstr ""
#: pronterface.py:1383 pronterface.py:1384 #: pronterface.py:1406
msgid "" msgid ""
"mm wide\n" "mm of filament used in this print\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 "" msgstr ""
#: pronterface.py:1384 #: pronterface.py:1407
msgid "" msgid ""
"mm in Y\n" "the print goes from %f mm to %f mm in X\n"
"and is" "and is %f mm wide\n"
msgstr "" msgstr ""
#: pronterface.py:1385 #: pronterface.py:1408
msgid "" msgid ""
"mm high\n" "the print goes from %f mm to %f mm in Y\n"
"and is %f mm wide\n"
msgstr "" msgstr ""
#: pronterface.py:1385 #: pronterface.py:1409
msgid "" msgid ""
"mm in Z\n" "the print goes from %f mm to %f mm in Z\n"
"and is" "and is %f mm high\n"
msgstr "" msgstr ""
#: pronterface.py:1386 #: pronterface.py:1410
msgid "Estimated duration (pessimistic): " msgid "Estimated duration (pessimistic): "
msgstr "" msgstr ""
#: pronterface.py:1410 #: pronterface.py:1435
msgid "No file loaded. Please use load first." msgid "No file loaded. Please use load first."
msgstr "" msgstr ""
#: pronterface.py:1421 #: pronterface.py:1446
msgid "Restart" msgid "Restart"
msgstr "" msgstr ""
#: pronterface.py:1425 #: pronterface.py:1450
msgid "File upload complete" msgid "File upload complete"
msgstr "" msgstr ""
#: pronterface.py:1444 #: pronterface.py:1469
msgid "Pick SD filename" msgid "Pick SD filename"
msgstr "" msgstr ""
#: pronterface.py:1452 #: pronterface.py:1477
msgid "Paused." msgid "Paused."
msgstr "" msgstr ""
#: pronterface.py:1462 #: pronterface.py:1488
msgid "Resume" msgid "Resume"
msgstr "" msgstr ""
#: pronterface.py:1478 #: pronterface.py:1504
msgid "Connecting..." msgid "Connecting..."
msgstr "" msgstr ""
#: pronterface.py:1509 #: pronterface.py:1535
msgid "Disconnected." msgid "Disconnected."
msgstr "" msgstr ""
#: pronterface.py:1536 #: pronterface.py:1562
msgid "Reset." msgid "Reset."
msgstr "" msgstr ""
#: pronterface.py:1537 #: pronterface.py:1563
msgid "Are you sure you want to reset the printer?" msgid "Are you sure you want to reset the printer?"
msgstr "" msgstr ""
#: pronterface.py:1537 #: pronterface.py:1563
msgid "Reset?" msgid "Reset?"
msgstr "" msgstr ""
#: pronterface.py:1583 #: pronterface.py:1609
msgid "Save" msgid "Save"
msgstr "" msgstr ""
#: pronterface.py:1639 #: pronterface.py:1665
msgid "Edit settings" msgid "Edit settings"
msgstr "" msgstr ""
#: pronterface.py:1641 #: pronterface.py:1667
msgid "Defaults" msgid "Defaults"
msgstr "" msgstr ""
#: pronterface.py:1670 #: pronterface.py:1696
msgid "Custom button" msgid "Custom button"
msgstr "" msgstr ""
#: pronterface.py:1675 #: pronterface.py:1701
msgid "Button title" msgid "Button title"
msgstr "" msgstr ""
#: pronterface.py:1678 #: pronterface.py:1704
msgid "Command" msgid "Command"
msgstr "" msgstr ""
#: pronterface.py:1687 #: pronterface.py:1713
msgid "Color" msgid "Color"
msgstr "" msgstr ""
...@@ -256,8 +256,10 @@ class stlwin(wx.Frame): ...@@ -256,8 +256,10 @@ class stlwin(wx.Frame):
self.eb = wx.Button(self.panel, label=_("Export"), pos=(100, 0)) self.eb = wx.Button(self.panel, label=_("Export"), pos=(100, 0))
self.eb.Bind(wx.EVT_BUTTON, self.export) self.eb.Bind(wx.EVT_BUTTON, self.export)
else: else:
self.eb = wx.Button(self.panel, label=_("Done"), pos=(100, 0)) self.eb = wx.Button(self.panel, label=_("Export"), pos=(200, 205))
self.eb.Bind(wx.EVT_BUTTON, lambda e: self.done(e, callback)) 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 = wx.Button(self.panel, label=_("Cancel"), pos=(200, 0))
self.eb.Bind(wx.EVT_BUTTON, lambda e: self.Destroy()) self.eb.Bind(wx.EVT_BUTTON, lambda e: self.Destroy())
self.sb = wx.Button(self.panel, label=_("Snap to Z = 0"), pos=(00, 255)) self.sb = wx.Button(self.panel, label=_("Snap to Z = 0"), pos=(00, 255))
...@@ -388,7 +390,7 @@ class stlwin(wx.Frame): ...@@ -388,7 +390,7 @@ class stlwin(wx.Frame):
facets += i.facets facets += i.facets
sf.close() sf.close()
stltool.emitstl(name, facets, "plater_export") stltool.emitstl(name, facets, "plater_export")
print _("wrote "), name print _("wrote %s") % name
def right(self, event): def right(self, event):
dlg = wx.FileDialog(self, _("Pick file to load"), self.basedir, style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) dlg = wx.FileDialog(self, _("Pick file to load"), self.basedir, style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST)
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with Printrun. If not, see <http://www.gnu.org/licenses/>. # along with Printrun. If not, see <http://www.gnu.org/licenses/>.
from serial import Serial from serial import Serial, SerialException
from threading import Thread from threading import Thread
from select import error as SelectError from select import error as SelectError
import time, getopt, sys import time, getopt, sys
...@@ -47,6 +47,7 @@ class printcore(): ...@@ -47,6 +47,7 @@ class printcore():
self.endcb=None#impl () self.endcb=None#impl ()
self.onlinecb=None#impl () self.onlinecb=None#impl ()
self.loud=False#emit sent and received lines to terminal self.loud=False#emit sent and received lines to terminal
self.greetings=['start','Grbl ']
if port is not None and baud is not None: if port is not None and baud is not None:
#print port, baud #print port, baud
self.connect(port, baud) self.connect(port, baud)
...@@ -100,6 +101,12 @@ class printcore(): ...@@ -100,6 +101,12 @@ class printcore():
break break
else: else:
raise 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): if(len(line)>1):
self.log+=[line] self.log+=[line]
...@@ -112,10 +119,10 @@ class printcore(): ...@@ -112,10 +119,10 @@ class printcore():
print "RECV: ",line.rstrip() print "RECV: ",line.rstrip()
if(line.startswith('DEBUG_')): if(line.startswith('DEBUG_')):
continue continue
if(line.startswith('start') or line.startswith('ok')): if(line.startswith(tuple(self.greetings)) or line.startswith('ok')):
self.clear=True self.clear=True
if(line.startswith('start') or line.startswith('ok') or "T:" in line): if(line.startswith(tuple(self.greetings)) or line.startswith('ok') or "T:" in line):
if (not self.online or line.startswith('start')) and self.onlinecb is not None: if (not self.online or line.startswith(tuple(self.greetings))) and self.onlinecb is not None:
try: try:
self.onlinecb() self.onlinecb()
except: except:
...@@ -279,7 +286,10 @@ class printcore(): ...@@ -279,7 +286,10 @@ class printcore():
self.sendcb(command) self.sendcb(command)
except: except:
pass 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__': if __name__ == '__main__':
baud = 115200 baud = 115200
......
...@@ -37,6 +37,13 @@ class dispframe(wx.Frame): ...@@ -37,6 +37,13 @@ class dispframe(wx.Frame):
self.p=printer self.p=printer
self.pic=wx.StaticBitmap(self) self.pic=wx.StaticBitmap(self)
self.bitmap=wx.EmptyBitmap(*res) 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.SetBackgroundColour("black")
self.pic.Hide() self.pic.Hide()
self.pen=wx.Pen("white") self.pen=wx.Pen("white")
...@@ -61,20 +68,33 @@ class dispframe(wx.Frame): ...@@ -61,20 +68,33 @@ class dispframe(wx.Frame):
self.pic.SetBitmap(self.bitmap) self.pic.SetBitmap(self.bitmap)
self.pic.Show() self.pic.Show()
self.Refresh() self.Refresh()
#self.pic.SetBitmap(self.bitmap)
except: except:
raise
pass pass
def showimgdelay(self,image):
self.drawlayer(image)
self.pic.Show()
self.Refresh()
# time.sleep(self.interval)
#self.pic.Hide()
self.Refresh()
if self.p!=None and self.p.online:
self.p.send_now("G91")
self.p.send_now("G1 Z%f F300"%(self.thickness,))
self.p.send_now("G90")
def nextimg(self,event): def nextimg(self,event):
#print "b"
if self.index<len(self.layers): if self.index<len(self.layers):
i=self.index i=self.index
#print self.layers[i] #print self.layers[i]
print i print i
wx.CallAfter(self.drawlayer,self.layers[i]) wx.CallAfter(self.showimgdelay,self.layers[i])
if self.p!=None: wx.FutureCall(1000*self.interval,self.pic.Hide)
self.p.send_now("G91")
self.p.send_now("G1 Z%f F300"%(self.thickness,))
self.p.send_now("G90")
self.index+=1 self.index+=1
else: else:
print "end" print "end"
...@@ -84,7 +104,7 @@ class dispframe(wx.Frame): ...@@ -84,7 +104,7 @@ class dispframe(wx.Frame):
wx.CallAfter(self.timer.Stop) wx.CallAfter(self.timer.Stop)
def present(self,layers,interval=0.5,thickness=0.4,scale=20,size=(800,600)): def present(self,layers,interval=0.5,pause=0.2,thickness=0.4,scale=20,size=(800,600)):
wx.CallAfter(self.pic.Hide) wx.CallAfter(self.pic.Hide)
wx.CallAfter(self.Refresh) wx.CallAfter(self.Refresh)
self.layers=layers self.layers=layers
...@@ -92,10 +112,11 @@ class dispframe(wx.Frame): ...@@ -92,10 +112,11 @@ class dispframe(wx.Frame):
self.thickness=thickness self.thickness=thickness
self.index=0 self.index=0
self.size=size self.size=size
self.interval=interval
self.timer=wx.Timer(self,1) self.timer=wx.Timer(self,1)
self.timer.Bind(wx.EVT_TIMER,self.nextimg) self.timer.Bind(wx.EVT_TIMER,self.nextimg)
self.Bind(wx.EVT_TIMER,self.nextimg) self.Bind(wx.EVT_TIMER,self.nextimg)
self.timer.Start(1000*interval) self.timer.Start(1000*interval+1000*pause)
#print "x" #print "x"
...@@ -111,16 +132,19 @@ class setframe(wx.Frame): ...@@ -111,16 +132,19 @@ class setframe(wx.Frame):
wx.StaticText(self.panel,-1,"Layer:",pos=(0,30)) wx.StaticText(self.panel,-1,"Layer:",pos=(0,30))
wx.StaticText(self.panel,-1,"mm",pos=(130,30)) wx.StaticText(self.panel,-1,"mm",pos=(130,30))
self.thickness=wx.TextCtrl(self.panel,-1,"0.5",pos=(50,30)) self.thickness=wx.TextCtrl(self.panel,-1,"0.5",pos=(50,30))
wx.StaticText(self.panel,-1,"Interval:",pos=(0,60)) wx.StaticText(self.panel,-1,"Exposure:",pos=(0,60))
wx.StaticText(self.panel,-1,"s",pos=(130,60)) wx.StaticText(self.panel,-1,"s",pos=(130,60))
self.interval=wx.TextCtrl(self.panel,-1,"0.5",pos=(50,60)) self.interval=wx.TextCtrl(self.panel,-1,"0.5",pos=(50,60))
wx.StaticText(self.panel,-1,"Scale:",pos=(0,90)) wx.StaticText(self.panel,-1,"Blank:",pos=(0,90))
wx.StaticText(self.panel,-1,"x",pos=(130,90)) wx.StaticText(self.panel,-1,"s",pos=(130,90))
self.scale=wx.TextCtrl(self.panel,-1,"10",pos=(50,90)) self.delay=wx.TextCtrl(self.panel,-1,"0.5",pos=(50,90))
wx.StaticText(self.panel,-1,"Scale:",pos=(0,120))
wx.StaticText(self.panel,-1,"x",pos=(130,120))
self.scale=wx.TextCtrl(self.panel,-1,"5",pos=(50,120))
wx.StaticText(self.panel,-1,"X:",pos=(160,30)) wx.StaticText(self.panel,-1,"X:",pos=(160,30))
self.X=wx.TextCtrl(self.panel,-1,"800",pos=(180,30)) self.X=wx.TextCtrl(self.panel,-1,"1024",pos=(180,30))
wx.StaticText(self.panel,-1,"Y:",pos=(160,60)) wx.StaticText(self.panel,-1,"Y:",pos=(160,60))
self.Y=wx.TextCtrl(self.panel,-1,"600",pos=(180,60)) self.Y=wx.TextCtrl(self.panel,-1,"768",pos=(180,60))
self.bload=wx.Button(self.panel,-1,"Present",pos=(0,150)) self.bload=wx.Button(self.panel,-1,"Present",pos=(0,150))
self.bload.Bind(wx.EVT_BUTTON,self.startdisplay) self.bload.Bind(wx.EVT_BUTTON,self.startdisplay)
self.Show() self.Show()
...@@ -146,7 +170,7 @@ class setframe(wx.Frame): ...@@ -146,7 +170,7 @@ class setframe(wx.Frame):
self.f.ShowFullScreen(1) self.f.ShowFullScreen(1)
l=self.layers[0][:] l=self.layers[0][:]
#l=list(reversed(l)) #l=list(reversed(l))
self.f.present(l,thickness=float(self.thickness.GetValue()),interval=float(self.interval.GetValue()),scale=float(self.scale.GetValue()), size=(float(self.X.GetValue()),float(self.Y.GetValue()))) self.f.present(l,thickness=float(self.thickness.GetValue()),interval=float(self.interval.GetValue()),scale=float(self.scale.GetValue()),pause=float(self.delay.GetValue()), size=(float(self.X.GetValue()),float(self.Y.GetValue())))
if __name__=="__main__": if __name__=="__main__":
a=wx.App() a=wx.App()
......
...@@ -274,7 +274,7 @@ class pronsole(cmd.Cmd): ...@@ -274,7 +274,7 @@ class pronsole(cmd.Cmd):
self.helpdict["temperature_pla"] = _("Extruder temp for PLA (default: 185 deg C)") self.helpdict["temperature_pla"] = _("Extruder temp for PLA (default: 185 deg C)")
self.helpdict["xy_feedrate"] = _("Feedrate for Control Panel Moves in X and Y (default: 3000mm/min)") self.helpdict["xy_feedrate"] = _("Feedrate for Control Panel Moves in X and Y (default: 3000mm/min)")
self.helpdict["z_feedrate"] = _("Feedrate for Control Panel Moves in Z (default: 200mm/min)") self.helpdict["z_feedrate"] = _("Feedrate for Control Panel Moves in Z (default: 200mm/min)")
self.commandprefixes='MGT$'
def set_temp_preset(self,key,value): def set_temp_preset(self,key,value):
if not key.startswith("bed"): if not key.startswith("bed"):
...@@ -529,9 +529,12 @@ class pronsole(cmd.Cmd): ...@@ -529,9 +529,12 @@ class pronsole(cmd.Cmd):
definition += "\n" definition += "\n"
try: try:
written = False written = False
rco=open(self.rc_filename+"~new","w")
if os.path.exists(self.rc_filename): if os.path.exists(self.rc_filename):
rci=open(self.rc_filename,"r") import shutil
shutil.copy(self.rc_filename,self.rc_filename+"~bak")
rci=open(self.rc_filename+"~bak","r")
rco=open(self.rc_filename,"w")
if rci is not None:
overwriting = False overwriting = False
for rc_cmd in rci: for rc_cmd in rci:
l = rc_cmd.rstrip() l = rc_cmd.rstrip()
...@@ -550,11 +553,7 @@ class pronsole(cmd.Cmd): ...@@ -550,11 +553,7 @@ class pronsole(cmd.Cmd):
rco.write(definition) rco.write(definition)
if rci is not None: if rci is not None:
rci.close() rci.close()
if os.path.exists(self.rc_filename+"~old"):
os.remove(rci.name+"~old")
os.rename(rci.name,rci.name+"~old")
rco.close() rco.close()
os.rename(rco.name,self.rc_filename)
#if definition != "": #if definition != "":
# print "Saved '"+key+"' to '"+self.rc_filename+"'" # print "Saved '"+key+"' to '"+self.rc_filename+"'"
#else: #else:
...@@ -871,14 +870,14 @@ class pronsole(cmd.Cmd): ...@@ -871,14 +870,14 @@ class pronsole(cmd.Cmd):
print "! os.listdir('.')" print "! os.listdir('.')"
def default(self,l): def default(self,l):
if(l[0]=='M' or l[0]=="G" or l[0]=='T'): if(l[0] in self.commandprefixes.upper()):
if(self.p and self.p.online): if(self.p and self.p.online):
print "SENDING:"+l print "SENDING:"+l
self.p.send_now(l) self.p.send_now(l)
else: else:
print "Printer is not online." print "Printer is not online."
return return
if(l[0]=='m' or l[0]=="g" or l[0]=='t'): elif(l[0] in self.commandprefixes.lower()):
if(self.p and self.p.online): if(self.p and self.p.online):
print "SENDING:"+l.upper() print "SENDING:"+l.upper()
self.p.send_now(l.upper()) self.p.send_now(l.upper())
......
#!/usr/bin/env python #!/usr/bin/env python
# This file is part of the Printrun suite. # This file is part of the Printrun suite.
# #
# Printrun is free software: you can redistribute it and/or modify # Printrun is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# Printrun is distributed in the hope that it will be useful, # Printrun is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
# #
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with Printrun. If not, see <http://www.gnu.org/licenses/>. # along with Printrun. If not, see <http://www.gnu.org/licenses/>.
...@@ -21,7 +21,7 @@ import os, gettext, Queue, re ...@@ -21,7 +21,7 @@ import os, gettext, Queue, re
if os.path.exists('/usr/share/pronterface/locale'): if os.path.exists('/usr/share/pronterface/locale'):
gettext.install('pronterface', '/usr/share/pronterface/locale', unicode=1) gettext.install('pronterface', '/usr/share/pronterface/locale', unicode=1)
else: else:
gettext.install('pronterface', './locale', unicode=1) gettext.install('pronterface', './locale', unicode=1)
try: try:
...@@ -35,7 +35,7 @@ try: ...@@ -35,7 +35,7 @@ try:
except: except:
pass pass
StringIO=cStringIO StringIO=cStringIO
thread=threading.Thread thread=threading.Thread
winsize=(800,500) winsize=(800,500)
if os.name=="nt": if os.name=="nt":
...@@ -48,6 +48,7 @@ if os.name=="nt": ...@@ -48,6 +48,7 @@ if os.name=="nt":
from xybuttons import XYButtons from xybuttons import XYButtons
from zbuttons import ZButtons from zbuttons import ZButtons
from graph import Graph
import pronsole import pronsole
def dosify(name): def dosify(name):
...@@ -93,7 +94,8 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -93,7 +94,8 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.panel=wx.Panel(self,-1,size=size) self.panel=wx.Panel(self,-1,size=size)
self.statuscheck=False self.statuscheck=False
self.capture_skip=[] self.capture_skip={}
self.capture_skip_newline=False
self.tempreport="" self.tempreport=""
self.monitor=0 self.monitor=0
self.f=None self.f=None
...@@ -118,7 +120,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -118,7 +120,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
customdict={} customdict={}
try: try:
execfile("custombtn.txt",customdict) execfile("custombtn.txt",customdict)
if len(customdict["btns"]): if len(customdict["btns"]):
if not len(self.custombuttons): if not len(self.custombuttons):
try: try:
self.custombuttons = customdict["btns"] self.custombuttons = customdict["btns"]
...@@ -133,7 +135,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -133,7 +135,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
else: else:
print _("Note!!! You have specified custom buttons in both custombtn.txt and .pronsolerc") 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") print _("Ignoring custombtn.txt. Remove all current buttons to revert to custombtn.txt")
except: except:
pass pass
self.popmenu() self.popmenu()
...@@ -146,26 +148,27 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -146,26 +148,27 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.p.startcb=self.startcb self.p.startcb=self.startcb
self.p.endcb=self.endcb self.p.endcb=self.endcb
self.starttime=0 self.starttime=0
self.extra_print_time=0
self.curlayer=0 self.curlayer=0
self.cur_button=None self.cur_button=None
self.hsetpoint=0.0 self.hsetpoint=0.0
self.bsetpoint=0.0 self.bsetpoint=0.0
def startcb(self): def startcb(self):
self.starttime=time.time() self.starttime=time.time()
print "Print Started at: " +time.strftime('%H:%M:%S',time.localtime(self.starttime)) print "Print Started at: " +time.strftime('%H:%M:%S',time.localtime(self.starttime))
def endcb(self): def endcb(self):
if(self.p.queueindex==0): if(self.p.queueindex==0):
print "Print ended at: " +time.strftime('%H:%M:%S',time.localtime(time.time())) 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.pausebtn.Disable)
wx.CallAfter(self.printbtn.SetLabel,_("Print")) wx.CallAfter(self.printbtn.SetLabel,_("Print"))
def online(self): def online(self):
print _("Printer is now online.") print _("Printer is now online.")
self.connectbtn.SetLabel("Disconnect") self.connectbtn.SetLabel(_("Disconnect"))
self.connectbtn.Bind(wx.EVT_BUTTON,self.disconnect) self.connectbtn.Bind(wx.EVT_BUTTON,self.disconnect)
for i in self.printerControls: for i in self.printerControls:
...@@ -177,8 +180,8 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -177,8 +180,8 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
if self.filename: if self.filename:
wx.CallAfter(self.printbtn.Enable) wx.CallAfter(self.printbtn.Enable)
def sentcb(self,line): def sentcb(self,line):
if("G1" in line): if("G1" in line):
if("Z" in line): if("Z" in line):
...@@ -196,7 +199,31 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -196,7 +199,31 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
pass pass
#threading.Thread(target=self.gviz.addgcode,args=(line,1)).start() #threading.Thread(target=self.gviz.addgcode,args=(line,1)).start()
#self.gwindow.p.addgcode(line,hilight=1) #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=""): def do_extrude(self,l=""):
try: try:
if not (l.__class__=="".__class__ or l.__class__==u"".__class__) or (not len(l)): if not (l.__class__=="".__class__ or l.__class__==u"".__class__) or (not len(l)):
...@@ -204,7 +231,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -204,7 +231,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
pronsole.pronsole.do_extrude(self,l) pronsole.pronsole.do_extrude(self,l)
except: except:
raise raise
def do_reverse(self,l=""): def do_reverse(self,l=""):
try: try:
if not (l.__class__=="".__class__ or l.__class__==u"".__class__) or (not len(l)): if not (l.__class__=="".__class__ or l.__class__==u"".__class__) or (not len(l)):
...@@ -212,7 +239,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -212,7 +239,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
pronsole.pronsole.do_extrude(self,l) pronsole.pronsole.do_extrude(self,l)
except: except:
pass pass
def do_settemp(self,l=""): def do_settemp(self,l=""):
try: try:
if not (l.__class__=="".__class__ or l.__class__==u"".__class__) or (not len(l)): if not (l.__class__=="".__class__ or l.__class__==u"".__class__) or (not len(l)):
...@@ -224,10 +251,11 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -224,10 +251,11 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
if f>=0: if f>=0:
if self.p.online: if self.p.online:
self.p.send_now("M104 S"+l) 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.hsetpoint=f
self.hottgauge.SetTarget(int(f)) self.hottgauge.SetTarget(int(f))
if f>0: self.graph.SetExtruder0TargetTemperature(int(f))
if f>0:
wx.CallAfter(self.htemp.SetValue,l) wx.CallAfter(self.htemp.SetValue,l)
self.set("last_temperature",str(f)) self.set("last_temperature",str(f))
wx.CallAfter(self.settoff.SetBackgroundColour,"") wx.CallAfter(self.settoff.SetBackgroundColour,"")
...@@ -248,7 +276,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -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.") print _("You cannot set negative temperatures. To turn the hotend off entirely, set its temperature to 0.")
except Exception,x: except Exception,x:
print _("You must enter a temperature. (%s)" % (repr(x),)) print _("You must enter a temperature. (%s)" % (repr(x),))
def do_bedtemp(self,l=""): def do_bedtemp(self,l=""):
try: try:
if not (l.__class__=="".__class__ or l.__class__==u"".__class__) or (not len(l)): if not (l.__class__=="".__class__ or l.__class__==u"".__class__) or (not len(l)):
...@@ -260,10 +288,11 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -260,10 +288,11 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
if f>=0: if f>=0:
if self.p.online: if self.p.online:
self.p.send_now("M140 S"+l) 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.bsetpoint=f
self.bedtgauge.SetTarget(int(f)) self.bedtgauge.SetTarget(int(f))
if f>0: self.graph.SetBedTargetTemperature(int(f))
if f>0:
wx.CallAfter(self.btemp.SetValue,l) wx.CallAfter(self.btemp.SetValue,l)
self.set("last_bed_temperature",str(f)) self.set("last_bed_temperature",str(f))
wx.CallAfter(self.setboff.SetBackgroundColour,"") wx.CallAfter(self.setboff.SetBackgroundColour,"")
...@@ -284,15 +313,15 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -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.") print _("You cannot set negative temperatures. To turn the bed off entirely, set its temperature to 0.")
except: except:
print _("You must enter a temperature.") print _("You must enter a temperature.")
def end_macro(self): def end_macro(self):
pronsole.pronsole.end_macro(self) pronsole.pronsole.end_macro(self)
self.update_macros_menu() self.update_macros_menu()
def delete_macro(self,macro_name): def delete_macro(self,macro_name):
pronsole.pronsole.delete_macro(self,macro_name) pronsole.pronsole.delete_macro(self,macro_name)
self.update_macros_menu() self.update_macros_menu()
def start_macro(self,macro_name,old_macro_definition=""): def start_macro(self,macro_name,old_macro_definition=""):
if not self.processing_rc: if not self.processing_rc:
def cb(definition): def cb(definition):
...@@ -310,14 +339,18 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -310,14 +339,18 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
macroed(macro_name,old_macro_definition,cb) macroed(macro_name,old_macro_definition,cb)
else: else:
pronsole.pronsole.start_macro(self,macro_name,old_macro_definition) pronsole.pronsole.start_macro(self,macro_name,old_macro_definition)
def catchprint(self,l): def catchprint(self,l):
for pat in self.capture_skip: if self.capture_skip_newline and len(l) and not len(l.strip("\n\r")):
if pat.match(l): self.capture_skip_newline = False
self.capture_skip.remove(pat) 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 return
wx.CallAfter(self.logbox.AppendText,l) wx.CallAfter(self.logbox.AppendText,l)
def scanserial(self): def scanserial(self):
"""scan for available ports. return a list of device names.""" """scan for available ports. return a list of device names."""
baselist=[] baselist=[]
...@@ -331,14 +364,14 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -331,14 +364,14 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
except: except:
pass pass
return baselist+glob.glob('/dev/ttyUSB*') + glob.glob('/dev/ttyACM*') +glob.glob("/dev/tty.*")+glob.glob("/dev/cu.*")+glob.glob("/dev/rfcomm*") 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): def project(self,event):
import projectlayer import projectlayer
if(self.p.online): if(self.p.online):
projectlayer.setframe(self,self.p).Show() projectlayer.setframe(self,self.p).Show()
else: else:
print _("Printer is not online.") print _("Printer is not online.")
def popmenu(self): def popmenu(self):
self.menustrip = wx.MenuBar() self.menustrip = wx.MenuBar()
# File menu # File menu
...@@ -349,14 +382,14 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -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.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.Bind(wx.EVT_MENU, self.OnExit, m.Append(wx.ID_EXIT,_("E&xit"),_(" Closes the Window")))
self.menustrip.Append(m,_("&File")) self.menustrip.Append(m,_("&File"))
# Settings menu # Settings menu
m = wx.Menu() m = wx.Menu()
self.macros_menu = wx.Menu() self.macros_menu = wx.Menu()
m.AppendSubMenu(self.macros_menu, _("&Macros")) 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, 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 *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"))) 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: #try:
# from SkeinforgeQuickEditDialog import SkeinforgeQuickEditDialog # from SkeinforgeQuickEditDialog import SkeinforgeQuickEditDialog
...@@ -367,18 +400,18 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -367,18 +400,18 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.menustrip.Append(m,_("&Settings")) self.menustrip.Append(m,_("&Settings"))
self.update_macros_menu() self.update_macros_menu()
self.SetMenuBar(self.menustrip) self.SetMenuBar(self.menustrip)
def doneediting(self,gcode): def doneediting(self,gcode):
f=open(self.filename,"w") f=open(self.filename,"w")
f.write("\n".join(gcode)) f.write("\n".join(gcode))
f.close() f.close()
wx.CallAfter(self.loadfile,None,self.filename) wx.CallAfter(self.loadfile,None,self.filename)
def do_editgcode(self,e=None): def do_editgcode(self,e=None):
if(self.filename is not None): if(self.filename is not None):
macroed(self.filename,self.f,self.doneediting,1) macroed(self.filename,self.f,self.doneediting,1)
def new_macro(self,e=None): def new_macro(self,e=None):
dialog = wx.Dialog(self,-1,_("Enter macro name"),size=(260,85)) dialog = wx.Dialog(self,-1,_("Enter macro name"),size=(260,85))
panel = wx.Panel(dialog,-1) panel = wx.Panel(dialog,-1)
...@@ -402,13 +435,13 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -402,13 +435,13 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
wx.CallAfter(self.edit_macro,macro) wx.CallAfter(self.edit_macro,macro)
dialog.Destroy() dialog.Destroy()
return macro return macro
def edit_macro(self,macro): def edit_macro(self,macro):
if macro == "": return self.new_macro() if macro == "": return self.new_macro()
if self.macros.has_key(macro): if self.macros.has_key(macro):
old_def = self.macros[macro] old_def = self.macros[macro]
elif hasattr(self.__class__,"do_"+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 return
elif len([c for c in macro if not c.isalnum() and c != "_"]): elif len([c for c in macro if not c.isalnum() and c != "_"]):
print _("Macro name may contain only alphanumeric symbols and underscores") print _("Macro name may contain only alphanumeric symbols and underscores")
...@@ -417,7 +450,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -417,7 +450,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
old_def = "" old_def = ""
self.start_macro(macro,old_def) self.start_macro(macro,old_def)
return macro return macro
def update_macros_menu(self): def update_macros_menu(self):
if not hasattr(self,"macros_menu"): if not hasattr(self,"macros_menu"):
return # too early, menu not yet built return # too early, menu not yet built
...@@ -433,7 +466,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -433,7 +466,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
def OnExit(self, event): def OnExit(self, event):
self.Close() self.Close()
def rescanports(self,event=None): def rescanports(self,event=None):
scan=self.scanserial() scan=self.scanserial()
portslist=list(scan) portslist=list(scan)
...@@ -448,13 +481,13 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -448,13 +481,13 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.serialport.SetValue(portslist[0]) self.serialport.SetValue(portslist[0])
except: except:
pass pass
def popwindow(self): def popwindow(self):
# this list will contain all controls that should be only enabled # this list will contain all controls that should be only enabled
# when we're connected to a printer # when we're connected to a printer
self.printerControls = [] self.printerControls = []
#sizer layout: topsizer is a column sizer containing two sections #sizer layout: topsizer is a column sizer containing two sections
#upper section contains the mini view buttons #upper section contains the mini view buttons
#lower section contains the rest of the window - manual controls, console, visualizations #lower section contains the rest of the window - manual controls, console, visualizations
...@@ -462,7 +495,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -462,7 +495,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
uts=self.uppertopsizer=wx.BoxSizer(wx.HORIZONTAL) uts=self.uppertopsizer=wx.BoxSizer(wx.HORIZONTAL)
self.rescanbtn=wx.Button(self.panel,-1,_("Port")) self.rescanbtn=wx.Button(self.panel,-1,_("Port"))
self.rescanbtn.Bind(wx.EVT_BUTTON,self.rescanports) self.rescanbtn.Bind(wx.EVT_BUTTON,self.rescanports)
uts.Add(self.rescanbtn,0,wx.TOP|wx.LEFT,0) uts.Add(self.rescanbtn,0,wx.TOP|wx.LEFT,0)
self.serialport = wx.ComboBox(self.panel, -1, self.serialport = wx.ComboBox(self.panel, -1,
choices=self.scanserial(), choices=self.scanserial(),
...@@ -488,18 +521,18 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -488,18 +521,18 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
uts.Add(self.resetbtn) uts.Add(self.resetbtn)
self.minibtn=wx.Button(self.panel,-1,_("Mini mode")) self.minibtn=wx.Button(self.panel,-1,_("Mini mode"))
self.minibtn.Bind(wx.EVT_BUTTON,self.toggleview) self.minibtn.Bind(wx.EVT_BUTTON,self.toggleview)
uts.Add((25,-1)) uts.Add((25,-1))
self.monitorbox=wx.CheckBox(self.panel,-1,_("Monitor Printer")) self.monitorbox=wx.CheckBox(self.panel,-1,_("Monitor Printer"))
uts.Add(self.monitorbox,0,wx.ALIGN_CENTER) uts.Add(self.monitorbox,0,wx.ALIGN_CENTER)
self.monitorbox.Bind(wx.EVT_CHECKBOX,self.setmonitor) self.monitorbox.Bind(wx.EVT_CHECKBOX,self.setmonitor)
uts.Add((15,-1),flag=wx.EXPAND) uts.Add((15,-1),flag=wx.EXPAND)
uts.Add(self.minibtn,0,wx.ALIGN_CENTER) uts.Add(self.minibtn,0,wx.ALIGN_CENTER)
#SECOND ROW #SECOND ROW
ubs=self.upperbottomsizer=wx.BoxSizer(wx.HORIZONTAL) ubs=self.upperbottomsizer=wx.BoxSizer(wx.HORIZONTAL)
self.loadbtn=wx.Button(self.panel,-1,_("Load file")) self.loadbtn=wx.Button(self.panel,-1,_("Load file"))
self.loadbtn.Bind(wx.EVT_BUTTON,self.loadfile) self.loadbtn.Bind(wx.EVT_BUTTON,self.loadfile)
ubs.Add(self.loadbtn) ubs.Add(self.loadbtn)
...@@ -533,7 +566,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -533,7 +566,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
#self.printerControls.append(self.sendbtn) #self.printerControls.append(self.sendbtn)
lbrs.Add(self.sendbtn) lbrs.Add(self.sendbtn)
lrs.Add(lbrs,0,wx.EXPAND) lrs.Add(lbrs,0,wx.EXPAND)
#left pane #left pane
lls=self.lowerlsizer=wx.GridBagSizer() lls=self.lowerlsizer=wx.GridBagSizer()
lls.Add(wx.StaticText(self.panel,-1,_("mm/min")),pos=(0,4),span=(1,4)) 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): ...@@ -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) 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)) 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(self.zfeedc,pos=(1,7),span=(1,3))
#lls.Add((200,375)) #lls.Add((200,375))
self.xyb = XYButtons(self.panel, self.moveXY, self.homeButtonClicked) self.xyb = XYButtons(self.panel, self.moveXY, self.homeButtonClicked)
lls.Add(self.xyb, pos=(2,0), span=(1,6), flag=wx.ALIGN_CENTER) lls.Add(self.xyb, pos=(2,0), span=(1,6), flag=wx.ALIGN_CENTER)
self.zb = ZButtons(self.panel, self.moveZ) self.zb = ZButtons(self.panel, self.moveZ)
lls.Add(self.zb, pos=(2,7), span=(1,2), flag=wx.ALIGN_CENTER) lls.Add(self.zb, pos=(2,7), span=(1,2), flag=wx.ALIGN_CENTER)
wx.CallAfter(self.xyb.SetFocus) wx.CallAfter(self.xyb.SetFocus)
for i in self.cpbuttons: for i in self.cpbuttons:
btn=wx.Button(self.panel,-1,i[0])#) btn=wx.Button(self.panel,-1,i[0])#)
btn.SetBackgroundColour(i[3]) btn.SetBackgroundColour(i[3])
...@@ -561,16 +594,16 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -561,16 +594,16 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.btndict[i[1]]=btn self.btndict[i[1]]=btn
self.printerControls.append(btn) self.printerControls.append(btn)
lls.Add(btn,pos=i[2],span=i[4]) 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) 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])] 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=wx.Button(self.panel,-1,_("Off"),size=(36,-1))
self.settoff.Bind(wx.EVT_BUTTON,lambda e:self.do_settemp("off")) self.settoff.Bind(wx.EVT_BUTTON,lambda e:self.do_settemp("off"))
self.printerControls.append(self.settoff) self.printerControls.append(self.settoff)
lls.Add(self.settoff,pos=(3,1),span=(1,1)) lls.Add(self.settoff,pos=(3,1),span=(1,1))
if self.settings.last_temperature not in map(float,self.temps.values()): if self.settings.last_temperature not in map(float,self.temps.values()):
htemp_choices = [str(self.settings.last_temperature)] + htemp_choices htemp_choices = [str(self.settings.last_temperature)] + htemp_choices
self.htemp=wx.ComboBox(self.panel, -1, self.htemp=wx.ComboBox(self.panel, -1,
...@@ -582,34 +615,34 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -582,34 +615,34 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.settbtn.Bind(wx.EVT_BUTTON,self.do_settemp) self.settbtn.Bind(wx.EVT_BUTTON,self.do_settemp)
self.printerControls.append(self.settbtn) self.printerControls.append(self.settbtn)
lls.Add(self.settbtn,pos=(3,4),span=(1,1)) 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) 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])] 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=wx.Button(self.panel,-1,_("Off"),size=(36,-1))
self.setboff.Bind(wx.EVT_BUTTON,lambda e:self.do_bedtemp("off")) self.setboff.Bind(wx.EVT_BUTTON,lambda e:self.do_bedtemp("off"))
self.printerControls.append(self.setboff) self.printerControls.append(self.setboff)
lls.Add(self.setboff,pos=(4,1),span=(1,1)) lls.Add(self.setboff,pos=(4,1),span=(1,1))
if self.settings.last_bed_temperature not in map(float,self.bedtemps.values()): if self.settings.last_bed_temperature not in map(float,self.bedtemps.values()):
btemp_choices = [str(self.settings.last_bed_temperature)] + btemp_choices btemp_choices = [str(self.settings.last_bed_temperature)] + btemp_choices
self.btemp=wx.ComboBox(self.panel, -1, self.btemp=wx.ComboBox(self.panel, -1,
choices=btemp_choices,style=wx.CB_DROPDOWN, size=(80,-1)) choices=btemp_choices,style=wx.CB_DROPDOWN, size=(80,-1))
self.btemp.Bind(wx.EVT_COMBOBOX,self.btemp_change) self.btemp.Bind(wx.EVT_COMBOBOX,self.btemp_change)
lls.Add(self.btemp,pos=(4,2),span=(1,2)) lls.Add(self.btemp,pos=(4,2),span=(1,2))
self.setbbtn=wx.Button(self.panel,-1,_("Set"),size=(38,-1)) self.setbbtn=wx.Button(self.panel,-1,_("Set"),size=(38,-1))
self.setbbtn.Bind(wx.EVT_BUTTON,self.do_bedtemp) self.setbbtn.Bind(wx.EVT_BUTTON,self.do_bedtemp)
self.printerControls.append(self.setbbtn) self.printerControls.append(self.setbbtn)
lls.Add(self.setbbtn,pos=(4,4),span=(1,1)) lls.Add(self.setbbtn,pos=(4,4),span=(1,1))
self.btemp.SetValue(str(self.settings.last_bed_temperature)) self.btemp.SetValue(str(self.settings.last_bed_temperature))
self.htemp.SetValue(str(self.settings.last_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. #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 # if it is not, then a (user) remark is added. This denotes a manual entry
for i in btemp_choices: 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): 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) self.btemp.SetValue(i)
...@@ -620,34 +653,34 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -620,34 +653,34 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
if( '(' not in self.btemp.Value): if( '(' not in self.btemp.Value):
self.btemp.SetValue(self.btemp.Value + ' (user)') self.btemp.SetValue(self.btemp.Value + ' (user)')
if( '(' not in self.htemp.Value): 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.btemp,pos=(4,1),span=(1,3))
#lls.Add(self.setbbtn,pos=(4,4),span=(1,2)) #lls.Add(self.setbbtn,pos=(4,4),span=(1,2))
self.tempdisp=wx.StaticText(self.panel,-1,"") self.tempdisp=wx.StaticText(self.panel,-1,"")
lls.Add(self.tempdisp,pos=(4,5),span=(1,3)) 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=wx.SpinCtrl(self.panel,-1,"5",min=0,max=1000,size=(60,-1))
self.edist.SetBackgroundColour((225,200,200)) self.edist.SetBackgroundColour((225,200,200))
self.edist.SetForegroundColour("black") self.edist.SetForegroundColour("black")
lls.Add(self.edist,pos=(5,2),span=(1,1)) 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=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.SetBackgroundColour((225,200,200))
self.efeedc.SetForegroundColour("black") self.efeedc.SetForegroundColour("black")
self.efeedc.Bind(wx.EVT_SPINCTRL,self.setfeeds) self.efeedc.Bind(wx.EVT_SPINCTRL,self.setfeeds)
lls.Add(self.efeedc,pos=(6,2),span=(1,1)) 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.xyfeedc.Bind(wx.EVT_SPINCTRL,self.setfeeds)
self.zfeedc.Bind(wx.EVT_SPINCTRL,self.setfeeds) self.zfeedc.Bind(wx.EVT_SPINCTRL,self.setfeeds)
self.zfeedc.SetBackgroundColour((180,255,180)) self.zfeedc.SetBackgroundColour((180,255,180))
self.zfeedc.SetForegroundColour("black") self.zfeedc.SetForegroundColour("black")
# lls.Add((10,0),pos=(0,11),span=(1,1)) # lls.Add((10,0),pos=(0,11),span=(1,1))
self.hottgauge=TempGauge(self.panel,size=(300,24),title=_("Heater:"),maxval=230) self.hottgauge=TempGauge(self.panel,size=(200,24),title=_("Heater:"),maxval=230)
lls.Add(self.hottgauge,pos=(7,0),span=(1,8)) lls.Add(self.hottgauge,pos=(7,0),span=(1,4))
self.bedtgauge=TempGauge(self.panel,size=(300,24),title=_("Bed:"),maxval=130) self.bedtgauge=TempGauge(self.panel,size=(200,24),title=_("Bed:"),maxval=130)
lls.Add(self.bedtgauge,pos=(8,0),span=(1,8)) lls.Add(self.bedtgauge,pos=(8,0),span=(1,4))
#def scroll_setpoint(e): #def scroll_setpoint(e):
# if e.GetWheelRotation()>0: # if e.GetWheelRotation()>0:
# self.do_settemp(str(self.hsetpoint+1)) # self.do_settemp(str(self.hsetpoint+1))
...@@ -655,6 +688,9 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -655,6 +688,9 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
# self.do_settemp(str(max(0,self.hsetpoint-1))) # self.do_settemp(str(max(0,self.hsetpoint-1)))
#self.tgauge.Bind(wx.EVT_MOUSEWHEEL,scroll_setpoint) #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), self.gviz=gviz.gviz(self.panel,(300,300),
build_dimensions=self.build_dimensions_list, build_dimensions=self.build_dimensions_list,
grid=(self.settings.preview_grid_step1,self.settings.preview_grid_step2), grid=(self.settings.preview_grid_step1,self.settings.preview_grid_step2),
...@@ -675,11 +711,11 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -675,11 +711,11 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
vcs.Add(self.gviz,1,flag=wx.SHAPED) vcs.Add(self.gviz,1,flag=wx.SHAPED)
cs=self.centersizer=wx.GridBagSizer() cs=self.centersizer=wx.GridBagSizer()
vcs.Add(cs,0,flag=wx.EXPAND) vcs.Add(cs,0,flag=wx.EXPAND)
self.uppersizer=wx.BoxSizer(wx.VERTICAL) self.uppersizer=wx.BoxSizer(wx.VERTICAL)
self.uppersizer.Add(self.uppertopsizer) self.uppersizer.Add(self.uppertopsizer)
self.uppersizer.Add(self.upperbottomsizer) self.uppersizer.Add(self.upperbottomsizer)
self.lowersizer=wx.BoxSizer(wx.HORIZONTAL) self.lowersizer=wx.BoxSizer(wx.HORIZONTAL)
self.lowersizer.Add(lls) self.lowersizer.Add(lls)
self.lowersizer.Add(vcs,1,wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL) self.lowersizer.Add(vcs,1,wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL)
...@@ -692,29 +728,29 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -692,29 +728,29 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.status.SetStatusText(_("Not connected to printer.")) self.status.SetStatusText(_("Not connected to printer."))
self.panel.Bind(wx.EVT_MOUSE_EVENTS,self.editbutton) self.panel.Bind(wx.EVT_MOUSE_EVENTS,self.editbutton)
self.Bind(wx.EVT_CLOSE, self.kill) self.Bind(wx.EVT_CLOSE, self.kill)
self.topsizer.Layout() self.topsizer.Layout()
self.topsizer.Fit(self) self.topsizer.Fit(self)
# disable all printer controls until we connect to a printer # disable all printer controls until we connect to a printer
self.pausebtn.Disable() self.pausebtn.Disable()
for i in self.printerControls: for i in self.printerControls:
i.Disable() i.Disable()
#self.panel.Fit() #self.panel.Fit()
#uts.Layout() #uts.Layout()
self.cbuttons_reload() self.cbuttons_reload()
def plate(self,e): def plate(self,e):
import plater import plater
print "plate function activated" print "plate function activated"
plater.stlwin(size=(800,580),callback=self.platecb,parent=self).Show() plater.stlwin(size=(800,580),callback=self.platecb,parent=self).Show()
def platecb(self,name): def platecb(self,name):
print "plated: "+name print "plated: "+name
self.loadfile(None,name) self.loadfile(None,name)
def sdmenu(self,e): def sdmenu(self,e):
obj = e.GetEventObject() obj = e.GetEventObject()
popupmenu=wx.Menu() popupmenu=wx.Menu()
...@@ -725,7 +761,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -725,7 +761,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
item = popupmenu.Append(-1,_("SD Print")) item = popupmenu.Append(-1,_("SD Print"))
self.Bind(wx.EVT_MENU,self.sdprintfile,id=item.GetId()) self.Bind(wx.EVT_MENU,self.sdprintfile,id=item.GetId())
self.panel.PopupMenu(popupmenu, obj.GetPosition()) self.panel.PopupMenu(popupmenu, obj.GetPosition())
def htemp_change(self,event): def htemp_change(self,event):
if self.hsetpoint > 0: if self.hsetpoint > 0:
self.do_settemp("") self.do_settemp("")
...@@ -735,7 +771,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -735,7 +771,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
if self.bsetpoint > 0: if self.bsetpoint > 0:
self.do_bedtemp("") self.do_bedtemp("")
wx.CallAfter(self.btemp.SetInsertionPoint,0) wx.CallAfter(self.btemp.SetInsertionPoint,0)
def showwin(self,event): def showwin(self,event):
if(self.f is not None): if(self.f is not None):
self.gwindow.Show(True) self.gwindow.Show(True)
...@@ -755,23 +791,23 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -755,23 +791,23 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.settings._set("xy_feedrate",self.xyfeedc.GetValue()) self.settings._set("xy_feedrate",self.xyfeedc.GetValue())
except: except:
pass pass
def toggleview(self,e): def toggleview(self,e):
if(self.mini): if(self.mini):
self.mini=False self.mini=False
self.topsizer.Fit(self) self.topsizer.Fit(self)
#self.SetSize(winsize) #self.SetSize(winsize)
wx.CallAfter(self.minibtn.SetLabel, _("Mini mode")) wx.CallAfter(self.minibtn.SetLabel, _("Mini mode"))
else: else:
self.mini=True self.mini=True
self.uppersizer.Fit(self) self.uppersizer.Fit(self)
#self.SetSize(winssize) #self.SetSize(winssize)
wx.CallAfter(self.minibtn.SetLabel, _("Full mode")) wx.CallAfter(self.minibtn.SetLabel, _("Full mode"))
def cbuttons_reload(self): def cbuttons_reload(self):
allcbs = [] allcbs = []
ubs=self.upperbottomsizer ubs=self.upperbottomsizer
...@@ -823,10 +859,10 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -823,10 +859,10 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
else: else:
cs.Add(b,pos=((i-4)/3,(i-4)%3)) cs.Add(b,pos=((i-4)/3,(i-4)%3))
self.topsizer.Layout() self.topsizer.Layout()
def help_button(self): def help_button(self):
print _('Defines custom button. Usage: button <num> "title" [/c "colour"] command') print _('Defines custom button. Usage: button <num> "title" [/c "colour"] command')
def do_button(self,argstr): def do_button(self,argstr):
def nextarg(rest): def nextarg(rest):
rest=rest.lstrip() rest=rest.lstrip()
...@@ -859,7 +895,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -859,7 +895,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
#except Exception,x: #except Exception,x:
# print "Bad syntax for button definition, see 'help button'" # print "Bad syntax for button definition, see 'help button'"
# print x # print x
def cbutton_save(self,n,bdef,new_n=None): def cbutton_save(self,n,bdef,new_n=None):
if new_n is None: new_n=n if new_n is None: new_n=n
...@@ -915,7 +951,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -915,7 +951,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
#while len(self.custombuttons) and self.custombuttons[-1] is None: #while len(self.custombuttons) and self.custombuttons[-1] is None:
# del self.custombuttons[-1] # del self.custombuttons[-1]
wx.CallAfter(self.cbuttons_reload) wx.CallAfter(self.cbuttons_reload)
def cbutton_order(self,e,button,dir): def cbutton_order(self,e,button,dir):
n = button.custombutton n = button.custombutton
if dir<0: if dir<0:
...@@ -929,7 +965,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -929,7 +965,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
#if self.custombuttons[-1] is None: #if self.custombuttons[-1] is None:
# del self.custombuttons[-1] # del self.custombuttons[-1]
self.cbuttons_reload() self.cbuttons_reload()
def editbutton(self,e): def editbutton(self,e):
if e.IsCommandEvent() or e.ButtonUp(wx.MOUSE_BTN_RIGHT): if e.IsCommandEvent() or e.ButtonUp(wx.MOUSE_BTN_RIGHT):
if e.IsCommandEvent(): if e.IsCommandEvent():
...@@ -961,7 +997,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -961,7 +997,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.dragpos = scrpos self.dragpos = scrpos
e.Skip() e.Skip()
return return
else: else:
dx,dy=self.dragpos[0]-scrpos[0],self.dragpos[1]-scrpos[1] 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 if dx*dx+dy*dy < 5*5: # threshold to detect dragging for jittery mice
e.Skip() e.Skip()
...@@ -992,11 +1028,11 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -992,11 +1028,11 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.dragging.label = obj.s_label = obj.GetLabel() self.dragging.label = obj.s_label = obj.GetLabel()
self.dragging.bgc = obj.s_bgc = obj.GetBackgroundColour() self.dragging.bgc = obj.s_bgc = obj.GetBackgroundColour()
self.dragging.fgc = obj.s_fgc = obj.GetForegroundColour() self.dragging.fgc = obj.s_fgc = obj.GetForegroundColour()
else: else:
# dragging in progress # dragging in progress
self.dragging.SetPosition(self.panel.ScreenToClient(scrpos)) self.dragging.SetPosition(self.panel.ScreenToClient(scrpos))
wx.CallAfter(self.dragging.Refresh) wx.CallAfter(self.dragging.Refresh)
btns = self.custombuttonbuttons btns = self.custombuttonbuttons
dst = None dst = None
src = self.dragging.sourcebutton src = self.dragging.sourcebutton
drg = self.dragging drg = self.dragging
...@@ -1066,7 +1102,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -1066,7 +1102,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
del self.dragpos del self.dragpos
else: else:
e.Skip() e.Skip()
def homeButtonClicked(self, corner): def homeButtonClicked(self, corner):
if corner == 0: # upper-left if corner == 0: # upper-left
self.onecmd('home X') self.onecmd('home X')
...@@ -1076,17 +1112,17 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -1076,17 +1112,17 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.onecmd('home Z') self.onecmd('home Z')
if corner == 3: # lower-left if corner == 3: # lower-left
self.onecmd('home') self.onecmd('home')
def moveXY(self, x, y): def moveXY(self, x, y):
if x != 0: if x != 0:
self.onecmd('move X %s' % x) self.onecmd('move X %s' % x)
if y != 0: if y != 0:
self.onecmd('move Y %s' % y) self.onecmd('move Y %s' % y)
def moveZ(self, z): def moveZ(self, z):
if z != 0: if z != 0:
self.onecmd('move Z %s' % z) self.onecmd('move Z %s' % z)
def procbutton(self,e): def procbutton(self,e):
try: try:
if hasattr(e.GetEventObject(),"custombutton"): if hasattr(e.GetEventObject(),"custombutton"):
...@@ -1099,7 +1135,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -1099,7 +1135,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
print _("event object missing") print _("event object missing")
self.cur_button=None self.cur_button=None
raise raise
def kill(self,e): def kill(self,e):
self.statuscheck=0 self.statuscheck=0
self.p.recvcb=None self.p.recvcb=None
...@@ -1113,7 +1149,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -1113,7 +1149,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
except: except:
pass pass
self.Destroy() self.Destroy()
def do_monitor(self,l=""): def do_monitor(self,l=""):
if l.strip()=="": if l.strip()=="":
self.monitorbox.SetValue(not self.monitorbox.GetValue()) self.monitorbox.SetValue(not self.monitorbox.GetValue())
...@@ -1130,11 +1166,17 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -1130,11 +1166,17 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
print _("Monitoring printer.") print _("Monitoring printer.")
else: else:
print _("Done monitoring.") print _("Done monitoring.")
def setmonitor(self,e): def setmonitor(self,e):
self.monitor=self.monitorbox.GetValue() self.monitor=self.monitorbox.GetValue()
if self.monitor:
self.graph.StartPlotting(1000)
else:
self.graph.StopPlotting()
def sendline(self,e): def sendline(self,e):
command=self.commandbox.GetValue() command=self.commandbox.GetValue()
if not len(command): if not len(command):
...@@ -1145,7 +1187,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -1145,7 +1187,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
def clearOutput(self,e): def clearOutput(self,e):
self.logbox.Clear() self.logbox.Clear()
def statuschecker(self): def statuschecker(self):
try: try:
while(self.statuscheck): while(self.statuscheck):
...@@ -1156,11 +1198,13 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -1156,11 +1198,13 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
string+=_("Loaded ")+os.path.split(self.filename)[1]+" " string+=_("Loaded ")+os.path.split(self.filename)[1]+" "
except: except:
pass 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 ","")) wx.CallAfter(self.tempdisp.SetLabel,self.tempreport.strip().replace("ok ",""))
try: try:
self.hottgauge.SetValue(float(filter(lambda x:x.startswith("T:"),self.tempreport.split())[0].split(":")[1])) 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.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: except:
pass pass
fractioncomplete = 0.0 fractioncomplete = 0.0
...@@ -1170,22 +1214,22 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -1170,22 +1214,22 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
if self.p.printing: if self.p.printing:
fractioncomplete = float(self.p.queueindex)/len(self.p.mainqueue) fractioncomplete = float(self.p.queueindex)/len(self.p.mainqueue)
string+= _(" Printing:%04.2f %% |") % (100*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: if fractioncomplete > 0.0:
secondselapsed = int(time.time()-self.starttime) secondselapsed = int(time.time()-self.starttime+self.extra_print_time)
secondsestimate = secondselapsed/fractioncomplete secondsestimate = secondselapsed/fractioncomplete
secondsremain = secondsestimate - secondselapsed secondsremain = secondsestimate - secondselapsed
string+= _(" Est: ") + time.strftime('%H:%M:%S', time.gmtime(secondsremain)) string+= _(" Est: %s of %s remaining | ") % (time.strftime('%H:%M:%S', time.gmtime(secondsremain)),
string+= _(" of: ") + time.strftime('%H:%M:%S', time.gmtime(secondsestimate)) time.strftime('%H:%M:%S', time.gmtime(secondsestimate)))
string+= _(" Remaining | ")
string+= _(" Z: %0.2f mm") % self.curlayer string+= _(" Z: %0.2f mm") % self.curlayer
wx.CallAfter(self.status.SetStatusText,string) wx.CallAfter(self.status.SetStatusText,string)
wx.CallAfter(self.gviz.Refresh) wx.CallAfter(self.gviz.Refresh)
if(self.monitor and self.p.online): if(self.monitor and self.p.online):
if self.sdprinting: if self.sdprinting:
self.p.send_now("M27") self.p.send_now("M27")
self.capture_skip.append(re.compile(r"ok T:[\d\.]+( B:[\d\.]+)?( @:[\d\.]+)?\s*")) if not hasattr(self,"auto_monitor_pattern"):
self.capture_skip.append(re.compile(r"\n")) 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") self.p.send_now("M105")
time.sleep(self.monitor_interval) time.sleep(self.monitor_interval)
while not self.sentlines.empty(): while not self.sentlines.empty():
...@@ -1206,7 +1250,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -1206,7 +1250,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
pass pass
if cout is None: if cout is None:
cout=cStringIO.StringIO() cout=cStringIO.StringIO()
sys.stdout=cout sys.stdout=cout
retval=None retval=None
try: try:
...@@ -1222,7 +1266,8 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -1222,7 +1266,8 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
wx.CallAfter(self.tempdisp.SetLabel,self.tempreport.strip().replace("ok ","")) wx.CallAfter(self.tempdisp.SetLabel,self.tempreport.strip().replace("ok ",""))
try: try:
self.hottgauge.SetValue(float(filter(lambda x:x.startswith("T:"),self.tempreport.split())[0].split(":")[1])) 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: except:
pass pass
tstring=l.rstrip() tstring=l.rstrip()
...@@ -1232,7 +1277,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -1232,7 +1277,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
#wx.CallAfter(self.logbox.AppendText,tstring+"\n") #wx.CallAfter(self.logbox.AppendText,tstring+"\n")
for i in self.recvlisteners: for i in self.recvlisteners:
i(l) i(l)
def listfiles(self,line): def listfiles(self,line):
if "Begin file list" in line: if "Begin file list" in line:
self.listing=1 self.listing=1
...@@ -1242,7 +1287,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -1242,7 +1287,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
wx.CallAfter(self.filesloaded) wx.CallAfter(self.filesloaded)
elif self.listing: elif self.listing:
self.sdfiles+=[line.replace("\n","").replace("\r","").lower()] self.sdfiles+=[line.replace("\n","").replace("\r","").lower()]
def waitforsdresponse(self,l): def waitforsdresponse(self,l):
if "file.open failed" in l: if "file.open failed" in l:
wx.CallAfter(self.status.SetStatusText,_("Opening file failed.")) wx.CallAfter(self.status.SetStatusText,_("Opening file failed."))
...@@ -1270,9 +1315,9 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -1270,9 +1315,9 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.percentdone=100.0*int(vals[0])/int(vals[1]) self.percentdone=100.0*int(vals[0])/int(vals[1])
except: except:
pass pass
def filesloaded(self): def filesloaded(self):
dlg=wx.SingleChoiceDialog(self, _("Select the file to print"), _("Pick SD file"), self.sdfiles) dlg=wx.SingleChoiceDialog(self, _("Select the file to print"), _("Pick SD file"), self.sdfiles)
if(dlg.ShowModal()==wx.ID_OK): if(dlg.ShowModal()==wx.ID_OK):
...@@ -1280,7 +1325,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -1280,7 +1325,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
if len(target): if len(target):
self.recvlisteners+=[self.waitforsdresponse] self.recvlisteners+=[self.waitforsdresponse]
self.p.send_now("M23 "+target.lower()) self.p.send_now("M23 "+target.lower())
#print self.sdfiles #print self.sdfiles
pass pass
...@@ -1293,7 +1338,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -1293,7 +1338,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.recvlisteners+=[self.listfiles] self.recvlisteners+=[self.listfiles]
self.p.send_now("M21") self.p.send_now("M21")
self.p.send_now("M20") self.p.send_now("M20")
def skein_func(self): def skein_func(self):
try: try:
import shlex import shlex
...@@ -1312,7 +1357,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -1312,7 +1357,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
print _("Failed to execute slicing software: ") print _("Failed to execute slicing software: ")
self.stopsf=1 self.stopsf=1
traceback.print_exc(file=sys.stdout) traceback.print_exc(file=sys.stdout)
def skein_monitor(self): def skein_monitor(self):
while(not self.stopsf): while(not self.stopsf):
try: try:
...@@ -1328,7 +1373,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -1328,7 +1373,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
of.close of.close
if self.p.online: if self.p.online:
wx.CallAfter(self.printbtn.Enable) wx.CallAfter(self.printbtn.Enable)
wx.CallAfter(self.status.SetStatusText,_("Loaded ")+self.filename+_(", %d lines") % (len(self.f),)) wx.CallAfter(self.status.SetStatusText,_("Loaded ")+self.filename+_(", %d lines") % (len(self.f),))
wx.CallAfter(self.pausebtn.Disable) wx.CallAfter(self.pausebtn.Disable)
wx.CallAfter(self.printbtn.SetLabel,_("Print")) wx.CallAfter(self.printbtn.SetLabel,_("Print"))
...@@ -1339,8 +1384,8 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -1339,8 +1384,8 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
wx.CallAfter(self.loadbtn.SetLabel,_("Load File")) wx.CallAfter(self.loadbtn.SetLabel,_("Load File"))
self.skeining=0 self.skeining=0
self.skeinp=None self.skeinp=None
def skein(self,filename): def skein(self,filename):
wx.CallAfter(self.loadbtn.SetLabel,_("Cancel")) wx.CallAfter(self.loadbtn.SetLabel,_("Cancel"))
print _("Slicing ") + filename print _("Slicing ") + filename
...@@ -1350,7 +1395,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -1350,7 +1395,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.skeining=1 self.skeining=1
thread(target=self.skein_func).start() thread(target=self.skein_func).start()
thread(target=self.skein_monitor).start() thread(target=self.skein_monitor).start()
def loadfile(self,event,filename=None): def loadfile(self,event,filename=None):
if self.skeining and self.skeinp is not None: if self.skeining and self.skeinp is not None:
self.skeinp.terminate() self.skeinp.terminate()
...@@ -1384,20 +1429,20 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -1384,20 +1429,20 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
of=open(self.filename) of=open(self.filename)
self.f=[i.replace("\n","").replace("\r","") for i in of] self.f=[i.replace("\n","").replace("\r","") for i in of]
of.close 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.printbtn.SetLabel, _("Print"))
wx.CallAfter(self.pausebtn.SetLabel, _("Pause")) wx.CallAfter(self.pausebtn.SetLabel, _("Pause"))
wx.CallAfter(self.pausebtn.Disable) wx.CallAfter(self.pausebtn.Disable)
if self.p.online: if self.p.online:
wx.CallAfter(self.printbtn.Enable) wx.CallAfter(self.printbtn.Enable)
threading.Thread(target=self.loadviz).start() threading.Thread(target=self.loadviz).start()
def loadviz(self): def loadviz(self):
Xtot,Ytot,Ztot,Xmin,Xmax,Ymin,Ymax,Zmin,Zmax = pronsole.measurements(self.f) 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 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 %f mm to %f mm in X\nand is %f mm wide\n") % (Xmin, Xmax, Xtot)
print _("the print goes from"),Ymin,_("mm to"),Ymax,_("mm in Y\nand is"),Ytot,_("mm wide\n") 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"),Zmin,_("mm to"),Zmax,_("mm in Z\nand is"),Ztot,_("mm high\n") 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) print _("Estimated duration (pessimistic): "), pronsole.estimate_duration(self.f)
#import time #import time
#t0=time.time() #t0=time.time()
...@@ -1410,8 +1455,9 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -1410,8 +1455,9 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
#print "generated 3d view in %f s"%(time.time()-t0) #print "generated 3d view in %f s"%(time.time()-t0)
self.gviz.showall=1 self.gviz.showall=1
wx.CallAfter(self.gviz.Refresh) wx.CallAfter(self.gviz.Refresh)
def printfile(self,event): def printfile(self,event):
self.extra_print_time=0
if self.paused: if self.paused:
self.p.paused=0 self.p.paused=0
self.paused=0 self.paused=0
...@@ -1420,7 +1466,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -1420,7 +1466,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.p.send_now("M26 S0") self.p.send_now("M26 S0")
self.p.send_now("M24") self.p.send_now("M24")
return return
if self.f is None or not len(self.f): if self.f is None or not len(self.f):
wx.CallAfter(self.status.SetStatusText, _("No file loaded. Please use load first.")) wx.CallAfter(self.status.SetStatusText, _("No file loaded. Please use load first."))
return return
...@@ -1429,19 +1475,19 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -1429,19 +1475,19 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
return return
self.on_startprint() self.on_startprint()
self.p.startprint(self.f) self.p.startprint(self.f)
def on_startprint(self): def on_startprint(self):
wx.CallAfter(self.pausebtn.SetLabel, _("Pause")) wx.CallAfter(self.pausebtn.SetLabel, _("Pause"))
wx.CallAfter(self.pausebtn.Enable) wx.CallAfter(self.pausebtn.Enable)
wx.CallAfter(self.printbtn.SetLabel, _("Restart")) wx.CallAfter(self.printbtn.SetLabel, _("Restart"))
def endupload(self): def endupload(self):
self.p.send_now("M29 ") self.p.send_now("M29 ")
wx.CallAfter(self.status.SetStatusText, _("File upload complete")) wx.CallAfter(self.status.SetStatusText, _("File upload complete"))
time.sleep(0.5) time.sleep(0.5)
self.p.clear=True self.p.clear=True
self.uploading=False self.uploading=False
def uploadtrigger(self,l): def uploadtrigger(self,l):
if "Writing to file" in l: if "Writing to file" in l:
self.uploading=True self.uploading=True
...@@ -1450,7 +1496,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -1450,7 +1496,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.recvlisteners.remove(self.uploadtrigger) self.recvlisteners.remove(self.uploadtrigger)
elif "open failed, File" in l: elif "open failed, File" in l:
self.recvlisteners.remove(self.uploadtrigger) self.recvlisteners.remove(self.uploadtrigger)
def upload(self,event): def upload(self,event):
if not self.f or not len(self.f): if not self.f or not len(self.f):
return return
...@@ -1462,7 +1508,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -1462,7 +1508,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.p.send_now("M28 "+str(dlg.GetValue())) self.p.send_now("M28 "+str(dlg.GetValue()))
self.recvlisteners+=[self.uploadtrigger] self.recvlisteners+=[self.uploadtrigger]
pass pass
def pause(self,event): def pause(self,event):
print _("Paused.") print _("Paused.")
if not self.paused: if not self.paused:
...@@ -1474,6 +1520,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -1474,6 +1520,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
return return
self.p.pause() self.p.pause()
self.paused=True self.paused=True
self.extra_print_time += int(time.time() - self.starttime)
wx.CallAfter(self.pausebtn.SetLabel, _("Resume")) wx.CallAfter(self.pausebtn.SetLabel, _("Resume"))
else: else:
self.paused=False self.paused=False
...@@ -1482,13 +1529,13 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -1482,13 +1529,13 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
else: else:
self.p.resume() self.p.resume()
wx.CallAfter(self.pausebtn.SetLabel, _("Pause")) wx.CallAfter(self.pausebtn.SetLabel, _("Pause"))
def sdprintfile(self,event): def sdprintfile(self,event):
self.on_startprint() self.on_startprint()
threading.Thread(target=self.getfiles).start() threading.Thread(target=self.getfiles).start()
pass pass
def connect(self,event): def connect(self,event):
print _("Connecting...") print _("Connecting...")
port=None port=None
...@@ -1518,13 +1565,13 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -1518,13 +1565,13 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
if baud != self.settings.baudrate: if baud != self.settings.baudrate:
self.set("baudrate",str(baud)) self.set("baudrate",str(baud))
threading.Thread(target=self.statuschecker).start() threading.Thread(target=self.statuschecker).start()
def disconnect(self,event): def disconnect(self,event):
print _("Disconnected.") print _("Disconnected.")
self.p.disconnect() self.p.disconnect()
self.statuscheck=False self.statuscheck=False
self.connectbtn.SetLabel("Connect") self.connectbtn.SetLabel("Connect")
self.connectbtn.Bind(wx.EVT_BUTTON,self.connect) self.connectbtn.Bind(wx.EVT_BUTTON,self.connect)
...@@ -1536,7 +1583,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -1536,7 +1583,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
# Disable XYButtons and ZButtons # Disable XYButtons and ZButtons
wx.CallAfter(self.xyb.disable) wx.CallAfter(self.xyb.disable)
wx.CallAfter(self.zb.disable) wx.CallAfter(self.zb.disable)
if self.paused: if self.paused:
self.p.paused=0 self.p.paused=0
self.p.printing=0 self.p.printing=0
...@@ -1545,20 +1592,20 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -1545,20 +1592,20 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.paused=0 self.paused=0
if self.sdprinting: if self.sdprinting:
self.p.send_now("M26 S0") self.p.send_now("M26 S0")
def reset(self,event): def reset(self,event):
print _("Reset.") print _("Reset.")
dlg=wx.MessageDialog(self, _("Are you sure you want to reset the printer?"), _("Reset?"), wx.YES|wx.NO) dlg=wx.MessageDialog(self, _("Are you sure you want to reset the printer?"), _("Reset?"), wx.YES|wx.NO)
if dlg.ShowModal()==wx.ID_YES: if dlg.ShowModal()==wx.ID_YES:
self.p.reset() self.p.reset()
self.p.printing=0
wx.CallAfter(self.printbtn.SetLabel, _("Print"))
if self.paused: if self.paused:
self.p.paused=0 self.p.paused=0
self.p.printing=0
wx.CallAfter(self.pausebtn.SetLabel, _("Pause")) wx.CallAfter(self.pausebtn.SetLabel, _("Pause"))
wx.CallAfter(self.printbtn.SetLabel, _("Print"))
self.paused=0 self.paused=0
def get_build_dimensions(self,bdim): def get_build_dimensions(self,bdim):
import re import re
# a string containing up to six numbers delimited by almost anything # a string containing up to six numbers delimited by almost anything
...@@ -1670,7 +1717,7 @@ class options(wx.Dialog): ...@@ -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,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) 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) topsizer.Add(self.CreateSeparatedButtonSizer(wx.OK+wx.CANCEL),0,wx.EXPAND)
self.SetSizer(topsizer) self.SetSizer(topsizer)
topsizer.Layout() topsizer.Layout()
topsizer.Fit(self) topsizer.Fit(self)
if self.ShowModal()==wx.ID_OK: if self.ShowModal()==wx.ID_OK:
...@@ -1678,7 +1725,7 @@ class options(wx.Dialog): ...@@ -1678,7 +1725,7 @@ class options(wx.Dialog):
if ctrls[k,1].GetValue() != str(v): if ctrls[k,1].GetValue() != str(v):
pronterface.set(k,str(ctrls[k,1].GetValue())) pronterface.set(k,str(ctrls[k,1].GetValue()))
self.Destroy() self.Destroy()
class ButtonEdit(wx.Dialog): class ButtonEdit(wx.Dialog):
"""Custom button edit dialog""" """Custom button edit dialog"""
def __init__(self,pronterface): def __init__(self,pronterface):
...@@ -1726,7 +1773,7 @@ class ButtonEdit(wx.Dialog): ...@@ -1726,7 +1773,7 @@ class ButtonEdit(wx.Dialog):
self.command.SetValue(macro) self.command.SetValue(macro)
if self.name.GetValue()=="": if self.name.GetValue()=="":
self.name.SetValue(macro) self.name.SetValue(macro)
class TempGauge(wx.Panel): class TempGauge(wx.Panel):
def __init__(self,parent,size=(200,22),title="",maxval=240,gaugeColour=None): def __init__(self,parent,size=(200,22),title="",maxval=240,gaugeColour=None):
wx.Panel.__init__(self,parent,-1,size=size) wx.Panel.__init__(self,parent,-1,size=size)
...@@ -1821,12 +1868,12 @@ class TempGauge(wx.Panel): ...@@ -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.SetFont(gc.CreateFont(wx.Font(12,wx.FONTFAMILY_DEFAULT,wx.FONTSTYLE_NORMAL,wx.FONTWEIGHT_BOLD),wx.WHITE))
#gc.DrawText(text,29,-2) #gc.DrawText(text,29,-2)
gc.SetFont(gc.CreateFont(wx.Font(10,wx.FONTFAMILY_DEFAULT,wx.FONTSTYLE_NORMAL,wx.FONTWEIGHT_BOLD),wx.WHITE)) 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(self.title,x0+19,y0+4)
gc.DrawText(text, x0+153,y0+1) gc.DrawText(text, x0+133,y0+4)
gc.SetFont(gc.CreateFont(wx.Font(10,wx.FONTFAMILY_DEFAULT,wx.FONTSTYLE_NORMAL,wx.FONTWEIGHT_BOLD))) 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(self.title,x0+18,y0+3)
gc.DrawText(text, x0+152,y0+0) gc.DrawText(text, x0+132,y0+3)
if __name__ == '__main__': if __name__ == '__main__':
app = wx.App(False) app = wx.App(False)
main = PronterWindow() main = PronterWindow()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment