Merge pull request #201 from kliment/experimental

Merge experimental back into master
master
kliment 2012-03-29 11:18:37 -07:00
commit 05058c5bff
22 changed files with 3451 additions and 2035 deletions

View File

@ -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/

997
gcview.py Executable file
View File

@ -0,0 +1,997 @@
#!/usr/bin/python
import os
import math
import wx
from wx import glcanvas
import time
import threading
import pyglet
pyglet.options['shadow_window'] = False
pyglet.options['debug_gl'] = False
from pyglet.gl import *
import stltool
import threading
class GLPanel(wx.Panel):
'''A simple class for using OpenGL with wxPython.'''
def __init__(self, parent, id, pos=wx.DefaultPosition,
size=wx.DefaultSize, style=0):
# Forcing a no full repaint to stop flickering
style = style | wx.NO_FULL_REPAINT_ON_RESIZE
#call super function
super(GLPanel, self).__init__(parent, id, pos, size, style)
#init gl canvas data
self.GLinitialized = False
attribList = (glcanvas.WX_GL_RGBA, # RGBA
glcanvas.WX_GL_DOUBLEBUFFER, # Double Buffered
glcanvas.WX_GL_DEPTH_SIZE, 24) # 24 bit
# Create the canvas
self.sizer = wx.BoxSizer(wx.HORIZONTAL)
self.canvas = glcanvas.GLCanvas(self, attribList=attribList)
self.sizer.Add(self.canvas, 1, wx.EXPAND)
self.SetSizer(self.sizer)
#self.sizer.Fit(self)
self.Layout()
# bind events
self.canvas.Bind(wx.EVT_ERASE_BACKGROUND, self.processEraseBackgroundEvent)
self.canvas.Bind(wx.EVT_SIZE, self.processSizeEvent)
self.canvas.Bind(wx.EVT_PAINT, self.processPaintEvent)
#==========================================================================
# Canvas Proxy Methods
#==========================================================================
def GetGLExtents(self):
'''Get the extents of the OpenGL canvas.'''
return self.canvas.GetClientSize()
def SwapBuffers(self):
'''Swap the OpenGL buffers.'''
self.canvas.SwapBuffers()
#==========================================================================
# wxPython Window Handlers
#==========================================================================
def processEraseBackgroundEvent(self, event):
'''Process the erase background event.'''
pass # Do nothing, to avoid flashing on MSWin
def processSizeEvent(self, event):
'''Process the resize event.'''
if self.canvas.GetContext():
# Make sure the frame is shown before calling SetCurrent.
self.Show()
self.canvas.SetCurrent()
size = self.GetGLExtents()
self.winsize = (size.width, size.height)
self.width, self.height = size.width, size.height
self.OnReshape(size.width, size.height)
self.canvas.Refresh(False)
event.Skip()
def processPaintEvent(self, event):
'''Process the drawing event.'''
self.canvas.SetCurrent()
# This is a 'perfect' time to initialize OpenGL ... only if we need to
if not self.GLinitialized:
self.OnInitGL()
self.GLinitialized = True
self.OnDraw()
event.Skip()
def Destroy(self):
#clean up the pyglet OpenGL context
#self.pygletcontext.destroy()
#call the super method
super(wx.Panel, self).Destroy()
#==========================================================================
# GLFrame OpenGL Event Handlers
#==========================================================================
def OnInitGL(self):
'''Initialize OpenGL for use in the window.'''
#create a pyglet context for this panel
self.pmat = (GLdouble * 16)()
self.mvmat = (GLdouble * 16)()
self.pygletcontext = Context(current_context)
self.pygletcontext.set_current()
self.dist = 1000
self.vpmat = None
#normal gl init
glClearColor(0, 0, 0, 1)
glColor3f(1, 0, 0)
glEnable(GL_DEPTH_TEST)
glEnable(GL_CULL_FACE)
# Uncomment this line for a wireframe view
#glPolygonMode(GL_FRONT_AND_BACK, GL_LINE)
# Simple light setup. On Windows GL_LIGHT0 is enabled by default,
# but this is not the case on Linux or Mac, so remember to always
# include it.
glEnable(GL_LIGHTING)
glEnable(GL_LIGHT0)
glEnable(GL_LIGHT1)
# Define a simple function to create ctypes arrays of floats:
def vec(*args):
return (GLfloat * len(args))(*args)
glLightfv(GL_LIGHT0, GL_POSITION, vec(.5, .5, 1, 0))
glLightfv(GL_LIGHT0, GL_SPECULAR, vec(.5, .5, 1, 1))
glLightfv(GL_LIGHT0, GL_DIFFUSE, vec(1, 1, 1, 1))
glLightfv(GL_LIGHT1, GL_POSITION, vec(1, 0, .5, 0))
glLightfv(GL_LIGHT1, GL_DIFFUSE, vec(.5, .5, .5, 1))
glLightfv(GL_LIGHT1, GL_SPECULAR, vec(1, 1, 1, 1))
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, vec(0.5, 0, 0.3, 1))
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, vec(1, 1, 1, 1))
glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 50)
glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, vec(0, 0.1, 0, 0.9))
#create objects to draw
#self.create_objects()
def OnReshape(self, width, height):
'''Reshape the OpenGL viewport based on the dimensions of the window.'''
if not self.GLinitialized:
self.OnInitGL()
self.GLinitialized = True
self.pmat = (GLdouble * 16)()
self.mvmat = (GLdouble * 16)()
glViewport(0, 0, width, height)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(60., width / float(height), .1, 1000.)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
#pyglet stuff
self.vpmat = (GLint * 4)(0, 0, *list(self.GetClientSize()))
glGetDoublev(GL_PROJECTION_MATRIX, self.pmat)
glGetDoublev(GL_MODELVIEW_MATRIX, self.mvmat)
#glMatrixMode(GL_PROJECTION)
# Wrap text to the width of the window
if self.GLinitialized:
self.pygletcontext.set_current()
self.update_object_resize()
def OnDraw(self, *args, **kwargs):
"""Draw the window."""
#clear the context
self.canvas.SetCurrent()
self.pygletcontext.set_current()
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
#draw objects
self.draw_objects()
#update screen
self.SwapBuffers()
#==========================================================================
# To be implemented by a sub class
#==========================================================================
def create_objects(self):
'''create opengl objects when opengl is initialized'''
pass
def update_object_resize(self):
'''called when the window recieves only if opengl is initialized'''
pass
def draw_objects(self):
'''called in the middle of ondraw after the buffer has been cleared'''
pass
def _dist(dist):
"""return axis length, or 0 if None"""
if dist is None:
return 0
else:
return float(dist)
class gcpoint(object):
"""gcode point
stub for first line"""
def __init__(self, x=0,y=0,z=0,e=0):
self.x = x
self.y = y
self.z = z
self.e = e
self.length = 0
class gcline(object):
"""gcode move line
Once initialised,it knows its position, length and extrusion ratio
Returns lines into gcview batch()
"""
def __init__(self, x=None, y=None, z=None, e=None, f=None, prev_gcline=None, orgline = False):
if prev_gcline is None:
self.prev_gcline = gcpoint()
else:
self.prev_gcline = prev_gcline
if x is None:
self.x = self.prev_gcline.x
else:
self.x = float(x)
if y is None:
self.y = self.prev_gcline.y
else:
self.y = float(y)
if z is None:
self.z = self.prev_gcline.z
else:
self.z = float(z)
if e is None:
self.e = self.prev_gcline.e
else:
self.e = float(e)
self.f = f
self.orgline = orgline
self.calc_delta()
self.calc_len()
def __str__(self):
return u"line from %s,%s,%s to %s,%s,%s with extrusion ratio %s and feedrate %s\n%s" % (
self.prev_gcline.x,
self.prev_gcline.y,
self.prev_gcline.z,
self.x,
self.y,
self.z,
self.extrusion_ratio,
self.f,
self.orgline,
)
def calc_delta(self, prev_gcline=None):
if prev_gcline is None:
prev_gcline = self.prev_gcline
if self.prev_gcline is not None:
self.dx = self.x - prev_gcline.x
self.dy = self.y - prev_gcline.y
self.dz = self.z - prev_gcline.z
self.de = self.e - prev_gcline.e
else:
self.dx = self.x
self.dy = self.y
self.dz = self.z
self.de = self.e
def calc_len(self):
if self.dz != 0:
self.length = math.sqrt(self.dx**2 + self.dy**2 + self.dz**2)
else:
self.length = math.sqrt(self.dx**2 + self.dy**2)
if self.de:
self.extrusion_ratio = self.length / self.de
else:
self.extrusion_ratio = 0
def glline(self):
return [
self.prev_gcline.x,
self.prev_gcline.y,
self.prev_gcline.z,
self.x,
self.y,
self.z,
]
def glcolor(self, upper_limit = None, lower_limit = 0, max_feedrate = 0):
if self.extrusion_ratio == 0:
return [255,255,255,0,0,0]
else:
blue_color = 0
green_color = 0
if upper_limit is not None:
if self.extrusion_ratio <= lower_limit:
blue_color = 0
else:
blue_color = int ((self.extrusion_ratio - lower_limit) / (upper_limit - lower_limit) * 255)
else:
blue_color = 0
if max_feedrate > 0 and self.f > 0:
green_color = int((self.f/max_feedrate) * 255)
if green_color > 255:
green_color = 255
if green_color < 0:
green_color = 0
if blue_color > 255:
blue_color = 255
if blue_color < 0:
blue_color = 0
return[255,green_color,blue_color,128,green_color,blue_color/4]
def float_from_line(axe, line):
return float(line.split(axe)[1].split(" ")[0])
class gcThreadRenderer(threading.Thread):
def __init__(self, gcview, lines):
threading.Thread.__init__(self)
self.gcview = gcview
self.lines = lines
print "q init"
def run(self):
for line in self.lines:
layer_name = line.z
if line.z not in self.gcview.layers:
self.gcview.layers[line.z] = pyglet.graphics.Batch()
self.gcview.layerlist = self.gcview.layers.keys()
self.gcview.layerlist.sort()
self.gcview.layers[line.z].add(2, GL_LINES, None, ("v3f", line.glline()), ("c3B", line.glcolor(self.gcview.upper_limit, self.gcview.lower_limit, self.gcview.max_feedrate)))
self.gcview.t2 = time.time()
print "Rendered lines in %fs" % (self.gcview.t2-self.gcview.t1)
class gcview(object):
"""gcode visualiser
Holds opengl objects for all layers
"""
def __init__(self, lines, batch, w=0.5, h=0.5):
if len(lines) == 0:
return
print "Loading %s lines" % (len(lines))
#End pos of previous mode
self.prev = gcpoint()
# Correction for G92 moves
self.delta = [0, 0, 0, 0]
self.layers = {}
self.t0 = time.time()
self.lastf = 0
lines = [self.transform(i) for i in lines]
lines = [i for i in lines if i is not None]
self.t1 = time.time()
print "transformed %s lines in %fs" % (len(lines), self.t1- self.t0)
self.upper_limit = 0
self.lower_limit = None
self.max_feedrate = 0
for line in lines:
if line.extrusion_ratio and line.length > 0.005: #lines shorter than 0.003 can have large extrusion ratio
if line.extrusion_ratio > self.upper_limit:
self.upper_limit = line.extrusion_ratio
if self.lower_limit is None or line.extrusion_ratio < self.lower_limit:
self.lower_limit = line.extrusion_ratio
if line.f > self.max_feedrate:
self.max_feedrate = line.f
#print upper_limit, lower_limit
#self.render_gl(lines)
q = gcThreadRenderer(self, lines)
q.setDaemon(True)
q.start()
def transform(self, line):
"""transforms line of gcode into gcline object (or None if its not move)
Tracks coordinates across resets in self.delta
"""
orgline = line
line = line.split(";")[0]
cur = [None, None, None, None, None]
if len(line) > 0:
if "G92" in line:
#Recalculate delta on G92 (reset)
if("X" in line):
try:
self.delta[0] = float_from_line("X", line) + self.prev.x
except:
self.delta[0] = 0
if("Y" in line):
try:
self.delta[1] = float_from_line("Y", line) + self.prev.y
except:
self.delta[1] = 0
if("Z" in line):
try:
self.delta[2] = float_from_line("Z", line) + self.prev.z
except:
self.delta[2] = 0
if("E" in line):
try:
self.delta[3] = float_from_line("E", line) + self.prev.e
except:
self.delta[3] = 0
return None
if "G1" in line or "G0" in line:
#Create new gcline
if("X" in line):
cur[0] = float_from_line("X", line) + self.delta[0]
if("Y" in line):
cur[1] = float_from_line("Y", line) + self.delta[1]
if("Z" in line):
cur[2] = float_from_line("Z", line) + self.delta[2]
if("E" in line):
cur[3] = float_from_line("E", line) + self.delta[3]
if "F" in line:
cur[4] = float_from_line("F", line)
if cur == [None, None, None, None, None]:
return None
else:
#print cur
if cur[4] is None:
cur[4] = self.lastf
else:
self.lastf = cur[4]
r = gcline(x=cur[0], y=cur[1], z=cur[2],e=cur[3], f=cur[4], prev_gcline=self.prev, orgline=orgline)
self.prev = r
return r
return None
def delete(self):
#for i in self.vlists:
# i.delete()
#self.vlists = []
pass
def trackball(p1x, p1y, p2x, p2y, r):
TRACKBALLSIZE = r
#float a[3]; /* Axis of rotation */
#float phi; /* how much to rotate about axis */
#float p1[3], p2[3], d[3];
#float t;
if (p1x == p2x and p1y == p2y):
return [0.0, 0.0, 0.0, 1.0]
p1 = [p1x, p1y, project_to_sphere(TRACKBALLSIZE, p1x, p1y)]
p2 = [p2x, p2y, project_to_sphere(TRACKBALLSIZE, p2x, p2y)]
a = stltool.cross(p2, p1)
d = map(lambda x, y: x - y, p1, p2)
t = math.sqrt(sum(map(lambda x: x * x, d))) / (2.0 * TRACKBALLSIZE)
if (t > 1.0):
t = 1.0
if (t < -1.0):
t = -1.0
phi = 2.0 * math.asin(t)
return axis_to_quat(a, phi)
def vec(*args):
return (GLfloat * len(args))(*args)
def axis_to_quat(a, phi):
#print a, phi
lena = math.sqrt(sum(map(lambda x: x * x, a)))
q = map(lambda x: x * (1 / lena), a)
q = map(lambda x: x * math.sin(phi / 2.0), q)
q.append(math.cos(phi / 2.0))
return q
def build_rotmatrix(q):
m = (GLdouble * 16)()
m[0] = 1.0 - 2.0 * (q[1] * q[1] + q[2] * q[2])
m[1] = 2.0 * (q[0] * q[1] - q[2] * q[3])
m[2] = 2.0 * (q[2] * q[0] + q[1] * q[3])
m[3] = 0.0
m[4] = 2.0 * (q[0] * q[1] + q[2] * q[3])
m[5] = 1.0 - 2.0 * (q[2] * q[2] + q[0] * q[0])
m[6] = 2.0 * (q[1] * q[2] - q[0] * q[3])
m[7] = 0.0
m[8] = 2.0 * (q[2] * q[0] - q[1] * q[3])
m[9] = 2.0 * (q[1] * q[2] + q[0] * q[3])
m[10] = 1.0 - 2.0 * (q[1] * q[1] + q[0] * q[0])
m[11] = 0.0
m[12] = 0.0
m[13] = 0.0
m[14] = 0.0
m[15] = 1.0
return m
def project_to_sphere(r, x, y):
d = math.sqrt(x * x + y * y)
if (d < r * 0.70710678118654752440):
return math.sqrt(r * r - d * d)
else:
t = r / 1.41421356237309504880
return t * t / d
def mulquat(q1, rq):
return [q1[3] * rq[0] + q1[0] * rq[3] + q1[1] * rq[2] - q1[2] * rq[1],
q1[3] * rq[1] + q1[1] * rq[3] + q1[2] * rq[0] - q1[0] * rq[2],
q1[3] * rq[2] + q1[2] * rq[3] + q1[0] * rq[1] - q1[1] * rq[0],
q1[3] * rq[3] - q1[0] * rq[0] - q1[1] * rq[1] - q1[2] * rq[2]]
class TestGlPanel(GLPanel):
def __init__(self, parent, size, id=wx.ID_ANY):
super(TestGlPanel, self).__init__(parent, id, wx.DefaultPosition, size, 0)
self.batches = []
self.rot = 0
self.canvas.Bind(wx.EVT_MOUSE_EVENTS, self.move)
self.canvas.Bind(wx.EVT_LEFT_DCLICK, self.double)
self.initialized = 1
self.canvas.Bind(wx.EVT_MOUSEWHEEL, self.wheel)
self.parent = parent
self.initpos = None
self.dist = 200
self.bedsize = [200, 200]
self.transv = [0, 0, -self.dist]
self.basequat = [0, 0, 0, 1]
wx.CallAfter(self.forceresize)
self.mousepos = [0, 0]
def double(self, event):
p = event.GetPositionTuple()
sz = self.GetClientSize()
v = map(lambda m, w, b: b * m / w, p, sz, self.bedsize)
v[1] = self.bedsize[1] - v[1]
v += [300]
print v
self.add_file("../prusa/metric-prusa/x-end-idler.stl", v)
def forceresize(self):
self.SetClientSize((self.GetClientSize()[0], self.GetClientSize()[1] + 1))
self.SetClientSize((self.GetClientSize()[0], self.GetClientSize()[1] - 1))
threading.Thread(target=self.update).start()
self.initialized = 0
def move_shape(self, delta):
"""moves shape (selected in l, which is list ListBox of shapes)
by an offset specified in tuple delta.
Positive numbers move to (rigt, down)"""
name = self.parent.l.GetSelection()
if name == wx.NOT_FOUND:
return False
name = self.parent.l.GetString(name)
model = self.parent.models[name]
model.offsets = [
model.offsets[0] + delta[0],
model.offsets[1] + delta[1],
model.offsets[2]
]
self.Refresh()
return True
def move(self, event):
"""react to mouse actions:
no mouse: show red mousedrop
LMB: move active object,
with shift rotate viewport
RMB: nothing
with shift move viewport
"""
if event.Dragging() and event.LeftIsDown():
if self.initpos == None:
self.initpos = event.GetPositionTuple()
else:
if not event.ShiftDown():
currentpos = event.GetPositionTuple()
delta = (
(currentpos[0] - self.initpos[0]),
-(currentpos[1] - self.initpos[1])
)
self.move_shape(delta)
self.initpos = None
return
#print self.initpos
p1 = self.initpos
self.initpos = None
p2 = event.GetPositionTuple()
sz = self.GetClientSize()
p1x = (float(p1[0]) - sz[0] / 2) / (sz[0] / 2)
p1y = -(float(p1[1]) - sz[1] / 2) / (sz[1] / 2)
p2x = (float(p2[0]) - sz[0] / 2) / (sz[0] / 2)
p2y = -(float(p2[1]) - sz[1] / 2) / (sz[1] / 2)
#print p1x,p1y,p2x,p2y
quat = trackball(p1x, p1y, p2x, p2y, -self.transv[2] / 250.0)
if self.rot:
self.basequat = mulquat(self.basequat, quat)
#else:
glGetDoublev(GL_MODELVIEW_MATRIX, self.mvmat)
#self.basequat = quatx
mat = build_rotmatrix(self.basequat)
glLoadIdentity()
glTranslatef(self.transv[0], self.transv[1], 0)
glTranslatef(0, 0, self.transv[2])
glMultMatrixd(mat)
glGetDoublev(GL_MODELVIEW_MATRIX, self.mvmat)
self.rot = 1
elif event.ButtonUp(wx.MOUSE_BTN_LEFT):
if self.initpos is not None:
self.initpos = None
elif event.ButtonUp(wx.MOUSE_BTN_RIGHT):
if self.initpos is not None:
self.initpos = None
elif event.Dragging() and event.RightIsDown() and event.ShiftDown():
if self.initpos is None:
self.initpos = event.GetPositionTuple()
else:
p1 = self.initpos
p2 = event.GetPositionTuple()
sz = self.GetClientSize()
p1 = list(p1)
p2 = list(p2)
p1[1] *= -1
p2[1] *= -1
self.transv = map(lambda x, y, z, c: c - self.dist * (x - y) / z, list(p1) + [0], list(p2) + [0], list(sz) + [1], self.transv)
glLoadIdentity()
glTranslatef(self.transv[0], self.transv[1], 0)
glTranslatef(0, 0, self.transv[2])
if(self.rot):
glMultMatrixd(build_rotmatrix(self.basequat))
glGetDoublev(GL_MODELVIEW_MATRIX, self.mvmat)
self.rot = 1
self.initpos = None
else:
#mouse is moving without a button press
p = event.GetPositionTuple()
sz = self.GetClientSize()
v = map(lambda m, w, b: b * m / w, p, sz, self.bedsize)
v[1] = self.bedsize[1] - v[1]
self.mousepos = v
def rotate_shape(self, angle):
"""rotates acive shape
positive angle is clockwise
"""
name = self.parent.l.GetSelection()
if name == wx.NOT_FOUND:
return False
name = self.parent.l.GetString(name)
model = self.parent.models[name]
model.rot += angle
def wheel(self, event):
"""react to mouse wheel actions:
rotate object
with shift zoom viewport
"""
z = event.GetWheelRotation()
angle = 10
if not event.ShiftDown():
i = self.parent.l.GetSelection()
if i < 0:
try:
self.parent.setlayerindex(z)
except:
pass
return
if z > 0:
self.rotate_shape(angle / 2)
else:
self.rotate_shape(-angle / 2)
return
if z > 0:
self.transv[2] += angle
else:
self.transv[2] -= angle
glLoadIdentity()
glTranslatef(*self.transv)
if(self.rot):
glMultMatrixd(build_rotmatrix(self.basequat))
glGetDoublev(GL_MODELVIEW_MATRIX, self.mvmat)
self.rot = 1
def keypress(self, event):
"""gets keypress events and moves/rotates acive shape"""
keycode = event.GetKeyCode()
print keycode
step = 5
angle = 18
if event.ControlDown():
step = 1
angle = 1
#h
if keycode == 72:
self.move_shape((-step, 0))
#l
if keycode == 76:
self.move_shape((step, 0))
#j
if keycode == 75:
self.move_shape((0, step))
#k
if keycode == 74:
self.move_shape((0, -step))
#[
if keycode == 91:
self.rotate_shape(-angle)
#]
if keycode == 93:
self.rotate_shape(angle)
event.Skip()
def update(self):
while(1):
dt = 0.05
time.sleep(0.05)
try:
wx.CallAfter(self.Refresh)
except:
return
def anim(self, obj):
g = 50 * 9.8
v = 20
dt = 0.05
basepos = obj.offsets[2]
obj.offsets[2] += obj.animoffset
while obj.offsets[2] > -1:
time.sleep(dt)
obj.offsets[2] -= v * dt
v += g * dt
if(obj.offsets[2] < 0):
obj.scale[2] *= 1 - 3 * dt
#return
v = v / 4
while obj.offsets[2] < basepos:
time.sleep(dt)
obj.offsets[2] += v * dt
v -= g * dt
obj.scale[2] *= 1 + 5 * dt
obj.scale[2] = 1.0
def create_objects(self):
'''create opengl objects when opengl is initialized'''
self.initialized = 1
wx.CallAfter(self.Refresh)
def drawmodel(self, m, n):
batch = pyglet.graphics.Batch()
stl = stlview(m.facets, batch=batch)
m.batch = batch
m.animoffset = 300
#print m
#threading.Thread(target = self.anim, args = (m, )).start()
wx.CallAfter(self.Refresh)
def update_object_resize(self):
'''called when the window recieves only if opengl is initialized'''
pass
def draw_objects(self):
'''called in the middle of ondraw after the buffer has been cleared'''
if self.vpmat is None:
return
if not self.initialized:
self.create_objects()
#glLoadIdentity()
#print list(self.pmat)
if self.rot == 1:
glLoadIdentity()
glMultMatrixd(self.mvmat)
else:
glLoadIdentity()
glTranslatef(*self.transv)
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, vec(0.2, 0.2, 0.2, 1))
glBegin(GL_LINES)
glNormal3f(0, 0, 1)
rows = 10
cols = 10
zheight = 50
for i in xrange(-rows, rows + 1):
if i % 5 == 0:
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, vec(0.6, 0.6, 0.6, 1))
else:
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, vec(0.2, 0.2, 0.2, 1))
glVertex3f(10 * -cols, 10 * i, 0)
glVertex3f(10 * cols, 10 * i, 0)
for i in xrange(-cols, cols + 1):
if i % 5 == 0:
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, vec(0.6, 0.6, 0.6, 1))
else:
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, vec(0.2, 0.2, 0.2, 1))
glVertex3f(10 * i, 10 * -rows, 0)
glVertex3f(10 * i, 10 * rows, 0)
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, vec(0.6, 0.6, 0.6, 1))
glVertex3f(10 * -cols, 10 * -rows, 0)
glVertex3f(10 * -cols, 10 * -rows, zheight)
glVertex3f(10 * cols, 10 * rows, 0)
glVertex3f(10 * cols, 10 * rows, zheight)
glVertex3f(10 * cols, 10 * -rows, 0)
glVertex3f(10 * cols, 10 * -rows, zheight)
glVertex3f(10 * -cols, 10 * rows, 0)
glVertex3f(10 * -cols, 10 * rows, zheight)
glVertex3f(10 * -cols, 10 * rows, zheight)
glVertex3f(10 * cols, 10 * rows, zheight)
glVertex3f(10 * cols, 10 * rows, zheight)
glVertex3f(10 * cols, 10 * -rows, zheight)
glVertex3f(10 * cols, 10 * -rows, zheight)
glVertex3f(10 * -cols, 10 * -rows, zheight)
glVertex3f(10 * -cols, 10 * -rows, zheight)
glVertex3f(10 * -cols, 10 * rows, zheight)
glEnd()
glPushMatrix()
glTranslatef(self.mousepos[0] - self.bedsize[0] / 2, self.mousepos[1] - self.bedsize[1] / 2, 0)
glBegin(GL_TRIANGLES)
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, vec(1, 0, 0, 1))
glNormal3f(0, 0, 1)
glVertex3f(2, 2, 0)
glVertex3f(-2, 2, 0)
glVertex3f(-2, -2, 0)
glVertex3f(2, -2, 0)
glVertex3f(2, 2, 0)
glVertex3f(-2, -2, 0)
glEnd()
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, vec(0.3, 0.7, 0.5, 1))
#glTranslatef(0, 40, 0)
glPopMatrix()
glPushMatrix()
glTranslatef(-100, -100, 0)
glEnable(GL_LINE_SMOOTH)
glEnable(GL_BLEND)
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
glHint (GL_LINE_SMOOTH_HINT, GL_NICEST)
glLineWidth (1.5)
for i in self.parent.models.values():
glPushMatrix()
glTranslatef(*(i.offsets))
glRotatef(i.rot, 0.0, 0.0, 1.0)
glScalef(*i.scale)
#glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, vec(0.93, 0.37, 0.25, 1))
glEnable(GL_COLOR_MATERIAL)
if i.curlayer == -1:
# curlayer == -1 means we are over the top.
glLineWidth (0.8)
[i.gc.layers[j].draw() for j in i.gc.layerlist]
else:
glLineWidth (0.6)
tmpindex = i.gc.layerlist.index(i.curlayer)
if tmpindex >= 5:
thin_layer = i.gc.layerlist[tmpindex - 5]
[i.gc.layers[j].draw() for j in i.gc.layerlist if j <= thin_layer]
if tmpindex > 4:
glLineWidth (0.9)
i.gc.layers[i.gc.layerlist[tmpindex - 4]].draw()
if tmpindex > 3:
glLineWidth (1.1)
i.gc.layers[i.gc.layerlist[tmpindex - 3]].draw()
if tmpindex > 2:
glLineWidth (1.3)
i.gc.layers[i.gc.layerlist[tmpindex - 2]].draw()
if tmpindex > 1:
glLineWidth (2.2)
i.gc.layers[i.gc.layerlist[tmpindex - 1]].draw()
glLineWidth (3.5)
i.gc.layers[i.curlayer].draw()
glLineWidth (1.5)
glDisable(GL_COLOR_MATERIAL)
glPopMatrix()
glPopMatrix()
#print "drawn batch"
class GCFrame(wx.Frame):
'''A simple class for using OpenGL with wxPython.'''
def __init__(self, parent, ID, title, pos=wx.DefaultPosition,
size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE):
super(GCFrame, self).__init__(parent, ID, title, pos, (size[0] + 150, size[1]), style)
class d:
def GetSelection(self):
return wx.NOT_FOUND
self.p = self
m = d()
m.offsets = [0, 0, 0]
m.rot = 0
m.curlayer = -1
m.scale = [1.0, 1.0, 1.0]
m.batch = pyglet.graphics.Batch()
m.gc = gcview([], batch=m.batch)
self.models = {"GCODE": m}
self.l = d()
self.modelindex = 0
self.GLPanel1 = TestGlPanel(self, size)
def addfile(self, gcode=[]):
self.models["GCODE"].gc.delete()
self.models["GCODE"].gc = gcview(gcode, batch=self.models["GCODE"].batch)
self.setlayerindex(None)
def clear(self):
self.models["GCODE"].gc.delete()
self.models["GCODE"].gc = gcview([], batch=self.models["GCODE"].batch)
def Show(self, arg=True):
wx.Frame.Show(self, arg)
self.SetClientSize((self.GetClientSize()[0], self.GetClientSize()[1] + 1))
self.SetClientSize((self.GetClientSize()[0], self.GetClientSize()[1] - 1))
self.Refresh()
wx.FutureCall(500, self.GLPanel1.forceresize)
#threading.Thread(target = self.update).start()
#self.initialized = 0
def setlayerindex(self, z):
m = self.models["GCODE"]
try:
mlk = m.gc.layerlist
except:
mlk = []
if z is None:
self.modelindex = -1
elif z > 0:
if self.modelindex < len(mlk) - 1:
if self.modelindex > -1:
self.modelindex += 1
else:
self.modelindex = -1
elif z < 0:
if self.modelindex > 0:
self.modelindex -= 1
elif self.modelindex == -1:
self.modelindex = len(mlk)
if self.modelindex >= 0:
m.curlayer = mlk[self.modelindex]
wx.CallAfter(self.SetTitle, "Gcode view, shift to move. Layer %d/%d, Z = %f" % (self.modelindex, len(mlk), m.curlayer))
else:
m.curlayer = -1
wx.CallAfter(self.SetTitle, "Gcode view, shift to move view, mousewheel to set layer")
def main():
app = wx.App(redirect=False)
frame = GCFrame(None, wx.ID_ANY, 'Gcode view, shift to move view, mousewheel to set layer', size=(400, 400))
import sys
for filename in sys.argv:
if ".gcode" in filename:
frame.addfile(list(open(filename)))
elif ".stl" in filename:
#TODO: add stl here
pass
#frame = wx.Frame(None, -1, "GL Window", size=(400, 400))
#panel = TestGlPanel(frame, size=(300,300))
frame.Show(True)
app.MainLoop()
app.Destroy()
if __name__ == "__main__":
#import cProfile
#print cProfile.run("main()")
main()

