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