267
graph.py Normal file
View File

@ -0,0 +1,267 @@
#!/usr/bin/python
# This file is part of the Printrun suite.
#
# Printrun is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Printrun is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Printrun. If not, see <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)

16
gviz.py
View File

@ -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):

Binary file not shown.

View File

@ -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:134
msgid ""
"Note!!! You have specified custom buttons in both custombtn.txt and ."
"pronsolerc"
msgstr ""
"Achtung! Sie haben benutzerdefinierte Buttons in custombtn.txt und ."
"pronsolerc angegeben"
#: pronterface.py:120
msgid "Ignoring custombtn.txt. Remove all current buttons to revert to custombtn.txt"
msgstr "Ignoriere custombtn.txt. Alle aktuellen Buttons entfernen um wieder zu custombtn.txt zurückzukehren"
#: pronterface.py:135
msgid ""
"Ignoring custombtn.txt. Remove all current buttons to revert to custombtn.txt"
msgstr ""
"Ignoriere custombtn.txt. Alle aktuellen Buttons entfernen um wieder zu "
"custombtn.txt zurückzukehren"
#: pronterface.py:148
#: pronterface.py:499
#: pronterface.py:1319
#: pronterface.py:1373
#: pronterface.py:1495
#: pronterface.py:1529
#: pronterface.py:1544
#: pronterface.py:163 pronterface.py:514 pronterface.py:1333
#: pronterface.py:1387 pronterface.py:1509 pronterface.py:1543
#: pronterface.py:1558
msgid "Print"
msgstr "Drucken"
#: pronterface.py:152
#: pronterface.py:167
msgid "Printer is now online."
msgstr "Drucker ist jetzt Online."
#: pronterface.py:212
msgid "Setting hotend temperature to "
msgstr "Setze Hotend Temperatur auf "
#: pronterface.py:168
msgid "Disconnect"
msgstr "Trennen"
#: pronterface.py:212
#: pronterface.py:248
msgid " degrees Celsius."
msgstr " Grad Celsius."
#: pronterface.py:227
msgid "Setting hotend temperature to %f degrees Celsius."
msgstr "Setze Hotend Temperatur auf %f Grad Celsius."
#: pronterface.py:231
#: pronterface.py:267
#: pronterface.py:325
#: pronterface.py:246 pronterface.py:282 pronterface.py:340
msgid "Printer is not online."
msgstr "Drucker ist nicht online."
#: pronterface.py:233
msgid "You cannot set negative temperatures. To turn the hotend off entirely, set its temperature to 0."
msgstr "Sie können keine negativen Temperaturen einstellen. Um das Hotend ganz auszuschalten, Temperatur auf 0 setzen."
#: pronterface.py:248
msgid "Setting bed temperature to "
msgstr "Setze Heizbett Temperatur auf"
msgid ""
"You cannot set negative temperatures. To turn the hotend off entirely, set "
"its temperature to 0."
msgstr ""
"Sie können keine negativen Temperaturen einstellen. Um das Hotend ganz "
"auszuschalten, Temperatur auf 0 setzen."
#: pronterface.py:269
msgid "You cannot set negative temperatures. To turn the bed off entirely, set its temperature to 0."
msgstr "Sie können keine negativen Temperaturen einstellen. Um das Heizbett ganz auszuschalten, Temperatur auf 0 setzen."
#: pronterface.py:250
msgid "You must enter a temperature. (%s)"
msgstr "Sie müssen eine Temperatur eingeben. (%s)"
#: pronterface.py:271
#: pronterface.py:263
msgid "Setting bed temperature to %f degrees Celsius."
msgstr "Setze Heizbett Temperatur auf %f Grad Celsius."
#: pronterface.py:284
msgid ""
"You cannot set negative temperatures. To turn the bed off entirely, set its "
"temperature to 0."
msgstr ""
"Sie können keine negativen Temperaturen einstellen. Um das Heizbett ganz "
"auszuschalten, Temperatur auf 0 setzen."
#: pronterface.py:286
msgid "You must enter a temperature."
msgstr "Sie müssen eine Temperatur eingeben."
#: pronterface.py:286
#: pronterface.py:301
msgid "Do you want to erase the macro?"
msgstr "Möchten Sie das Makro löschen?"
#: pronterface.py:290
#: pronterface.py:305
msgid "Cancelled."
msgstr "Abgebrochen."
#: pronterface.py:331
#: pronterface.py:346
msgid " Opens file"
msgstr " Öffnet eine Datei"
#: pronterface.py:331
#: pronterface.py:346
msgid "&Open..."
msgstr "&Öffnen..."
#: pronterface.py:332
#: pronterface.py:347
msgid " Edit open file"
msgstr " Offene Datei bearbeiten"
#: pronterface.py:332
#: pronterface.py:347
msgid "&Edit..."
msgstr "&Bearbeiten..."
#: pronterface.py:333
#: pronterface.py:348
msgid " Clear output console"
msgstr " Ausgabe Konsole leeren"
#: pronterface.py:333
#: pronterface.py:348
msgid "Clear console"
msgstr "Konsole leeren"
#: pronterface.py:334
#: pronterface.py:349
msgid " Project slices"
msgstr " Projekt Slices"
#: pronterface.py:334
#: pronterface.py:349
msgid "Projector"
msgstr "Projektor"
#: pronterface.py:335
#: pronterface.py:350
msgid " Closes the Window"
msgstr " Schliesst das Fenster"
#: pronterface.py:335
#: pronterface.py:350
msgid "E&xit"
msgstr "&Verlassen"
#: pronterface.py:336
#: pronterface.py:351
msgid "&File"
msgstr "&Datei"
#: pronterface.py:341
#: pronterface.py:356
msgid "&Macros"
msgstr "&Makros"
#: pronterface.py:342
#: pronterface.py:357
msgid "<&New...>"
msgstr "<&Neu...>"
#: pronterface.py:343
#: pronterface.py:358
msgid " Options dialog"
msgstr " Optionen Dialog"
#: pronterface.py:343
#: pronterface.py:358
msgid "&Options"
msgstr "&Optionen"
#: pronterface.py:345
#: pronterface.py:360
msgid " Adjust slicing settings"
msgstr " Slicing Einstellungen anpassen"
#: pronterface.py:345
#: pronterface.py:360
msgid "Slicing Settings"
msgstr "Slicing Einstellungen"
#: pronterface.py:352
#: pronterface.py:367
msgid "&Settings"
msgstr "&Einstellungen"
#: pronterface.py:368
#: pronterface.py:383
msgid "Enter macro name"
msgstr "Makro Name eingeben"
#: pronterface.py:371
#: pronterface.py:386
msgid "Macro name:"
msgstr "Makro Name:"
#: pronterface.py:374
#: pronterface.py:389
msgid "Ok"
msgstr "Ok"
#: pronterface.py:378
#: pronterface.py:1330
#: pronterface.py:1587
#: pronterface.py:393 pronterface.py:1344 pronterface.py:1601
msgid "Cancel"
msgstr "Abbrechen"
#: pronterface.py:396
msgid "' is being used by built-in command"
msgstr "' wird durch eingebautes Kommando genutzt"
#: pronterface.py:411
msgid "Name '%s' is being used by built-in command"
msgstr "Name '%s' wird durch eingebautes Kommando genutzt"
#: pronterface.py:396
msgid "Name '"
msgstr "Name '"
#: pronterface.py:399
#: pronterface.py:414
msgid "Macro name may contain only alphanumeric symbols and underscores"
msgstr "Makro Name darf nur alphanumerische Zeichen und Unterstriche enthalten"
#: pronterface.py:448
#: pronterface.py:463
msgid "Port"
msgstr "Port:"
#: pronterface.py:467
#: pronterface.py:482
msgid "Connect"
msgstr "Verbinden"
#: pronterface.py:469
#: pronterface.py:484
msgid "Connect to the printer"
msgstr "Drucker Verbinden"
#: pronterface.py:471
#: pronterface.py:486
msgid "Reset"
msgstr "Zurücksetzen"
#: pronterface.py:474
#: pronterface.py:751
#: pronterface.py:489 pronterface.py:766
msgid "Mini mode"
msgstr "Mini-Modus"
#: pronterface.py:478
#: pronterface.py:493
msgid "Monitor Printer"
msgstr "Drucker überwachen"
#: pronterface.py:488
#: pronterface.py:503
msgid "Load file"
msgstr "Datei laden"
#: pronterface.py:491
#: pronterface.py:506
msgid "Compose"
msgstr "Zusammenstellen"
#: pronterface.py:495
#: pronterface.py:510
msgid "SD"
msgstr "SD"
#: pronterface.py:503
#: pronterface.py:1374
#: pronterface.py:1419
#: pronterface.py:1469
#: pronterface.py:1494
#: pronterface.py:1528
#: pronterface.py:1543
#: pronterface.py:518 pronterface.py:1388 pronterface.py:1433
#: pronterface.py:1483 pronterface.py:1508 pronterface.py:1542
#: pronterface.py:1557
msgid "Pause"
msgstr "Pause"
#: pronterface.py:516
#: pronterface.py:531
msgid "Send"
msgstr "Senden"
#: pronterface.py:524
#: pronterface.py:625
#: pronterface.py:539 pronterface.py:640
msgid "mm/min"
msgstr "mm/min"
#: pronterface.py:526
#: pronterface.py:541
msgid "XY:"
msgstr "XY:"
#: pronterface.py:528
#: pronterface.py:543
msgid "Z:"
msgstr "Z:"
#: pronterface.py:551
#: pronterface.py:632
#: pronterface.py:566 pronterface.py:647
msgid "Heater:"
msgstr "Heizelement:"
#: pronterface.py:554
#: pronterface.py:574
#: pronterface.py:569 pronterface.py:589
msgid "Off"
msgstr "Aus"
#: pronterface.py:566
#: pronterface.py:586
#: pronterface.py:581 pronterface.py:601
msgid "Set"
msgstr "Ein"
#: pronterface.py:571
#: pronterface.py:634
#: pronterface.py:586 pronterface.py:649
msgid "Bed:"
msgstr "Heizbett:"
#: pronterface.py:619
#: pronterface.py:634
msgid "mm"
msgstr "mm"
#: pronterface.py:677
#: pronterface.py:1182
#: pronterface.py:1413
#: pronterface.py:692 pronterface.py:1196 pronterface.py:1427
msgid "Not connected to printer."
msgstr "Keine Verbindung zum Drucker."
#: pronterface.py:706
#: pronterface.py:721
msgid "SD Upload"
msgstr "SD Laden"
#: pronterface.py:710
#: pronterface.py:725
msgid "SD Print"
msgstr "SD Drucken"
#: pronterface.py:758
#: pronterface.py:773
msgid "Full mode"
msgstr "Voll-Modus"
#: pronterface.py:783
#: pronterface.py:798
msgid "Execute command: "
msgstr "Kommando ausführen:"
#: pronterface.py:794
#: pronterface.py:809
msgid "click to add new custom button"
msgstr "Individuellen Button hinzufügen"
#: pronterface.py:813
msgid "Defines custom button. Usage: button <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"
"Der Druck verläuft von %f mm bis %f mm in X\n"
"und ist %f mm breit\n"
#: pronterface.py:1383
#: pronterface.py:1384
msgid "mm wide\n"
msgstr "mm breit\n"
#: pronterface.py:1383
#: pronterface.py:1384
#: pronterface.py:1385
msgid "mm to"
msgstr "mm bis"
#: pronterface.py:1383
#: pronterface.py:1384
#: pronterface.py:1385
msgid "the print goes from"
msgstr "Der Druck verläuft von"
#: pronterface.py:1384
#: pronterface.py:1398
msgid ""
"mm in Y\n"
"and is"
"the print goes from %f mm to %f mm in Y\n"
"and is %f mm wide\n"
msgstr ""
"mm in Y\n"
"und ist"
"Der Druck verläuft von %f mm bis %f mm in Y\n"
"und ist %f mm breit\n"
#: pronterface.py:1385
msgid "mm high\n"
msgstr "mm hoch\n"
#: pronterface.py:1385
#: pronterface.py:1399
msgid ""
"mm in Z\n"
"and is"
"the print goes from %f mm to %f mm in Z\n"
"and is %f mm high\n"
msgstr ""
"mm in Z\n"
"und ist"
"Der Druck verläuft von %f mm bis %f mm in Z\n"
"und ist %f mm hoch\n"
#: pronterface.py:1386
#: pronterface.py:1400
msgid "Estimated duration (pessimistic): "
msgstr "Geschätze Dauer (pessimistisch):"
msgstr "Geschätze Dauer (pessimistisch): "
#: pronterface.py:1410
#: pronterface.py:1424
msgid "No file loaded. Please use load first."
msgstr "Keine Datei geladen. Benutze zuerst laden."
#: pronterface.py:1421
#: pronterface.py:1435
msgid "Restart"
msgstr "Neustart"
#: pronterface.py:1425
#: pronterface.py:1439
msgid "File upload complete"
msgstr "Datei Upload komplett"
#: pronterface.py:1444
#: pronterface.py:1458
msgid "Pick SD filename"
msgstr "Wähle SD Dateiname"
#: pronterface.py:1452
#: pronterface.py:1466
msgid "Paused."
msgstr "Pausiert."
#: pronterface.py:1462
#: pronterface.py:1476
msgid "Resume"
msgstr "Fortsetzen"
#: pronterface.py:1478
#: pronterface.py:1492
msgid "Connecting..."
msgstr "Verbinde..."
#: pronterface.py:1509
#: pronterface.py:1523
msgid "Disconnected."
msgstr "Getrennt."
#: pronterface.py:1536
#: pronterface.py:1550
msgid "Reset."
msgstr "Zurücksetzen."
#: pronterface.py:1537
#: pronterface.py:1551
msgid "Are you sure you want to reset the printer?"
msgstr "Möchten Sie den Drucker wirklich zurücksetzen?"
#: pronterface.py:1537
#: pronterface.py:1551
msgid "Reset?"
msgstr "Zurücksetzen?"
#: pronterface.py:1583
#: pronterface.py:1597
msgid "Save"
msgstr "Speichern"
#: pronterface.py:1639
#: pronterface.py:1653
msgid "Edit settings"
msgstr "Einstellungen bearbeiten"
#: pronterface.py:1641
#: pronterface.py:1655
msgid "Defaults"
msgstr "Standardwerte"
#: pronterface.py:1670
#: pronterface.py:1684
msgid "Custom button"
msgstr "Individueller Button"
#: pronterface.py:1675
#: pronterface.py:1689
msgid "Button title"
msgstr "Button Titel"
#: pronterface.py:1678
#: pronterface.py:1692
msgid "Command"
msgstr "Kommando"
#: pronterface.py:1687
#: pronterface.py:1701
msgid "Color"
msgstr "Farbe"
#~ msgid "Communications Speed (default: 115200)"
#~ msgstr "Kommunikationsgeschwindigkeit (Vorgabe: 115200)"
#~ msgid "Heated Build Platform temp for ABS (default: 110 deg C)"
#~ msgstr "Heizbett Temp. für ABS (Vorgabe: 110 Grad Celsius)"
#~ msgid "Heated Build Platform temp for PLA (default: 60 deg C)"
#~ msgstr "Heizbett Temp. für PLA (Vorgabe: 60 Grad Celsius)"
#~ msgid "Feedrate for Control Panel Moves in Extrusions (default: 300mm/min)"
#~ msgstr "Vorschub Control Panel Bewegungen Extrudierung (Vorgabe: 300mm/min)"
#~ msgid "Port used to communicate with printer"
#~ msgstr "Port für Druckerkommunikation"
#~ msgid ""
#~ "Slice command\n"
#~ " default:\n"
#~ " python skeinforge/skeinforge_application/skeinforge_utilities/"
#~ "skeinforge_craft.py $s)"
#~ msgstr ""
#~ "Kommando Slicing\n"
#~ " Vorgabe:\n"
#~ " python skeinforge/skeinforge_application/skeinforge_utilities/"
#~ "skeinforge_craft.py $s)"
#~ msgid ""
#~ "Slice settings command\n"
#~ " default:\n"
#~ " python skeinforge/skeinforge_application/skeinforge.py"
#~ msgstr ""
#~ "Kommando Slicing Einstellungen\n"
#~ " Vorgabe:\n"
#~ " python skeinforge/skeinforge_application/skeinforge.py"
#~ msgid "Extruder temp for ABS (default: 230 deg C)"
#~ msgstr "Extruder Temperatur für ABS (Vorgabe: 230 Grad Celsius)"
#~ msgid "Extruder temp for PLA (default: 185 deg C)"
#~ msgstr "Extruder Temperatur für PLA (Vorgabe: 185 Grad Celsius)"
#~ msgid "Feedrate for Control Panel Moves in X and Y (default: 3000mm/min)"
#~ msgstr "Vorschub Control Panel Bewegungen X und Y (Vorgabe: 3000mm/min)"
#~ msgid "Feedrate for Control Panel Moves in Z (default: 200mm/min)"
#~ msgstr "Vorschub Control Panel Bewegungen Z (Vorgabe: 200mm/min)"

View File

@ -1,572 +0,0 @@
# Pronterface Message Catalog Template
# Copyright (C) 2011 Jonathan Marsden
# Jonathan Marsden <jmarsden@fastmail.fm>, 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: Pronterface jm1\n"
"POT-Creation-Date: 2011-08-06 13:27+PDT\n"
"PO-Revision-Date: 2011-11-16 16:53+0100\n"
"Last-Translator: Cyril Laguilhon-Debat <c.laguilhon.debat@gmail.com>\n"
"Language-Team: FR <c.laguilhon.debat@gmail.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"
#: pronterface.py:15
msgid "WX is not installed. This program requires WX to run."
msgstr "wxWidgets n'est pas installé. Ce programme nécessite la librairie wxWidgets pour fonctionner."
#: pronterface.py:67
msgid "Printer Interface"
msgstr "Interface imprimante"
#: pronterface.py:80
msgid "Motors off"
msgstr "Arrêter les moteurs"
#: pronterface.py:81
msgid "Check temp"
msgstr "Lire les températures"
#: pronterface.py:82
msgid "Extrude"
msgstr "Extruder"
#: pronterface.py:83
msgid "Reverse"
msgstr "Inverser"
#: pronterface.py:99
msgid ""
"# I moved all your custom buttons into .pronsolerc.\n"
"# Please don't add them here any more.\n"
"# Backup of your old buttons is in custombtn.old\n"
msgstr ""
"# I moved all your custom buttons into .pronsolerc.\n"
"# Please don't add them here any more.\n"
"# Backup of your old buttons is in custombtn.old\n"
#: pronterface.py:104
msgid "Note!!! You have specified custom buttons in both custombtn.txt and .pronsolerc"
msgstr "Remarque! Vous avez spécifié des boutons personnalisés dans custombtn.txt et aussi dans .pronsolerc"
#: pronterface.py:105
msgid "Ignoring custombtn.txt. Remove all current buttons to revert to custombtn.txt"
msgstr "Ignorant custombtn.txt. Retirez tous les boutons en cours pour revenir à custombtn.txt"
#: pronterface.py:130
#: pronterface.py:476
#: pronterface.py:1228
#: pronterface.py:1279
#: pronterface.py:1396
#: pronterface.py:1428
#: pronterface.py:1443
msgid "Print"
msgstr "Imprimer"
#: pronterface.py:134
msgid "Printer is now online."
msgstr "L'imprimante est connectée"
#: pronterface.py:188
msgid "Setting hotend temperature to "
msgstr "Réglage de la température de la buse à"
#: pronterface.py:188
#: pronterface.py:224
msgid " degrees Celsius."
msgstr " degrés Celsius."
#: pronterface.py:207
#: pronterface.py:242
msgid "Printer is not online."
msgstr "L'imprimante est déconnectée"
#: pronterface.py:209
msgid "You cannot set negative temperatures. To turn the hotend off entirely, set its temperature to 0."
msgstr "Vous ne pouvez pas régler une température négative.Pour éteindre le chauffage de la buse, réglez sa température à 0°c."
#: pronterface.py:224
msgid "Setting bed temperature to "
msgstr "Réglage de la température du plateau à "
#: pronterface.py:244
msgid "You cannot set negative temperatures. To turn the bed off entirely, set its temperature to 0."
msgstr "Vous ne pouvez pas régler une température négative. Pour désactiver votre plateau chauffant, réglez sa température à 0°c."
#: pronterface.py:246
msgid "You must enter a temperature."
msgstr "Vous devez saisir une température."
#: pronterface.py:261
msgid "Do you want to erase the macro?"
msgstr "Voulez-vous effacer la macro ?"
#: pronterface.py:265
msgid "Cancelled."
msgstr "Annulé"
#: pronterface.py:295
msgid " Opens file"
msgstr " Ouvrir un fichier"
#: pronterface.py:295
msgid "&Open..."
msgstr "&Ouvrir..."
#: pronterface.py:296
msgid " Edit open file"
msgstr " Éditer le fichier ouvert"
#: pronterface.py:296
msgid "&Edit..."
msgstr "&Éditer..."
#: pronterface.py:297
msgid " Clear output console"
msgstr "Effacer le contenu de la console de sortie"
#: pronterface.py:297
msgid "Clear console"
msgstr "Effacer la console"
#: pronterface.py:298
msgid " Closes the Window"
msgstr " Quitter le programme"
#: pronterface.py:298
msgid "E&xit"
msgstr "&Quitter"
#: pronterface.py:299
msgid "&File"
msgstr "&Fichier"
#: pronterface.py:304
msgid "&Macros"
msgstr "&Macros"
#: pronterface.py:305
msgid "<&New...>"
msgstr "<&Nouvelle...>"
#: pronterface.py:306
msgid " Options dialog"
msgstr " Fenêtre des options"
#: pronterface.py:306
msgid "&Options"
msgstr "&Options"
#: pronterface.py:308
msgid " Adjust SFACT settings"
msgstr " Régler les paramètres SFACT"
#: pronterface.py:308
msgid "SFACT Settings"
msgstr "Paramètres &SFACT..."
#: pronterface.py:311
msgid " Quickly adjust SFACT settings for active profile"
msgstr " Réglages rapides des paramètres SFACT pour le profil actif."
#: pronterface.py:311
msgid "SFACT Quick Settings"
msgstr "Réglages rapides SFACT"
#: pronterface.py:315
msgid "&Settings"
msgstr "&Paramètres"
#: pronterface.py:331
msgid "Enter macro name"
msgstr "Saisissez le nom de la macro"
#: pronterface.py:334
msgid "Macro name:"
msgstr "Nom :"
#: pronterface.py:337
msgid "Ok"
msgstr "Valider"
#: pronterface.py:341
#: pronterface.py:1465
msgid "Cancel"
msgstr "Annuler"
#: pronterface.py:359
msgid "' is being used by built-in command"
msgstr "' est utilisé par des commandes internes."
#: pronterface.py:359
msgid "Name '"
msgstr "Le nom '"
#: pronterface.py:362
msgid "Macro name may contain only alphanumeric symbols and underscores"
msgstr "Un nom de macro ne peut contenir que des caractères alphanumérique et des underscore (_)"
#: pronterface.py:411
msgid "Port"
msgstr "Port :"
#: pronterface.py:430
msgid "Connect"
msgstr "Connecter"
#: pronterface.py:432
msgid "Connect to the printer"
msgstr "Connecter l'imprimante"
#: pronterface.py:434
msgid "Disconnect"
msgstr "Déconnecter"
#: pronterface.py:438
msgid "Reset"
msgstr "Réinitialiser"
#: pronterface.py:441
#: pronterface.py:687
msgid "Mini mode"
msgstr "Mode réduit"
#: pronterface.py:455
msgid ""
"Monitor\n"
"printer"
msgstr ""
"Surveiller\n"
"l'imprimante"
#: pronterface.py:465
msgid "Load file"
msgstr "Charger un fichier"
#: pronterface.py:468
msgid "SD Upload"
msgstr "Copier sur SD"
#: pronterface.py:472
msgid "SD Print"
msgstr "Imprimer depuis SD"
#: pronterface.py:480
#: pronterface.py:1280
#: pronterface.py:1321
#: pronterface.py:1370
#: pronterface.py:1395
#: pronterface.py:1427
#: pronterface.py:1442
msgid "Pause"
msgstr "Pause"
#: pronterface.py:494
msgid "Send"
msgstr "Envoyer"
#: pronterface.py:502
#: pronterface.py:603
msgid "mm/min"
msgstr "mm/min"
#: pronterface.py:504
msgid "XY:"
msgstr "XY:"
#: pronterface.py:506
msgid "Z:"
msgstr "Z:"
#: pronterface.py:529
msgid "Heater:"
msgstr "Buse :"
#: pronterface.py:532
#: pronterface.py:552
msgid "Off"
msgstr "Off"
#: pronterface.py:544
#: pronterface.py:564
msgid "Set"
msgstr "Régler"
#: pronterface.py:549
msgid "Bed:"
msgstr "Plateau :"
#: pronterface.py:597
msgid "mm"
msgstr "mm"
#: pronterface.py:636
#: pronterface.py:1099
#: pronterface.py:1315
msgid "Not connected to printer."
msgstr "Imprimante non connectée"
#: pronterface.py:694
msgid "Full mode"
msgstr "Mode complet"
#: pronterface.py:719
msgid "Execute command: "
msgstr "Exécuter la commande :"
#: pronterface.py:730
msgid "click to add new custom button"
msgstr "Ajouter un bouton personnalisé"
#: pronterface.py:751
msgid "Defines custom button. Usage: button <num> \"title\" [/c \"colour\"] command"
msgstr "Définit des boutons personnalidés. Utilisation : <numero> \"Libelle\" [/c \"couleur\"] commande"
#: pronterface.py:773
msgid "Custom button number should be between 0 and 63"
msgstr "Les numéros des boutons personnalisés doivent être compris entre 0 et 63."
#: pronterface.py:865
msgid "Edit custom button '%s'"
msgstr "Editer le bouton personnalisé n°'%s'"
#: pronterface.py:867
msgid "Move left <<"
msgstr "Déplacer vers la gauche <<"
#: pronterface.py:870
msgid "Move right >>"
msgstr "Déplacer vers la droite >>"
#: pronterface.py:874
msgid "Remove custom button '%s'"
msgstr "Supprimer le bouton personnalisé n°'%s'"
#: pronterface.py:877
msgid "Add custom button"
msgstr "Ajouter un bouton personnalisé"
#: pronterface.py:1022
msgid "event object missing"
msgstr "evennement d'objet manquant"
#: pronterface.py:1050
msgid "Invalid period given."
msgstr "La période donnée est invalide"
#: pronterface.py:1053
msgid "Monitoring printer."
msgstr "Surveillance de l'imprimante"
#: pronterface.py:1055
msgid "Done monitoring."
msgstr "Surveillance de l'imprimante effectuée."
#: pronterface.py:1077
msgid "Printer is online. "
msgstr "L'imprimante est connectée"
#: pronterface.py:1079
#: pronterface.py:1226
#: pronterface.py:1278
msgid "Loaded "
msgstr "Chargé "
#: pronterface.py:1082
msgid "Bed"
msgstr "Plateau"
#: pronterface.py:1082
msgid "Hotend"
msgstr "Buse"
#: pronterface.py:1089
msgid " SD printing:%04.2f %%"
msgstr "Impression SD : %04.2f %%"
#: pronterface.py:1091
msgid " Printing:%04.2f %%"
msgstr "Impression : %04.2f %%"
#: pronterface.py:1149
msgid "Opening file failed."
msgstr "L'ouverture du fichier a échoué"
#: pronterface.py:1155
msgid "Starting print"
msgstr "Début de l'impression..."
#: pronterface.py:1178
msgid "Pick SD file"
msgstr "Choisir un fichier sur la carte SD"
#: pronterface.py:1178
msgid "Select the file to print"
msgstr "Sélectionnez le fichier à imprimer :"
#: pronterface.py:1206
msgid "Skeinforge execution failed."
msgstr "Exécution de Skeinforge échoué"
#: pronterface.py:1213
msgid "Skeining..."
msgstr "Skeining..."
#: pronterface.py:1226
#: pronterface.py:1278
msgid ", %d lines"
msgstr ", %d lignes"
#: pronterface.py:1235
msgid "Skeining "
msgstr "Skeining "
#: pronterface.py:1237
msgid ""
"Skeinforge not found. \n"
"Please copy Skeinforge into a directory named \"skeinforge\" in the same directory as this file."
msgstr ""
"Skeinforge non trouvé. \n"
"Veuillez copier Skeinforge dans un répertoire nommé \"skeinforge\" placé dans le repertoire du programme."
#: pronterface.py:1256
msgid "Open file to print"
msgstr "Ouvrir un fichier à imprimer"
#: pronterface.py:1257
msgid "OBJ, STL, and GCODE files (;*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ;)"
msgstr "Fichiers OBJ, STL et GCODE (;*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ;)"
#: pronterface.py:1264
msgid "File not found!"
msgstr "Fichier non trouvé"
#: pronterface.py:1288
msgid "mm of filament used in this print\n"
msgstr "mm de filament utilisés pour cette impression\n"
#: pronterface.py:1289
msgid ""
"mm in X\n"
"and is"
msgstr ""
"mm en X\n"
"et mesure"
#: pronterface.py:1289
#: pronterface.py:1290
msgid "mm wide\n"
msgstr "mm de large\n"
#: pronterface.py:1289
#: pronterface.py:1290
#: pronterface.py:1291
msgid "mm to"
msgstr "mm à"
#: pronterface.py:1289
#: pronterface.py:1290
#: pronterface.py:1291
msgid "the print goes from"
msgstr "L'impression va de"
#: pronterface.py:1290
msgid ""
"mm in Y\n"
"and is"
msgstr ""
"mm en Y\n"
"et mesure"
#: pronterface.py:1291
msgid "mm high\n"
msgstr "mm de haut\n"
#: pronterface.py:1291
msgid ""
"mm in Z\n"
"and is"
msgstr ""
"mm en Z\n"
"et mesure"
#: pronterface.py:1292
msgid "Estimated duration (pessimistic): "
msgstr "Durée estimée (pessimiste)"
#: pronterface.py:1312
msgid "No file loaded. Please use load first."
msgstr "Aucun fichier chargé. Veuillez charger un fichier avant."
#: pronterface.py:1323
msgid "Restart"
msgstr "Recommencer"
#: pronterface.py:1327
msgid "File upload complete"
msgstr "Envoi du fichier terminé"
#: pronterface.py:1346
msgid "Pick SD filename"
msgstr "Lister les fichiers sur la carte SD"
#: pronterface.py:1353
msgid "Paused."
msgstr "En pause"
#: pronterface.py:1363
msgid "Resume"
msgstr "Reprendre"
#: pronterface.py:1379
msgid "Connecting..."
msgstr "Connection en cours..."
#: pronterface.py:1410
msgid "Disconnected."
msgstr "Déconnecté"
#: pronterface.py:1435
msgid "Reset."
msgstr "Réinitialiser"
#: pronterface.py:1436
msgid "Are you sure you want to reset the printer?"
msgstr "Etes-vous sûr de vouloir réinitialiser l'imprimante?"
#: pronterface.py:1436
msgid "Reset?"
msgstr "Réinitialiser ?"
#: pronterface.py:1461
msgid "Save"
msgstr "Enregistrer"
#: pronterface.py:1519
msgid "Edit settings"
msgstr "Modifier les paramètres"
#: pronterface.py:1521
msgid "Defaults"
msgstr "Paramètres par défaut"
#: pronterface.py:1543
msgid "Custom button"
msgstr "Commande personnalisée"
#: pronterface.py:1551
msgid "Button title"
msgstr "Titre du bouton"
#: pronterface.py:1554
msgid "Command"
msgstr "Commande"
#: pronterface.py:1563
msgid "Color"
msgstr "Couleur"

Binary file not shown.

View File

@ -0,0 +1,95 @@
# 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"

Binary file not shown.

View File

@ -0,0 +1,609 @@
# Pronterface Message Catalog Template
# Copyright (C) 2011 Jonathan Marsden
# Jonathan Marsden <jmarsden@fastmail.fm>, 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: Pronterface jm1\n"
"POT-Creation-Date: 2012-03-16 03:48+CET\n"
"PO-Revision-Date: 2012-03-16 03:50+0100\n"
"Last-Translator: Guillaume Seguin <guillaume@segu.in>\n"
"Language-Team: FR <c.laguilhon.debat@gmail.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"
#: pronterface.py:30
msgid "WX is not installed. This program requires WX to run."
msgstr ""
"wxWidgets n'est pas installé. Ce programme nécessite la librairie wxWidgets "
"pour fonctionner."
#: pronterface.py:81
msgid ""
"Dimensions of Build Platform\n"
" & optional offset of origin\n"
"\n"
"Examples:\n"
" XXXxYYY\n"
" XXX,YYY,ZZZ\n"
" XXXxYYYxZZZ+OffX+OffY+OffZ"
msgstr ""
#: pronterface.py:82
msgid "Last Set Temperature for the Heated Print Bed"
msgstr "Dernière température du plateau chauffant définie"
#: pronterface.py:83
msgid "Folder of last opened file"
msgstr "Dossier du dernier fichier ouvert"
#: pronterface.py:84
msgid "Last Temperature of the Hot End"
msgstr "Dernière température de la buse définie"
#: pronterface.py:85
msgid "Width of Extrusion in Preview (default: 0.5)"
msgstr "Largeur de l'extrusion dans la prévisualisation (défaut : 0.5)"
#: pronterface.py:86
msgid "Fine Grid Spacing (default: 10)"
msgstr "Espacement fin de la grille (défaut : 10)"
#: pronterface.py:87
msgid "Coarse Grid Spacing (default: 50)"
msgstr "Espacement large de la grille (défaut : 50)"
#: pronterface.py:88
msgid "Pronterface background color (default: #FFFFFF)"
msgstr "Couleur de fond de la Pronterface (défaut : #FFFFFF)"
#: pronterface.py:91
msgid "Printer Interface"
msgstr "Interface de l'imprimante"
#: pronterface.py:109
msgid "Motors off"
msgstr "Arrêter les moteurs"
#: pronterface.py:110
msgid "Check temp"
msgstr "Lire les températures"
#: pronterface.py:111
msgid "Extrude"
msgstr "Extruder"
#: pronterface.py:112
msgid "Reverse"
msgstr "Inverser"
#: pronterface.py:130
msgid ""
"# I moved all your custom buttons into .pronsolerc.\n"
"# Please don't add them here any more.\n"
"# Backup of your old buttons is in custombtn.old\n"
msgstr ""
"# Tous vos boutons personalisés ont été déplacés dans le fichier ."
"pronsolerc.\n"
"# Veuillez ne plus en ajouter ici.\n"
"# Une sauvegarde de vos anciens boutons est dans le fichier custombtn.old\n"
#: pronterface.py:135
msgid ""
"Note!!! You have specified custom buttons in both custombtn.txt and ."
"pronsolerc"
msgstr ""
"Remarque! Vous avez spécifié des boutons personnalisés dans custombtn.txt et "
"aussi dans .pronsolerc"
#: pronterface.py:136
msgid ""
"Ignoring custombtn.txt. Remove all current buttons to revert to custombtn.txt"
msgstr ""
"custombtn.txt ignoré. Retirez tous les boutons en cours pour revenir à "
"custombtn.txt"
#: pronterface.py:165 pronterface.py:520 pronterface.py:1343
#: pronterface.py:1397 pronterface.py:1521 pronterface.py:1555
#: pronterface.py:1567
msgid "Print"
msgstr "Imprimer"
#: pronterface.py:169
msgid "Printer is now online."
msgstr "L'imprimante est connectée"
#: pronterface.py:170
msgid "Disconnect"
msgstr "Déconnecter"
#: pronterface.py:229
msgid "Setting hotend temperature to %f degrees Celsius."
msgstr "Réglage de la température de la buse à %f degrés Celsius."
#: pronterface.py:248 pronterface.py:284 pronterface.py:346
msgid "Printer is not online."
msgstr "L'imprimante est déconnectée"
#: pronterface.py:250
msgid ""
"You cannot set negative temperatures. To turn the hotend off entirely, set "
"its temperature to 0."
msgstr ""
"Vous ne pouvez pas régler une température négative. Pour éteindre la buse, "
"réglez sa température à 0°C."
#: pronterface.py:252
msgid "You must enter a temperature. (%s)"
msgstr "Vous devez saisir une température. (%s)"
#: pronterface.py:265
msgid "Setting bed temperature to %f degrees Celsius."
msgstr "Réglage de la température du plateau à %f degrés Celsius."
#: pronterface.py:286
msgid ""
"You cannot set negative temperatures. To turn the bed off entirely, set its "
"temperature to 0."
msgstr ""
"Vous ne pouvez pas régler une température négative. Pour désactiver votre "
"plateau chauffant, réglez sa température à 0°C."
#: pronterface.py:288
msgid "You must enter a temperature."
msgstr "Vous devez saisir une température."
#: pronterface.py:303
msgid "Do you want to erase the macro?"
msgstr "Voulez-vous effacer la macro ?"
#: pronterface.py:307
msgid "Cancelled."
msgstr "Annulé"
#: pronterface.py:352
msgid " Opens file"
msgstr " Ouvrir un fichier"
#: pronterface.py:352
msgid "&Open..."
msgstr "&Ouvrir..."
#: pronterface.py:353
msgid " Edit open file"
msgstr " Éditer le fichier ouvert"
#: pronterface.py:353
msgid "&Edit..."
msgstr "&Éditer..."
#: pronterface.py:354
msgid " Clear output console"
msgstr " Effacer le contenu de la console de sortie"
#: pronterface.py:354
msgid "Clear console"
msgstr "Effacer la console"
#: pronterface.py:355
msgid " Project slices"
msgstr " Projeter les couches"
#: pronterface.py:355
msgid "Projector"
msgstr "Projecteur"
#: pronterface.py:356
msgid " Closes the Window"
msgstr " Quitter le programme"
#: pronterface.py:356
msgid "E&xit"
msgstr "&Quitter"
#: pronterface.py:357
msgid "&File"
msgstr "&Fichier"
#: pronterface.py:362
msgid "&Macros"
msgstr "&Macros"
#: pronterface.py:363
msgid "<&New...>"
msgstr "<&Nouvelle...>"
#: pronterface.py:364
msgid " Options dialog"
msgstr " Fenêtre des options"
#: pronterface.py:364
msgid "&Options"
msgstr "&Options"
#: pronterface.py:366
msgid " Adjust slicing settings"
msgstr " Régler les paramètres de slicing"
#: pronterface.py:366
msgid "Slicing Settings"
msgstr "Paramètres de slicing"
#: pronterface.py:373
msgid "&Settings"
msgstr "&Paramètres"
#: pronterface.py:389
msgid "Enter macro name"
msgstr "Saisissez le nom de la macro"
#: pronterface.py:392
msgid "Macro name:"
msgstr "Nom :"
#: pronterface.py:395
msgid "Ok"
msgstr "Valider"
#: pronterface.py:399 pronterface.py:1354 pronterface.py:1613
msgid "Cancel"
msgstr "Annuler"
#: pronterface.py:417
msgid "Name '%s' is being used by built-in command"
msgstr "Le nom '%s' est utilisé par une commande interne"
#: pronterface.py:420
msgid "Macro name may contain only alphanumeric symbols and underscores"
msgstr ""
"Un nom de macro ne peut contenir que des caractères alphanumérique et des "
"underscore (_)"
#: pronterface.py:469
msgid "Port"
msgstr "Port"
#: pronterface.py:488
msgid "Connect"
msgstr "Connecter"
#: pronterface.py:490
msgid "Connect to the printer"
msgstr "Connecter l'imprimante"
#: pronterface.py:492
msgid "Reset"
msgstr "Réinitialiser"
#: pronterface.py:495 pronterface.py:772
msgid "Mini mode"
msgstr "Mode réduit"
#: pronterface.py:499
msgid "Monitor Printer"
msgstr "Surveiller l'imprimante"
#: pronterface.py:509
msgid "Load file"
msgstr "Charger un fichier"
#: pronterface.py:512
msgid "Compose"
msgstr "Composer"
#: pronterface.py:516
msgid "SD"
msgstr "SD"
#: pronterface.py:524 pronterface.py:1398 pronterface.py:1444
#: pronterface.py:1495 pronterface.py:1520 pronterface.py:1554
#: pronterface.py:1570
msgid "Pause"
msgstr "Pause"
#: pronterface.py:537
msgid "Send"
msgstr "Envoyer"
#: pronterface.py:545 pronterface.py:646
msgid "mm/min"
msgstr "mm/min"
#: pronterface.py:547
msgid "XY:"
msgstr "XY:"
#: pronterface.py:549
msgid "Z:"
msgstr "Z:"
#: pronterface.py:572 pronterface.py:653
msgid "Heater:"
msgstr "Buse :"
#: pronterface.py:575 pronterface.py:595
msgid "Off"
msgstr "Off"
#: pronterface.py:587 pronterface.py:607
msgid "Set"
msgstr "Régler"
#: pronterface.py:592 pronterface.py:655
msgid "Bed:"
msgstr "Plateau :"
#: pronterface.py:640
msgid "mm"
msgstr "mm"
#: pronterface.py:698 pronterface.py:1206 pronterface.py:1438
msgid "Not connected to printer."
msgstr "Imprimante non connectée."
#: pronterface.py:727
msgid "SD Upload"
msgstr "Copier sur SD"
#: pronterface.py:731
msgid "SD Print"
msgstr "Imprimer depuis SD"
#: pronterface.py:779
msgid "Full mode"
msgstr "Mode complet"
#: pronterface.py:804
msgid "Execute command: "
msgstr "Exécuter la commande :"
#: pronterface.py:815
msgid "click to add new custom button"
msgstr "Ajouter un bouton personnalisé"
#: pronterface.py:834
msgid ""
"Defines custom button. Usage: button <num> \"title\" [/c \"colour\"] command"
msgstr ""
"Définit des boutons personnalidés. Utilisation : <numero> \"Libelle\" [/c "
"\"couleur\"] commande"
#: pronterface.py:856
msgid "Custom button number should be between 0 and 63"
msgstr ""
"Les numéros des boutons personnalisés doivent être compris entre 0 et 63."
#: pronterface.py:948
msgid "Edit custom button '%s'"
msgstr "Editer le bouton personnalisé '%s'"
#: pronterface.py:950
msgid "Move left <<"
msgstr "Déplacer vers la gauche <<"
#: pronterface.py:953
msgid "Move right >>"
msgstr "Déplacer vers la droite >>"
#: pronterface.py:957
msgid "Remove custom button '%s'"
msgstr "Supprimer le bouton personnalisé '%s'"
#: pronterface.py:960
msgid "Add custom button"
msgstr "Ajouter un bouton personnalisé"
#: pronterface.py:1105
msgid "event object missing"
msgstr "événement d'objet manquant"
#: pronterface.py:1133
msgid "Invalid period given."
msgstr "La période donnée est invalide"
#: pronterface.py:1136
msgid "Monitoring printer."
msgstr "Imprimante sous surveillance."
#: pronterface.py:1138
msgid "Done monitoring."
msgstr "Surveillance de l'imprimante effectuée."
#: pronterface.py:1160
msgid "Printer is online. "
msgstr "L'imprimante est connectée. "
#: pronterface.py:1162 pronterface.py:1341
msgid "Loaded "
msgstr "Chargé "
#: pronterface.py:1165
msgid "Bed"
msgstr "Plateau"
#: pronterface.py:1165
msgid "Hotend"
msgstr "Buse"
#: pronterface.py:1175
msgid " SD printing:%04.2f %%"
msgstr " Impression SD : %04.2f %%"
#: pronterface.py:1178
msgid " Printing:%04.2f %% |"
msgstr " Impression : %04.2f %% |"
#: pronterface.py:1179
msgid " Line# %d of %d lines |"
msgstr " Ligne# %d sur %d lignes |"
#: pronterface.py:1184
msgid " Est: %s of %s remaining | "
msgstr " ETA: %s restant sur %s | "
#: pronterface.py:1186
msgid " Z: %0.2f mm"
msgstr " Z: %0.2f mm"
#: pronterface.py:1257
msgid "Opening file failed."
msgstr "L'ouverture du fichier a échoué"
#: pronterface.py:1263
msgid "Starting print"
msgstr "Début de l'impression..."
#: pronterface.py:1286
msgid "Pick SD file"
msgstr "Choisir un fichier sur la carte SD"
#: pronterface.py:1286
msgid "Select the file to print"
msgstr "Sélectionnez le fichier à imprimer :"
#: pronterface.py:1321
msgid "Failed to execute slicing software: "
msgstr "Une erreur s'est produite lors du slicing : "
#: pronterface.py:1328
msgid "Slicing..."
msgstr "Slicing..."
#: pronterface.py:1341
msgid ", %d lines"
msgstr ", %d lignes"
#: pronterface.py:1348
msgid "Load File"
msgstr "Charger un fichier"
#: pronterface.py:1355
msgid "Slicing "
msgstr "Slicing "
#: pronterface.py:1374
msgid "Open file to print"
msgstr "Ouvrir un fichier à imprimer"
#: pronterface.py:1375
msgid ""
"OBJ, STL, and GCODE files (*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ)|*."
"gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ|All Files (*.*)|*.*"
msgstr ""
"Fichiers OBJ, STL et GCODE (;*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ;)|*."
"gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ|Tous les fichiers (*.*)|*.*"
#: pronterface.py:1382
msgid "File not found!"
msgstr "Fichier non trouvé"
#: pronterface.py:1396
msgid "Loaded %s, %d lines"
msgstr "%s chargé, %d lignes"
#: pronterface.py:1406
msgid "mm of filament used in this print\n"
msgstr "mm de filament utilisés pour cette impression\n"
#: pronterface.py:1407
msgid ""
"the print goes from %f mm to %f mm in X\n"
"and is %f mm wide\n"
msgstr ""
"L'impression va de %f mm à %f m en X\n"
"et mesure %f mm de large\n"
#: pronterface.py:1408
msgid ""
"the print goes from %f mm to %f mm in Y\n"
"and is %f mm wide\n"
msgstr ""
"L'impression va de %f mm à %f m en Y\n"
"et mesure %f mm de large\n"
#: pronterface.py:1409
msgid ""
"the print goes from %f mm to %f mm in Z\n"
"and is %f mm high\n"
msgstr ""
"L'impression va de %f mm à %f m en Y\n"
"et mesure %f mm de haut\n"
#: pronterface.py:1410
msgid "Estimated duration (pessimistic): "
msgstr "Durée estimée (pessimiste) : "
#: pronterface.py:1435
msgid "No file loaded. Please use load first."
msgstr "Aucun fichier chargé. Veuillez charger un fichier avant."
#: pronterface.py:1446
msgid "Restart"
msgstr "Recommencer"
#: pronterface.py:1450
msgid "File upload complete"
msgstr "Envoi du fichier terminé"
#: pronterface.py:1469
msgid "Pick SD filename"
msgstr "Lister les fichiers sur la carte SD"
#: pronterface.py:1477
msgid "Paused."
msgstr "En pause."
#: pronterface.py:1488
msgid "Resume"
msgstr "Reprendre"
#: pronterface.py:1504
msgid "Connecting..."
msgstr "Connection en cours..."
#: pronterface.py:1535
msgid "Disconnected."
msgstr "Déconnecté."
#: pronterface.py:1562
msgid "Reset."
msgstr "Réinitialisée."
#: pronterface.py:1563
msgid "Are you sure you want to reset the printer?"
msgstr "Etes-vous sûr de vouloir réinitialiser l'imprimante?"
#: pronterface.py:1563
msgid "Reset?"
msgstr "Réinitialiser ?"
#: pronterface.py:1609
msgid "Save"
msgstr "Enregistrer"
#: pronterface.py:1665
msgid "Edit settings"
msgstr "Modifier les paramètres"
#: pronterface.py:1667
msgid "Defaults"
msgstr "Paramètres par défaut"
#: pronterface.py:1696
msgid "Custom button"
msgstr "Commande personnalisée"
#: pronterface.py:1701
msgid "Button title"
msgstr "Titre du bouton"
#: pronterface.py:1704
msgid "Command"
msgstr "Commande"
#: pronterface.py:1713
msgid "Color"
msgstr "Couleur"

Binary file not shown.

View File

@ -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:269
msgid "You cannot set negative temperatures. To turn the bed off entirely, set its temperature to 0."
msgstr "Non è possibile impostare temperature negative. Per raffreddare il piano di stampa imposta la sua temperatura a 0."
#: pronterface.py:250
msgid "You must enter a temperature. (%s)"
msgstr "Devi inserire una temperatura. (%s)"
#: pronterface.py:271
#: pronterface.py:263
msgid "Setting bed temperature to %f degrees Celsius."
msgstr "Imposto la temperatura del piano di stampa a %f gradi Celsius."
#: pronterface.py:284
msgid ""
"You cannot set negative temperatures. To turn the bed off entirely, set its "
"temperature to 0."
msgstr ""
"Non è possibile impostare temperature negative. Per raffreddare il piano di "
"stampa imposta la sua temperatura a 0."
#: pronterface.py:286
msgid "You must enter a temperature."
msgstr "Devi inserire una temperatura."
#: pronterface.py:286
#: pronterface.py:301
msgid "Do you want to erase the macro?"
msgstr "Vuoi cancellare la macro?"
#: pronterface.py:290
#: pronterface.py:305
msgid "Cancelled."
msgstr "Annullato."
#: pronterface.py:331
#: pronterface.py:346
msgid " Opens file"
msgstr " Apre un file"
#: pronterface.py:331
#: pronterface.py:346
msgid "&Open..."
msgstr "&Apri..."
#: pronterface.py:332
#: pronterface.py:347
msgid " Edit open file"
msgstr " Modifica file aperto"
#: pronterface.py:332
#: pronterface.py:347
msgid "&Edit..."
msgstr "&Modifica"
#: pronterface.py:333
#: pronterface.py:348
msgid " Clear output console"
msgstr " Svuota la console"
#: pronterface.py:333
#: pronterface.py:348
msgid "Clear console"
msgstr "Pulisci console"
#: pronterface.py:334
#: pronterface.py:349
msgid " Project slices"
msgstr " Proietta i layer"
#: pronterface.py:334
#: pronterface.py:349
msgid "Projector"
msgstr "Proiettore"
#: pronterface.py:335
#: pronterface.py:350
msgid " Closes the Window"
msgstr " Chiude la finestra"
#: pronterface.py:335
#: pronterface.py:350
msgid "E&xit"
msgstr "&Esci"
#: pronterface.py:336
#: pronterface.py:351
msgid "&File"
msgstr "&File"
#: pronterface.py:341
#: pronterface.py:356
msgid "&Macros"
msgstr "&Macro"
#: pronterface.py:342
#: pronterface.py:357
msgid "<&New...>"
msgstr "<&Nuovo...>"
#: pronterface.py:343
#: pronterface.py:358
msgid " Options dialog"
msgstr " Finestra di opzioni"
#: pronterface.py:343
#: pronterface.py:358
msgid "&Options"
msgstr "&Opzioni"
#: pronterface.py:345
#: pronterface.py:360
msgid " Adjust slicing settings"
msgstr " Configura la generazione del percorso"
#: pronterface.py:345
#: pronterface.py:360
msgid "Slicing Settings"
msgstr "Impostazioni di generazione del percorso"
#: pronterface.py:352
#: pronterface.py:367
msgid "&Settings"
msgstr "&Impostazioni"
#: pronterface.py:368
#: pronterface.py:383
msgid "Enter macro name"
msgstr "Inserisci il nome della macro"
#: pronterface.py:371
#: pronterface.py:386
msgid "Macro name:"
msgstr "Nome macro:"
#: pronterface.py:374
#: pronterface.py:389
msgid "Ok"
msgstr "Ok"
#: pronterface.py:378 pronterface.py:1330 pronterface.py:1587
#: pronterface.py:393 pronterface.py:1344 pronterface.py:1601
msgid "Cancel"
msgstr "Annulla"
#: pronterface.py:396
msgid "' is being used by built-in command"
msgstr "' è usato da un comando interno"
#: pronterface.py:411
msgid "Name '%s' is being used by built-in command"
msgstr "Nome '%s' è usato da un comando interno"
#: pronterface.py:396
msgid "Name '"
msgstr "Nome '"
#: pronterface.py:399
#: pronterface.py:414
msgid "Macro name may contain only alphanumeric symbols and underscores"
msgstr "I nomi delle macro possono contenere solo simboli alfanumerici e underscore"
msgstr ""
"I nomi delle macro possono contenere solo simboli alfanumerici e underscore"
#: pronterface.py:448
#: pronterface.py:463
msgid "Port"
msgstr "Porta"
#: pronterface.py:467
#: pronterface.py:482
msgid "Connect"
msgstr "Connetti"
#: pronterface.py:469
#: pronterface.py:484
msgid "Connect to the printer"
msgstr "Connetti alla stampante"
#: pronterface.py:471
#: pronterface.py:486
msgid "Reset"
msgstr "Reset"
#: pronterface.py:474 pronterface.py:751
#: pronterface.py:489 pronterface.py:766
msgid "Mini mode"
msgstr "Contrai"
#: pronterface.py:478
#: pronterface.py:493
msgid "Monitor Printer"
msgstr "Controllo automatico temperatura"
#: pronterface.py:488
#: pronterface.py:503
msgid "Load file"
msgstr "Carica file"
#: pronterface.py:491
#: pronterface.py:506
msgid "Compose"
msgstr "Componi"
#: pronterface.py:495
#: pronterface.py:510
msgid "SD"
msgstr "SD"
#: pronterface.py:503 pronterface.py:1374 pronterface.py:1419
#: pronterface.py:1469 pronterface.py:1494 pronterface.py:1528
#: pronterface.py:1543
#: pronterface.py:518 pronterface.py:1388 pronterface.py:1433
#: pronterface.py:1483 pronterface.py:1508 pronterface.py:1542
#: pronterface.py:1557
msgid "Pause"
msgstr "Pausa"
#: pronterface.py:516
#: pronterface.py:531
msgid "Send"
msgstr "Invia"
#: pronterface.py:524 pronterface.py:625
#: pronterface.py:539 pronterface.py:640
msgid "mm/min"
msgstr "mm/min"
#: pronterface.py:526
#: pronterface.py:541
msgid "XY:"
msgstr "XY:"
#: pronterface.py:528
#: pronterface.py:543
msgid "Z:"
msgstr "Z:"
#: pronterface.py:551 pronterface.py:632
#: pronterface.py:566 pronterface.py:647
msgid "Heater:"
msgstr "Estrusore:"
#: pronterface.py:554 pronterface.py:574
#: pronterface.py:569 pronterface.py:589
msgid "Off"
msgstr "Off"
#: pronterface.py:566 pronterface.py:586
#: pronterface.py:581 pronterface.py:601
msgid "Set"
msgstr "On"
#: pronterface.py:571 pronterface.py:634
#: pronterface.py:586 pronterface.py:649
msgid "Bed:"
msgstr "Piano:"
#: pronterface.py:619
#: pronterface.py:634
msgid "mm"
msgstr "mm"
#: pronterface.py:677 pronterface.py:1182 pronterface.py:1413
#: pronterface.py:692 pronterface.py:1196 pronterface.py:1427
msgid "Not connected to printer."
msgstr "Non connesso alla stampante."
#: pronterface.py:706
#: pronterface.py:721
msgid "SD Upload"
msgstr "Carica SD"
#: pronterface.py:710
#: pronterface.py:725
msgid "SD Print"
msgstr "Stampa SD"
#: pronterface.py:758
#: pronterface.py:773
msgid "Full mode"
msgstr "Espandi"
#: pronterface.py:783
#: pronterface.py:798
msgid "Execute command: "
msgstr "Esegui comando: "
#: pronterface.py:794
#: pronterface.py:809
msgid "click to add new custom button"
msgstr "clicca per aggiungere un nuovo pulsante personalizzato"
#: pronterface.py:813
msgid "Defines custom button. Usage: button <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:1173
msgid " Line# %d of %d lines |"
msgstr " Linea# %d di %d linee |"
#: pronterface.py:1158
msgid " lines |"
msgstr " linee |"
#: pronterface.py:1178
msgid " Est: %s of %s remaining | "
msgstr " Stima: %s di %s rimanente | "
#: pronterface.py:1158
msgid "of "
msgstr "di "
#: pronterface.py:1163
msgid " Est: "
msgstr " Stima: "
#: pronterface.py:1164
msgid " of: "
msgstr " di: "
#: pronterface.py:1165
msgid " Remaining | "
msgstr " Rimanente | "
#: pronterface.py:1166
#: pronterface.py:1180
msgid " Z: %0.2f mm"
msgstr " Z: %0.2f mm"
#: pronterface.py:1233
#: pronterface.py:1247
msgid "Opening file failed."
msgstr "Apertura del file fallita."
#: pronterface.py:1239
#: pronterface.py:1253
msgid "Starting print"
msgstr "Inizio della stampa"
#: pronterface.py:1262
#: pronterface.py:1276
msgid "Pick SD file"
msgstr "Scegli un file dalla scheda SD"
#: pronterface.py:1262
#: pronterface.py:1276
msgid "Select the file to print"
msgstr "Seleziona il file da stampare"
#: pronterface.py:1297
#: pronterface.py:1311
msgid "Failed to execute slicing software: "
msgstr "Imposibile eseguire il software di generazione percorso: "
#: pronterface.py:1304
#: pronterface.py:1318
msgid "Slicing..."
msgstr "Generazione percorso..."
#: pronterface.py:1317 pronterface.py:1372
#: pronterface.py:1331
msgid ", %d lines"
msgstr ", %d linee"
#: pronterface.py:1324
#: pronterface.py:1338
msgid "Load File"
msgstr "Apri file"
#: pronterface.py:1331
#: pronterface.py:1345
msgid "Slicing "
msgstr "Generazione del percorso "
#: pronterface.py:1350
#: pronterface.py:1364
msgid "Open file to print"
msgstr "Apri il file da stampare"
#: pronterface.py:1351
#: pronterface.py:1365
msgid "OBJ, STL, and GCODE files (;*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ;)"
msgstr "files OBJ, STL e GCODE (;*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ;)"
#: pronterface.py:1358
#: pronterface.py:1372
msgid "File not found!"
msgstr "File non trovato!"
#: pronterface.py:1382
msgid ""
"mm of filament used in this print\n"
msgstr ""
"mm di filamento usato in questa stampa\n"
#: pronterface.py:1383
msgid ""
"mm in X\n"
"and is"
msgstr ""
"mm in X\n"
"ed è"
#: pronterface.py:1383 pronterface.py:1384
msgid ""
"mm wide\n"
msgstr ""
"mm di larghezza\n"
#: pronterface.py:1383 pronterface.py:1384 pronterface.py:1385
msgid "mm to"
msgstr "mm a"
#: pronterface.py:1383 pronterface.py:1384 pronterface.py:1385
msgid "the print goes from"
msgstr "la stampa va da"
#: pronterface.py:1384
msgid ""
"mm in Y\n"
"and is"
msgstr ""
"mm in Y\n"
"ed è"
#: pronterface.py:1385
msgid ""
"mm high\n"
msgstr ""
"mm di altezza\n"
#: pronterface.py:1385
msgid ""
"mm in Z\n"
"and is"
msgstr ""
"mm in Z\n"
"ed è"
#: pronterface.py:1386
msgid "Loaded %s, %d lines"
msgstr "Caricato %s, %d linee"
#: pronterface.py:1396
msgid "mm of filament used in this print\n"
msgstr "mm di filamento usato in questa stampa\n"
#: pronterface.py:1397
msgid ""
"the print goes from %f mm to %f mm in X\n"
"and is %f mm wide\n"
msgstr ""
"la stampa va da %f mm a %f mm in X\n"
"ed è %f mm di larghezza\n"
#: pronterface.py:1398
msgid ""
"the print goes from %f mm to %f mm in Y\n"
"and is %f mm wide\n"
msgstr ""
"la stampa va da %f mm a %f mm in Y\n"
"ed è %f mm di larghezza\n"
#: pronterface.py:1399
msgid ""
"the print goes from %f mm to %f mm in Z\n"
"and is %f mm high\n"
msgstr ""
"la stampa va da %f mm a %f mm in Z\n"
"ed è %f mm di altezza\n"
#: pronterface.py:1400
msgid "Estimated duration (pessimistic): "
msgstr "Durata stimata (pessimistica): "
#: pronterface.py:1410
#: pronterface.py:1424
msgid "No file loaded. Please use load first."
msgstr "Nessub file caricato. Usare Apri prima."
#: pronterface.py:1421
#: pronterface.py:1435
msgid "Restart"
msgstr "Ricomincia"
#: pronterface.py:1425
#: pronterface.py:1439
msgid "File upload complete"
msgstr "Caricamento file completato"
#: pronterface.py:1444
#: pronterface.py:1458
msgid "Pick SD filename"
msgstr "Scegli un file dalla scheda SD"
#: pronterface.py:1452
#: pronterface.py:1466
msgid "Paused."
msgstr "In pausa."
#: pronterface.py:1462
#: pronterface.py:1476
msgid "Resume"
msgstr "Ripristina"
#: pronterface.py:1478
#: pronterface.py:1492
msgid "Connecting..."
msgstr "Connessione..."
#: pronterface.py:1509
#: pronterface.py:1523
msgid "Disconnected."
msgstr "Disconnesso."
#: pronterface.py:1536
#: pronterface.py:1550
msgid "Reset."
msgstr "Reset."
#: pronterface.py:1537
#: pronterface.py:1551
msgid "Are you sure you want to reset the printer?"
msgstr "Sei sicuro di voler resettare la stampante?"
#: pronterface.py:1537
#: pronterface.py:1551
msgid "Reset?"
msgstr "Reset?"
#: pronterface.py:1583
#: pronterface.py:1597
msgid "Save"
msgstr "Salva"
#: pronterface.py:1639
#: pronterface.py:1653
msgid "Edit settings"
msgstr "Modifica impostazioni"
#: pronterface.py:1641
#: pronterface.py:1655
msgid "Defaults"
msgstr "Valori di default"
#: pronterface.py:1670
#: pronterface.py:1684
msgid "Custom button"
msgstr "Personalizza bottone"
#: pronterface.py:1675
#: pronterface.py:1689
msgid "Button title"
msgstr "Titolo bottone"
#: pronterface.py:1678
#: pronterface.py:1692
msgid "Command"
msgstr "Comando"
#: pronterface.py:1687
#: pronterface.py:1701
msgid "Color"
msgstr "Colore"
#~ msgid "Communications Speed (default: 115200)"
#~ msgstr "Velocità di comunicazione (default: 115200)"
#~ msgid "Heated Build Platform temp for ABS (default: 110 deg C)"
#~ msgstr "Temperatura piano di stampa per ABS (default: 110° C) "
#~ msgid "Heated Build Platform temp for PLA (default: 60 deg C)"
#~ msgstr "Temperatura piano di stampa per PLA (default: 60° C)"
#~ msgid "Feedrate for Control Panel Moves in Extrusions (default: 300mm/min)"
#~ msgstr ""
#~ "Velocità dei movimenti dell'estrusore in modalità manuale (default: 300mm/"
#~ "min)"
#~ msgid "Port used to communicate with printer"
#~ msgstr "Porta usata per comunicare con la stampante"
#~ msgid ""
#~ "Slice command\n"
#~ " default:\n"
#~ " python skeinforge/skeinforge_application/skeinforge_utilities/"
#~ "skeinforge_craft.py $s)"
#~ msgstr ""
#~ "Comando del generatore di percorso\n"
#~ " default:\n"
#~ " python skeinforge/skeinforge_application/skeinforge_utilities/"
#~ "skeinforge_craft.py $s)"
#~ msgid ""
#~ "Slice settings command\n"
#~ " default:\n"
#~ " python skeinforge/skeinforge_application/skeinforge.py"
#~ msgstr ""
#~ "Comando di configurazione del generatore di percorso\n"
#~ " default:\n"
#~ " python skeinforge/skeinforge_application/skeinforge.py"
#~ msgid "Extruder temp for ABS (default: 230 deg C)"
#~ msgstr "Temperatura di estrusione per ABS (default: 230° C)"
#~ msgid "Extruder temp for PLA (default: 185 deg C)"
#~ msgstr "Temperatura di estrusione per PLA (default: 185° C"
#~ msgid "Feedrate for Control Panel Moves in X and Y (default: 3000mm/min)"
#~ msgstr ""
#~ "Velocità dei movimenti degli assi X e Y in modalità manuale (default: "
#~ "3000mm/min)"
#~ msgid "Feedrate for Control Panel Moves in Z (default: 200mm/min)"
#~ msgstr ""
#~ "Velocità dei movimenti dell'asse Z in modalità manuale (default: 200mm/"
#~ "min)"

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -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 ""

View File

@ -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
msgid "You cannot set negative temperatures. To turn the bed off entirely, set its temperature to 0."
msgstr ""
#: pronterface.py:271
msgid "You must enter a temperature."
#: pronterface.py:265
msgid "Setting bed temperature to %f degrees Celsius."
msgstr ""
#: pronterface.py:286
msgid "You cannot set negative temperatures. To turn the bed off entirely, set its temperature to 0."
msgstr ""
#: pronterface.py:288
msgid "You must enter a temperature."
msgstr ""
#: pronterface.py:303
msgid "Do you want to erase the macro?"
msgstr ""
#: pronterface.py:290
#: pronterface.py:307
msgid "Cancelled."
msgstr ""
#: pronterface.py:331
#: pronterface.py:352
msgid " Opens file"
msgstr ""
#: pronterface.py:331
#: pronterface.py:352
msgid "&Open..."
msgstr ""
#: pronterface.py:332
#: pronterface.py:353
msgid " Edit open file"
msgstr ""
#: pronterface.py:332
#: pronterface.py:353
msgid "&Edit..."
msgstr ""
#: pronterface.py:333
#: pronterface.py:354
msgid " Clear output console"
msgstr ""
#: pronterface.py:333
#: pronterface.py:354
msgid "Clear console"
msgstr ""
#: pronterface.py:334
#: pronterface.py:355
msgid " Project slices"
msgstr ""
#: pronterface.py:334
#: pronterface.py:355
msgid "Projector"
msgstr ""
#: pronterface.py:335
#: pronterface.py:356
msgid " Closes the Window"
msgstr ""
#: pronterface.py:335
#: pronterface.py:356
msgid "E&xit"
msgstr ""
#: pronterface.py:336
#: pronterface.py:357
msgid "&File"
msgstr ""
#: pronterface.py:341
#: pronterface.py:362
msgid "&Macros"
msgstr ""
#: pronterface.py:342
#: pronterface.py:363
msgid "<&New...>"
msgstr ""
#: pronterface.py:343
#: pronterface.py:364
msgid " Options dialog"
msgstr ""
#: pronterface.py:343
#: pronterface.py:364
msgid "&Options"
msgstr ""
#: pronterface.py:345
#: pronterface.py:366
msgid " Adjust slicing settings"
msgstr ""
#: pronterface.py:345
#: pronterface.py:366
msgid "Slicing Settings"
msgstr ""
#: pronterface.py:352
#: pronterface.py:373
msgid "&Settings"
msgstr ""
#: pronterface.py:368
#: pronterface.py:389
msgid "Enter macro name"
msgstr ""
#: pronterface.py:371
#: pronterface.py:392
msgid "Macro name:"
msgstr ""
#: pronterface.py:374
#: pronterface.py:395
msgid "Ok"
msgstr ""
#: pronterface.py:378 pronterface.py:1330 pronterface.py:1587
#: pronterface.py:399 pronterface.py:1354 pronterface.py:1613
msgid "Cancel"
msgstr ""
#: pronterface.py:396
msgid "' is being used by built-in command"
#: pronterface.py:417
msgid "Name '%s' is being used by built-in command"
msgstr ""
#: pronterface.py:396
msgid "Name '"
msgstr ""
#: pronterface.py:399
#: pronterface.py:420
msgid "Macro name may contain only alphanumeric symbols and underscores"
msgstr ""
#: pronterface.py:448
#: pronterface.py:469
msgid "Port"
msgstr ""
#: pronterface.py:467
#: pronterface.py:488
msgid "Connect"
msgstr ""
#: pronterface.py:469
#: pronterface.py:490
msgid "Connect to the printer"
msgstr ""
#: pronterface.py:471
#: pronterface.py:492
msgid "Reset"
msgstr ""
#: pronterface.py:474 pronterface.py:751
#: pronterface.py:495 pronterface.py:772
msgid "Mini mode"
msgstr ""
#: pronterface.py:478
#: pronterface.py:499
msgid "Monitor Printer"
msgstr ""
#: pronterface.py:488
#: pronterface.py:509
msgid "Load file"
msgstr ""
#: pronterface.py:491
#: pronterface.py:512
msgid "Compose"
msgstr ""
#: pronterface.py:495
#: pronterface.py:516
msgid "SD"
msgstr ""
#: pronterface.py:503 pronterface.py:1374 pronterface.py:1419
#: pronterface.py:1469 pronterface.py:1494 pronterface.py:1528
#: pronterface.py:1543
#: pronterface.py:524 pronterface.py:1398 pronterface.py:1444
#: pronterface.py:1495 pronterface.py:1520 pronterface.py:1554
#: pronterface.py:1570
msgid "Pause"
msgstr ""
#: pronterface.py:516
#: pronterface.py:537
msgid "Send"
msgstr ""
#: pronterface.py:524 pronterface.py:625
#: pronterface.py:545 pronterface.py:646
msgid "mm/min"
msgstr ""
#: pronterface.py:526
#: pronterface.py:547
msgid "XY:"
msgstr ""
#: pronterface.py:528
#: pronterface.py:549
msgid "Z:"
msgstr ""
#: pronterface.py:551 pronterface.py:632
#: pronterface.py:572 pronterface.py:653
msgid "Heater:"
msgstr ""
#: pronterface.py:554 pronterface.py:574
#: pronterface.py:575 pronterface.py:595
msgid "Off"
msgstr ""
#: pronterface.py:566 pronterface.py:586
#: pronterface.py:587 pronterface.py:607
msgid "Set"
msgstr ""
#: pronterface.py:571 pronterface.py:634
#: pronterface.py:592 pronterface.py:655
msgid "Bed:"
msgstr ""
#: pronterface.py:619
#: pronterface.py:640
msgid "mm"
msgstr ""
#: pronterface.py:677 pronterface.py:1182 pronterface.py:1413
#: pronterface.py:698 pronterface.py:1206 pronterface.py:1438
msgid "Not connected to printer."
msgstr ""
#: pronterface.py:706
#: pronterface.py:727
msgid "SD Upload"
msgstr ""
#: pronterface.py:710
#: pronterface.py:731
msgid "SD Print"
msgstr ""
#: pronterface.py:758
#: pronterface.py:779
msgid "Full mode"
msgstr ""
#: pronterface.py:783
#: pronterface.py:804
msgid "Execute command: "
msgstr ""
#: pronterface.py:794
#: pronterface.py:815
msgid "click to add new custom button"
msgstr ""
#: pronterface.py:813
#: pronterface.py:834
msgid "Defines custom button. Usage: button <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# "
#: pronterface.py:1179
msgid " Line# %d of %d lines |"
msgstr ""
#: pronterface.py:1158
msgid " lines |"
#: pronterface.py:1184
msgid " Est: %s of %s remaining | "
msgstr ""
#: pronterface.py:1158
msgid "of "
msgstr ""
#: pronterface.py:1163
msgid " Est: "
msgstr ""
#: pronterface.py:1164
msgid " of: "
msgstr ""
#: pronterface.py:1165
msgid " Remaining | "
msgstr ""
#: pronterface.py:1166
#: pronterface.py:1186
msgid " Z: %0.2f mm"
msgstr ""
#: pronterface.py:1233
#: pronterface.py:1257
msgid "Opening file failed."
msgstr ""
#: pronterface.py:1239
#: pronterface.py:1263
msgid "Starting print"
msgstr ""
#: pronterface.py:1262
#: pronterface.py:1286
msgid "Pick SD file"
msgstr ""
#: pronterface.py:1262
#: pronterface.py:1286
msgid "Select the file to print"
msgstr ""
#: pronterface.py:1297
#: pronterface.py:1321
msgid "Failed to execute slicing software: "
msgstr ""
#: pronterface.py:1304
#: pronterface.py:1328
msgid "Slicing..."
msgstr ""
#: pronterface.py:1317 pronterface.py:1372
#: pronterface.py:1341
msgid ", %d lines"
msgstr ""
#: pronterface.py:1324
#: pronterface.py:1348
msgid "Load File"
msgstr ""
#: pronterface.py:1331
#: pronterface.py:1355
msgid "Slicing "
msgstr ""
#: pronterface.py:1350
#: pronterface.py:1374
msgid "Open file to print"
msgstr ""
#: pronterface.py:1351
msgid "OBJ, STL, and GCODE files (;*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ;)"
msgstr ""
#: pronterface.py:1358
msgid "File not found!"
#: pronterface.py:1375
msgid "OBJ, STL, and GCODE files (*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ)|*.gcode;*.gco;*.g;*.stl;*.STL;*.obj;*.OBJ|All Files (*.*)|*.*"
msgstr ""
#: pronterface.py:1382
msgid "File not found!"
msgstr ""
#: pronterface.py:1396
msgid "Loaded %s, %d lines"
msgstr ""
#: pronterface.py:1406
msgid ""
"mm of filament used in this print\n"
msgstr ""
#: pronterface.py:1383
#: pronterface.py:1407
msgid ""
"mm in X\n"
"and is"
"the print goes from %f mm to %f mm in X\n"
"and is %f mm wide\n"
msgstr ""
#: pronterface.py:1383 pronterface.py:1384
#: pronterface.py:1408
msgid ""
"mm wide\n"
"the print goes from %f mm to %f mm in Y\n"
"and is %f mm wide\n"
msgstr ""
#: pronterface.py:1383 pronterface.py:1384 pronterface.py:1385
msgid "mm to"
msgstr ""
#: pronterface.py:1383 pronterface.py:1384 pronterface.py:1385
msgid "the print goes from"
msgstr ""
#: pronterface.py:1384
#: pronterface.py:1409
msgid ""
"mm in Y\n"
"and is"
msgstr ""
#: pronterface.py:1385
msgid ""
"mm high\n"
msgstr ""
#: pronterface.py:1385
msgid ""
"mm in Z\n"
"and is"
msgstr ""
#: pronterface.py:1386
msgid "Estimated duration (pessimistic): "
"the print goes from %f mm to %f mm in Z\n"
"and is %f mm high\n"
msgstr ""
#: pronterface.py:1410
msgid "Estimated duration (pessimistic): "
msgstr ""
#: pronterface.py:1435
msgid "No file loaded. Please use load first."
msgstr ""
#: pronterface.py:1421
#: pronterface.py:1446
msgid "Restart"
msgstr ""
#: pronterface.py:1425
#: pronterface.py:1450
msgid "File upload complete"
msgstr ""
#: pronterface.py:1444
#: pronterface.py:1469
msgid "Pick SD filename"
msgstr ""
#: pronterface.py:1452
#: pronterface.py:1477
msgid "Paused."
msgstr ""
#: pronterface.py:1462
#: pronterface.py:1488
msgid "Resume"
msgstr ""
#: pronterface.py:1478
#: pronterface.py:1504
msgid "Connecting..."
msgstr ""
#: pronterface.py:1509
#: pronterface.py:1535
msgid "Disconnected."
msgstr ""
#: pronterface.py:1536
#: pronterface.py:1562
msgid "Reset."
msgstr ""
#: pronterface.py:1537
#: pronterface.py:1563
msgid "Are you sure you want to reset the printer?"
msgstr ""
#: pronterface.py:1537
#: pronterface.py:1563
msgid "Reset?"
msgstr ""
#: pronterface.py:1583
#: pronterface.py:1609
msgid "Save"
msgstr ""
#: pronterface.py:1639
#: pronterface.py:1665
msgid "Edit settings"
msgstr ""
#: pronterface.py:1641
#: pronterface.py:1667
msgid "Defaults"
msgstr ""
#: pronterface.py:1670
#: pronterface.py:1696
msgid "Custom button"
msgstr ""
#: pronterface.py:1675
#: pronterface.py:1701
msgid "Button title"
msgstr ""
#: pronterface.py:1678
#: pronterface.py:1704
msgid "Command"
msgstr ""
#: pronterface.py:1687
#: pronterface.py:1713
msgid "Color"
msgstr ""

View File

@ -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)

View File

@ -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

View File

@ -37,6 +37,13 @@ class dispframe(wx.Frame):
self.p=printer
self.pic=wx.StaticBitmap(self)
self.bitmap=wx.EmptyBitmap(*res)
self.bbitmap=wx.EmptyBitmap(*res)
dc=wx.MemoryDC()
dc.SelectObject(self.bbitmap)
dc.SetBackground(wx.Brush("black"))
dc.Clear()
dc.SelectObject(wx.NullBitmap)
self.SetBackgroundColour("black")
self.pic.Hide()
self.pen=wx.Pen("white")
@ -61,20 +68,33 @@ class dispframe(wx.Frame):
self.pic.SetBitmap(self.bitmap)
self.pic.Show()
self.Refresh()
#self.pic.SetBitmap(self.bitmap)
except:
raise
pass
def nextimg(self,event):
if self.index<len(self.layers):
i=self.index
#print self.layers[i]
print i
wx.CallAfter(self.drawlayer,self.layers[i])
if self.p!=None:
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.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()

View File

@ -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())

File diff suppressed because it is too large Load Diff