This commit is contained in:
Jaime van Kessel 2016-02-12 09:46:23 +01:00
commit b2f37390fd
106 changed files with 29578 additions and 20272 deletions

View File

@ -44,7 +44,7 @@ if(NOT ${URANIUM_SCRIPTS_DIR} STREQUAL "")
file(GLOB po_files ${CMAKE_SOURCE_DIR}/resources/i18n/${lang}/*.po) file(GLOB po_files ${CMAKE_SOURCE_DIR}/resources/i18n/${lang}/*.po)
foreach(po_file ${po_files}) foreach(po_file ${po_files})
string(REGEX REPLACE ".*/(.*).po" "${CMAKE_BINARY_DIR}/resources/i18n/${lang}/LC_MESSAGES/\\1.mo" mo_file ${po_file}) string(REGEX REPLACE ".*/(.*).po" "${CMAKE_BINARY_DIR}/resources/i18n/${lang}/LC_MESSAGES/\\1.mo" mo_file ${po_file})
add_custom_command(TARGET translations POST_BUILD COMMAND mkdir ARGS -p ${CMAKE_BINARY_DIR}/resources/i18n/${lang}/LC_MESSAGES/ COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} ARGS ${po_file} -o ${mo_file}) add_custom_command(TARGET translations POST_BUILD COMMAND mkdir ARGS -p ${CMAKE_BINARY_DIR}/resources/i18n/${lang}/LC_MESSAGES/ COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} ARGS ${po_file} -o ${mo_file} -f)
endforeach() endforeach()
endforeach() endforeach()
install(DIRECTORY ${CMAKE_BINARY_DIR}/resources DESTINATION ${CMAKE_INSTALL_DATADIR}/cura) install(DIRECTORY ${CMAKE_BINARY_DIR}/resources DESTINATION ${CMAKE_INSTALL_DATADIR}/cura)
@ -60,6 +60,9 @@ if(NOT APPLE AND NOT WIN32)
install(DIRECTORY cura DESTINATION lib/python${PYTHON_VERSION_MAJOR}/dist-packages FILES_MATCHING PATTERN *.py) install(DIRECTORY cura DESTINATION lib/python${PYTHON_VERSION_MAJOR}/dist-packages FILES_MATCHING PATTERN *.py)
install(FILES ${CMAKE_BINARY_DIR}/CuraVersion.py DESTINATION lib/python${PYTHON_VERSION_MAJOR}/dist-packages/cura) install(FILES ${CMAKE_BINARY_DIR}/CuraVersion.py DESTINATION lib/python${PYTHON_VERSION_MAJOR}/dist-packages/cura)
install(FILES cura.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications) install(FILES cura.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)
install(FILES cura.sharedmimeinfo
DESTINATION ${CMAKE_INSTALL_DATADIR}/mime/packages/
RENAME cura.xml )
else() else()
install(DIRECTORY cura DESTINATION lib/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/site-packages FILES_MATCHING PATTERN *.py) install(DIRECTORY cura DESTINATION lib/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/site-packages FILES_MATCHING PATTERN *.py)
install(FILES ${CMAKE_BINARY_DIR}/CuraVersion.py DESTINATION lib/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/site-packages/cura) install(FILES ${CMAKE_BINARY_DIR}/CuraVersion.py DESTINATION lib/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/site-packages/cura)

View File

@ -10,6 +10,6 @@ TryExec=/usr/bin/cura_app.py
Icon=/usr/share/cura/resources/images/cura-icon.png Icon=/usr/share/cura/resources/images/cura-icon.png
Terminal=false Terminal=false
Type=Application Type=Application
MimeType=application/sla;image/bmp;image/gif;image/jpeg;image/png MimeType=application/sla;application/vnd.ms-3mfdocument;application/prs.wavefront-obj;image/bmp;image/gif;image/jpeg;image/png
Categories=Graphics; Categories=Graphics;
Keywords=3D;Printing; Keywords=3D;Printing;

22
cura.sharedmimeinfo Normal file
View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
<mime-type type="application/vnd.ms-3mfdocument">
<comment>3D Manufacturing Format Document</comment>
<icon name="unknown"/>
<glob-deleteall/>
<glob pattern="*.3mf"/>
</mime-type>
<mime-type type="application/sla">
<comment>Computer-aided design and manufacturing format</comment>
<icon name="unknown"/>
<glob-deleteall/>
<glob pattern="*.stl"/>
</mime-type>
<mime-type type="application/prs.wavefront-obj">
<sub-class-of type="text/plain"/>
<comment>Wavefront 3D Object file</comment>
<icon name="unknown"/>
<glob-deleteall/>
<glob pattern="*.obj"/>
</mime-type>
</mime-info>

View File

@ -146,7 +146,7 @@ class BuildVolume(SceneNode):
skirt_size = 0.0 skirt_size = 0.0
profile = Application.getInstance().getMachineManager().getActiveProfile() profile = Application.getInstance().getMachineManager().getWorkingProfile()
if profile: if profile:
skirt_size = self._getSkirtSize(profile) skirt_size = self._getSkirtSize(profile)
@ -176,7 +176,7 @@ class BuildVolume(SceneNode):
if self._active_profile: if self._active_profile:
self._active_profile.settingValueChanged.disconnect(self._onSettingValueChanged) self._active_profile.settingValueChanged.disconnect(self._onSettingValueChanged)
self._active_profile = Application.getInstance().getMachineManager().getActiveProfile() self._active_profile = Application.getInstance().getMachineManager().getWorkingProfile()
if self._active_profile: if self._active_profile:
self._active_profile.settingValueChanged.connect(self._onSettingValueChanged) self._active_profile.settingValueChanged.connect(self._onSettingValueChanged)
self._updateDisallowedAreas() self._updateDisallowedAreas()

View File

@ -17,6 +17,7 @@ class ConvexHullDecorator(SceneNodeDecorator):
self._profile = None self._profile = None
Application.getInstance().getMachineManager().activeProfileChanged.connect(self._onActiveProfileChanged) Application.getInstance().getMachineManager().activeProfileChanged.connect(self._onActiveProfileChanged)
Application.getInstance().getMachineManager().activeMachineInstanceChanged.connect(self._onActiveMachineInstanceChanged)
self._onActiveProfileChanged() self._onActiveProfileChanged()
## Force that a new (empty) object is created upon copy. ## Force that a new (empty) object is created upon copy.
@ -62,11 +63,19 @@ class ConvexHullDecorator(SceneNodeDecorator):
if self._profile: if self._profile:
self._profile.settingValueChanged.disconnect(self._onSettingValueChanged) self._profile.settingValueChanged.disconnect(self._onSettingValueChanged)
self._profile = Application.getInstance().getMachineManager().getActiveProfile() self._profile = Application.getInstance().getMachineManager().getWorkingProfile()
if self._profile: if self._profile:
self._profile.settingValueChanged.connect(self._onSettingValueChanged) self._profile.settingValueChanged.connect(self._onSettingValueChanged)
def _onActiveMachineInstanceChanged(self):
if self._convex_hull_job:
self._convex_hull_job.cancel()
self.setConvexHull(None)
if self._convex_hull_node:
self._convex_hull_node.setParent(None)
self._convex_hull_node = None
def _onSettingValueChanged(self, setting): def _onSettingValueChanged(self, setting):
if setting == "print_sequence": if setting == "print_sequence":
if self._convex_hull_job: if self._convex_hull_job:

View File

@ -49,7 +49,7 @@ class ConvexHullJob(Job):
# This is done because of rounding errors. # This is done because of rounding errors.
hull = hull.getMinkowskiHull(Polygon(numpy.array([[-1, -1], [-1, 1], [1, 1], [1, -1]], numpy.float32))) hull = hull.getMinkowskiHull(Polygon(numpy.array([[-1, -1], [-1, 1], [1, 1], [1, -1]], numpy.float32)))
profile = Application.getInstance().getMachineManager().getActiveProfile() profile = Application.getInstance().getMachineManager().getWorkingProfile()
if profile: if profile:
if profile.getSettingValue("print_sequence") == "one_at_a_time" and not self._node.getParent().callDecoration("isGroup"): if profile.getSettingValue("print_sequence") == "one_at_a_time" and not self._node.getParent().callDecoration("isGroup"):
# Printing one at a time and it's not an object in a group # Printing one at a time and it's not an object in a group
@ -64,12 +64,17 @@ class ConvexHullJob(Job):
hull = hull.getMinkowskiHull(Polygon(numpy.array(profile.getSettingValue("machine_head_polygon"),numpy.float32))) hull = hull.getMinkowskiHull(Polygon(numpy.array(profile.getSettingValue("machine_head_polygon"),numpy.float32)))
else: else:
self._node.callDecoration("setConvexHullHead", None) self._node.callDecoration("setConvexHullHead", None)
if self._node.getParent() is None: #Node was already deleted before job is done.
self._node.callDecoration("setConvexHullNode",None)
self._node.callDecoration("setConvexHull", None)
self._node.callDecoration("setConvexHullJob", None)
return
hull_node = ConvexHullNode.ConvexHullNode(self._node, hull, Application.getInstance().getController().getScene().getRoot()) hull_node = ConvexHullNode.ConvexHullNode(self._node, hull, Application.getInstance().getController().getScene().getRoot())
self._node.callDecoration("setConvexHullNode", hull_node) self._node.callDecoration("setConvexHullNode", hull_node)
self._node.callDecoration("setConvexHull", hull) self._node.callDecoration("setConvexHull", hull)
self._node.callDecoration("setConvexHullJob", None) self._node.callDecoration("setConvexHullJob", None)
if self._node.getParent().callDecoration("isGroup"): if self._node.getParent() and self._node.getParent().callDecoration("isGroup"):
job = self._node.getParent().callDecoration("getConvexHullJob") job = self._node.getParent().callDecoration("getConvexHullJob")
if job: if job:
job.cancel() job.cancel()

View File

@ -57,8 +57,10 @@ numpy.seterr(all="ignore")
if platform.system() == "Linux": # Needed for platform.linux_distribution, which is not available on Windows and OSX if platform.system() == "Linux": # Needed for platform.linux_distribution, which is not available on Windows and OSX
# For Ubuntu: https://bugs.launchpad.net/ubuntu/+source/python-qt4/+bug/941826 # For Ubuntu: https://bugs.launchpad.net/ubuntu/+source/python-qt4/+bug/941826
if platform.linux_distribution()[0] in ("Ubuntu", ): # Just in case it also happens on Debian, so it can be added if platform.linux_distribution()[0] in ("Ubuntu", ): # TODO: Needs a "if X11_GFX == 'nvidia'" here. The workaround is only needed on Ubuntu+NVidia drivers. Other drivers are not affected, but fine with this fix.
from OpenGL import GL import ctypes
from ctypes.util import find_library
ctypes.CDLL(find_library('GL'), ctypes.RTLD_GLOBAL)
try: try:
from cura.CuraVersion import CuraVersion from cura.CuraVersion import CuraVersion
@ -100,10 +102,12 @@ class CuraApplication(QtApplication):
self._platform_activity = False self._platform_activity = False
self._scene_boundingbox = AxisAlignedBox() self._scene_boundingbox = AxisAlignedBox()
self._job_name = None self._job_name = None
self._center_after_select = False
self.getMachineManager().activeMachineInstanceChanged.connect(self._onActiveMachineChanged) self.getMachineManager().activeMachineInstanceChanged.connect(self._onActiveMachineChanged)
self.getMachineManager().addMachineRequested.connect(self._onAddMachineRequested) self.getMachineManager().addMachineRequested.connect(self._onAddMachineRequested)
self.getController().getScene().sceneChanged.connect(self.updatePlatformActivity) self.getController().getScene().sceneChanged.connect(self.updatePlatformActivity)
self.getController().toolOperationStopped.connect(self._onToolOperationStopped)
Resources.addType(self.ResourceTypes.QmlFiles, "qml") Resources.addType(self.ResourceTypes.QmlFiles, "qml")
Resources.addType(self.ResourceTypes.Firmware, "firmware") Resources.addType(self.ResourceTypes.Firmware, "firmware")
@ -146,9 +150,6 @@ class CuraApplication(QtApplication):
parser.add_argument("--debug", dest="debug-mode", action="store_true", default=False, help="Enable detailed crash reports.") parser.add_argument("--debug", dest="debug-mode", action="store_true", default=False, help="Enable detailed crash reports.")
def run(self): def run(self):
if "PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION" not in os.environ or os.environ["PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION"] != "cpp":
Logger.log("w", "Using Python implementation of Protobuf, expect bad performance!")
self._i18n_catalog = i18nCatalog("cura"); self._i18n_catalog = i18nCatalog("cura");
i18nCatalog.setTagReplacements({ i18nCatalog.setTagReplacements({
@ -231,9 +232,7 @@ class CuraApplication(QtApplication):
else: else:
self.getController().setActiveTool("TranslateTool") self.getController().setActiveTool("TranslateTool")
if Preferences.getInstance().getValue("view/center_on_select"): if Preferences.getInstance().getValue("view/center_on_select"):
self._camera_animation.setStart(self.getController().getTool("CameraTool").getOrigin()) self._center_after_select = True
self._camera_animation.setTarget(Selection.getSelectedObject(0).getWorldPosition())
self._camera_animation.start()
else: else:
if self.getController().getActiveTool(): if self.getController().getActiveTool():
self._previous_active_tool = self.getController().getActiveTool().getPluginId() self._previous_active_tool = self.getController().getActiveTool().getPluginId()
@ -241,6 +240,13 @@ class CuraApplication(QtApplication):
else: else:
self._previous_active_tool = None self._previous_active_tool = None
def _onToolOperationStopped(self, event):
if self._center_after_select:
self._center_after_select = False
self._camera_animation.setStart(self.getController().getTool("CameraTool").getOrigin())
self._camera_animation.setTarget(Selection.getSelectedObject(0).getWorldPosition())
self._camera_animation.start()
requestAddPrinter = pyqtSignal() requestAddPrinter = pyqtSignal()
activityChanged = pyqtSignal() activityChanged = pyqtSignal()
sceneBoundingBoxChanged = pyqtSignal() sceneBoundingBoxChanged = pyqtSignal()
@ -493,18 +499,18 @@ class CuraApplication(QtApplication):
@pyqtSlot(str, result = "QVariant") @pyqtSlot(str, result = "QVariant")
def getSettingValue(self, key): def getSettingValue(self, key):
if not self.getMachineManager().getActiveProfile(): if not self.getMachineManager().getWorkingProfile():
return None return None
return self.getMachineManager().getActiveProfile().getSettingValue(key) return self.getMachineManager().getWorkingProfile().getSettingValue(key)
#return self.getActiveMachine().getSettingValueByKey(key) #return self.getActiveMachine().getSettingValueByKey(key)
## Change setting by key value pair ## Change setting by key value pair
@pyqtSlot(str, "QVariant") @pyqtSlot(str, "QVariant")
def setSettingValue(self, key, value): def setSettingValue(self, key, value):
if not self.getMachineManager().getActiveProfile(): if not self.getMachineManager().getWorkingProfile():
return return
self.getMachineManager().getActiveProfile().setSettingValue(key, value) self.getMachineManager().getWorkingProfile().setSettingValue(key, value)
@pyqtSlot() @pyqtSlot()
def mergeSelected(self): def mergeSelected(self):

View File

@ -140,26 +140,7 @@ class Layer():
if polygon.type == Polygon.MoveCombingType or polygon.type == Polygon.MoveRetractionType: if polygon.type == Polygon.MoveCombingType or polygon.type == Polygon.MoveRetractionType:
points[:,1] += 0.01 points[:,1] += 0.01
# Calculate normals for the entire polygon using numpy. normals = polygon.getNormals()
normals = numpy.copy(points)
normals[:,1] = 0.0 # We are only interested in 2D normals
# Calculate the edges between points.
# The call to numpy.roll shifts the entire array by one so that
# we end up subtracting each next point from the current, wrapping
# around. This gives us the edges from the next point to the current
# point.
normals[:] = normals[:] - numpy.roll(normals, -1, axis = 0)
# Calculate the length of each edge using standard Pythagoras
lengths = numpy.sqrt(normals[:,0] ** 2 + normals[:,2] ** 2)
# The normal of a 2D vector is equal to its x and y coordinates swapped
# and then x inverted. This code does that.
normals[:,[0, 2]] = normals[:,[2, 0]]
normals[:,0] *= -1
# Normalize the normals.
normals[:,0] /= lengths
normals[:,2] /= lengths
# Scale all by the line width of the polygon so we can easily offset. # Scale all by the line width of the polygon so we can easily offset.
normals *= (polygon.lineWidth / 2) normals *= (polygon.lineWidth / 2)
@ -199,16 +180,33 @@ class Polygon():
self._data = data self._data = data
self._line_width = line_width / 1000 self._line_width = line_width / 1000
if type == self.Inset0Type:
self._color = Color(1.0, 0.0, 0.0, 1.0)
elif self._type == self.InsetXType:
self._color = Color(0.0, 1.0, 0.0, 1.0)
elif self._type == self.SkinType:
self._color = Color(1.0, 1.0, 0.0, 1.0)
elif self._type == self.SupportType:
self._color = Color(0.0, 1.0, 1.0, 1.0)
elif self._type == self.SkirtType:
self._color = Color(0.0, 1.0, 1.0, 1.0)
elif self._type == self.InfillType:
self._color = Color(1.0, 0.74, 0.0, 1.0)
elif self._type == self.SupportInfillType:
self._color = Color(0.0, 1.0, 1.0, 1.0)
elif self._type == self.MoveCombingType:
self._color = Color(0.0, 0.0, 1.0, 1.0)
elif self._type == self.MoveRetractionType:
self._color = Color(0.5, 0.5, 1.0, 1.0)
else:
self._color = Color(1.0, 1.0, 1.0, 1.0)
def build(self, offset, vertices, colors, indices): def build(self, offset, vertices, colors, indices):
self._begin = offset self._begin = offset
self._end = self._begin + len(self._data) - 1 self._end = self._begin + len(self._data) - 1
color = self.getColor()
color.setValues(color.r * 0.5, color.g * 0.5, color.b * 0.5, color.a)
color = numpy.array([color.r, color.g, color.b, color.a], numpy.float32)
vertices[self._begin:self._end + 1, :] = self._data[:, :] vertices[self._begin:self._end + 1, :] = self._data[:, :]
colors[self._begin:self._end + 1, :] = color colors[self._begin:self._end + 1, :] = numpy.array([self._color.r * 0.5, self._color.g * 0.5, self._color.b * 0.5, self._color.a], numpy.float32)
for i in range(self._begin, self._end): for i in range(self._begin, self._end):
indices[i, 0] = i indices[i, 0] = i
@ -218,26 +216,7 @@ class Polygon():
indices[self._end, 1] = self._begin indices[self._end, 1] = self._begin
def getColor(self): def getColor(self):
if self._type == self.Inset0Type: return self._color
return Color(1.0, 0.0, 0.0, 1.0)
elif self._type == self.InsetXType:
return Color(0.0, 1.0, 0.0, 1.0)
elif self._type == self.SkinType:
return Color(1.0, 1.0, 0.0, 1.0)
elif self._type == self.SupportType:
return Color(0.0, 1.0, 1.0, 1.0)
elif self._type == self.SkirtType:
return Color(0.0, 1.0, 1.0, 1.0)
elif self._type == self.InfillType:
return Color(1.0, 0.74, 0.0, 1.0)
elif self._type == self.SupportInfillType:
return Color(0.0, 1.0, 1.0, 1.0)
elif self._type == self.MoveCombingType:
return Color(0.0, 0.0, 1.0, 1.0)
elif self._type == self.MoveRetractionType:
return Color(0.5, 0.5, 1.0, 1.0)
else:
return Color(1.0, 1.0, 1.0, 1.0)
def vertexCount(self): def vertexCount(self):
return len(self._data) return len(self._data)
@ -257,3 +236,27 @@ class Polygon():
@property @property
def lineWidth(self): def lineWidth(self):
return self._line_width return self._line_width
# Calculate normals for the entire polygon using numpy.
def getNormals(self):
normals = numpy.copy(self._data)
normals[:,1] = 0.0 # We are only interested in 2D normals
# Calculate the edges between points.
# The call to numpy.roll shifts the entire array by one so that
# we end up subtracting each next point from the current, wrapping
# around. This gives us the edges from the next point to the current
# point.
normals[:] = normals[:] - numpy.roll(normals, -1, axis = 0)
# Calculate the length of each edge using standard Pythagoras
lengths = numpy.sqrt(normals[:,0] ** 2 + normals[:,2] ** 2)
# The normal of a 2D vector is equal to its x and y coordinates swapped
# and then x inverted. This code does that.
normals[:,[0, 2]] = normals[:,[2, 0]]
normals[:,0] *= -1
# Normalize the normals.
normals[:,0] /= lengths
normals[:,2] /= lengths
return normals

View File

@ -21,7 +21,7 @@ class OneAtATimeIterator(Iterator.Iterator):
if not type(node) is SceneNode: if not type(node) is SceneNode:
continue continue
if node.getBoundingBox().height > Application.getInstance().getMachineManager().getActiveProfile().getSettingValue("gantry_height"): if node.getBoundingBox().height > Application.getInstance().getMachineManager().getWorkingProfile().getSettingValue("gantry_height"):
return return
if node.callDecoration("getConvexHull"): if node.callDecoration("getConvexHull"):
node_list.append(node) node_list.append(node)

View File

@ -66,6 +66,6 @@ class PrintInformation(QObject):
self.currentPrintTimeChanged.emit() self.currentPrintTimeChanged.emit()
# Material amount is sent as an amount of mm^3, so calculate length from that # Material amount is sent as an amount of mm^3, so calculate length from that
r = Application.getInstance().getMachineManager().getActiveProfile().getSettingValue("material_diameter") / 2 r = Application.getInstance().getMachineManager().getWorkingProfile().getSettingValue("material_diameter") / 2
self._material_amount = round((amount / (math.pi * r ** 2)) / 1000, 2) self._material_amount = round((amount / (math.pi * r ** 2)) / 1000, 2)
self.materialAmountChanged.emit() self.materialAmountChanged.emit()

View File

@ -12,14 +12,11 @@ def exceptHook(type, value, traceback):
sys.excepthook = exceptHook sys.excepthook = exceptHook
try: # Workaround for a race condition on certain systems where there
from google.protobuf.pyext import _message # is a race condition between Arcus and PyQt. Importing Arcus
except ImportError: # first seems to prevent Sip from going into a state where it
pass # tries to create PyQt objects on a non-main thread.
else: import Arcus
os.environ["PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION"] = "cpp"
if True: # To make the code style checker stop complaining
import cura.CuraApplication import cura.CuraApplication
if sys.platform == "win32" and hasattr(sys, "frozen"): if sys.platform == "win32" and hasattr(sys, "frozen"):

View File

@ -13,68 +13,47 @@ class AutoSave(Extension):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
Preferences.getInstance().preferenceChanged.connect(self._onPreferenceChanged) #Preferences.getInstance().preferenceChanged.connect(self._onPreferenceChanged)
Preferences.getInstance().preferenceChanged.connect(self._triggerTimer)
machine_manager = Application.getInstance().getMachineManager() machine_manager = Application.getInstance().getMachineManager()
self._profile = None self._profile = None
machine_manager.activeProfileChanged.connect(self._onActiveProfileChanged) machine_manager.activeProfileChanged.connect(self._onActiveProfileChanged)
machine_manager.profileNameChanged.connect(self._onProfilesChanged) machine_manager.profileNameChanged.connect(self._triggerTimer)
machine_manager.profilesChanged.connect(self._onProfilesChanged) machine_manager.profilesChanged.connect(self._triggerTimer)
machine_manager.machineInstanceNameChanged.connect(self._onInstanceNameChanged) machine_manager.machineInstanceNameChanged.connect(self._triggerTimer)
machine_manager.machineInstancesChanged.connect(self._onInstancesChanged) machine_manager.machineInstancesChanged.connect(self._triggerTimer)
Application
self._onActiveProfileChanged() self._onActiveProfileChanged()
Preferences.getInstance().addPreference("cura/autosave_delay", 1000 * 10)
self._change_timer = QTimer() self._change_timer = QTimer()
self._change_timer.setInterval(1000 * 60) self._change_timer.setInterval(Preferences.getInstance().getValue("cura/autosave_delay"))
self._change_timer.setSingleShot(True) self._change_timer.setSingleShot(True)
self._change_timer.timeout.connect(self._onTimeout) self._change_timer.timeout.connect(self._onTimeout)
self._save_preferences = False self._saving = False
self._save_profiles = False
self._save_instances = False
def _onPreferenceChanged(self, preference): def _triggerTimer(self, *args):
self._save_preferences = True if not self._saving:
self._change_timer.start()
def _onSettingValueChanged(self, setting):
self._save_profiles = True
self._change_timer.start() self._change_timer.start()
def _onActiveProfileChanged(self): def _onActiveProfileChanged(self):
if self._profile: if self._profile:
self._profile.settingValueChanged.disconnect(self._onSettingValueChanged) self._profile.settingValueChanged.disconnect(self._triggerTimer)
self._profile = Application.getInstance().getMachineManager().getActiveProfile() self._profile = Application.getInstance().getMachineManager().getWorkingProfile()
if self._profile: if self._profile:
self._profile.settingValueChanged.connect(self._onSettingValueChanged) self._profile.settingValueChanged.connect(self._triggerTimer)
def _onProfilesChanged(self):
self._save_profiles = True
self._change_timer.start()
def _onInstanceNameChanged(self, name):
self._onInstancesChanged()
def _onInstancesChanged(self):
self._save_instances = True
self._change_timer.start()
def _onTimeout(self): def _onTimeout(self):
self._saving = True # To prevent the save process from triggering another autosave.
Logger.log("d", "Autosaving preferences, instances and profiles") Logger.log("d", "Autosaving preferences, instances and profiles")
if self._save_preferences:
Preferences.getInstance().writeToFile(Resources.getStoragePath(Resources.Preferences, Application.getInstance().getApplicationName() + ".cfg")) Preferences.getInstance().writeToFile(Resources.getStoragePath(Resources.Preferences, Application.getInstance().getApplicationName() + ".cfg"))
if self._save_instances:
Application.getInstance().getMachineManager().saveMachineInstances() Application.getInstance().getMachineManager().saveMachineInstances()
if self._save_profiles:
Application.getInstance().getMachineManager().saveProfiles() Application.getInstance().getMachineManager().saveProfiles()
self._save_preferences = False self._saving = False
self._save_instances = False
self._save_profiles = False

View File

@ -0,0 +1,104 @@
syntax = "proto3";
package cura.proto;
message ObjectList
{
repeated Object objects = 1;
repeated Setting settings = 2;
}
// typeid 1
message Slice
{
repeated ObjectList object_lists = 1;
}
message Object
{
int64 id = 1;
bytes vertices = 2; //An array of 3 floats.
bytes normals = 3; //An array of 3 floats.
bytes indices = 4; //An array of ints.
repeated Setting settings = 5; // Setting override per object, overruling the global settings.
}
// typeid 3
message Progress
{
float amount = 1;
}
// typeid 2
message SlicedObjectList
{
repeated SlicedObject objects = 1;
}
message SlicedObject
{
int64 id = 1;
repeated Layer layers = 2;
}
message Layer {
int32 id = 1;
float height = 2;
float thickness = 3;
repeated Polygon polygons = 4;
}
message Polygon {
enum Type {
NoneType = 0;
Inset0Type = 1;
InsetXType = 2;
SkinType = 3;
SupportType = 4;
SkirtType = 5;
InfillType = 6;
SupportInfillType = 7;
MoveCombingType = 8;
MoveRetractionType = 9;
}
Type type = 1;
bytes points = 2;
float line_width = 3;
}
// typeid 4
message GCodeLayer {
int64 id = 1;
bytes data = 2;
}
// typeid 5
message ObjectPrintTime {
int64 id = 1;
float time = 2;
float material_amount = 3;
}
// typeid 6
message SettingList {
repeated Setting settings = 1;
}
message Setting {
string name = 1;
bytes value = 2;
}
// typeid 7
message GCodePrefix {
bytes data = 2;
}
// typeid 8
message SlicingFinished {
}

View File

@ -9,12 +9,13 @@ from UM.Preferences import Preferences
from UM.Math.Vector import Vector from UM.Math.Vector import Vector
from UM.Signal import Signal from UM.Signal import Signal
from UM.Logger import Logger from UM.Logger import Logger
from UM.Qt.Bindings.BackendProxy import BackendState #To determine the state of the slicing job.
from UM.Resources import Resources from UM.Resources import Resources
from UM.Settings.SettingOverrideDecorator import SettingOverrideDecorator from UM.Settings.SettingOverrideDecorator import SettingOverrideDecorator
from UM.Message import Message from UM.Message import Message
from UM.PluginRegistry import PluginRegistry
from cura.OneAtATimeIterator import OneAtATimeIterator from cura.OneAtATimeIterator import OneAtATimeIterator
from . import Cura_pb2
from . import ProcessSlicedObjectListJob from . import ProcessSlicedObjectListJob
from . import ProcessGCodeJob from . import ProcessGCodeJob
from . import StartSliceJob from . import StartSliceJob
@ -61,11 +62,12 @@ class CuraEngineBackend(Backend):
self._change_timer.setSingleShot(True) self._change_timer.setSingleShot(True)
self._change_timer.timeout.connect(self.slice) self._change_timer.timeout.connect(self.slice)
self._message_handlers[Cura_pb2.SlicedObjectList] = self._onSlicedObjectListMessage self._message_handlers["cura.proto.SlicedObjectList"] = self._onSlicedObjectListMessage
self._message_handlers[Cura_pb2.Progress] = self._onProgressMessage self._message_handlers["cura.proto.Progress"] = self._onProgressMessage
self._message_handlers[Cura_pb2.GCodeLayer] = self._onGCodeLayerMessage self._message_handlers["cura.proto.GCodeLayer"] = self._onGCodeLayerMessage
self._message_handlers[Cura_pb2.GCodePrefix] = self._onGCodePrefixMessage self._message_handlers["cura.proto.GCodePrefix"] = self._onGCodePrefixMessage
self._message_handlers[Cura_pb2.ObjectPrintTime] = self._onObjectPrintTimeMessage self._message_handlers["cura.proto.ObjectPrintTime"] = self._onObjectPrintTimeMessage
self._message_handlers["cura.proto.SlicingFinished"] = self._onSlicingFinishedMessage
self._slicing = False self._slicing = False
self._restart = False self._restart = False
@ -74,6 +76,8 @@ class CuraEngineBackend(Backend):
self._message = None self._message = None
self.backendQuit.connect(self._onBackendQuit)
self.backendConnected.connect(self._onBackendConnected) self.backendConnected.connect(self._onBackendConnected)
Application.getInstance().getController().toolOperationStarted.connect(self._onToolOperationStarted) Application.getInstance().getController().toolOperationStarted.connect(self._onToolOperationStarted)
Application.getInstance().getController().toolOperationStopped.connect(self._onToolOperationStopped) Application.getInstance().getController().toolOperationStopped.connect(self._onToolOperationStopped)
@ -126,6 +130,7 @@ class CuraEngineBackend(Backend):
return #No slicing if we have error values since those are by definition illegal values. return #No slicing if we have error values since those are by definition illegal values.
self.processingProgress.emit(0.0) self.processingProgress.emit(0.0)
self.backendStateChange.emit(BackendState.NOT_STARTED)
if self._message: if self._message:
self._message.setProgress(-1) self._message.setProgress(-1)
#else: #else:
@ -148,6 +153,7 @@ class CuraEngineBackend(Backend):
Logger.log("d", "Killing engine process") Logger.log("d", "Killing engine process")
try: try:
self._process.terminate() self._process.terminate()
self._process = None
except: # terminating a process that is already terminating causes an exception, silently ignore this. except: # terminating a process that is already terminating causes an exception, silently ignore this.
pass pass
@ -177,7 +183,7 @@ class CuraEngineBackend(Backend):
if self._profile: if self._profile:
self._profile.settingValueChanged.disconnect(self._onSettingChanged) self._profile.settingValueChanged.disconnect(self._onSettingChanged)
self._profile = Application.getInstance().getMachineManager().getActiveProfile() self._profile = Application.getInstance().getMachineManager().getWorkingProfile()
if self._profile: if self._profile:
self._profile.settingValueChanged.connect(self._onSettingChanged) self._profile.settingValueChanged.connect(self._onSettingChanged)
self._onChanged() self._onChanged()
@ -197,15 +203,10 @@ class CuraEngineBackend(Backend):
self._message.setProgress(round(message.amount * 100)) self._message.setProgress(round(message.amount * 100))
self.processingProgress.emit(message.amount) self.processingProgress.emit(message.amount)
self.backendStateChange.emit(BackendState.PROCESSING)
def _onGCodeLayerMessage(self, message): def _onSlicingFinishedMessage(self, message):
self._scene.gcode_list.append(message.data.decode("utf-8", "replace")) self.backendStateChange.emit(BackendState.DONE)
def _onGCodePrefixMessage(self, message):
self._scene.gcode_list.insert(0, message.data.decode("utf-8", "replace"))
def _onObjectPrintTimeMessage(self, message):
self.printDurationMessage.emit(message.time, message.material_amount)
self.processingProgress.emit(1.0) self.processingProgress.emit(1.0)
self._slicing = False self._slicing = False
@ -215,23 +216,17 @@ class CuraEngineBackend(Backend):
self._message.hide() self._message.hide()
self._message = None self._message = None
if self._always_restart: def _onGCodeLayerMessage(self, message):
try: self._scene.gcode_list.append(message.data.decode("utf-8", "replace"))
self._process.terminate()
self._createSocket() def _onGCodePrefixMessage(self, message):
except: # terminating a process that is already terminating causes an exception, silently ignore this. self._scene.gcode_list.insert(0, message.data.decode("utf-8", "replace"))
pass
def _onObjectPrintTimeMessage(self, message):
self.printDurationMessage.emit(message.time, message.material_amount)
def _createSocket(self): def _createSocket(self):
super()._createSocket() super()._createSocket(os.path.abspath(os.path.join(PluginRegistry.getInstance().getPluginPath(self.getPluginId()), "Cura.proto")))
self._socket.registerMessageType(1, Cura_pb2.Slice)
self._socket.registerMessageType(2, Cura_pb2.SlicedObjectList)
self._socket.registerMessageType(3, Cura_pb2.Progress)
self._socket.registerMessageType(4, Cura_pb2.GCodeLayer)
self._socket.registerMessageType(5, Cura_pb2.ObjectPrintTime)
self._socket.registerMessageType(6, Cura_pb2.SettingList)
self._socket.registerMessageType(7, Cura_pb2.GCodePrefix)
## Manually triggers a reslice ## Manually triggers a reslice
def forceSlice(self): def forceSlice(self):
@ -254,7 +249,6 @@ class CuraEngineBackend(Backend):
def _onToolOperationStopped(self, tool): def _onToolOperationStopped(self, tool):
self._enabled = True # Tool stop, start listening for changes again. self._enabled = True # Tool stop, start listening for changes again.
self._onChanged()
def _onActiveViewChanged(self): def _onActiveViewChanged(self):
if Application.getInstance().getController().getActiveView(): if Application.getInstance().getController().getActiveView():
@ -270,7 +264,11 @@ class CuraEngineBackend(Backend):
else: else:
self._layer_view_active = False self._layer_view_active = False
def _onInstanceChanged(self): def _onInstanceChanged(self):
self._terminate() self._terminate()
self.slicingCancelled.emit() self.slicingCancelled.emit()
def _onBackendQuit(self):
if not self._restart and self._process:
self._process = None
self._createSocket()

View File

@ -1,739 +0,0 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: Cura.proto
import sys
_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import symbol_database as _symbol_database
from google.protobuf import descriptor_pb2
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
DESCRIPTOR = _descriptor.FileDescriptor(
name='Cura.proto',
package='cura.proto',
syntax='proto3',
serialized_pb=_b('\n\nCura.proto\x12\ncura.proto\"X\n\nObjectList\x12#\n\x07objects\x18\x01 \x03(\x0b\x32\x12.cura.proto.Object\x12%\n\x08settings\x18\x02 \x03(\x0b\x32\x13.cura.proto.Setting\"5\n\x05Slice\x12,\n\x0cobject_lists\x18\x01 \x03(\x0b\x32\x16.cura.proto.ObjectList\"o\n\x06Object\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x10\n\x08vertices\x18\x02 \x01(\x0c\x12\x0f\n\x07normals\x18\x03 \x01(\x0c\x12\x0f\n\x07indices\x18\x04 \x01(\x0c\x12%\n\x08settings\x18\x05 \x03(\x0b\x32\x13.cura.proto.Setting\"\x1a\n\x08Progress\x12\x0e\n\x06\x61mount\x18\x01 \x01(\x02\"=\n\x10SlicedObjectList\x12)\n\x07objects\x18\x01 \x03(\x0b\x32\x18.cura.proto.SlicedObject\"=\n\x0cSlicedObject\x12\n\n\x02id\x18\x01 \x01(\x03\x12!\n\x06layers\x18\x02 \x03(\x0b\x32\x11.cura.proto.Layer\"]\n\x05Layer\x12\n\n\x02id\x18\x01 \x01(\x05\x12\x0e\n\x06height\x18\x02 \x01(\x02\x12\x11\n\tthickness\x18\x03 \x01(\x02\x12%\n\x08polygons\x18\x04 \x03(\x0b\x32\x13.cura.proto.Polygon\"\x8e\x02\n\x07Polygon\x12&\n\x04type\x18\x01 \x01(\x0e\x32\x18.cura.proto.Polygon.Type\x12\x0e\n\x06points\x18\x02 \x01(\x0c\x12\x12\n\nline_width\x18\x03 \x01(\x02\"\xb6\x01\n\x04Type\x12\x0c\n\x08NoneType\x10\x00\x12\x0e\n\nInset0Type\x10\x01\x12\x0e\n\nInsetXType\x10\x02\x12\x0c\n\x08SkinType\x10\x03\x12\x0f\n\x0bSupportType\x10\x04\x12\r\n\tSkirtType\x10\x05\x12\x0e\n\nInfillType\x10\x06\x12\x15\n\x11SupportInfillType\x10\x07\x12\x13\n\x0fMoveCombingType\x10\x08\x12\x16\n\x12MoveRetractionType\x10\t\"&\n\nGCodeLayer\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"D\n\x0fObjectPrintTime\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x0c\n\x04time\x18\x02 \x01(\x02\x12\x17\n\x0fmaterial_amount\x18\x03 \x01(\x02\"4\n\x0bSettingList\x12%\n\x08settings\x18\x01 \x03(\x0b\x32\x13.cura.proto.Setting\"&\n\x07Setting\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\"\x1b\n\x0bGCodePrefix\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"\x11\n\x0fSlicingFinishedb\x06proto3')
)
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
_POLYGON_TYPE = _descriptor.EnumDescriptor(
name='Type',
full_name='cura.proto.Polygon.Type',
filename=None,
file=DESCRIPTOR,
values=[
_descriptor.EnumValueDescriptor(
name='NoneType', index=0, number=0,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='Inset0Type', index=1, number=1,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='InsetXType', index=2, number=2,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='SkinType', index=3, number=3,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='SupportType', index=4, number=4,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='SkirtType', index=5, number=5,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='InfillType', index=6, number=6,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='SupportInfillType', index=7, number=7,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='MoveCombingType', index=8, number=8,
options=None,
type=None),
_descriptor.EnumValueDescriptor(
name='MoveRetractionType', index=9, number=9,
options=None,
type=None),
],
containing_type=None,
options=None,
serialized_start=622,
serialized_end=804,
)
_sym_db.RegisterEnumDescriptor(_POLYGON_TYPE)
_OBJECTLIST = _descriptor.Descriptor(
name='ObjectList',
full_name='cura.proto.ObjectList',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='objects', full_name='cura.proto.ObjectList.objects', index=0,
number=1, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='settings', full_name='cura.proto.ObjectList.settings', index=1,
number=2, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=26,
serialized_end=114,
)
_SLICE = _descriptor.Descriptor(
name='Slice',
full_name='cura.proto.Slice',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='object_lists', full_name='cura.proto.Slice.object_lists', index=0,
number=1, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=116,
serialized_end=169,
)
_OBJECT = _descriptor.Descriptor(
name='Object',
full_name='cura.proto.Object',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='id', full_name='cura.proto.Object.id', index=0,
number=1, type=3, cpp_type=2, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='vertices', full_name='cura.proto.Object.vertices', index=1,
number=2, type=12, cpp_type=9, label=1,
has_default_value=False, default_value=_b(""),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='normals', full_name='cura.proto.Object.normals', index=2,
number=3, type=12, cpp_type=9, label=1,
has_default_value=False, default_value=_b(""),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='indices', full_name='cura.proto.Object.indices', index=3,
number=4, type=12, cpp_type=9, label=1,
has_default_value=False, default_value=_b(""),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='settings', full_name='cura.proto.Object.settings', index=4,
number=5, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=171,
serialized_end=282,
)
_PROGRESS = _descriptor.Descriptor(
name='Progress',
full_name='cura.proto.Progress',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='amount', full_name='cura.proto.Progress.amount', index=0,
number=1, type=2, cpp_type=6, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=284,
serialized_end=310,
)
_SLICEDOBJECTLIST = _descriptor.Descriptor(
name='SlicedObjectList',
full_name='cura.proto.SlicedObjectList',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='objects', full_name='cura.proto.SlicedObjectList.objects', index=0,
number=1, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=312,
serialized_end=373,
)
_SLICEDOBJECT = _descriptor.Descriptor(
name='SlicedObject',
full_name='cura.proto.SlicedObject',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='id', full_name='cura.proto.SlicedObject.id', index=0,
number=1, type=3, cpp_type=2, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='layers', full_name='cura.proto.SlicedObject.layers', index=1,
number=2, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=375,
serialized_end=436,
)
_LAYER = _descriptor.Descriptor(
name='Layer',
full_name='cura.proto.Layer',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='id', full_name='cura.proto.Layer.id', index=0,
number=1, type=5, cpp_type=1, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='height', full_name='cura.proto.Layer.height', index=1,
number=2, type=2, cpp_type=6, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='thickness', full_name='cura.proto.Layer.thickness', index=2,
number=3, type=2, cpp_type=6, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='polygons', full_name='cura.proto.Layer.polygons', index=3,
number=4, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=438,
serialized_end=531,
)
_POLYGON = _descriptor.Descriptor(
name='Polygon',
full_name='cura.proto.Polygon',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='type', full_name='cura.proto.Polygon.type', index=0,
number=1, type=14, cpp_type=8, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='points', full_name='cura.proto.Polygon.points', index=1,
number=2, type=12, cpp_type=9, label=1,
has_default_value=False, default_value=_b(""),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='line_width', full_name='cura.proto.Polygon.line_width', index=2,
number=3, type=2, cpp_type=6, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[],
enum_types=[
_POLYGON_TYPE,
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=534,
serialized_end=804,
)
_GCODELAYER = _descriptor.Descriptor(
name='GCodeLayer',
full_name='cura.proto.GCodeLayer',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='id', full_name='cura.proto.GCodeLayer.id', index=0,
number=1, type=3, cpp_type=2, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='data', full_name='cura.proto.GCodeLayer.data', index=1,
number=2, type=12, cpp_type=9, label=1,
has_default_value=False, default_value=_b(""),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=806,
serialized_end=844,
)
_OBJECTPRINTTIME = _descriptor.Descriptor(
name='ObjectPrintTime',
full_name='cura.proto.ObjectPrintTime',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='id', full_name='cura.proto.ObjectPrintTime.id', index=0,
number=1, type=3, cpp_type=2, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='time', full_name='cura.proto.ObjectPrintTime.time', index=1,
number=2, type=2, cpp_type=6, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='material_amount', full_name='cura.proto.ObjectPrintTime.material_amount', index=2,
number=3, type=2, cpp_type=6, label=1,
has_default_value=False, default_value=0,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=846,
serialized_end=914,
)
_SETTINGLIST = _descriptor.Descriptor(
name='SettingList',
full_name='cura.proto.SettingList',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='settings', full_name='cura.proto.SettingList.settings', index=0,
number=1, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=916,
serialized_end=968,
)
_SETTING = _descriptor.Descriptor(
name='Setting',
full_name='cura.proto.Setting',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='name', full_name='cura.proto.Setting.name', index=0,
number=1, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
_descriptor.FieldDescriptor(
name='value', full_name='cura.proto.Setting.value', index=1,
number=2, type=12, cpp_type=9, label=1,
has_default_value=False, default_value=_b(""),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=970,
serialized_end=1008,
)
_GCODEPREFIX = _descriptor.Descriptor(
name='GCodePrefix',
full_name='cura.proto.GCodePrefix',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
name='data', full_name='cura.proto.GCodePrefix.data', index=0,
number=2, type=12, cpp_type=9, label=1,
has_default_value=False, default_value=_b(""),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None),
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=1010,
serialized_end=1037,
)
_SLICINGFINISHED = _descriptor.Descriptor(
name='SlicingFinished',
full_name='cura.proto.SlicingFinished',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
],
extensions=[
],
nested_types=[],
enum_types=[
],
options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
],
serialized_start=1039,
serialized_end=1056,
)
_OBJECTLIST.fields_by_name['objects'].message_type = _OBJECT
_OBJECTLIST.fields_by_name['settings'].message_type = _SETTING
_SLICE.fields_by_name['object_lists'].message_type = _OBJECTLIST
_OBJECT.fields_by_name['settings'].message_type = _SETTING
_SLICEDOBJECTLIST.fields_by_name['objects'].message_type = _SLICEDOBJECT
_SLICEDOBJECT.fields_by_name['layers'].message_type = _LAYER
_LAYER.fields_by_name['polygons'].message_type = _POLYGON
_POLYGON.fields_by_name['type'].enum_type = _POLYGON_TYPE
_POLYGON_TYPE.containing_type = _POLYGON
_SETTINGLIST.fields_by_name['settings'].message_type = _SETTING
DESCRIPTOR.message_types_by_name['ObjectList'] = _OBJECTLIST
DESCRIPTOR.message_types_by_name['Slice'] = _SLICE
DESCRIPTOR.message_types_by_name['Object'] = _OBJECT
DESCRIPTOR.message_types_by_name['Progress'] = _PROGRESS
DESCRIPTOR.message_types_by_name['SlicedObjectList'] = _SLICEDOBJECTLIST
DESCRIPTOR.message_types_by_name['SlicedObject'] = _SLICEDOBJECT
DESCRIPTOR.message_types_by_name['Layer'] = _LAYER
DESCRIPTOR.message_types_by_name['Polygon'] = _POLYGON
DESCRIPTOR.message_types_by_name['GCodeLayer'] = _GCODELAYER
DESCRIPTOR.message_types_by_name['ObjectPrintTime'] = _OBJECTPRINTTIME
DESCRIPTOR.message_types_by_name['SettingList'] = _SETTINGLIST
DESCRIPTOR.message_types_by_name['Setting'] = _SETTING
DESCRIPTOR.message_types_by_name['GCodePrefix'] = _GCODEPREFIX
DESCRIPTOR.message_types_by_name['SlicingFinished'] = _SLICINGFINISHED
ObjectList = _reflection.GeneratedProtocolMessageType('ObjectList', (_message.Message,), dict(
DESCRIPTOR = _OBJECTLIST,
__module__ = 'Cura_pb2'
# @@protoc_insertion_point(class_scope:cura.proto.ObjectList)
))
_sym_db.RegisterMessage(ObjectList)
Slice = _reflection.GeneratedProtocolMessageType('Slice', (_message.Message,), dict(
DESCRIPTOR = _SLICE,
__module__ = 'Cura_pb2'
# @@protoc_insertion_point(class_scope:cura.proto.Slice)
))
_sym_db.RegisterMessage(Slice)
Object = _reflection.GeneratedProtocolMessageType('Object', (_message.Message,), dict(
DESCRIPTOR = _OBJECT,
__module__ = 'Cura_pb2'
# @@protoc_insertion_point(class_scope:cura.proto.Object)
))
_sym_db.RegisterMessage(Object)
Progress = _reflection.GeneratedProtocolMessageType('Progress', (_message.Message,), dict(
DESCRIPTOR = _PROGRESS,
__module__ = 'Cura_pb2'
# @@protoc_insertion_point(class_scope:cura.proto.Progress)
))
_sym_db.RegisterMessage(Progress)
SlicedObjectList = _reflection.GeneratedProtocolMessageType('SlicedObjectList', (_message.Message,), dict(
DESCRIPTOR = _SLICEDOBJECTLIST,
__module__ = 'Cura_pb2'
# @@protoc_insertion_point(class_scope:cura.proto.SlicedObjectList)
))
_sym_db.RegisterMessage(SlicedObjectList)
SlicedObject = _reflection.GeneratedProtocolMessageType('SlicedObject', (_message.Message,), dict(
DESCRIPTOR = _SLICEDOBJECT,
__module__ = 'Cura_pb2'
# @@protoc_insertion_point(class_scope:cura.proto.SlicedObject)
))
_sym_db.RegisterMessage(SlicedObject)
Layer = _reflection.GeneratedProtocolMessageType('Layer', (_message.Message,), dict(
DESCRIPTOR = _LAYER,
__module__ = 'Cura_pb2'
# @@protoc_insertion_point(class_scope:cura.proto.Layer)
))
_sym_db.RegisterMessage(Layer)
Polygon = _reflection.GeneratedProtocolMessageType('Polygon', (_message.Message,), dict(
DESCRIPTOR = _POLYGON,
__module__ = 'Cura_pb2'
# @@protoc_insertion_point(class_scope:cura.proto.Polygon)
))
_sym_db.RegisterMessage(Polygon)
GCodeLayer = _reflection.GeneratedProtocolMessageType('GCodeLayer', (_message.Message,), dict(
DESCRIPTOR = _GCODELAYER,
__module__ = 'Cura_pb2'
# @@protoc_insertion_point(class_scope:cura.proto.GCodeLayer)
))
_sym_db.RegisterMessage(GCodeLayer)
ObjectPrintTime = _reflection.GeneratedProtocolMessageType('ObjectPrintTime', (_message.Message,), dict(
DESCRIPTOR = _OBJECTPRINTTIME,
__module__ = 'Cura_pb2'
# @@protoc_insertion_point(class_scope:cura.proto.ObjectPrintTime)
))
_sym_db.RegisterMessage(ObjectPrintTime)
SettingList = _reflection.GeneratedProtocolMessageType('SettingList', (_message.Message,), dict(
DESCRIPTOR = _SETTINGLIST,
__module__ = 'Cura_pb2'
# @@protoc_insertion_point(class_scope:cura.proto.SettingList)
))
_sym_db.RegisterMessage(SettingList)
Setting = _reflection.GeneratedProtocolMessageType('Setting', (_message.Message,), dict(
DESCRIPTOR = _SETTING,
__module__ = 'Cura_pb2'
# @@protoc_insertion_point(class_scope:cura.proto.Setting)
))
_sym_db.RegisterMessage(Setting)
GCodePrefix = _reflection.GeneratedProtocolMessageType('GCodePrefix', (_message.Message,), dict(
DESCRIPTOR = _GCODEPREFIX,
__module__ = 'Cura_pb2'
# @@protoc_insertion_point(class_scope:cura.proto.GCodePrefix)
))
_sym_db.RegisterMessage(GCodePrefix)
SlicingFinished = _reflection.GeneratedProtocolMessageType('SlicingFinished', (_message.Message,), dict(
DESCRIPTOR = _SLICINGFINISHED,
__module__ = 'Cura_pb2'
# @@protoc_insertion_point(class_scope:cura.proto.SlicingFinished)
))
_sym_db.RegisterMessage(SlicingFinished)
# @@protoc_insertion_point(module_scope)

View File

@ -44,7 +44,7 @@ class ProcessSlicedObjectListJob(Job):
object_id_map[id(node)] = node object_id_map[id(node)] = node
Job.yieldThread() Job.yieldThread()
settings = Application.getInstance().getMachineManager().getActiveProfile() settings = Application.getInstance().getMachineManager().getWorkingProfile()
center = None center = None
if not settings.getSettingValue("machine_center_is_zero"): if not settings.getSettingValue("machine_center_is_zero"):
@ -56,21 +56,27 @@ class ProcessSlicedObjectListJob(Job):
layer_data = LayerData.LayerData() layer_data = LayerData.LayerData()
layer_count = 0 layer_count = 0
for object in self._message.objects: for i in range(self._message.repeatedMessageCount("objects")):
layer_count += len(object.layers) layer_count += self._message.getRepeatedMessage("objects", i).repeatedMessageCount("layers")
current_layer = 0 current_layer = 0
for object in self._message.objects: for i in range(self._message.repeatedMessageCount("objects")):
object = self._message.getRepeatedMessage("objects", i)
try: try:
node = object_id_map[object.id] node = object_id_map[object.id]
except KeyError: except KeyError:
continue continue
for layer in object.layers: for l in range(object.repeatedMessageCount("layers")):
layer = object.getRepeatedMessage("layers", l)
layer_data.addLayer(layer.id) layer_data.addLayer(layer.id)
layer_data.setLayerHeight(layer.id, layer.height) layer_data.setLayerHeight(layer.id, layer.height)
layer_data.setLayerThickness(layer.id, layer.thickness) layer_data.setLayerThickness(layer.id, layer.thickness)
for polygon in layer.polygons:
for p in range(layer.repeatedMessageCount("polygons")):
polygon = layer.getRepeatedMessage("polygons", p)
points = numpy.fromstring(polygon.points, dtype="i8") # Convert bytearray to numpy array points = numpy.fromstring(polygon.points, dtype="i8") # Convert bytearray to numpy array
points = points.reshape((-1,2)) # We get a linear list of pairs that make up the points, so make numpy interpret them correctly. points = points.reshape((-1,2)) # We get a linear list of pairs that make up the points, so make numpy interpret them correctly.
points = numpy.asarray(points, dtype=numpy.float32) points = numpy.asarray(points, dtype=numpy.float32)
@ -83,8 +89,6 @@ class ProcessSlicedObjectListJob(Job):
layer_data.addPolygon(layer.id, polygon.type, points, polygon.line_width) layer_data.addPolygon(layer.id, polygon.type, points, polygon.line_width)
Job.yieldThread()
current_layer += 1 current_layer += 1
progress = (current_layer / layer_count) * 100 progress = (current_layer / layer_count) * 100
# TODO: Rebuild the layer data mesh once the layer has been processed. # TODO: Rebuild the layer data mesh once the layer has been processed.

View File

@ -14,8 +14,6 @@ from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
from cura.OneAtATimeIterator import OneAtATimeIterator from cura.OneAtATimeIterator import OneAtATimeIterator
from . import Cura_pb2
## Formatter class that handles token expansion in start/end gcod ## Formatter class that handles token expansion in start/end gcod
class GcodeStartEndFormatter(Formatter): class GcodeStartEndFormatter(Formatter):
def get_value(self, key, args, kwargs): # [CodeStyle: get_value is an overridden function from the Formatter class] def get_value(self, key, args, kwargs): # [CodeStyle: get_value is an overridden function from the Formatter class]
@ -81,20 +79,21 @@ class StartSliceJob(Job):
self._sendSettings(self._profile) self._sendSettings(self._profile)
slice_message = Cura_pb2.Slice() slice_message = self._socket.createMessage("cura.proto.Slice");
for group in object_groups: for group in object_groups:
group_message = slice_message.object_lists.add() group_message = slice_message.addRepeatedMessage("object_lists");
for object in group: for object in group:
mesh_data = object.getMeshData().getTransformed(object.getWorldTransformation()) mesh_data = object.getMeshData().getTransformed(object.getWorldTransformation())
obj = group_message.objects.add() obj = group_message.addRepeatedMessage("objects");
obj.id = id(object) obj.id = id(object)
verts = numpy.array(mesh_data.getVertices()) verts = numpy.array(mesh_data.getVertices())
verts[:,[1,2]] = verts[:,[2,1]] verts[:,[1,2]] = verts[:,[2,1]]
verts[:,1] *= -1 verts[:,1] *= -1
obj.vertices = verts.tostring()
obj.vertices = verts
self._handlePerObjectSettings(object, obj) self._handlePerObjectSettings(object, obj)
@ -115,13 +114,13 @@ class StartSliceJob(Job):
return str(value).encode("utf-8") return str(value).encode("utf-8")
def _sendSettings(self, profile): def _sendSettings(self, profile):
msg = Cura_pb2.SettingList() msg = self._socket.createMessage("cura.proto.SettingList");
settings = profile.getAllSettingValues(include_machine = True) settings = profile.getAllSettingValues(include_machine = True)
start_gcode = settings["machine_start_gcode"] start_gcode = settings["machine_start_gcode"]
settings["material_bed_temp_prepend"] = "{material_bed_temperature}" not in start_gcode settings["material_bed_temp_prepend"] = "{material_bed_temperature}" not in start_gcode
settings["material_print_temp_prepend"] = "{material_print_temperature}" not in start_gcode settings["material_print_temp_prepend"] = "{material_print_temperature}" not in start_gcode
for key, value in settings.items(): for key, value in settings.items():
s = msg.settings.add() s = msg.addRepeatedMessage("settings")
s.name = key s.name = key
if key == "machine_start_gcode" or key == "machine_end_gcode": if key == "machine_start_gcode" or key == "machine_end_gcode":
s.value = self._expandGcodeTokens(key, value, settings) s.value = self._expandGcodeTokens(key, value, settings)
@ -134,7 +133,7 @@ class StartSliceJob(Job):
profile = node.callDecoration("getProfile") profile = node.callDecoration("getProfile")
if profile: if profile:
for key, value in profile.getAllSettingValues().items(): for key, value in profile.getAllSettingValues().items():
setting = message.settings.add() setting = message.addRepeatedMessage("settings")
setting.name = key setting.name = key
setting.value = str(value).encode() setting.value = str(value).encode()
@ -145,7 +144,7 @@ class StartSliceJob(Job):
return return
for key, value in object_settings.items(): for key, value in object_settings.items():
setting = message.settings.add() setting = message.addRepeatedMessage("settings")
setting.name = key setting.name = key
setting.value = str(value).encode() setting.value = str(value).encode()

View File

@ -40,7 +40,7 @@ class GCodeWriter(MeshWriter):
if gcode_list: if gcode_list:
for gcode in gcode_list: for gcode in gcode_list:
stream.write(gcode) stream.write(gcode)
profile = self._serialiseProfile(Application.getInstance().getMachineManager().getActiveProfile()) #Serialise the profile and put them at the end of the file. profile = self._serialiseProfile(Application.getInstance().getMachineManager().getWorkingProfile()) #Serialise the profile and put them at the end of the file.
stream.write(profile) stream.write(profile)
return True return True

View File

@ -14,12 +14,9 @@ UM.Dialog
minimumWidth: 350 * Screen.devicePixelRatio; minimumWidth: 350 * Screen.devicePixelRatio;
maximumWidth: 350 * Screen.devicePixelRatio; maximumWidth: 350 * Screen.devicePixelRatio;
height: 220*Screen.devicePixelRatio; height: 250 * Screen.devicePixelRatio;
minimumHeight: 220*Screen.devicePixelRatio; minimumHeight: 250 * Screen.devicePixelRatio;
maximumHeight: 220*Screen.devicePixelRatio; maximumHeight: 250 * Screen.devicePixelRatio;
modality: Qt.Modal
title: catalog.i18nc("@title:window", "Convert Image...") title: catalog.i18nc("@title:window", "Convert Image...")
@ -38,7 +35,6 @@ UM.Dialog
text: catalog.i18nc("@info:tooltip","The maximum distance of each pixel from \"Base.\"") text: catalog.i18nc("@info:tooltip","The maximum distance of each pixel from \"Base.\"")
Row { Row {
width: parent.width width: parent.width
height: childrenRect.height
Text { Text {
text: catalog.i18nc("@action:label","Height (mm)") text: catalog.i18nc("@action:label","Height (mm)")
@ -62,7 +58,6 @@ UM.Dialog
text: catalog.i18nc("@info:tooltip","The base height from the build plate in millimeters.") text: catalog.i18nc("@info:tooltip","The base height from the build plate in millimeters.")
Row { Row {
width: parent.width width: parent.width
height: childrenRect.height
Text { Text {
text: catalog.i18nc("@action:label","Base (mm)") text: catalog.i18nc("@action:label","Base (mm)")
@ -86,7 +81,6 @@ UM.Dialog
text: catalog.i18nc("@info:tooltip","The width in millimeters on the build plate.") text: catalog.i18nc("@info:tooltip","The width in millimeters on the build plate.")
Row { Row {
width: parent.width width: parent.width
height: childrenRect.height
Text { Text {
text: catalog.i18nc("@action:label","Width (mm)") text: catalog.i18nc("@action:label","Width (mm)")
@ -111,7 +105,6 @@ UM.Dialog
text: catalog.i18nc("@info:tooltip","The depth in millimeters on the build plate") text: catalog.i18nc("@info:tooltip","The depth in millimeters on the build plate")
Row { Row {
width: parent.width width: parent.width
height: childrenRect.height
Text { Text {
text: catalog.i18nc("@action:label","Depth (mm)") text: catalog.i18nc("@action:label","Depth (mm)")
@ -135,7 +128,6 @@ UM.Dialog
text: catalog.i18nc("@info:tooltip","By default, white pixels represent high points on the mesh and black pixels represent low points on the mesh. Change this option to reverse the behavior such that black pixels represent high points on the mesh and white pixels represent low points on the mesh.") text: catalog.i18nc("@info:tooltip","By default, white pixels represent high points on the mesh and black pixels represent low points on the mesh. Change this option to reverse the behavior such that black pixels represent high points on the mesh and white pixels represent low points on the mesh.")
Row { Row {
width: parent.width width: parent.width
height: childrenRect.height
//Empty label so 2 column layout works. //Empty label so 2 column layout works.
Text { Text {
@ -159,7 +151,6 @@ UM.Dialog
text: catalog.i18nc("@info:tooltip","The amount of smoothing to apply to the image.") text: catalog.i18nc("@info:tooltip","The amount of smoothing to apply to the image.")
Row { Row {
width: parent.width width: parent.width
height: childrenRect.height
Text { Text {
text: catalog.i18nc("@action:label","Smoothing") text: catalog.i18nc("@action:label","Smoothing")

View File

@ -167,12 +167,16 @@ class LayerView(View):
if new_max_layers > 0 and new_max_layers != self._old_max_layers: if new_max_layers > 0 and new_max_layers != self._old_max_layers:
self._max_layers = new_max_layers self._max_layers = new_max_layers
self.maxLayersChanged.emit()
self._current_layer_num = self._max_layers
# This makes sure we update the current layer # The qt slider has a bit of weird behavior that if the maxvalue needs to be changed first
# if it's the largest value. If we don't do this, we can have a slider block outside of the
# slider.
if new_max_layers > self._current_layer_num:
self.maxLayersChanged.emit()
self.setLayer(int(self._max_layers)) self.setLayer(int(self._max_layers))
self.currentLayerNumChanged.emit() else:
self.setLayer(int(self._max_layers))
self.maxLayersChanged.emit()
maxLayersChanged = Signal() maxLayersChanged = Signal()
currentLayerNumChanged = Signal() currentLayerNumChanged = Signal()

View File

@ -24,16 +24,11 @@ class PerObjectSettingsModel(ListModel):
super().__init__(parent) super().__init__(parent)
self._scene = Application.getInstance().getController().getScene() self._scene = Application.getInstance().getController().getScene()
self._root = self._scene.getRoot() self._root = self._scene.getRoot()
self._root.transformationChanged.connect(self._updatePositions)
self._root.childrenChanged.connect(self._updateNodes)
self._updateNodes(None)
self.addRoleName(self.IdRole,"id") self.addRoleName(self.IdRole,"id")
self.addRoleName(self.XRole,"x")
self.addRoleName(self.YRole,"y")
self.addRoleName(self.MaterialRole, "material") self.addRoleName(self.MaterialRole, "material")
self.addRoleName(self.ProfileRole, "profile") self.addRoleName(self.ProfileRole, "profile")
self.addRoleName(self.SettingsRole, "settings") self.addRoleName(self.SettingsRole, "settings")
self._updateModel()
@pyqtSlot("quint64", str) @pyqtSlot("quint64", str)
def setObjectProfile(self, object_id, profile_name): def setObjectProfile(self, object_id, profile_name):
@ -72,27 +67,11 @@ class PerObjectSettingsModel(ListModel):
if len(node.callDecoration("getAllSettings")) == 0: if len(node.callDecoration("getAllSettings")) == 0:
node.removeDecorator(SettingOverrideDecorator) node.removeDecorator(SettingOverrideDecorator)
def _updatePositions(self, source): def _updateModel(self):
camera = Application.getInstance().getController().getScene().getActiveCamera()
for node in BreadthFirstIterator(self._root):
if type(node) is not SceneNode or not node.getMeshData():
continue
projected_position = camera.project(node.getWorldPosition())
index = self.find("id", id(node))
self.setProperty(index, "x", float(projected_position[0]))
self.setProperty(index, "y", float(projected_position[1]))
def _updateNodes(self, source):
self.clear() self.clear()
camera = Application.getInstance().getController().getScene().getActiveCamera()
for node in BreadthFirstIterator(self._root): for node in BreadthFirstIterator(self._root):
if type(node) is not SceneNode or not node.getMeshData() or not node.isSelectable(): if type(node) is not SceneNode or not node.getMeshData() or not node.isSelectable():
continue continue
projected_position = camera.project(node.getWorldPosition())
node_profile = node.callDecoration("getProfile") node_profile = node.callDecoration("getProfile")
if not node_profile: if not node_profile:
node_profile = "global" node_profile = "global"
@ -101,8 +80,6 @@ class PerObjectSettingsModel(ListModel):
self.appendItem({ self.appendItem({
"id": id(node), "id": id(node),
"x": float(projected_position[0]),
"y": float(projected_position[1]),
"material": "", "material": "",
"profile": node_profile, "profile": node_profile,
"settings": SettingOverrideModel.SettingOverrideModel(node) "settings": SettingOverrideModel.SettingOverrideModel(node)

View File

@ -10,8 +10,7 @@ import UM 1.1 as UM
Item { Item {
id: base; id: base;
property int currentIndex: UM.ActiveTool.properties.SelectedIndex; property int currentIndex: UM.ActiveTool.properties.getValue("SelectedIndex")
property string printSequence: UM.ActiveTool.properties.PrintSequence;
UM.I18nCatalog { id: catalog; name: "cura"; } UM.I18nCatalog { id: catalog; name: "cura"; }
@ -25,14 +24,6 @@ Item {
spacing: UM.Theme.sizes.default_margin.height; spacing: UM.Theme.sizes.default_margin.height;
Label {
width: UM.Theme.sizes.setting.width;
wrapMode: Text.Wrap;
text: catalog.i18nc("@label", "Per Object Settings behavior may be unexpected when 'Print sequence' is set to 'All at Once'.")
color: UM.Theme.colors.text;
visible: base.printSequence == "all_at_once"
}
UM.SettingItem { UM.SettingItem {
id: profileSelection id: profileSelection
@ -47,11 +38,11 @@ Item {
options: UM.ProfilesModel { addUseGlobal: true } options: UM.ProfilesModel { addUseGlobal: true }
value: UM.ActiveTool.properties.Model.getItem(base.currentIndex).profile value: UM.ActiveTool.properties.getValue("Model").getItem(base.currentIndex).profile
onItemValueChanged: { onItemValueChanged: {
var item = UM.ActiveTool.properties.Model.getItem(base.currentIndex); var item = UM.ActiveTool.properties.getValue("Model").getItem(base.currentIndex);
UM.ActiveTool.properties.Model.setObjectProfile(item.id, value) UM.ActiveTool.properties.getValue("Model").setObjectProfile(item.id, value)
} }
} }
@ -63,7 +54,7 @@ Item {
Repeater { Repeater {
id: settings; id: settings;
model: UM.ActiveTool.properties.Model.getItem(base.currentIndex).settings model: UM.ActiveTool.properties.getValue("Model").getItem(base.currentIndex).settings
UM.SettingItem { UM.SettingItem {
width: UM.Theme.sizes.setting.width; width: UM.Theme.sizes.setting.width;
@ -91,7 +82,7 @@ Item {
width: UM.Theme.sizes.setting.height; width: UM.Theme.sizes.setting.height;
height: UM.Theme.sizes.setting.height; height: UM.Theme.sizes.setting.height;
onClicked: UM.ActiveTool.properties.Model.removeSettingOverride(UM.ActiveTool.properties.Model.getItem(base.currentIndex).id, model.key) onClicked: UM.ActiveTool.properties.getValue("Model").removeSettingOverride(UM.ActiveTool.properties.getValue("Model").getItem(base.currentIndex).id, model.key)
style: ButtonStyle style: ButtonStyle
{ {
@ -202,6 +193,7 @@ Item {
width: parent.width; width: parent.width;
height: childrenRect.height; height: childrenRect.height;
visible: model.visible && settingsColumn.childrenHeight != 0 //If all children are hidden, the height is 0, and then the category header must also be hidden.
ToolButton { ToolButton {
id: categoryHeader; id: categoryHeader;
@ -237,8 +229,6 @@ Item {
property variant settingsModel: model.settings; property variant settingsModel: model.settings;
visible: model.visible;
Column { Column {
id: settingsColumn; id: settingsColumn;
@ -272,10 +262,12 @@ Item {
x: model.depth * UM.Theme.sizes.default_margin.width; x: model.depth * UM.Theme.sizes.default_margin.width;
text: model.name; text: model.name;
tooltip: model.description; tooltip: model.description;
visible: !model.global_only
height: model.global_only ? 0 : undefined
onClicked: { onClicked: {
var object_id = UM.ActiveTool.properties.Model.getItem(base.currentIndex).id; var object_id = UM.ActiveTool.properties.getValue("Model").getItem(base.currentIndex).id;
UM.ActiveTool.properties.Model.addSettingOverride(object_id, model.key); UM.ActiveTool.properties.getValue("Model").addSettingOverride(object_id, model.key);
settingPickDialog.visible = false; settingPickDialog.visible = false;
} }

View File

@ -4,26 +4,29 @@
from UM.Tool import Tool from UM.Tool import Tool
from UM.Scene.Selection import Selection from UM.Scene.Selection import Selection
from UM.Application import Application from UM.Application import Application
from UM.Qt.ListModel import ListModel
from . import PerObjectSettingsModel from . import PerObjectSettingsModel
class PerObjectSettingsTool(Tool): class PerObjectSettingsTool(Tool):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
self._model = None
self.setExposedProperties("Model", "SelectedIndex", "PrintSequence") self.setExposedProperties("Model", "SelectedIndex")
def event(self, event): def event(self, event):
return False return False
def getModel(self): def getModel(self):
return PerObjectSettingsModel.PerObjectSettingsModel() if not self._model:
self._model = PerObjectSettingsModel.PerObjectSettingsModel()
#For some reason, casting this model to itself causes the model to properly be cast to a QVariant, even though it ultimately inherits from QVariant.
#Yeah, we have no idea either...
return PerObjectSettingsModel.PerObjectSettingsModel(self._model)
def getSelectedIndex(self): def getSelectedIndex(self):
selected_object_id = id(Selection.getSelectedObject(0)) selected_object_id = id(Selection.getSelectedObject(0))
index = self.getModel().find("id", selected_object_id) index = self.getModel().find("id", selected_object_id)
return index return index
def getPrintSequence(self):
settings = Application.getInstance().getMachineManager().getActiveProfile()
return settings.getSettingValue("print_sequence")

View File

@ -23,19 +23,21 @@ class RemovableDriveOutputDevice(OutputDevice):
self.setIconName("save_sd") self.setIconName("save_sd")
self.setPriority(1) self.setPriority(1)
Preferences.getInstance().addPreference("removable_drive/file_type", "text/x-gcode") #Add a preference that says in what file type we should store the file.
self._writing = False self._writing = False
def requestWrite(self, node, file_name = None): def requestWrite(self, node, file_name = None, filter_by_machine = False):
if self._writing: if self._writing:
raise OutputDeviceError.DeviceBusyError() raise OutputDeviceError.DeviceBusyError()
file_type = Preferences.getInstance().getValue("removable_drive/file_type") file_formats = Application.getInstance().getMeshFileHandler().getSupportedFileTypesWrite() #Formats supported by this application.
gcode_writer = Application.getInstance().getMeshFileHandler().getWriterByMimeType(file_type) if filter_by_machine:
if not gcode_writer: machine_file_formats = Application.getInstance().getMachineManager().getActiveMachineInstance().getMachineDefinition().getFileFormats()
Logger.log("e", "Could not find writer for MIME type %s, not writing to removable drive %s", file_type, self.getName()) file_formats = list(filter(lambda file_format: file_format["mime_type"] in machine_file_formats, file_formats)) #Take the intersection between file_formats and machine_file_formats.
if len(file_formats) == 0:
Logger.log("e", "There are no file formats available to write with!")
raise OutputDeviceError.WriteRequestFailedError() raise OutputDeviceError.WriteRequestFailedError()
writer = Application.getInstance().getMeshFileHandler().getWriterByMimeType(file_formats[0]["mime_type"]) #Just take the first file format available.
extension = file_formats[0]["extension"]
if file_name == None: if file_name == None:
for n in BreadthFirstIterator(node): for n in BreadthFirstIterator(node):
@ -48,12 +50,14 @@ class RemovableDriveOutputDevice(OutputDevice):
Logger.log("e", "Could not determine a proper file name when trying to write to %s, aborting", self.getName()) Logger.log("e", "Could not determine a proper file name when trying to write to %s, aborting", self.getName())
raise OutputDeviceError.WriteRequestFailedError() raise OutputDeviceError.WriteRequestFailedError()
file_name = os.path.join(self.getId(), os.path.splitext(file_name)[0] + ".gcode") if extension: #Not empty string.
extension = "." + extension
file_name = os.path.join(self.getId(), os.path.splitext(file_name)[0] + extension)
try: try:
Logger.log("d", "Writing to %s", file_name) Logger.log("d", "Writing to %s", file_name)
stream = open(file_name, "wt") stream = open(file_name, "wt")
job = WriteMeshJob(gcode_writer, stream, node, MeshWriter.OutputMode.TextMode) job = WriteMeshJob(writer, stream, node, MeshWriter.OutputMode.TextMode)
job.setFileName(file_name) job.setFileName(file_name)
job.progress.connect(self._onProgress) job.progress.connect(self._onProgress)
job.finished.connect(self._onFinished) job.finished.connect(self._onFinished)

View File

@ -44,7 +44,7 @@ class SliceInfo(Extension):
def _onWriteStarted(self, output_device): def _onWriteStarted(self, output_device):
if not Preferences.getInstance().getValue("info/send_slice_info"): if not Preferences.getInstance().getValue("info/send_slice_info"):
return # Do nothing, user does not want to send data return # Do nothing, user does not want to send data
settings = Application.getInstance().getMachineManager().getActiveProfile() settings = Application.getInstance().getMachineManager().getWorkingProfile()
# Load all machine definitions and put them in machine_settings dict # Load all machine definitions and put them in machine_settings dict
#setting_file_name = Application.getInstance().getActiveMachineInstance().getMachineSettings()._json_file #setting_file_name = Application.getInstance().getActiveMachineInstance().getMachineSettings()._json_file

View File

@ -34,8 +34,8 @@ class SolidView(View):
self._disabled_shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "overhang.shader")) self._disabled_shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "overhang.shader"))
self._disabled_shader.setUniformValue("u_diffuseColor", [0.68, 0.68, 0.68, 1.0]) self._disabled_shader.setUniformValue("u_diffuseColor", [0.68, 0.68, 0.68, 1.0])
if Application.getInstance().getMachineManager().getActiveProfile(): if Application.getInstance().getMachineManager().getWorkingProfile():
profile = Application.getInstance().getMachineManager().getActiveProfile() profile = Application.getInstance().getMachineManager().getWorkingProfile()
if profile.getSettingValue("support_enable") or not Preferences.getInstance().getValue("view/show_overhang"): if profile.getSettingValue("support_enable") or not Preferences.getInstance().getValue("view/show_overhang"):
angle = profile.getSettingValue("support_angle") angle = profile.getSettingValue("support_angle")

461
resources/i18n/de/cura.po Executable file → Normal file

File diff suppressed because it is too large Load Diff

950
resources/i18n/de/fdmprinter.json.po Executable file → Normal file

File diff suppressed because it is too large Load Diff

View File

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-01-18 11:54+0100\n" "POT-Creation-Date: 2016-01-18 11:54+0100\n"
"PO-Revision-Date: 2016-01-18 11:54+0100\n" "PO-Revision-Date: 2016-01-26 08:37+0100\n"
"Last-Translator: Automatically generated\n" "Last-Translator: Automatically generated\n"
"Language-Team: none\n" "Language-Team: none\n"
"Language: en\n" "Language: en\n"
@ -28,10 +28,7 @@ msgid ""
"<p>An uncaught exception has occurred!</p><p>Please use the information " "<p>An uncaught exception has occurred!</p><p>Please use the information "
"below to post a bug report at <a href=\"http://github.com/Ultimaker/Cura/" "below to post a bug report at <a href=\"http://github.com/Ultimaker/Cura/"
"issues\">http://github.com/Ultimaker/Cura/issues</a></p>" "issues\">http://github.com/Ultimaker/Cura/issues</a></p>"
msgstr "" msgstr "<p>An uncaught exception has occurred!</p><p>Please use the information below to post a bug report at <a href=\"http://github.com/Ultimaker/Cura/issues\">http://github.com/Ultimaker/Cura/issues</a></p>"
"<p>An uncaught exception has occurred!</p><p>Please use the information "
"below to post a bug report at <a href=\"http://github.com/Ultimaker/Cura/"
"issues\">http://github.com/Ultimaker/Cura/issues</a></p>"
#: /home/tamara/2.1/Cura/cura/CrashHandler.py:52 #: /home/tamara/2.1/Cura/cura/CrashHandler.py:52
msgctxt "@action:button" msgctxt "@action:button"
@ -155,7 +152,7 @@ msgstr "Ejected {0}. You can now safely remove the drive."
#, python-brace-format #, python-brace-format
msgctxt "@info:status" msgctxt "@info:status"
msgid "Failed to eject {0}. Maybe it is still in use?" msgid "Failed to eject {0}. Maybe it is still in use?"
msgstr "Failed to eject {0}. Maybe it is still in use?" msgstr "Failed to eject {0}. Is it still in use?"
#: /home/tamara/2.1/Cura/plugins/RemovableDriveOutputDevice/__init__.py:12 #: /home/tamara/2.1/Cura/plugins/RemovableDriveOutputDevice/__init__.py:12
msgctxt "@label" msgctxt "@label"
@ -231,7 +228,7 @@ msgstr "Update Firmware"
#: /home/tamara/2.1/Cura/plugins/USBPrinting/USBPrinterManager.py:101 #: /home/tamara/2.1/Cura/plugins/USBPrinting/USBPrinterManager.py:101
msgctxt "@info" msgctxt "@info"
msgid "Cannot update firmware, there were no connected printers found." msgid "Cannot update firmware, there were no connected printers found."
msgstr "Cannot update firmware, there were no connected printers found." msgstr "Cannot update firmware, no connected printers were found."
#: /home/tamara/2.1/Cura/plugins/USBPrinting/PrinterConnection.py:35 #: /home/tamara/2.1/Cura/plugins/USBPrinting/PrinterConnection.py:35
msgctxt "@item:inmenu" msgctxt "@item:inmenu"
@ -257,15 +254,13 @@ msgstr "USB printing"
msgctxt "@info:whatsthis" msgctxt "@info:whatsthis"
msgid "" msgid ""
"Accepts G-Code and sends them to a printer. Plugin can also update firmware." "Accepts G-Code and sends them to a printer. Plugin can also update firmware."
msgstr "" msgstr "Accepts G-Code and sends them to a printer. Plugin can also update firmware."
"Accepts G-Code and sends them to a printer. Plugin can also update firmware."
#: /home/tamara/2.1/Cura/plugins/SliceInfoPlugin/SliceInfo.py:35 #: /home/tamara/2.1/Cura/plugins/SliceInfoPlugin/SliceInfo.py:35
msgctxt "@info" msgctxt "@info"
msgid "" msgid ""
"Cura automatically sends slice info. You can disable this in preferences" "Cura automatically sends slice info. You can disable this in preferences"
msgstr "" msgstr "Cura automatically sends slice info. You can disable this in preferences"
"Cura automatically sends slice info. You can disable this in preferences"
#: /home/tamara/2.1/Cura/plugins/SliceInfoPlugin/SliceInfo.py:36 #: /home/tamara/2.1/Cura/plugins/SliceInfoPlugin/SliceInfo.py:36
msgctxt "@action:button" msgctxt "@action:button"
@ -425,7 +420,7 @@ msgstr "Firmware Update"
#: /home/tamara/2.1/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:38 #: /home/tamara/2.1/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:38
msgctxt "@label" msgctxt "@label"
msgid "Starting firmware update, this may take a while." msgid "Starting firmware update, this may take a while."
msgstr "Starting firmware update, this may take a while." msgstr "Starting firmware update, this may take some time."
#: /home/tamara/2.1/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:43 #: /home/tamara/2.1/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:43
msgctxt "@label" msgctxt "@label"
@ -490,7 +485,7 @@ msgstr "Height (mm)"
#: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:62 #: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:62
msgctxt "@info:tooltip" msgctxt "@info:tooltip"
msgid "The base height from the build plate in millimeters." msgid "The base height from the build plate in millimeters."
msgstr "The base height from the build plate in millimeters." msgstr "The base height from the build plate in millimetres."
#: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:68 #: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:68
msgctxt "@action:label" msgctxt "@action:label"
@ -500,7 +495,7 @@ msgstr "Base (mm)"
#: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:86 #: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:86
msgctxt "@info:tooltip" msgctxt "@info:tooltip"
msgid "The width in millimeters on the build plate." msgid "The width in millimeters on the build plate."
msgstr "The width in millimeters on the build plate." msgstr "The width in millimetres on the build plate."
#: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:92 #: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:92
msgctxt "@action:label" msgctxt "@action:label"
@ -510,7 +505,7 @@ msgstr "Width (mm)"
#: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:111 #: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:111
msgctxt "@info:tooltip" msgctxt "@info:tooltip"
msgid "The depth in millimeters on the build plate" msgid "The depth in millimeters on the build plate"
msgstr "The depth in millimeters on the build plate" msgstr "The depth in millimetres on the build plate"
#: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:117 #: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:117
msgctxt "@action:label" msgctxt "@action:label"
@ -524,11 +519,7 @@ msgid ""
"represent low points on the mesh. Change this option to reverse the behavior " "represent low points on the mesh. Change this option to reverse the behavior "
"such that black pixels represent high points on the mesh and white pixels " "such that black pixels represent high points on the mesh and white pixels "
"represent low points on the mesh." "represent low points on the mesh."
msgstr "" msgstr "By default, white pixels represent high points on the mesh and black pixels represent low points on the mesh. Change this option to reverse the behaviour such that black pixels represent high points on the mesh and white pixels represent low points on the mesh."
"By default, white pixels represent high points on the mesh and black pixels "
"represent low points on the mesh. Change this option to reverse the behavior "
"such that black pixels represent high points on the mesh and white pixels "
"represent low points on the mesh."
#: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:149 #: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:149
msgctxt "@item:inlistbox" msgctxt "@item:inlistbox"
@ -560,9 +551,7 @@ msgctxt "@label"
msgid "" msgid ""
"Per Object Settings behavior may be unexpected when 'Print sequence' is set " "Per Object Settings behavior may be unexpected when 'Print sequence' is set "
"to 'All at Once'." "to 'All at Once'."
msgstr "" msgstr "Per Object Settings behaviour may be unexpected when 'Print sequence' is set to 'All at Once'."
"Per Object Settings behavior may be unexpected when 'Print sequence' is set "
"to 'All at Once'."
#: /home/tamara/2.1/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:42 #: /home/tamara/2.1/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:42
msgctxt "@label" msgctxt "@label"
@ -577,7 +566,7 @@ msgstr "Add Setting"
#: /home/tamara/2.1/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:166 #: /home/tamara/2.1/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:166
msgctxt "@title:window" msgctxt "@title:window"
msgid "Pick a Setting to Customize" msgid "Pick a Setting to Customize"
msgstr "Pick a Setting to Customize" msgstr "Pick a Setting to Customise"
#: /home/tamara/2.1/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:177 #: /home/tamara/2.1/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:177
msgctxt "@label:textbox" msgctxt "@label:textbox"
@ -651,10 +640,7 @@ msgid ""
"Selecting this profile overwrites some of your customised settings. Do you " "Selecting this profile overwrites some of your customised settings. Do you "
"want to merge the new settings into your current profile or do you want to " "want to merge the new settings into your current profile or do you want to "
"load a clean copy of the profile?" "load a clean copy of the profile?"
msgstr "" msgstr "Selecting this profile overwrites some of your customised settings. Do you want to merge the new settings into your current profile or do you want to load a clean copy of the profile?"
"Selecting this profile overwrites some of your customised settings. Do you "
"want to merge the new settings into your current profile or do you want to "
"load a clean copy of the profile?"
#: /home/tamara/2.1/Cura/resources/qml/LoadProfileDialog.qml:38 #: /home/tamara/2.1/Cura/resources/qml/LoadProfileDialog.qml:38
msgctxt "@label" msgctxt "@label"
@ -749,7 +735,7 @@ msgstr "Delete Object"
#: /home/tamara/2.1/Cura/resources/qml/Actions.qml:144 #: /home/tamara/2.1/Cura/resources/qml/Actions.qml:144
msgctxt "@action:inmenu" msgctxt "@action:inmenu"
msgid "Ce&nter Object on Platform" msgid "Ce&nter Object on Platform"
msgstr "Ce&nter Object on Platform" msgstr "Ce&ntre Object on Platform"
#: /home/tamara/2.1/Cura/resources/qml/Actions.qml:150 #: /home/tamara/2.1/Cura/resources/qml/Actions.qml:150
msgctxt "@action:inmenu menubar:edit" msgctxt "@action:inmenu menubar:edit"
@ -814,8 +800,7 @@ msgstr "Hollow"
#: /home/tamara/2.1/Cura/resources/qml/SidebarSimple.qml:239 #: /home/tamara/2.1/Cura/resources/qml/SidebarSimple.qml:239
msgctxt "@label" msgctxt "@label"
msgid "No (0%) infill will leave your model hollow at the cost of low strength" msgid "No (0%) infill will leave your model hollow at the cost of low strength"
msgstr "" msgstr "No (0%) infill will leave your model hollow at the cost of low strength"
"No (0%) infill will leave your model hollow at the cost of low strength"
#: /home/tamara/2.1/Cura/resources/qml/SidebarSimple.qml:243 #: /home/tamara/2.1/Cura/resources/qml/SidebarSimple.qml:243
msgctxt "@label" msgctxt "@label"
@ -862,9 +847,7 @@ msgctxt "@label"
msgid "" msgid ""
"Enable printing a brim. This will add a single-layer-thick flat area around " "Enable printing a brim. This will add a single-layer-thick flat area around "
"your object which is easy to cut off afterwards." "your object which is easy to cut off afterwards."
msgstr "" msgstr "Enable printing a brim. This will add a single-layer-thick flat area around your object which is easy to cut off afterwards."
"Enable printing a brim. This will add a single-layer-thick flat area around "
"your object which is easy to cut off afterwards."
#: /home/tamara/2.1/Cura/resources/qml/SidebarSimple.qml:330 #: /home/tamara/2.1/Cura/resources/qml/SidebarSimple.qml:330
msgctxt "@option:check" msgctxt "@option:check"
@ -876,9 +859,7 @@ msgctxt "@label"
msgid "" msgid ""
"Enable printing support structures. This will build up supporting structures " "Enable printing support structures. This will build up supporting structures "
"below the model to prevent the model from sagging or printing in mid air." "below the model to prevent the model from sagging or printing in mid air."
msgstr "" msgstr "Enable printing support structures. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air."
"Enable printing support structures. This will build up supporting structures "
"below the model to prevent the model from sagging or printing in mid air."
#: /home/tamara/2.1/Cura/resources/qml/GeneralPage.qml:14 #: /home/tamara/2.1/Cura/resources/qml/GeneralPage.qml:14
#: /home/tamara/2.1/Cura/resources/qml/Cura.qml:492 #: /home/tamara/2.1/Cura/resources/qml/Cura.qml:492
@ -920,15 +901,13 @@ msgstr "Polish"
msgctxt "@label" msgctxt "@label"
msgid "" msgid ""
"You will need to restart the application for language changes to have effect." "You will need to restart the application for language changes to have effect."
msgstr "" msgstr "You will need to restart the application for language changes to have effect."
"You will need to restart the application for language changes to have effect."
#: /home/tamara/2.1/Cura/resources/qml/GeneralPage.qml:117 #: /home/tamara/2.1/Cura/resources/qml/GeneralPage.qml:117
msgctxt "@info:tooltip" msgctxt "@info:tooltip"
msgid "" msgid ""
"Should objects on the platform be moved so that they no longer intersect." "Should objects on the platform be moved so that they no longer intersect."
msgstr "" msgstr "Should objects on the platform be moved so that they no longer intersect."
"Should objects on the platform be moved so that they no longer intersect."
#: /home/tamara/2.1/Cura/resources/qml/GeneralPage.qml:122 #: /home/tamara/2.1/Cura/resources/qml/GeneralPage.qml:122
msgctxt "@option:check" msgctxt "@option:check"
@ -939,8 +918,7 @@ msgstr "Ensure objects are kept apart"
msgctxt "@info:tooltip" msgctxt "@info:tooltip"
msgid "" msgid ""
"Should opened files be scaled to the build volume if they are too large?" "Should opened files be scaled to the build volume if they are too large?"
msgstr "" msgstr "Should opened files be scaled to the build volume if they are too large?"
"Should opened files be scaled to the build volume if they are too large?"
#: /home/tamara/2.1/Cura/resources/qml/GeneralPage.qml:136 #: /home/tamara/2.1/Cura/resources/qml/GeneralPage.qml:136
msgctxt "@option:check" msgctxt "@option:check"
@ -953,10 +931,7 @@ msgid ""
"Should anonymous data about your print be sent to Ultimaker? Note, no " "Should anonymous data about your print be sent to Ultimaker? Note, no "
"models, IP addresses or other personally identifiable information is sent or " "models, IP addresses or other personally identifiable information is sent or "
"stored." "stored."
msgstr "" msgstr "Should anonymous data about your print be sent to Ultimaker? Note, no models, IP addresses or other personally identifiable information is sent or stored."
"Should anonymous data about your print be sent to Ultimaker? Note, no "
"models, IP addresses or other personally identifiable information is sent or "
"stored."
#: /home/tamara/2.1/Cura/resources/qml/GeneralPage.qml:150 #: /home/tamara/2.1/Cura/resources/qml/GeneralPage.qml:150
msgctxt "@option:check" msgctxt "@option:check"
@ -973,9 +948,7 @@ msgctxt "@info:tooltip"
msgid "" msgid ""
"Highlight unsupported areas of the model in red. Without support these areas " "Highlight unsupported areas of the model in red. Without support these areas "
"will nog print properly." "will nog print properly."
msgstr "" msgstr "Highlight unsupported areas of the model in red. Without support these areas will not print properly."
"Highlight unsupported areas of the model in red. Without support these areas "
"will nog print properly."
#: /home/tamara/2.1/Cura/resources/qml/ViewPage.qml:42 #: /home/tamara/2.1/Cura/resources/qml/ViewPage.qml:42
msgctxt "@option:check" msgctxt "@option:check"
@ -987,14 +960,12 @@ msgctxt "@info:tooltip"
msgid "" msgid ""
"Moves the camera so the object is in the center of the view when an object " "Moves the camera so the object is in the center of the view when an object "
"is selected" "is selected"
msgstr "" msgstr "Moves the camera so the object is in the centre of the view when an object is selected"
"Moves the camera so the object is in the center of the view when an object "
"is selected"
#: /home/tamara/2.1/Cura/resources/qml/ViewPage.qml:54 #: /home/tamara/2.1/Cura/resources/qml/ViewPage.qml:54
msgctxt "@action:button" msgctxt "@action:button"
msgid "Center camera when item is selected" msgid "Center camera when item is selected"
msgstr "Center camera when item is selected" msgstr "Centre camera when item is selected"
#: /home/tamara/2.1/Cura/resources/qml/WizardPages/UltimakerCheckup.qml:72 #: /home/tamara/2.1/Cura/resources/qml/WizardPages/UltimakerCheckup.qml:72
#: /home/tamara/2.1/Cura/resources/qml/WizardPages/AddMachine.qml:275 #: /home/tamara/2.1/Cura/resources/qml/WizardPages/AddMachine.qml:275
@ -1007,9 +978,7 @@ msgctxt "@label"
msgid "" msgid ""
"It's a good idea to do a few sanity checks on your Ultimaker. You can skip " "It's a good idea to do a few sanity checks on your Ultimaker. You can skip "
"this step if you know your machine is functional" "this step if you know your machine is functional"
msgstr "" msgstr "It's a good idea to do a few sanity checks on your Ultimaker. You can skip this step if you know your machine is functional"
"It's a good idea to do a few sanity checks on your Ultimaker. You can skip "
"this step if you know your machine is functional"
#: /home/tamara/2.1/Cura/resources/qml/WizardPages/UltimakerCheckup.qml:100 #: /home/tamara/2.1/Cura/resources/qml/WizardPages/UltimakerCheckup.qml:100
msgctxt "@action:button" msgctxt "@action:button"
@ -1107,14 +1076,12 @@ msgctxt "@label"
msgid "" msgid ""
"To assist you in having better default settings for your Ultimaker. Cura " "To assist you in having better default settings for your Ultimaker. Cura "
"would like to know which upgrades you have in your machine:" "would like to know which upgrades you have in your machine:"
msgstr "" msgstr "To assist you in having better default settings for your Ultimaker. Cura would like to know which upgrades you have in your machine:"
"To assist you in having better default settings for your Ultimaker. Cura "
"would like to know which upgrades you have in your machine:"
#: /home/tamara/2.1/Cura/resources/qml/WizardPages/SelectUpgradedParts.qml:57 #: /home/tamara/2.1/Cura/resources/qml/WizardPages/SelectUpgradedParts.qml:57
msgctxt "@option:check" msgctxt "@option:check"
msgid "Extruder driver ugrades" msgid "Extruder driver ugrades"
msgstr "Extruder driver ugrades" msgstr "Extruder driver upgrades"
#: /home/tamara/2.1/Cura/resources/qml/WizardPages/SelectUpgradedParts.qml:63 #: /home/tamara/2.1/Cura/resources/qml/WizardPages/SelectUpgradedParts.qml:63
msgctxt "@option:check" msgctxt "@option:check"
@ -1133,11 +1100,7 @@ msgid ""
"drive upgrade. If you do not have this upgrade, it is highly recommended to " "drive upgrade. If you do not have this upgrade, it is highly recommended to "
"improve reliability. This upgrade can be bought from the Ultimaker webshop " "improve reliability. This upgrade can be bought from the Ultimaker webshop "
"or found on thingiverse as thing:26094" "or found on thingiverse as thing:26094"
msgstr "" msgstr "If you bought your Ultimaker after October 2012 you will have the Extruder drive upgrade. If you do not have this upgrade, it is highly recommended to improve reliability. This upgrade can be bought from the Ultimaker web shop or found on Thingiverse as thing:26094"
"If you bought your Ultimaker after october 2012 you will have the Extruder "
"drive upgrade. If you do not have this upgrade, it is highly recommended to "
"improve reliability. This upgrade can be bought from the Ultimaker webshop "
"or found on thingiverse as thing:26094"
#: /home/tamara/2.1/Cura/resources/qml/WizardPages/AddMachine.qml:108 #: /home/tamara/2.1/Cura/resources/qml/WizardPages/AddMachine.qml:108
msgctxt "@label" msgctxt "@label"
@ -1149,9 +1112,7 @@ msgctxt "@label"
msgid "" msgid ""
"This printer name has already been used. Please choose a different printer " "This printer name has already been used. Please choose a different printer "
"name." "name."
msgstr "" msgstr "This printer name has already been used. Please choose a different printer name."
"This printer name has already been used. Please choose a different printer "
"name."
#: /home/tamara/2.1/Cura/resources/qml/WizardPages/AddMachine.qml:245 #: /home/tamara/2.1/Cura/resources/qml/WizardPages/AddMachine.qml:245
msgctxt "@label:textbox" msgctxt "@label:textbox"
@ -1180,10 +1141,7 @@ msgid ""
"To make sure your prints will come out great, you can now adjust your " "To make sure your prints will come out great, you can now adjust your "
"buildplate. When you click 'Move to Next Position' the nozzle will move to " "buildplate. When you click 'Move to Next Position' the nozzle will move to "
"the different positions that can be adjusted." "the different positions that can be adjusted."
msgstr "" msgstr "You can now adjust the build plate to make sure your prints come out great. When you click 'Move to Next Position, the nozzle will move to the different positions that can be adjusted."
"To make sure your prints will come out great, you can now adjust your "
"buildplate. When you click 'Move to Next Position' the nozzle will move to "
"the different positions that can be adjusted."
#: /home/tamara/2.1/Cura/resources/qml/WizardPages/Bedleveling.qml:62 #: /home/tamara/2.1/Cura/resources/qml/WizardPages/Bedleveling.qml:62
msgctxt "@label" msgctxt "@label"
@ -1191,10 +1149,7 @@ msgid ""
"For every postition; insert a piece of paper under the nozzle and adjust the " "For every postition; insert a piece of paper under the nozzle and adjust the "
"print bed height. The print bed height is right when the paper is slightly " "print bed height. The print bed height is right when the paper is slightly "
"gripped by the tip of the nozzle." "gripped by the tip of the nozzle."
msgstr "" msgstr "For every position; insert a piece of paper under the nozzle and adjust the print bed height. The print bed height is correct when the paper is gripped slightly by the tip of the nozzle."
"For every postition; insert a piece of paper under the nozzle and adjust the "
"print bed height. The print bed height is right when the paper is slightly "
"gripped by the tip of the nozzle."
#: /home/tamara/2.1/Cura/resources/qml/WizardPages/Bedleveling.qml:77 #: /home/tamara/2.1/Cura/resources/qml/WizardPages/Bedleveling.qml:77
msgctxt "@action:button" msgctxt "@action:button"
@ -1204,12 +1159,12 @@ msgstr "Move to Next Position"
#: /home/tamara/2.1/Cura/resources/qml/WizardPages/Bedleveling.qml:109 #: /home/tamara/2.1/Cura/resources/qml/WizardPages/Bedleveling.qml:109
msgctxt "@action:button" msgctxt "@action:button"
msgid "Skip Bedleveling" msgid "Skip Bedleveling"
msgstr "Skip Bedleveling" msgstr "Skip Bed Levelling"
#: /home/tamara/2.1/Cura/resources/qml/WizardPages/Bedleveling.qml:123 #: /home/tamara/2.1/Cura/resources/qml/WizardPages/Bedleveling.qml:123
msgctxt "@label" msgctxt "@label"
msgid "Everything is in order! You're done with bedleveling." msgid "Everything is in order! You're done with bedleveling."
msgstr "Everything is in order! You're done with bedleveling." msgstr "Everything is ready! You're done with bed levelling."
#: /home/tamara/2.1/Cura/resources/qml/WizardPages/UpgradeFirmware.qml:33 #: /home/tamara/2.1/Cura/resources/qml/WizardPages/UpgradeFirmware.qml:33
msgctxt "@label" msgctxt "@label"
@ -1217,28 +1172,21 @@ msgid ""
"Firmware is the piece of software running directly on your 3D printer. This " "Firmware is the piece of software running directly on your 3D printer. This "
"firmware controls the step motors, regulates the temperature and ultimately " "firmware controls the step motors, regulates the temperature and ultimately "
"makes your printer work." "makes your printer work."
msgstr "" msgstr "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work."
"Firmware is the piece of software running directly on your 3D printer. This "
"firmware controls the step motors, regulates the temperature and ultimately "
"makes your printer work."
#: /home/tamara/2.1/Cura/resources/qml/WizardPages/UpgradeFirmware.qml:43 #: /home/tamara/2.1/Cura/resources/qml/WizardPages/UpgradeFirmware.qml:43
msgctxt "@label" msgctxt "@label"
msgid "" msgid ""
"The firmware shipping with new Ultimakers works, but upgrades have been made " "The firmware shipping with new Ultimakers works, but upgrades have been made "
"to make better prints, and make calibration easier." "to make better prints, and make calibration easier."
msgstr "" msgstr "The firmware shipping with new Ultimakers works, but upgrades have been made to make better prints, and make calibration easier."
"The firmware shipping with new Ultimakers works, but upgrades have been made "
"to make better prints, and make calibration easier."
#: /home/tamara/2.1/Cura/resources/qml/WizardPages/UpgradeFirmware.qml:53 #: /home/tamara/2.1/Cura/resources/qml/WizardPages/UpgradeFirmware.qml:53
msgctxt "@label" msgctxt "@label"
msgid "" msgid ""
"Cura requires these new features and thus your firmware will most likely " "Cura requires these new features and thus your firmware will most likely "
"need to be upgraded. You can do so now." "need to be upgraded. You can do so now."
msgstr "" msgstr "Cura requires these new features and thus your firmware will most likely need to be upgraded. You can do this now."
"Cura requires these new features and thus your firmware will most likely "
"need to be upgraded. You can do so now."
#: /home/tamara/2.1/Cura/resources/qml/WizardPages/UpgradeFirmware.qml:64 #: /home/tamara/2.1/Cura/resources/qml/WizardPages/UpgradeFirmware.qml:64
msgctxt "@action:button" msgctxt "@action:button"
@ -1253,7 +1201,7 @@ msgstr "Skip Upgrade"
#: /home/tamara/2.1/Cura/resources/qml/SaveButton.qml:23 #: /home/tamara/2.1/Cura/resources/qml/SaveButton.qml:23
msgctxt "@label:PrintjobStatus" msgctxt "@label:PrintjobStatus"
msgid "Please load a 3d model" msgid "Please load a 3d model"
msgstr "Please load a 3d model" msgstr "Please load a 3D model"
#: /home/tamara/2.1/Cura/resources/qml/SaveButton.qml:25 #: /home/tamara/2.1/Cura/resources/qml/SaveButton.qml:25
msgctxt "@label:PrintjobStatus" msgctxt "@label:PrintjobStatus"
@ -1289,8 +1237,7 @@ msgstr "End-to-end solution for fused filament 3D printing."
msgctxt "@info:credit" msgctxt "@info:credit"
msgid "" msgid ""
"Cura has been developed by Ultimaker B.V. in cooperation with the community." "Cura has been developed by Ultimaker B.V. in cooperation with the community."
msgstr "" msgstr "Cura has been developed by Ultimaker B.V. in cooperation with the community."
"Cura has been developed by Ultimaker B.V. in cooperation with the community."
#: /home/tamara/2.1/Cura/resources/qml/Cura.qml:16 #: /home/tamara/2.1/Cura/resources/qml/Cura.qml:16
msgctxt "@title:window" msgctxt "@title:window"

File diff suppressed because it is too large Load Diff

1320
resources/i18n/es/cura.po Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

256
resources/i18n/fi/cura.po Executable file → Normal file
View File

@ -9,7 +9,7 @@ msgstr ""
"Project-Id-Version: Cura 2.1\n" "Project-Id-Version: Cura 2.1\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-01-18 11:54+0100\n" "POT-Creation-Date: 2016-01-18 11:54+0100\n"
"PO-Revision-Date: 2015-09-28 14:08+0300\n" "PO-Revision-Date: 2016-01-26 13:21+0100\n"
"Last-Translator: Tapio <info@tapimex.fi>\n" "Last-Translator: Tapio <info@tapimex.fi>\n"
"Language-Team: \n" "Language-Team: \n"
"Language: fi_FI\n" "Language: fi_FI\n"
@ -30,10 +30,7 @@ msgid ""
"<p>An uncaught exception has occurred!</p><p>Please use the information " "<p>An uncaught exception has occurred!</p><p>Please use the information "
"below to post a bug report at <a href=\"http://github.com/Ultimaker/Cura/" "below to post a bug report at <a href=\"http://github.com/Ultimaker/Cura/"
"issues\">http://github.com/Ultimaker/Cura/issues</a></p>" "issues\">http://github.com/Ultimaker/Cura/issues</a></p>"
msgstr "" msgstr "<p>Tapahtui epätavallinen poikkeus!</p><p>Lähetä virheraportti alla olevin tiedoin osoitteella <a href=\"http://github.com/Ultimaker/Cura/issues\">http://github.com/Ultimaker/Cura/issues</a></p>"
"<p>Tapahtui epätavallinen poikkeus!</p><p>Lähetä virheraportti alla olevin "
"tiedoin osoitteella <a href=\"http://github.com/Ultimaker/Cura/issues"
"\">http://github.com/Ultimaker/Cura/issues</a></p>"
#: /home/tamara/2.1/Cura/cura/CrashHandler.py:52 #: /home/tamara/2.1/Cura/cura/CrashHandler.py:52
msgctxt "@action:button" msgctxt "@action:button"
@ -56,25 +53,25 @@ msgstr "Ladataan käyttöliittymää..."
#, python-format #, python-format
msgctxt "@info" msgctxt "@info"
msgid "%(width).1f x %(depth).1f x %(height).1f mm" msgid "%(width).1f x %(depth).1f x %(height).1f mm"
msgstr "" msgstr "%(width).1f x %(depth).1f x %(height).1f mm"
#: /home/tamara/2.1/Cura/plugins/CuraProfileReader/__init__.py:12 #: /home/tamara/2.1/Cura/plugins/CuraProfileReader/__init__.py:12
msgctxt "@label" msgctxt "@label"
msgid "Cura Profile Reader" msgid "Cura Profile Reader"
msgstr "" msgstr "Cura-profiilin lukija"
#: /home/tamara/2.1/Cura/plugins/CuraProfileReader/__init__.py:15 #: /home/tamara/2.1/Cura/plugins/CuraProfileReader/__init__.py:15
#, fuzzy #, fuzzy
msgctxt "@info:whatsthis" msgctxt "@info:whatsthis"
msgid "Provides support for importing Cura profiles." msgid "Provides support for importing Cura profiles."
msgstr "Tukee 3MF-tiedostojen lukemista." msgstr "Tukee Cura-profiilien tuontia."
#: /home/tamara/2.1/Cura/plugins/CuraProfileReader/__init__.py:21 #: /home/tamara/2.1/Cura/plugins/CuraProfileReader/__init__.py:21
#: /home/tamara/2.1/Cura/plugins/CuraProfileWriter/__init__.py:21 #: /home/tamara/2.1/Cura/plugins/CuraProfileWriter/__init__.py:21
#, fuzzy #, fuzzy
msgctxt "@item:inlistbox" msgctxt "@item:inlistbox"
msgid "Cura Profile" msgid "Cura Profile"
msgstr "&Profiili" msgstr "Cura-profiili"
#: /home/tamara/2.1/Cura/plugins/XRayView/__init__.py:12 #: /home/tamara/2.1/Cura/plugins/XRayView/__init__.py:12
#, fuzzy #, fuzzy
@ -91,12 +88,12 @@ msgstr "Näyttää kerrosnäkymän."
#: /home/tamara/2.1/Cura/plugins/XRayView/__init__.py:19 #: /home/tamara/2.1/Cura/plugins/XRayView/__init__.py:19
msgctxt "@item:inlistbox" msgctxt "@item:inlistbox"
msgid "X-Ray" msgid "X-Ray"
msgstr "" msgstr "Kerros"
#: /home/tamara/2.1/Cura/plugins/3MFReader/__init__.py:12 #: /home/tamara/2.1/Cura/plugins/3MFReader/__init__.py:12
msgctxt "@label" msgctxt "@label"
msgid "3MF Reader" msgid "3MF Reader"
msgstr "3MF Reader" msgstr "3MF-lukija"
#: /home/tamara/2.1/Cura/plugins/3MFReader/__init__.py:15 #: /home/tamara/2.1/Cura/plugins/3MFReader/__init__.py:15
msgctxt "@info:whatsthis" msgctxt "@info:whatsthis"
@ -168,7 +165,7 @@ msgstr "{0} poisto epäonnistui. Onko se vielä käytössä?"
#: /home/tamara/2.1/Cura/plugins/RemovableDriveOutputDevice/__init__.py:12 #: /home/tamara/2.1/Cura/plugins/RemovableDriveOutputDevice/__init__.py:12
msgctxt "@label" msgctxt "@label"
msgid "Removable Drive Output Device Plugin" msgid "Removable Drive Output Device Plugin"
msgstr "Irrotettavan aseman lisäosa" msgstr "Irrotettavan aseman tulostusvälineen lisäosa"
#: /home/tamara/2.1/Cura/plugins/RemovableDriveOutputDevice/__init__.py:14 #: /home/tamara/2.1/Cura/plugins/RemovableDriveOutputDevice/__init__.py:14
msgctxt "@info:whatsthis" msgctxt "@info:whatsthis"
@ -179,7 +176,7 @@ msgstr "Tukee irrotettavan aseman kytkemistä lennossa ja sille kirjoittamista"
#, fuzzy #, fuzzy
msgctxt "@item:inmenu" msgctxt "@item:inmenu"
msgid "Show Changelog" msgid "Show Changelog"
msgstr "Muutosloki" msgstr "Näytä muutosloki"
#: /home/tamara/2.1/Cura/plugins/ChangeLogPlugin/__init__.py:12 #: /home/tamara/2.1/Cura/plugins/ChangeLogPlugin/__init__.py:12
#, fuzzy #, fuzzy
@ -195,7 +192,7 @@ msgstr "Näyttää viimeisimmän tarkistetun version jälkeen tapahtuneet muutok
#: /home/tamara/2.1/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:124 #: /home/tamara/2.1/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:124
msgctxt "@info:status" msgctxt "@info:status"
msgid "Unable to slice. Please check your setting values for errors." msgid "Unable to slice. Please check your setting values for errors."
msgstr "" msgstr "Viipalointi ei onnistu. Tarkista, että asetusarvoissa ei ole virheitä."
#: /home/tamara/2.1/Cura/plugins/CuraEngineBackend/ProcessSlicedObjectListJob.py:30 #: /home/tamara/2.1/Cura/plugins/CuraEngineBackend/ProcessSlicedObjectListJob.py:30
#: /home/tamara/2.1/Cura/plugins/CuraEngineBackend/ProcessSlicedObjectListJob.py:120 #: /home/tamara/2.1/Cura/plugins/CuraEngineBackend/ProcessSlicedObjectListJob.py:120
@ -217,7 +214,7 @@ msgstr "Linkki CuraEngine-viipalointiin taustalla"
#: /home/tamara/2.1/Cura/plugins/GCodeWriter/__init__.py:12 #: /home/tamara/2.1/Cura/plugins/GCodeWriter/__init__.py:12
msgctxt "@label" msgctxt "@label"
msgid "GCode Writer" msgid "GCode Writer"
msgstr "GCode Writer" msgstr "GCode-kirjoitin"
#: /home/tamara/2.1/Cura/plugins/GCodeWriter/__init__.py:15 #: /home/tamara/2.1/Cura/plugins/GCodeWriter/__init__.py:15
msgctxt "@info:whatsthis" msgctxt "@info:whatsthis"
@ -244,7 +241,7 @@ msgstr "Päivitä laiteohjelmisto"
#: /home/tamara/2.1/Cura/plugins/USBPrinting/USBPrinterManager.py:101 #: /home/tamara/2.1/Cura/plugins/USBPrinting/USBPrinterManager.py:101
msgctxt "@info" msgctxt "@info"
msgid "Cannot update firmware, there were no connected printers found." msgid "Cannot update firmware, there were no connected printers found."
msgstr "" msgstr "Laiteohjelmistoa ei voida päivittää, koska liitettyjä tulostimia ei löytynyt."
#: /home/tamara/2.1/Cura/plugins/USBPrinting/PrinterConnection.py:35 #: /home/tamara/2.1/Cura/plugins/USBPrinting/PrinterConnection.py:35
msgctxt "@item:inmenu" msgctxt "@item:inmenu"
@ -254,7 +251,7 @@ msgstr "USB-tulostus"
#: /home/tamara/2.1/Cura/plugins/USBPrinting/PrinterConnection.py:36 #: /home/tamara/2.1/Cura/plugins/USBPrinting/PrinterConnection.py:36
msgctxt "@action:button" msgctxt "@action:button"
msgid "Print with USB" msgid "Print with USB"
msgstr "Tulosta USB:llä" msgstr "Tulostus USB:n kautta"
#: /home/tamara/2.1/Cura/plugins/USBPrinting/PrinterConnection.py:37 #: /home/tamara/2.1/Cura/plugins/USBPrinting/PrinterConnection.py:37
msgctxt "@info:tooltip" msgctxt "@info:tooltip"
@ -270,17 +267,13 @@ msgstr "USB-tulostus"
msgctxt "@info:whatsthis" msgctxt "@info:whatsthis"
msgid "" msgid ""
"Accepts G-Code and sends them to a printer. Plugin can also update firmware." "Accepts G-Code and sends them to a printer. Plugin can also update firmware."
msgstr "" msgstr "Hyväksyy GCode-määrittelyt ja lähettää ne tulostimeen. Lisäosa voi myös päivittää laiteohjelmiston."
"Hyväksyy G-Code-määrittelyt ja lähettää ne tulostimeen. Lisäosa voi myös "
"päivittää laiteohjelmiston."
#: /home/tamara/2.1/Cura/plugins/SliceInfoPlugin/SliceInfo.py:35 #: /home/tamara/2.1/Cura/plugins/SliceInfoPlugin/SliceInfo.py:35
msgctxt "@info" msgctxt "@info"
msgid "" msgid ""
"Cura automatically sends slice info. You can disable this in preferences" "Cura automatically sends slice info. You can disable this in preferences"
msgstr "" msgstr "Cura lähettää automaattisesti viipalointitietoa. Voit lisäasetuksista kytkeä sen pois käytöstä"
"Cura lähettää automaattisesti viipalointitietoa. Voit lisäasetuksista kytkeä "
"sen pois käytöstä"
#: /home/tamara/2.1/Cura/plugins/SliceInfoPlugin/SliceInfo.py:36 #: /home/tamara/2.1/Cura/plugins/SliceInfoPlugin/SliceInfo.py:36
msgctxt "@action:button" msgctxt "@action:button"
@ -295,69 +288,67 @@ msgstr "Viipalointitiedot"
#: /home/tamara/2.1/Cura/plugins/SliceInfoPlugin/__init__.py:13 #: /home/tamara/2.1/Cura/plugins/SliceInfoPlugin/__init__.py:13
msgctxt "@info:whatsthis" msgctxt "@info:whatsthis"
msgid "Submits anonymous slice info. Can be disabled through preferences." msgid "Submits anonymous slice info. Can be disabled through preferences."
msgstr "" msgstr "Lähettää anonyymiä viipalointitietoa. Voidaan lisäasetuksista kytkeä pois käytöstä."
"Lähettää anonyymiä viipalointitietoa. Voidaan lisäasetuksista kytkeä pois "
"käytöstä."
#: /home/tamara/2.1/Cura/plugins/CuraProfileWriter/__init__.py:12 #: /home/tamara/2.1/Cura/plugins/CuraProfileWriter/__init__.py:12
#, fuzzy #, fuzzy
msgctxt "@label" msgctxt "@label"
msgid "Cura Profile Writer" msgid "Cura Profile Writer"
msgstr "GCode Writer" msgstr "Cura-profiilin kirjoitin"
#: /home/tamara/2.1/Cura/plugins/CuraProfileWriter/__init__.py:15 #: /home/tamara/2.1/Cura/plugins/CuraProfileWriter/__init__.py:15
#, fuzzy #, fuzzy
msgctxt "@info:whatsthis" msgctxt "@info:whatsthis"
msgid "Provides support for exporting Cura profiles." msgid "Provides support for exporting Cura profiles."
msgstr "Tukee 3MF-tiedostojen lukemista." msgstr "Tukee Cura-profiilien vientiä."
#: /home/tamara/2.1/Cura/plugins/ImageReader/__init__.py:12 #: /home/tamara/2.1/Cura/plugins/ImageReader/__init__.py:12
#, fuzzy #, fuzzy
msgctxt "@label" msgctxt "@label"
msgid "Image Reader" msgid "Image Reader"
msgstr "3MF Reader" msgstr "Kuvanlukija"
#: /home/tamara/2.1/Cura/plugins/ImageReader/__init__.py:15 #: /home/tamara/2.1/Cura/plugins/ImageReader/__init__.py:15
msgctxt "@info:whatsthis" msgctxt "@info:whatsthis"
msgid "Enables ability to generate printable geometry from 2D image files." msgid "Enables ability to generate printable geometry from 2D image files."
msgstr "" msgstr "Mahdollistaa tulostettavien geometrioiden luomisen 2D-kuvatiedostoista."
#: /home/tamara/2.1/Cura/plugins/ImageReader/__init__.py:21 #: /home/tamara/2.1/Cura/plugins/ImageReader/__init__.py:21
msgctxt "@item:inlistbox" msgctxt "@item:inlistbox"
msgid "JPG Image" msgid "JPG Image"
msgstr "" msgstr "JPG-kuva"
#: /home/tamara/2.1/Cura/plugins/ImageReader/__init__.py:25 #: /home/tamara/2.1/Cura/plugins/ImageReader/__init__.py:25
msgctxt "@item:inlistbox" msgctxt "@item:inlistbox"
msgid "JPEG Image" msgid "JPEG Image"
msgstr "" msgstr "JPEG-kuva"
#: /home/tamara/2.1/Cura/plugins/ImageReader/__init__.py:29 #: /home/tamara/2.1/Cura/plugins/ImageReader/__init__.py:29
msgctxt "@item:inlistbox" msgctxt "@item:inlistbox"
msgid "PNG Image" msgid "PNG Image"
msgstr "" msgstr "PNG-kuva"
#: /home/tamara/2.1/Cura/plugins/ImageReader/__init__.py:33 #: /home/tamara/2.1/Cura/plugins/ImageReader/__init__.py:33
msgctxt "@item:inlistbox" msgctxt "@item:inlistbox"
msgid "BMP Image" msgid "BMP Image"
msgstr "" msgstr "BMP-kuva"
#: /home/tamara/2.1/Cura/plugins/ImageReader/__init__.py:37 #: /home/tamara/2.1/Cura/plugins/ImageReader/__init__.py:37
msgctxt "@item:inlistbox" msgctxt "@item:inlistbox"
msgid "GIF Image" msgid "GIF Image"
msgstr "" msgstr "GIF-kuva"
#: /home/tamara/2.1/Cura/plugins/GCodeProfileReader/__init__.py:12 #: /home/tamara/2.1/Cura/plugins/GCodeProfileReader/__init__.py:12
#, fuzzy #, fuzzy
msgctxt "@label" msgctxt "@label"
msgid "GCode Profile Reader" msgid "GCode Profile Reader"
msgstr "GCode Writer" msgstr "GCode-profiilin lukija"
#: /home/tamara/2.1/Cura/plugins/GCodeProfileReader/__init__.py:15 #: /home/tamara/2.1/Cura/plugins/GCodeProfileReader/__init__.py:15
#, fuzzy #, fuzzy
msgctxt "@info:whatsthis" msgctxt "@info:whatsthis"
msgid "Provides support for importing profiles from g-code files." msgid "Provides support for importing profiles from g-code files."
msgstr "Tukee 3MF-tiedostojen lukemista." msgstr "Tukee profiilien tuontia GCode-tiedostoista."
#: /home/tamara/2.1/Cura/plugins/GCodeProfileReader/__init__.py:21 #: /home/tamara/2.1/Cura/plugins/GCodeProfileReader/__init__.py:21
#, fuzzy #, fuzzy
@ -369,13 +360,13 @@ msgstr "GCode-tiedosto"
#, fuzzy #, fuzzy
msgctxt "@label" msgctxt "@label"
msgid "Solid View" msgid "Solid View"
msgstr "Kiinteä" msgstr "Kiinteä näkymä"
#: /home/tamara/2.1/Cura/plugins/SolidView/__init__.py:15 #: /home/tamara/2.1/Cura/plugins/SolidView/__init__.py:15
#, fuzzy #, fuzzy
msgctxt "@info:whatsthis" msgctxt "@info:whatsthis"
msgid "Provides a normal solid mesh view." msgid "Provides a normal solid mesh view."
msgstr "Näyttää kerrosnäkymän." msgstr "Näyttää normaalin kiinteän verkkonäkymän."
#: /home/tamara/2.1/Cura/plugins/SolidView/__init__.py:19 #: /home/tamara/2.1/Cura/plugins/SolidView/__init__.py:19
#, fuzzy #, fuzzy
@ -401,50 +392,50 @@ msgstr "Kerrokset"
#: /home/tamara/2.1/Cura/plugins/AutoSave/__init__.py:12 #: /home/tamara/2.1/Cura/plugins/AutoSave/__init__.py:12
msgctxt "@label" msgctxt "@label"
msgid "Auto Save" msgid "Auto Save"
msgstr "" msgstr "Automaattitallennus"
#: /home/tamara/2.1/Cura/plugins/AutoSave/__init__.py:15 #: /home/tamara/2.1/Cura/plugins/AutoSave/__init__.py:15
msgctxt "@info:whatsthis" msgctxt "@info:whatsthis"
msgid "Automatically saves Preferences, Machines and Profiles after changes." msgid "Automatically saves Preferences, Machines and Profiles after changes."
msgstr "" msgstr "Tallentaa automaattisesti lisäasetukset, koneet ja profiilit muutosten jälkeen."
#: /home/tamara/2.1/Cura/plugins/PerObjectSettingsTool/__init__.py:12 #: /home/tamara/2.1/Cura/plugins/PerObjectSettingsTool/__init__.py:12
msgctxt "@label" msgctxt "@label"
msgid "Per Object Settings Tool" msgid "Per Object Settings Tool"
msgstr "" msgstr "Kappalekohtaisten asetusten työkalu"
#: /home/tamara/2.1/Cura/plugins/PerObjectSettingsTool/__init__.py:15 #: /home/tamara/2.1/Cura/plugins/PerObjectSettingsTool/__init__.py:15
#, fuzzy #, fuzzy
msgctxt "@info:whatsthis" msgctxt "@info:whatsthis"
msgid "Provides the Per Object Settings." msgid "Provides the Per Object Settings."
msgstr "Näyttää kerrosnäkymän." msgstr "Näyttää kappalekohtaiset asetukset."
#: /home/tamara/2.1/Cura/plugins/PerObjectSettingsTool/__init__.py:19 #: /home/tamara/2.1/Cura/plugins/PerObjectSettingsTool/__init__.py:19
#, fuzzy #, fuzzy
msgctxt "@label" msgctxt "@label"
msgid "Per Object Settings" msgid "Per Object Settings"
msgstr "&Yhdistä kappaleet" msgstr "Kappalekohtaiset asetukset"
#: /home/tamara/2.1/Cura/plugins/PerObjectSettingsTool/__init__.py:20 #: /home/tamara/2.1/Cura/plugins/PerObjectSettingsTool/__init__.py:20
msgctxt "@info:tooltip" msgctxt "@info:tooltip"
msgid "Configure Per Object Settings" msgid "Configure Per Object Settings"
msgstr "" msgstr "Määritä kappalekohtaiset asetukset"
#: /home/tamara/2.1/Cura/plugins/LegacyProfileReader/__init__.py:12 #: /home/tamara/2.1/Cura/plugins/LegacyProfileReader/__init__.py:12
msgctxt "@label" msgctxt "@label"
msgid "Legacy Cura Profile Reader" msgid "Legacy Cura Profile Reader"
msgstr "" msgstr "Aikaisempien Cura-profiilien lukija"
#: /home/tamara/2.1/Cura/plugins/LegacyProfileReader/__init__.py:15 #: /home/tamara/2.1/Cura/plugins/LegacyProfileReader/__init__.py:15
#, fuzzy #, fuzzy
msgctxt "@info:whatsthis" msgctxt "@info:whatsthis"
msgid "Provides support for importing profiles from legacy Cura versions." msgid "Provides support for importing profiles from legacy Cura versions."
msgstr "Tukee 3MF-tiedostojen lukemista." msgstr "Tukee profiilien tuontia aikaisemmista Cura-versioista."
#: /home/tamara/2.1/Cura/plugins/LegacyProfileReader/__init__.py:21 #: /home/tamara/2.1/Cura/plugins/LegacyProfileReader/__init__.py:21
msgctxt "@item:inlistbox" msgctxt "@item:inlistbox"
msgid "Cura 15.04 profiles" msgid "Cura 15.04 profiles"
msgstr "" msgstr "Cura 15.04 -profiilit"
#: /home/tamara/2.1/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:20 #: /home/tamara/2.1/Cura/plugins/USBPrinting/FirmwareUpdateWindow.qml:20
msgctxt "@title:window" msgctxt "@title:window"
@ -512,47 +503,47 @@ msgstr "Peruuta"
#: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:24 #: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:24
msgctxt "@title:window" msgctxt "@title:window"
msgid "Convert Image..." msgid "Convert Image..."
msgstr "" msgstr "Muunna kuva..."
#: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:38 #: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:38
msgctxt "@info:tooltip" msgctxt "@info:tooltip"
msgid "The maximum distance of each pixel from \"Base.\"" msgid "The maximum distance of each pixel from \"Base.\""
msgstr "" msgstr "Kunkin pikselin suurin etäisyys \"Pohja\"-arvosta."
#: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:44 #: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:44
msgctxt "@action:label" msgctxt "@action:label"
msgid "Height (mm)" msgid "Height (mm)"
msgstr "" msgstr "Korkeus (mm)"
#: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:62 #: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:62
msgctxt "@info:tooltip" msgctxt "@info:tooltip"
msgid "The base height from the build plate in millimeters." msgid "The base height from the build plate in millimeters."
msgstr "" msgstr "Pohjan korkeus alustasta millimetreinä."
#: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:68 #: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:68
msgctxt "@action:label" msgctxt "@action:label"
msgid "Base (mm)" msgid "Base (mm)"
msgstr "" msgstr "Pohja (mm)"
#: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:86 #: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:86
msgctxt "@info:tooltip" msgctxt "@info:tooltip"
msgid "The width in millimeters on the build plate." msgid "The width in millimeters on the build plate."
msgstr "" msgstr "Leveys millimetreinä alustalla."
#: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:92 #: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:92
msgctxt "@action:label" msgctxt "@action:label"
msgid "Width (mm)" msgid "Width (mm)"
msgstr "" msgstr "Leveys (mm)"
#: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:111 #: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:111
msgctxt "@info:tooltip" msgctxt "@info:tooltip"
msgid "The depth in millimeters on the build plate" msgid "The depth in millimeters on the build plate"
msgstr "" msgstr "Syvyys millimetreinä alustalla"
#: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:117 #: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:117
msgctxt "@action:label" msgctxt "@action:label"
msgid "Depth (mm)" msgid "Depth (mm)"
msgstr "" msgstr "Syvyys (mm)"
#: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:135 #: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:135
msgctxt "@info:tooltip" msgctxt "@info:tooltip"
@ -561,70 +552,70 @@ msgid ""
"represent low points on the mesh. Change this option to reverse the behavior " "represent low points on the mesh. Change this option to reverse the behavior "
"such that black pixels represent high points on the mesh and white pixels " "such that black pixels represent high points on the mesh and white pixels "
"represent low points on the mesh." "represent low points on the mesh."
msgstr "" msgstr "Oletuksena valkoiset pikselit edustavat verkossa korkeita pisteitä ja mustat pikselit edustavat verkossa matalia pisteitä. Muuta asetus, jos haluat, että mustat pikselit edustavat verkossa korkeita pisteitä ja valkoiset pikselit edustavat verkossa matalia pisteitä."
#: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:149 #: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:149
msgctxt "@item:inlistbox" msgctxt "@item:inlistbox"
msgid "Lighter is higher" msgid "Lighter is higher"
msgstr "" msgstr "Vaaleampi on korkeampi"
#: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:149 #: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:149
msgctxt "@item:inlistbox" msgctxt "@item:inlistbox"
msgid "Darker is higher" msgid "Darker is higher"
msgstr "" msgstr "Tummempi on korkeampi"
#: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:159 #: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:159
msgctxt "@info:tooltip" msgctxt "@info:tooltip"
msgid "The amount of smoothing to apply to the image." msgid "The amount of smoothing to apply to the image."
msgstr "" msgstr "Kuvassa käytettävän tasoituksen määrä."
#: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:165 #: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:165
msgctxt "@action:label" msgctxt "@action:label"
msgid "Smoothing" msgid "Smoothing"
msgstr "" msgstr "Tasoitus"
#: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:193 #: /home/tamara/2.1/Cura/plugins/ImageReader/ConfigUI.qml:193
msgctxt "@action:button" msgctxt "@action:button"
msgid "OK" msgid "OK"
msgstr "" msgstr "OK"
#: /home/tamara/2.1/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:31 #: /home/tamara/2.1/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:31
msgctxt "@label" msgctxt "@label"
msgid "" msgid ""
"Per Object Settings behavior may be unexpected when 'Print sequence' is set " "Per Object Settings behavior may be unexpected when 'Print sequence' is set "
"to 'All at Once'." "to 'All at Once'."
msgstr "" msgstr "Kappalekohtaiset asetukset voivat toimia odottamattomalla tavalla, jos \"Tulostusjärjestys\"-asetus on \"Kaikki kerralla\"."
#: /home/tamara/2.1/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:42 #: /home/tamara/2.1/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:42
msgctxt "@label" msgctxt "@label"
msgid "Object profile" msgid "Object profile"
msgstr "" msgstr "Kappaleprofiili"
#: /home/tamara/2.1/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:126 #: /home/tamara/2.1/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:126
#, fuzzy #, fuzzy
msgctxt "@action:button" msgctxt "@action:button"
msgid "Add Setting" msgid "Add Setting"
msgstr "&Asetukset" msgstr "Lisää asetus"
#: /home/tamara/2.1/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:166 #: /home/tamara/2.1/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:166
msgctxt "@title:window" msgctxt "@title:window"
msgid "Pick a Setting to Customize" msgid "Pick a Setting to Customize"
msgstr "" msgstr "Valitse mukautettava asetus"
#: /home/tamara/2.1/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:177 #: /home/tamara/2.1/Cura/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml:177
msgctxt "@label:textbox" msgctxt "@label:textbox"
msgid "Filter..." msgid "Filter..."
msgstr "" msgstr "Suodatin..."
#: /home/tamara/2.1/Cura/resources/qml/JobSpecs.qml:198 #: /home/tamara/2.1/Cura/resources/qml/JobSpecs.qml:198
msgctxt "@label" msgctxt "@label"
msgid "00h 00min" msgid "00h 00min"
msgstr "" msgstr "00 h 00 min"
#: /home/tamara/2.1/Cura/resources/qml/JobSpecs.qml:218 #: /home/tamara/2.1/Cura/resources/qml/JobSpecs.qml:218
msgctxt "@label" msgctxt "@label"
msgid "0.0 m" msgid "0.0 m"
msgstr "" msgstr "0,0 m"
#: /home/tamara/2.1/Cura/resources/qml/JobSpecs.qml:218 #: /home/tamara/2.1/Cura/resources/qml/JobSpecs.qml:218
#, fuzzy #, fuzzy
@ -636,29 +627,29 @@ msgstr "%1 m"
#, fuzzy #, fuzzy
msgctxt "@label:listbox" msgctxt "@label:listbox"
msgid "Print Job" msgid "Print Job"
msgstr "Tulosta" msgstr "Tulostustyö"
#: /home/tamara/2.1/Cura/resources/qml/SidebarHeader.qml:50 #: /home/tamara/2.1/Cura/resources/qml/SidebarHeader.qml:50
#, fuzzy #, fuzzy
msgctxt "@label:listbox" msgctxt "@label:listbox"
msgid "Printer:" msgid "Printer:"
msgstr "Tulosta" msgstr "Tulostin:"
#: /home/tamara/2.1/Cura/resources/qml/SidebarHeader.qml:107 #: /home/tamara/2.1/Cura/resources/qml/SidebarHeader.qml:107
msgctxt "@label" msgctxt "@label"
msgid "Nozzle:" msgid "Nozzle:"
msgstr "" msgstr "Suutin:"
#: /home/tamara/2.1/Cura/resources/qml/Sidebar.qml:89 #: /home/tamara/2.1/Cura/resources/qml/Sidebar.qml:89
#, fuzzy #, fuzzy
msgctxt "@label:listbox" msgctxt "@label:listbox"
msgid "Setup" msgid "Setup"
msgstr "Tulostusasetukset" msgstr "Asetukset"
#: /home/tamara/2.1/Cura/resources/qml/Sidebar.qml:215 #: /home/tamara/2.1/Cura/resources/qml/Sidebar.qml:215
msgctxt "@title:tab" msgctxt "@title:tab"
msgid "Simple" msgid "Simple"
msgstr "Suppea" msgstr "Yksinkertainen"
#: /home/tamara/2.1/Cura/resources/qml/Sidebar.qml:216 #: /home/tamara/2.1/Cura/resources/qml/Sidebar.qml:216
msgctxt "@title:tab" msgctxt "@title:tab"
@ -682,7 +673,7 @@ msgstr "Lisää tulostin"
#, fuzzy #, fuzzy
msgctxt "@title:window" msgctxt "@title:window"
msgid "Load profile" msgid "Load profile"
msgstr "&Profiili" msgstr "Lataa profiili"
#: /home/tamara/2.1/Cura/resources/qml/LoadProfileDialog.qml:24 #: /home/tamara/2.1/Cura/resources/qml/LoadProfileDialog.qml:24
msgctxt "@label" msgctxt "@label"
@ -690,29 +681,29 @@ msgid ""
"Selecting this profile overwrites some of your customised settings. Do you " "Selecting this profile overwrites some of your customised settings. Do you "
"want to merge the new settings into your current profile or do you want to " "want to merge the new settings into your current profile or do you want to "
"load a clean copy of the profile?" "load a clean copy of the profile?"
msgstr "" msgstr "Tämän profiilin valitseminen korvaa jotkin mukautetut asetukset. Haluatko yhdistää uudet asetukset osaksi nykyistä profiilia vai haluatko ladata puhtaan kopion profiilista?"
#: /home/tamara/2.1/Cura/resources/qml/LoadProfileDialog.qml:38 #: /home/tamara/2.1/Cura/resources/qml/LoadProfileDialog.qml:38
msgctxt "@label" msgctxt "@label"
msgid "Show details." msgid "Show details."
msgstr "" msgstr "Näytä tiedot."
#: /home/tamara/2.1/Cura/resources/qml/LoadProfileDialog.qml:50 #: /home/tamara/2.1/Cura/resources/qml/LoadProfileDialog.qml:50
#, fuzzy #, fuzzy
msgctxt "@action:button" msgctxt "@action:button"
msgid "Merge settings" msgid "Merge settings"
msgstr "&Yhdistä kappaleet" msgstr "Yhdistä asetukset"
#: /home/tamara/2.1/Cura/resources/qml/LoadProfileDialog.qml:54 #: /home/tamara/2.1/Cura/resources/qml/LoadProfileDialog.qml:54
msgctxt "@action:button" msgctxt "@action:button"
msgid "Reset profile" msgid "Reset profile"
msgstr "" msgstr "Nollaa profiili"
#: /home/tamara/2.1/Cura/resources/qml/ProfileSetup.qml:28 #: /home/tamara/2.1/Cura/resources/qml/ProfileSetup.qml:28
#, fuzzy #, fuzzy
msgctxt "@label" msgctxt "@label"
msgid "Profile:" msgid "Profile:"
msgstr "&Profiili" msgstr "Profiili:"
#: /home/tamara/2.1/Cura/resources/qml/EngineLog.qml:15 #: /home/tamara/2.1/Cura/resources/qml/EngineLog.qml:15
#, fuzzy #, fuzzy
@ -868,24 +859,24 @@ msgstr "Täyttö:"
#: /home/tamara/2.1/Cura/resources/qml/SidebarSimple.qml:237 #: /home/tamara/2.1/Cura/resources/qml/SidebarSimple.qml:237
msgctxt "@label" msgctxt "@label"
msgid "Hollow" msgid "Hollow"
msgstr "" msgstr "Ontto"
#: /home/tamara/2.1/Cura/resources/qml/SidebarSimple.qml:239 #: /home/tamara/2.1/Cura/resources/qml/SidebarSimple.qml:239
#, fuzzy #, fuzzy
msgctxt "@label" msgctxt "@label"
msgid "No (0%) infill will leave your model hollow at the cost of low strength" msgid "No (0%) infill will leave your model hollow at the cost of low strength"
msgstr "Harva (20 %) täyttö antaa mallille keskimääräistä lujuutta" msgstr "Ei (0 %) täyttöä jättää mallin ontoksi ja lujuudeltaan alhaiseksi"
#: /home/tamara/2.1/Cura/resources/qml/SidebarSimple.qml:243 #: /home/tamara/2.1/Cura/resources/qml/SidebarSimple.qml:243
msgctxt "@label" msgctxt "@label"
msgid "Light" msgid "Light"
msgstr "" msgstr "Harva"
#: /home/tamara/2.1/Cura/resources/qml/SidebarSimple.qml:245 #: /home/tamara/2.1/Cura/resources/qml/SidebarSimple.qml:245
#, fuzzy #, fuzzy
msgctxt "@label" msgctxt "@label"
msgid "Light (20%) infill will give your model an average strength" msgid "Light (20%) infill will give your model an average strength"
msgstr "Harva (20 %) täyttö antaa mallille keskimääräistä lujuutta" msgstr "Harva (20 %) täyttö antaa mallille keskimääräisen lujuuden"
#: /home/tamara/2.1/Cura/resources/qml/SidebarSimple.qml:249 #: /home/tamara/2.1/Cura/resources/qml/SidebarSimple.qml:249
msgctxt "@label" msgctxt "@label"
@ -915,26 +906,26 @@ msgstr "Avustimet:"
#: /home/tamara/2.1/Cura/resources/qml/SidebarSimple.qml:296 #: /home/tamara/2.1/Cura/resources/qml/SidebarSimple.qml:296
msgctxt "@option:check" msgctxt "@option:check"
msgid "Generate Brim" msgid "Generate Brim"
msgstr "" msgstr "Muodosta reunus"
#: /home/tamara/2.1/Cura/resources/qml/SidebarSimple.qml:312 #: /home/tamara/2.1/Cura/resources/qml/SidebarSimple.qml:312
msgctxt "@label" msgctxt "@label"
msgid "" msgid ""
"Enable printing a brim. This will add a single-layer-thick flat area around " "Enable printing a brim. This will add a single-layer-thick flat area around "
"your object which is easy to cut off afterwards." "your object which is easy to cut off afterwards."
msgstr "" msgstr "Ota reunuksen tulostus käyttöön. Tämä lisää kappaleen ympärille yksikerroksisen tasaisen alueen, joka on helppo leikata pois myöhemmin."
#: /home/tamara/2.1/Cura/resources/qml/SidebarSimple.qml:330 #: /home/tamara/2.1/Cura/resources/qml/SidebarSimple.qml:330
msgctxt "@option:check" msgctxt "@option:check"
msgid "Generate Support Structure" msgid "Generate Support Structure"
msgstr "" msgstr "Muodosta tukirakenne"
#: /home/tamara/2.1/Cura/resources/qml/SidebarSimple.qml:346 #: /home/tamara/2.1/Cura/resources/qml/SidebarSimple.qml:346
msgctxt "@label" msgctxt "@label"
msgid "" msgid ""
"Enable printing support structures. This will build up supporting structures " "Enable printing support structures. This will build up supporting structures "
"below the model to prevent the model from sagging or printing in mid air." "below the model to prevent the model from sagging or printing in mid air."
msgstr "" msgstr "Ottaa tukirakenteiden tulostuksen käyttöön. Siinä mallin alle rakennetaan tukirakenteita estämään mallin riippuminen tai suoraan ilmaan tulostaminen."
#: /home/tamara/2.1/Cura/resources/qml/GeneralPage.qml:14 #: /home/tamara/2.1/Cura/resources/qml/GeneralPage.qml:14
#: /home/tamara/2.1/Cura/resources/qml/Cura.qml:492 #: /home/tamara/2.1/Cura/resources/qml/Cura.qml:492
@ -946,7 +937,7 @@ msgstr "Yleiset"
#, fuzzy #, fuzzy
msgctxt "@label" msgctxt "@label"
msgid "Language:" msgid "Language:"
msgstr "Kieli" msgstr "Kieli:"
#: /home/tamara/2.1/Cura/resources/qml/GeneralPage.qml:64 #: /home/tamara/2.1/Cura/resources/qml/GeneralPage.qml:64
msgctxt "@item:inlistbox" msgctxt "@item:inlistbox"
@ -977,16 +968,13 @@ msgstr "puola"
msgctxt "@label" msgctxt "@label"
msgid "" msgid ""
"You will need to restart the application for language changes to have effect." "You will need to restart the application for language changes to have effect."
msgstr "" msgstr "Sovellus on käynnistettävä uudelleen, jotta kielimuutokset tulevat voimaan."
"Sovellus on käynnistettävä uudelleen, jotta kielimuutokset tulevat voimaan."
#: /home/tamara/2.1/Cura/resources/qml/GeneralPage.qml:117 #: /home/tamara/2.1/Cura/resources/qml/GeneralPage.qml:117
msgctxt "@info:tooltip" msgctxt "@info:tooltip"
msgid "" msgid ""
"Should objects on the platform be moved so that they no longer intersect." "Should objects on the platform be moved so that they no longer intersect."
msgstr "" msgstr "Pitäisikö kappaleita alustalla siirtää niin, etteivät ne enää leikkaa toisiaan?"
"Pitäisikö kappaleita alustalla siirtää niin, etteivät ne enää leikkaa "
"toisiaan?"
#: /home/tamara/2.1/Cura/resources/qml/GeneralPage.qml:122 #: /home/tamara/2.1/Cura/resources/qml/GeneralPage.qml:122
msgctxt "@option:check" msgctxt "@option:check"
@ -998,15 +986,13 @@ msgstr "Pidä kappaleet erillään"
msgctxt "@info:tooltip" msgctxt "@info:tooltip"
msgid "" msgid ""
"Should opened files be scaled to the build volume if they are too large?" "Should opened files be scaled to the build volume if they are too large?"
msgstr "" msgstr "Pitäisikö avoimia tiedostoja skaalata rakennustilavuuteen, jos ne ovat liian isoja?"
"Pitäisikö avoimia tiedostoja skaalata rakennustilavuuteen, jos ne ovat liian "
"isoja?"
#: /home/tamara/2.1/Cura/resources/qml/GeneralPage.qml:136 #: /home/tamara/2.1/Cura/resources/qml/GeneralPage.qml:136
#, fuzzy #, fuzzy
msgctxt "@option:check" msgctxt "@option:check"
msgid "Scale large files" msgid "Scale large files"
msgstr "Skaalaa liian isot tiedostot" msgstr "Skaalaa isot tiedostot"
#: /home/tamara/2.1/Cura/resources/qml/GeneralPage.qml:145 #: /home/tamara/2.1/Cura/resources/qml/GeneralPage.qml:145
msgctxt "@info:tooltip" msgctxt "@info:tooltip"
@ -1014,10 +1000,7 @@ msgid ""
"Should anonymous data about your print be sent to Ultimaker? Note, no " "Should anonymous data about your print be sent to Ultimaker? Note, no "
"models, IP addresses or other personally identifiable information is sent or " "models, IP addresses or other personally identifiable information is sent or "
"stored." "stored."
msgstr "" msgstr "Pitäisikö anonyymejä tietoja tulosteesta lähettää Ultimakerille? Huomaa, että malleja, IP-osoitteita tai muita henkilökohtaisia tietoja ei lähetetä eikä tallenneta."
"Pitäisikö anonyymejä tietoja tulosteesta lähettää Ultimakerille? Huomaa, "
"että malleja, IP-osoitteita tai muita henkilökohtaisia tietoja ei lähetetä "
"eikä tallenneta."
#: /home/tamara/2.1/Cura/resources/qml/GeneralPage.qml:150 #: /home/tamara/2.1/Cura/resources/qml/GeneralPage.qml:150
#, fuzzy #, fuzzy
@ -1036,9 +1019,7 @@ msgctxt "@info:tooltip"
msgid "" msgid ""
"Highlight unsupported areas of the model in red. Without support these areas " "Highlight unsupported areas of the model in red. Without support these areas "
"will nog print properly." "will nog print properly."
msgstr "" msgstr "Korostaa mallin vailla tukea olevat alueet punaisella. Ilman tukea nämä alueet eivät tulostu kunnolla."
"Korostaa mallin vailla tukea olevat alueet punaisella. Ilman tukea nämä "
"alueet eivät tulostu kunnolla."
#: /home/tamara/2.1/Cura/resources/qml/ViewPage.qml:42 #: /home/tamara/2.1/Cura/resources/qml/ViewPage.qml:42
#, fuzzy #, fuzzy
@ -1051,9 +1032,7 @@ msgctxt "@info:tooltip"
msgid "" msgid ""
"Moves the camera so the object is in the center of the view when an object " "Moves the camera so the object is in the center of the view when an object "
"is selected" "is selected"
msgstr "" msgstr "Siirtää kameraa siten, että kappale on näkymän keskellä, kun kappale on valittu"
"Siirtää kameraa siten, että kappale on näkymän keskellä, kun kappale on "
"valittu"
#: /home/tamara/2.1/Cura/resources/qml/ViewPage.qml:54 #: /home/tamara/2.1/Cura/resources/qml/ViewPage.qml:54
msgctxt "@action:button" msgctxt "@action:button"
@ -1071,9 +1050,7 @@ msgctxt "@label"
msgid "" msgid ""
"It's a good idea to do a few sanity checks on your Ultimaker. You can skip " "It's a good idea to do a few sanity checks on your Ultimaker. You can skip "
"this step if you know your machine is functional" "this step if you know your machine is functional"
msgstr "" msgstr "Ultimakerille on hyvä tehdä muutamia toimintatarkastuksia. Voit jättää tämän vaiheen väliin, jos tiedät laitteesi olevan toimintakunnossa"
"Ultimakerille on hyvä tehdä muutamia toimintatarkastuksia. Voit jättää tämän "
"vaiheen väliin, jos tiedät laitteesi olevan toimintakunnossa"
#: /home/tamara/2.1/Cura/resources/qml/WizardPages/UltimakerCheckup.qml:100 #: /home/tamara/2.1/Cura/resources/qml/WizardPages/UltimakerCheckup.qml:100
msgctxt "@action:button" msgctxt "@action:button"
@ -1158,7 +1135,7 @@ msgstr "Pöydän lämpötilan tarkistus:"
#: /home/tamara/2.1/Cura/resources/qml/WizardPages/UltimakerCheckup.qml:324 #: /home/tamara/2.1/Cura/resources/qml/WizardPages/UltimakerCheckup.qml:324
msgctxt "@label" msgctxt "@label"
msgid "Everything is in order! You're done with your CheckUp." msgid "Everything is in order! You're done with your CheckUp."
msgstr "" msgstr "Kaikki on kunnossa! CheckUp on valmis."
#: /home/tamara/2.1/Cura/resources/qml/WizardPages/SelectUpgradedParts.qml:31 #: /home/tamara/2.1/Cura/resources/qml/WizardPages/SelectUpgradedParts.qml:31
#: /home/tamara/2.1/Cura/resources/qml/WizardPages/AddMachine.qml:269 #: /home/tamara/2.1/Cura/resources/qml/WizardPages/AddMachine.qml:269
@ -1171,9 +1148,7 @@ msgctxt "@label"
msgid "" msgid ""
"To assist you in having better default settings for your Ultimaker. Cura " "To assist you in having better default settings for your Ultimaker. Cura "
"would like to know which upgrades you have in your machine:" "would like to know which upgrades you have in your machine:"
msgstr "" msgstr "Saat paremmat oletusasetukset Ultimakeriin. Cura haluaisi tietää, mitä päivityksiä laitteessasi on:"
"Saat paremmat oletusasetukset Ultimakeriin. Cura haluaisi tietää, mitä "
"päivityksiä laitteessasi on:"
#: /home/tamara/2.1/Cura/resources/qml/WizardPages/SelectUpgradedParts.qml:57 #: /home/tamara/2.1/Cura/resources/qml/WizardPages/SelectUpgradedParts.qml:57
msgctxt "@option:check" msgctxt "@option:check"
@ -1184,7 +1159,7 @@ msgstr "Suulakekäytön päivitykset"
#, fuzzy #, fuzzy
msgctxt "@option:check" msgctxt "@option:check"
msgid "Heated printer bed" msgid "Heated printer bed"
msgstr "Lämmitetty tulostinpöytä (itse rakennettu)" msgstr "Lämmitetty tulostinpöytä"
#: /home/tamara/2.1/Cura/resources/qml/WizardPages/SelectUpgradedParts.qml:74 #: /home/tamara/2.1/Cura/resources/qml/WizardPages/SelectUpgradedParts.qml:74
msgctxt "@option:check" msgctxt "@option:check"
@ -1198,12 +1173,7 @@ msgid ""
"drive upgrade. If you do not have this upgrade, it is highly recommended to " "drive upgrade. If you do not have this upgrade, it is highly recommended to "
"improve reliability. This upgrade can be bought from the Ultimaker webshop " "improve reliability. This upgrade can be bought from the Ultimaker webshop "
"or found on thingiverse as thing:26094" "or found on thingiverse as thing:26094"
msgstr "" msgstr "Jos olet hankkinut Ultimakerin lokakuun 2012 jälkeen, sinulla on suulakekäytön päivityspaketti (Extruder drive). Ellei sinulla ole tätä päivitystä, sitä suositellaan luotettavuuden parantamiseksi. Tämä päivityspaketti voidaan ostaa Ultimakerin verkkokaupasta, ja se löytyy thingiverse-sivustolta numerolla 26094"
"Jos olet hankkinut Ultimakerin lokakuun 2012 jälkeen, sinulla on "
"suulakekäytön päivityspaketti (Extruder drive). Ellei sinulla ole tätä "
"päivitystä, sitä suositellaan kovasti luotettavuuden parantamiseksi. Tämä "
"päivityspaketti voidaan ostaa Ultimakerin verkkokaupasta tai se löytyy "
"thingiverse-sivustolta numerolla: 26094"
#: /home/tamara/2.1/Cura/resources/qml/WizardPages/AddMachine.qml:108 #: /home/tamara/2.1/Cura/resources/qml/WizardPages/AddMachine.qml:108
#, fuzzy #, fuzzy
@ -1216,7 +1186,7 @@ msgctxt "@label"
msgid "" msgid ""
"This printer name has already been used. Please choose a different printer " "This printer name has already been used. Please choose a different printer "
"name." "name."
msgstr "" msgstr "Tämä tulostimen nimi on jo käytössä. Valitse toinen tulostimen nimi."
#: /home/tamara/2.1/Cura/resources/qml/WizardPages/AddMachine.qml:245 #: /home/tamara/2.1/Cura/resources/qml/WizardPages/AddMachine.qml:245
#, fuzzy #, fuzzy
@ -1246,9 +1216,7 @@ msgid ""
"To make sure your prints will come out great, you can now adjust your " "To make sure your prints will come out great, you can now adjust your "
"buildplate. When you click 'Move to Next Position' the nozzle will move to " "buildplate. When you click 'Move to Next Position' the nozzle will move to "
"the different positions that can be adjusted." "the different positions that can be adjusted."
msgstr "" msgstr "Voit säätää alustaa, jotta tulosteista tulisi hyviä. Kun napsautat \"Siirry seuraavaan positioon\", suutin siirtyy eri positioihin, joita voidaan säätää."
"Voit säätää alustaa, jotta tulosteista tulisi hyviä. Kun napsautat 'Siirry "
"seuraavaan positioon', suutin siirtyy eri positioihin, joita voidaan säätää."
#: /home/tamara/2.1/Cura/resources/qml/WizardPages/Bedleveling.qml:62 #: /home/tamara/2.1/Cura/resources/qml/WizardPages/Bedleveling.qml:62
msgctxt "@label" msgctxt "@label"
@ -1256,10 +1224,7 @@ msgid ""
"For every postition; insert a piece of paper under the nozzle and adjust the " "For every postition; insert a piece of paper under the nozzle and adjust the "
"print bed height. The print bed height is right when the paper is slightly " "print bed height. The print bed height is right when the paper is slightly "
"gripped by the tip of the nozzle." "gripped by the tip of the nozzle."
msgstr "" msgstr "Laita paperinpala kussakin positiossa suuttimen alle ja säädä tulostuspöydän korkeus. Tulostuspöydän korkeus on oikea, kun suuttimen kärki juuri ja juuri osuu paperiin."
"Laita paperinpala kussakin positiossa suuttimen alle ja säädä tulostuspöydän "
"korkeus. Tulostuspöydän korkeus on oikea, kun suuttimen kärki juuri ja juuri "
"osuu paperiin."
#: /home/tamara/2.1/Cura/resources/qml/WizardPages/Bedleveling.qml:77 #: /home/tamara/2.1/Cura/resources/qml/WizardPages/Bedleveling.qml:77
msgctxt "@action:button" msgctxt "@action:button"
@ -1274,7 +1239,7 @@ msgstr "Ohita pöydän tasaus"
#: /home/tamara/2.1/Cura/resources/qml/WizardPages/Bedleveling.qml:123 #: /home/tamara/2.1/Cura/resources/qml/WizardPages/Bedleveling.qml:123
msgctxt "@label" msgctxt "@label"
msgid "Everything is in order! You're done with bedleveling." msgid "Everything is in order! You're done with bedleveling."
msgstr "" msgstr "Kaikki on kunnossa! Pöydän tasaus on valmis."
#: /home/tamara/2.1/Cura/resources/qml/WizardPages/UpgradeFirmware.qml:33 #: /home/tamara/2.1/Cura/resources/qml/WizardPages/UpgradeFirmware.qml:33
msgctxt "@label" msgctxt "@label"
@ -1282,28 +1247,21 @@ msgid ""
"Firmware is the piece of software running directly on your 3D printer. This " "Firmware is the piece of software running directly on your 3D printer. This "
"firmware controls the step motors, regulates the temperature and ultimately " "firmware controls the step motors, regulates the temperature and ultimately "
"makes your printer work." "makes your printer work."
msgstr "" msgstr "Laiteohjelmisto on suoraan 3D-tulostimessa toimiva ohjelma. Laiteohjelmisto ohjaa askelmoottoreita, säätää lämpötilaa ja saa tulostimen toimimaan."
"Laiteohjelmisto on suoraan 3D-tulostimessa toimiva ohjelma. Laiteohjelmisto "
"ohjaa askelmoottoreita, säätää lämpötilaa ja loppujen lopuksi saa tulostimen "
"toimimaan."
#: /home/tamara/2.1/Cura/resources/qml/WizardPages/UpgradeFirmware.qml:43 #: /home/tamara/2.1/Cura/resources/qml/WizardPages/UpgradeFirmware.qml:43
msgctxt "@label" msgctxt "@label"
msgid "" msgid ""
"The firmware shipping with new Ultimakers works, but upgrades have been made " "The firmware shipping with new Ultimakers works, but upgrades have been made "
"to make better prints, and make calibration easier." "to make better prints, and make calibration easier."
msgstr "" msgstr "Uusien Ultimakerien mukana toimitettu laiteohjelmisto toimii, mutta päivityksillä saadaan parempia tulosteita ja kalibrointi helpottuu."
"Uusien Ultimakerien mukana toimitettu laiteohjelmisto toimii, mutta "
"päivityksillä saadaan parempia tulosteita ja kalibrointi helpottuu."
#: /home/tamara/2.1/Cura/resources/qml/WizardPages/UpgradeFirmware.qml:53 #: /home/tamara/2.1/Cura/resources/qml/WizardPages/UpgradeFirmware.qml:53
msgctxt "@label" msgctxt "@label"
msgid "" msgid ""
"Cura requires these new features and thus your firmware will most likely " "Cura requires these new features and thus your firmware will most likely "
"need to be upgraded. You can do so now." "need to be upgraded. You can do so now."
msgstr "" msgstr "Cura tarvitsee näitä uusia ominaisuuksia, joten laiteohjelmisto on todennäköisesti päivitettävä. Voit tehdä sen nyt."
"Cura tarvitsee näitä uusia ominaisuuksia ja siten laiteohjelmisto on "
"todennäköisesti päivitettävä. Voit tehdä sen nyt."
#: /home/tamara/2.1/Cura/resources/qml/WizardPages/UpgradeFirmware.qml:64 #: /home/tamara/2.1/Cura/resources/qml/WizardPages/UpgradeFirmware.qml:64
msgctxt "@action:button" msgctxt "@action:button"
@ -1318,12 +1276,12 @@ msgstr "Ohita päivitys"
#: /home/tamara/2.1/Cura/resources/qml/SaveButton.qml:23 #: /home/tamara/2.1/Cura/resources/qml/SaveButton.qml:23
msgctxt "@label:PrintjobStatus" msgctxt "@label:PrintjobStatus"
msgid "Please load a 3d model" msgid "Please load a 3d model"
msgstr "" msgstr "Ole hyvä ja lataa 3D-malli"
#: /home/tamara/2.1/Cura/resources/qml/SaveButton.qml:25 #: /home/tamara/2.1/Cura/resources/qml/SaveButton.qml:25
msgctxt "@label:PrintjobStatus" msgctxt "@label:PrintjobStatus"
msgid "Preparing to slice..." msgid "Preparing to slice..."
msgstr "" msgstr "Valmistellaan viipalointia..."
#: /home/tamara/2.1/Cura/resources/qml/SaveButton.qml:28 #: /home/tamara/2.1/Cura/resources/qml/SaveButton.qml:28
#, fuzzy #, fuzzy
@ -1334,12 +1292,12 @@ msgstr "Viipaloidaan..."
#: /home/tamara/2.1/Cura/resources/qml/SaveButton.qml:30 #: /home/tamara/2.1/Cura/resources/qml/SaveButton.qml:30
msgctxt "@label:PrintjobStatus" msgctxt "@label:PrintjobStatus"
msgid "Ready to " msgid "Ready to "
msgstr "" msgstr "Valmis "
#: /home/tamara/2.1/Cura/resources/qml/SaveButton.qml:122 #: /home/tamara/2.1/Cura/resources/qml/SaveButton.qml:122
msgctxt "@info:tooltip" msgctxt "@info:tooltip"
msgid "Select the active output device" msgid "Select the active output device"
msgstr "Valitse aktiivinen oheislaite" msgstr "Valitse aktiivinen tulostusväline"
#: /home/tamara/2.1/Cura/resources/qml/AboutDialog.qml:15 #: /home/tamara/2.1/Cura/resources/qml/AboutDialog.qml:15
msgctxt "@title:window" msgctxt "@title:window"
@ -1355,9 +1313,7 @@ msgstr "Kokonaisvaltainen sulatettavan tulostuslangan 3D-tulostusratkaisu."
msgctxt "@info:credit" msgctxt "@info:credit"
msgid "" msgid ""
"Cura has been developed by Ultimaker B.V. in cooperation with the community." "Cura has been developed by Ultimaker B.V. in cooperation with the community."
msgstr "" msgstr "Cura-ohjelman on kehittänyt Ultimaker B.V. yhteistyössä käyttäjäyhteisön kanssa."
"Cura-ohjelman on kehittänyt Ultimaker B.V. yhteistyössä käyttäjäyhteisön "
"kanssa."
#: /home/tamara/2.1/Cura/resources/qml/Cura.qml:16 #: /home/tamara/2.1/Cura/resources/qml/Cura.qml:16
#, fuzzy #, fuzzy
@ -1405,7 +1361,7 @@ msgstr "&Näytä"
#, fuzzy #, fuzzy
msgctxt "@title:menu menubar:toplevel" msgctxt "@title:menu menubar:toplevel"
msgid "&Printer" msgid "&Printer"
msgstr "Tulosta" msgstr "&Tulostin"
#: /home/tamara/2.1/Cura/resources/qml/Cura.qml:213 #: /home/tamara/2.1/Cura/resources/qml/Cura.qml:213
#, fuzzy #, fuzzy

766
resources/i18n/fi/fdmprinter.json.po Executable file → Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1320
resources/i18n/it/cura.po Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1320
resources/i18n/nl/cura.po Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -5,7 +5,7 @@
"manufacturer": "Other", "manufacturer": "Other",
"author": "RBC", "author": "RBC",
"platform": "rigidbot_platform.stl", "platform": "rigidbot_platform.stl",
"file_formats": "text/x-gcode",
"inherits": "fdmprinter.json", "inherits": "fdmprinter.json",
"overrides": { "overrides": {

View File

@ -5,7 +5,7 @@
"manufacturer": "Other", "manufacturer": "Other",
"author": "RBC", "author": "RBC",
"platform": "rigidbotbig_platform.stl", "platform": "rigidbotbig_platform.stl",
"file_formats": "text/x-gcode",
"inherits": "fdmprinter.json", "inherits": "fdmprinter.json",
"overrides": { "overrides": {

View File

@ -5,6 +5,7 @@
"manufacturer": "Other", "manufacturer": "Other",
"author": "BQ", "author": "BQ",
"platform": "bq_hephestos_platform.stl", "platform": "bq_hephestos_platform.stl",
"file_formats": "text/x-gcode",
"inherits": "fdmprinter.json", "inherits": "fdmprinter.json",
"overrides": { "overrides": {

View File

@ -5,6 +5,7 @@
"manufacturer": "Other", "manufacturer": "Other",
"author": "BQ", "author": "BQ",
"platform": "bq_hephestos_2_platform.stl", "platform": "bq_hephestos_2_platform.stl",
"file_formats": "text/x-gcode",
"inherits": "fdmprinter.json", "inherits": "fdmprinter.json",
"overrides": { "overrides": {

View File

@ -5,6 +5,7 @@
"manufacturer": "Other", "manufacturer": "Other",
"author": "BQ", "author": "BQ",
"platform": "bq_hephestos_platform.stl", "platform": "bq_hephestos_platform.stl",
"file_formats": "text/x-gcode",
"inherits": "fdmprinter.json", "inherits": "fdmprinter.json",
"overrides": { "overrides": {

View File

@ -5,6 +5,7 @@
"manufacturer": "Other", "manufacturer": "Other",
"author": "BQ", "author": "BQ",
"platform": "bq_witbox_platform.stl", "platform": "bq_witbox_platform.stl",
"file_formats": "text/x-gcode",
"inherits": "fdmprinter.json", "inherits": "fdmprinter.json",
"overrides": { "overrides": {

View File

@ -5,6 +5,7 @@
"manufacturer": "Other", "manufacturer": "Other",
"author": "BQ", "author": "BQ",
"platform": "bq_witbox_platform.stl", "platform": "bq_witbox_platform.stl",
"file_formats": "text/x-gcode",
"inherits": "fdmprinter.json", "inherits": "fdmprinter.json",
"overrides": { "overrides": {

View File

@ -2,7 +2,7 @@
"version": 1, "version": 1,
"id": "dual_extrusion", "id": "dual_extrusion",
"name": "Dual Extrusion Base File", "name": "Dual Extrusion Base File",
"file_formats": "text/x-gcode;application/x-stl-ascii;application/x-stl-binary;application/x-wavefront-obj;application/x3g",
"inherits": "fdmprinter.json", "inherits": "fdmprinter.json",
"visible": false, "visible": false,

View File

@ -5,88 +5,117 @@
"name": "FDM Printer Base Description", "name": "FDM Printer Base Description",
"author": "Ultimaker B.V.", "author": "Ultimaker B.V.",
"manufacturer": "Ultimaker", "manufacturer": "Ultimaker",
"file_formats": "text/x-gcode;application/x-stl-ascii;application/x-stl-binary;application/x-wavefront-obj;application/x3g",
"add_pages": [], "add_pages": [],
"machine_settings": { "machine_settings": {
"machine_show_variants": {
"description": "Wether to show the different variants of this machine, which are described in separate json files.",
"default": false
},
"machine_start_gcode": { "machine_start_gcode": {
"description": "Gcode commands to be executed at the very start - separated by \\n.", "description": "Gcode commands to be executed at the very start - separated by \\n.",
"default": "G28 ; Home\nG1 Z15.0 F6000 ;move the platform down 15mm\n;Prime the extruder\nG92 E0\nG1 F200 E3\nG92 E0" "default": "G28 ; Home\nG1 Z15.0 F6000 ;move the platform down 15mm\n;Prime the extruder\nG92 E0\nG1 F200 E3\nG92 E0",
"global_only": true
}, },
"machine_end_gcode": { "machine_end_gcode": {
"description": "Gcode commands to be executed at the very end - separated by \\n.", "description": "Gcode commands to be executed at the very end - separated by \\n.",
"default": "M104 S0\nM140 S0\n;Retract the filament\nG92 E1\nG1 E-1 F300\nG28 X0 Y0\nM84" "default": "M104 S0\nM140 S0\n;Retract the filament\nG92 E1\nG1 E-1 F300\nG28 X0 Y0\nM84",
"global_only": true
}, },
"material_bed_temp_wait": { "material_bed_temp_wait": {
"description": "Whether to insert a command to wait until the bed temperature is reached at the start.", "description": "Whether to insert a command to wait until the bed temperature is reached at the start.",
"default": true "default": true,
"global_only": true
}, },
"material_print_temp_wait": { "material_print_temp_wait": {
"description": "Whether to insert a command to wait until the nozzle temperatures are reached at the start.", "description": "Whether to insert a command to wait until the nozzle temperatures are reached at the start.",
"default": true "default": true,
"global_only": true
}, },
"material_print_temp_prepend": { "material_print_temp_prepend": {
"description": "Whether to include nozzle temperature commands at the start of the gcode. When the start_gcode already contains nozzle temperature commands Cura frontend will automatically disable this setting.", "description": "Whether to include nozzle temperature commands at the start of the gcode. When the start_gcode already contains nozzle temperature commands Cura frontend will automatically disable this setting.",
"default": true "default": true,
"global_only": true
}, },
"material_bed_temp_prepend": { "material_bed_temp_prepend": {
"description": "Whether to include bed temperature commands at the start of the gcode. When the start_gcode already contains bed temperature commands Cura frontend will automatically disable this setting.", "description": "Whether to include bed temperature commands at the start of the gcode. When the start_gcode already contains bed temperature commands Cura frontend will automatically disable this setting.",
"default": true "default": true,
"global_only": true
}, },
"machine_width": { "machine_width": {
"description": "The width (X-direction) of the printable area.", "description": "The width (X-direction) of the printable area.",
"default": 100 "default": 100,
"global_only": true
}, },
"machine_depth": { "machine_depth": {
"description": "The depth (Y-direction) of the printable area.", "description": "The depth (Y-direction) of the printable area.",
"default": 100 "default": 100,
"global_only": true
}, },
"machine_height": { "machine_height": {
"description": "The height (Z-direction) of the printable area.", "description": "The height (Z-direction) of the printable area.",
"default": 100 "default": 100,
"global_only": true
}, },
"machine_heated_bed": { "machine_heated_bed": {
"description": "Whether the machine has a heated bed present.", "description": "Whether the machine has a heated bed present.",
"default": false "default": false,
"global_only": true
}, },
"machine_center_is_zero": { "machine_center_is_zero": {
"description": "Whether the X/Y coordinates of the zero position of the printer is at the center of the printable area.", "description": "Whether the X/Y coordinates of the zero position of the printer is at the center of the printable area.",
"default": false "default": false,
"global_only": true
}, },
"machine_extruder_count": { "machine_extruder_count": {
"description": "Number of extruder trains. An extruder train is the combination of a feeder, bowden tube, and nozzle.", "description": "Number of extruder trains. An extruder train is the combination of a feeder, bowden tube, and nozzle.",
"default": 1 "default": 1,
"global_only": true
}, },
"machine_nozzle_tip_outer_diameter": { "machine_nozzle_tip_outer_diameter": {
"description": "The outer diameter of the tip of the nozzle.", "description": "The outer diameter of the tip of the nozzle.",
"default": 1, "SEE_machine_extruder_trains": true }, "default": 1,
"SEE_machine_extruder_trains": true,
"global_only": true
},
"machine_nozzle_head_distance": { "machine_nozzle_head_distance": {
"description": "The height difference between the tip of the nozzle and the lowest part of the print head.", "description": "The height difference between the tip of the nozzle and the lowest part of the print head.",
"default": 3, "SEE_machine_extruder_trains": true }, "default": 3,
"SEE_machine_extruder_trains": true,
"global_only": true
},
"machine_nozzle_expansion_angle": { "machine_nozzle_expansion_angle": {
"description": "The angle between the horizontal plane and the conical part right above the tip of the nozzle.", "description": "The angle between the horizontal plane and the conical part right above the tip of the nozzle.",
"default": 45, "SEE_machine_extruder_trains": true }, "default": 45,
"SEE_machine_extruder_trains": true,
"global_only": true
},
"machine_heat_zone_length": { "machine_heat_zone_length": {
"description": "The distance from the tip of the nozzle in which heat from the nozzle is transfered to the filament.", "description": "The distance from the tip of the nozzle in which heat from the nozzle is transfered to the filament.",
"default": 16, "SEE_machine_extruder_trains": true }, "default": 16,
"SEE_machine_extruder_trains": true,
"global_only": true
},
"machine_nozzle_heat_up_speed": { "machine_nozzle_heat_up_speed": {
"description": "The speed (°C/s) by which the nozzle heats up averaged over the window of normal printing temperatures and the standby temperature.", "description": "The speed (*C/s) by which the nozzle heats up averaged over the window of normal printing temperatures and the standby temperature.",
"default": 2.0, "SEE_machine_extruder_trains": true }, "default": 2.0,
"SEE_machine_extruder_trains": true,
"global_only": true
},
"machine_nozzle_cool_down_speed": { "machine_nozzle_cool_down_speed": {
"description": "The speed (°C/s) by which the nozzle cools down averaged over the window of normal printing temperatures and the standby temperature.", "description": "The speed (*C/s) by which the nozzle cools down averaged over the window of normal printing temperatures and the standby temperature.",
"default": 2.0, "SEE_machine_extruder_trains": true }, "default": 2.0,
"SEE_machine_extruder_trains": true,
"global_only": true
},
"machine_gcode_flavor": { "machine_gcode_flavor": {
"description": "The type of gcode to be generated.", "description": "The type of gcode to be generated.",
"default": "RepRap" "default": "RepRap",
"global_only": true
}, },
"machine_disallowed_areas": { "machine_disallowed_areas": {
"description": "A list of polygons with areas the print head is not allowed to enter.", "description": "A list of polygons with areas the print head is not allowed to enter.",
"type": "polygons", "type": "polygons",
"default": [] "default": [],
"global_only": true
}, },
"machine_platform_offset": { "machine_platform_offset": {
"description": "Where to display the platform mesh.", "description": "Where to display the platform mesh.",
@ -94,10 +123,11 @@
0, 0,
0, 0,
0 0
] ],
"global_only": true
}, },
"machine_head_polygon": { "machine_head_polygon": {
"description": "A 2D silhouette of the print head (fan caps excluded).", "description": "A 2D silhouette of the print head.",
"type": "polygon", "type": "polygon",
"default": [ "default": [
[ [
@ -116,10 +146,11 @@
1, 1,
1 1
] ]
] ],
"global_only": true
}, },
"machine_head_with_fans_polygon": { "machine_head_with_fans_polygon": {
"description": "A 2D silhouette of the print head (fan caps included).", "description": "A 2D silhouette of the print head.",
"type": "polygon", "type": "polygon",
"default": [ "default": [
[ [
@ -138,11 +169,13 @@
-20, -20,
-10 -10
] ]
] ],
"global_only": true
}, },
"gantry_height": { "gantry_height": {
"description": "The height difference between the tip of the nozzle and the gantry system (X and Y axes).", "description": "The height difference between the tip of the nozzle and the gantry system (X and Y axes).",
"default":99999999999 "default": 99999999999,
"global_only": true
} }
}, },
"categories": { "categories": {
@ -161,7 +194,8 @@
"max_value_warning": "10", "max_value_warning": "10",
"visible": false "visible": false
} }
} },
"global_only": true
}, },
"resolution": { "resolution": {
"label": "Quality", "label": "Quality",
@ -188,7 +222,8 @@
"min_value": "0.001", "min_value": "0.001",
"min_value_warning": "0.04", "min_value_warning": "0.04",
"max_value_warning": "0.32", "max_value_warning": "0.32",
"visible": false "visible": false,
"global_only": "print_sequence != \"one_at_a_time\""
}, },
"line_width": { "line_width": {
"label": "Line Width", "label": "Line Width",
@ -547,12 +582,12 @@
"infill_overlap": { "infill_overlap": {
"label": "Infill Overlap", "label": "Infill Overlap",
"description": "The amount of overlap between the infill and the walls. A slight overlap allows the walls to connect firmly to the infill.", "description": "The amount of overlap between the infill and the walls. A slight overlap allows the walls to connect firmly to the infill.",
"unit": "mm", "unit": "%",
"type": "float", "type": "float",
"default": 0.04, "default": 10,
"min_value_warning": "0", "min_value": "0",
"max_value_warning": "machine_nozzle_size", "max_value_warning": "100",
"inherit_function": "0.1 * line_width if infill_sparse_density < 95 else 0.0", "inherit_function": "10 if infill_sparse_density < 95 else 0",
"visible": false "visible": false
}, },
"infill_wipe_dist": { "infill_wipe_dist": {
@ -622,7 +657,8 @@
"type": "float", "type": "float",
"default": 150, "default": 150,
"min_value": "0", "min_value": "0",
"max_value_warning": "260" "max_value_warning": "260",
"global_only": "print_sequence != \"one_at_a_time\""
}, },
"material_extrusion_cool_down_speed": { "material_extrusion_cool_down_speed": {
"label": "Extrusion Cool Down Speed Modifier", "label": "Extrusion Cool Down Speed Modifier",
@ -631,7 +667,8 @@
"type": "float", "type": "float",
"default": 0.5, "default": 0.5,
"min_value": "0", "min_value": "0",
"max_value_warning": "10.0" "max_value_warning": "10.0",
"global_only": "print_sequence != \"one_at_a_time\""
}, },
"material_bed_temperature": { "material_bed_temperature": {
"label": "Bed Temperature", "label": "Bed Temperature",
@ -641,7 +678,8 @@
"default": 60, "default": 60,
"min_value": "0", "min_value": "0",
"max_value_warning": "260", "max_value_warning": "260",
"enabled": "machine_heated_bed" "enabled": "machine_heated_bed",
"global_only": "print_sequence != \"one_at_a_time\""
}, },
"material_diameter": { "material_diameter": {
"label": "Diameter", "label": "Diameter",
@ -651,7 +689,8 @@
"default": 2.85, "default": 2.85,
"min_value": "0.0001", "min_value": "0.0001",
"min_value_warning": "0.4", "min_value_warning": "0.4",
"max_value_warning": "3.5" "max_value_warning": "3.5",
"global_only": "print_sequence != \"one_at_a_time\""
}, },
"material_flow": { "material_flow": {
"label": "Flow", "label": "Flow",
@ -749,7 +788,6 @@
"min_value": "0", "min_value": "0",
"max_value_warning": "20", "max_value_warning": "20",
"type": "int", "type": "int",
"min_value": "1",
"visible": false, "visible": false,
"inherit": false, "inherit": false,
"enabled": "retraction_enable" "enabled": "retraction_enable"
@ -760,7 +798,7 @@
"unit": "mm", "unit": "mm",
"type": "float", "type": "float",
"default": 4.5, "default": 4.5,
"min_value": "0.0", "min_value": "0",
"max_value_warning": "retraction_amount * 2", "max_value_warning": "retraction_amount * 2",
"visible": false, "visible": false,
"inherit_function": "retraction_amount", "inherit_function": "retraction_amount",
@ -861,9 +899,9 @@
"inherit_function": "speed_print", "inherit_function": "speed_print",
"enabled": "support_enable", "enabled": "support_enable",
"children": { "children": {
"speed_support_infill": { "speed_support_lines": {
"label": "Support Infill Speed", "label": "Support Wall Speed",
"description": "The speed at which the infill of exterior support is printed. Printing the infill at higher speeds can improve the overall print time.", "description": "The speed at which the walls of exterior support are printed. Printing the walls at higher speeds can improve the overall duration.",
"unit": "mm/s", "unit": "mm/s",
"type": "float", "type": "float",
"default": 60, "default": 60,
@ -951,6 +989,7 @@
"default": true, "default": true,
"visible": false, "visible": false,
"enabled": "retraction_combing", "enabled": "retraction_combing",
"global_only": "print_sequence != \"one_at_a_time\"",
"children": { "children": {
"travel_avoid_distance": { "travel_avoid_distance": {
"label": "Avoid Distance", "label": "Avoid Distance",
@ -962,7 +1001,8 @@
"max_value_warning": "machine_nozzle_tip_outer_diameter * 5", "max_value_warning": "machine_nozzle_tip_outer_diameter * 5",
"visible": false, "visible": false,
"inherit": false, "inherit": false,
"enabled": "retraction_combing" "enabled": "retraction_combing",
"global_only": "print_sequence != \"one_at_a_time\""
} }
} }
}, },
@ -986,8 +1026,8 @@
"enabled": "coasting_enable" "enabled": "coasting_enable"
}, },
"coasting_min_volume": { "coasting_min_volume": {
"label": "Minimum Volume Before Coasting", "label": "Minimal Volume Before Coasting",
"description": "The smallest volume an extrusion path should have to coast the full amount. For smaller extrusion paths, less pressure has been built up in the bowden tube and so the coasted volume is scaled linearly. This value should always be larger than the Coasting Volume.", "description": "The least volume an extrusion path should have to coast the full amount. For smaller extrusion paths, less pressure has been built up in the bowden tube and so the coasted volume is scaled linearly. This value should always be larger than the Coasting Volume.",
"unit": "mm³", "unit": "mm³",
"type": "float", "type": "float",
"default": 0.8, "default": 0.8,
@ -1020,6 +1060,7 @@
"description": "Enable the cooling fan during the print. The extra cooling from the cooling fan helps parts with small cross sections that print each layer quickly.", "description": "Enable the cooling fan during the print. The extra cooling from the cooling fan helps parts with small cross sections that print each layer quickly.",
"type": "boolean", "type": "boolean",
"default": true, "default": true,
"global_only": "print_sequence != \"one_at_a_time\"",
"children": { "children": {
"cool_fan_speed": { "cool_fan_speed": {
"label": "Fan Speed", "label": "Fan Speed",
@ -1031,6 +1072,7 @@
"default": 100, "default": 100,
"visible": false, "visible": false,
"inherit_function": "100.0 if parent_value else 0.0", "inherit_function": "100.0 if parent_value else 0.0",
"global_only": "print_sequence != \"one_at_a_time\"",
"children": { "children": {
"cool_fan_speed_min": { "cool_fan_speed_min": {
"label": "Minimum Fan Speed", "label": "Minimum Fan Speed",
@ -1040,7 +1082,8 @@
"min_value": "0", "min_value": "0",
"max_value": "100", "max_value": "100",
"default": 100, "default": 100,
"visible": false "visible": false,
"global_only": "print_sequence != \"one_at_a_time\""
}, },
"cool_fan_speed_max": { "cool_fan_speed_max": {
"label": "Maximum Fan Speed", "label": "Maximum Fan Speed",
@ -1050,7 +1093,8 @@
"min_value": "0", "min_value": "0",
"max_value": "100", "max_value": "100",
"default": 100, "default": 100,
"visible": false "visible": false,
"global_only": "print_sequence != \"one_at_a_time\""
} }
} }
} }
@ -1065,6 +1109,7 @@
"min_value": "0", "min_value": "0",
"max_value_warning": "10.0", "max_value_warning": "10.0",
"visible": false, "visible": false,
"global_only": "print_sequence != \"one_at_a_time\"",
"children": { "children": {
"cool_fan_full_layer": { "cool_fan_full_layer": {
"label": "Fan Full on at Layer", "label": "Fan Full on at Layer",
@ -1074,7 +1119,8 @@
"min_value": "0", "min_value": "0",
"max_value_warning": "100", "max_value_warning": "100",
"visible": false, "visible": false,
"inherit_function": "int((parent_value - layer_height_0 + 0.001) / layer_height)" "inherit_function": "int((parent_value - layer_height_0 + 0.001) / layer_height)",
"global_only": "print_sequence != \"one_at_a_time\""
} }
} }
}, },
@ -1086,7 +1132,8 @@
"default": 5, "default": 5,
"min_value": "0", "min_value": "0",
"max_value_warning": "600", "max_value_warning": "600",
"visible": false "visible": false,
"global_only": "print_sequence != \"one_at_a_time\""
}, },
"cool_min_layer_time_fan_speed_max": { "cool_min_layer_time_fan_speed_max": {
"label": "Minimum Layer Time Full Fan Speed", "label": "Minimum Layer Time Full Fan Speed",
@ -1096,7 +1143,8 @@
"default": 10, "default": 10,
"min_value": "cool_min_layer_time", "min_value": "cool_min_layer_time",
"max_value_warning": "600", "max_value_warning": "600",
"visible": false "visible": false,
"global_only": "print_sequence != \"one_at_a_time\""
}, },
"cool_min_speed": { "cool_min_speed": {
"label": "Minimum Speed", "label": "Minimum Speed",
@ -1106,14 +1154,16 @@
"default": 10, "default": 10,
"min_value": "0", "min_value": "0",
"max_value_warning": "100", "max_value_warning": "100",
"visible": false "visible": false,
"global_only": "print_sequence != \"one_at_a_time\""
}, },
"cool_lift_head": { "cool_lift_head": {
"label": "Lift Head", "label": "Lift Head",
"description": "Lift the head away from the print if the minimum speed is hit because of cool slowdown, and wait the extra time away from the print surface until the minimum layer time is used up.", "description": "Lift the head away from the print if the minimum speed is hit because of cool slowdown, and wait the extra time away from the print surface until the minimum layer time is used up.",
"type": "boolean", "type": "boolean",
"default": false, "default": false,
"visible": false "visible": false,
"global_only": "print_sequence != \"one_at_a_time\""
}, },
"draft_shield_enabled": { "draft_shield_enabled": {
"label": "Enable Draft Shield", "label": "Enable Draft Shield",
@ -1204,7 +1254,7 @@
}, },
"support_z_distance": { "support_z_distance": {
"label": "Z Distance", "label": "Z Distance",
"description": "Distance from the top/bottom of the support to the print. A small gap here makes it easier to remove the support but makes the print a bit uglier. 0.15mm allows for easier separation of the support structure. The value is rounded down to the nearest multiple of the layer height", "description": "Distance from the top/bottom of the support to the print. A small gap here makes it easier to remove the support but makes the print a bit uglier. 0.15mm allows for easier separation of the support structure.",
"unit": "mm", "unit": "mm",
"type": "float", "type": "float",
"min_value": "0", "min_value": "0",
@ -1485,7 +1535,8 @@
"default": 1, "default": 1,
"min_value": "0", "min_value": "0",
"max_value_warning": "10", "max_value_warning": "10",
"enabled": "adhesion_type == \"skirt\"" "enabled": "adhesion_type == \"skirt\"",
"global_only": "print_sequence != \"one_at_a_time\""
}, },
"skirt_gap": { "skirt_gap": {
"label": "Skirt Distance", "label": "Skirt Distance",
@ -1495,7 +1546,8 @@
"default": 3, "default": 3,
"min_value_warning": "0", "min_value_warning": "0",
"max_value_warning": "100", "max_value_warning": "100",
"enabled": "adhesion_type == \"skirt\"" "enabled": "adhesion_type == \"skirt\"",
"global_only": "print_sequence != \"one_at_a_time\""
}, },
"skirt_minimal_length": { "skirt_minimal_length": {
"label": "Skirt Minimum Length", "label": "Skirt Minimum Length",
@ -1506,7 +1558,8 @@
"min_value": "0", "min_value": "0",
"min_value_warning": "25", "min_value_warning": "25",
"max_value_warning": "2500", "max_value_warning": "2500",
"enabled": "adhesion_type == \"skirt\"" "enabled": "adhesion_type == \"skirt\"",
"global_only": "print_sequence != \"one_at_a_time\""
}, },
"brim_width": { "brim_width": {
"label": "Brim Width", "label": "Brim Width",
@ -1517,6 +1570,7 @@
"min_value": "0.0", "min_value": "0.0",
"max_value_warning": "100.0", "max_value_warning": "100.0",
"enabled": "adhesion_type == \"brim\"", "enabled": "adhesion_type == \"brim\"",
"global_only": "print_sequence != \"one_at_a_time\"",
"children": { "children": {
"brim_line_count": { "brim_line_count": {
"label": "Brim Line Count", "label": "Brim Line Count",
@ -1526,7 +1580,8 @@
"min_value": "0", "min_value": "0",
"max_value_warning": "300", "max_value_warning": "300",
"inherit_function": "math.ceil(parent_value / skirt_line_width)", "inherit_function": "math.ceil(parent_value / skirt_line_width)",
"enabled": "adhesion_type == \"brim\"" "enabled": "adhesion_type == \"brim\"",
"global_only": "print_sequence != \"one_at_a_time\""
} }
} }
}, },
@ -1816,7 +1871,8 @@
"description": "Spiralize smooths out the Z move of the outer edge. This will create a steady Z increase over the whole print. This feature turns a solid object into a single walled print with a solid bottom. This feature used to be called Joris in older versions.", "description": "Spiralize smooths out the Z move of the outer edge. This will create a steady Z increase over the whole print. This feature turns a solid object into a single walled print with a solid bottom. This feature used to be called Joris in older versions.",
"type": "boolean", "type": "boolean",
"default": false, "default": false,
"visible": false "visible": false,
"global_only": "print_sequence != \"one_at_a_time\""
}, },
"magic_fuzzy_skin_enabled": { "magic_fuzzy_skin_enabled": {
"label": "Fuzzy Skin", "label": "Fuzzy Skin",
@ -1867,7 +1923,8 @@
"description": "Print only the outside surface with a sparse webbed structure, printing 'in thin air'. This is realized by horizontally printing the contours of the model at given Z intervals which are connected via upward and diagonally downward lines.", "description": "Print only the outside surface with a sparse webbed structure, printing 'in thin air'. This is realized by horizontally printing the contours of the model at given Z intervals which are connected via upward and diagonally downward lines.",
"type": "boolean", "type": "boolean",
"default": false, "default": false,
"visible": false "visible": false,
"global_only": "print_sequence != \"one_at_a_time\""
}, },
"wireframe_height": { "wireframe_height": {
"label": "WP Connection Height", "label": "WP Connection Height",
@ -1878,7 +1935,8 @@
"min_value": "0.0001", "min_value": "0.0001",
"max_value_warning": "20", "max_value_warning": "20",
"visible": false, "visible": false,
"enabled": "wireframe_enabled" "enabled": "wireframe_enabled",
"global_only": "print_sequence != \"one_at_a_time\""
}, },
"wireframe_roof_inset": { "wireframe_roof_inset": {
"label": "WP Roof Inset Distance", "label": "WP Roof Inset Distance",
@ -1891,7 +1949,8 @@
"max_value_warning": "20", "max_value_warning": "20",
"visible": false, "visible": false,
"enabled": "wireframe_enabled", "enabled": "wireframe_enabled",
"inherit_function": "wireframe_height" "inherit_function": "wireframe_height",
"global_only": "print_sequence != \"one_at_a_time\""
}, },
"wireframe_printspeed": { "wireframe_printspeed": {
"label": "WP speed", "label": "WP speed",
@ -1903,6 +1962,7 @@
"max_value_warning": "50", "max_value_warning": "50",
"visible": false, "visible": false,
"enabled": "wireframe_enabled", "enabled": "wireframe_enabled",
"global_only": "print_sequence != \"one_at_a_time\"",
"children": { "children": {
"wireframe_printspeed_bottom": { "wireframe_printspeed_bottom": {
"label": "WP Bottom Printing Speed", "label": "WP Bottom Printing Speed",
@ -1914,7 +1974,8 @@
"max_value_warning": "50", "max_value_warning": "50",
"visible": false, "visible": false,
"inherit": true, "inherit": true,
"enabled": "wireframe_enabled" "enabled": "wireframe_enabled",
"global_only": "print_sequence != \"one_at_a_time\""
}, },
"wireframe_printspeed_up": { "wireframe_printspeed_up": {
"label": "WP Upward Printing Speed", "label": "WP Upward Printing Speed",
@ -1926,7 +1987,8 @@
"max_value_warning": "50", "max_value_warning": "50",
"visible": false, "visible": false,
"inherit": true, "inherit": true,
"enabled": "wireframe_enabled" "enabled": "wireframe_enabled",
"global_only": "print_sequence != \"one_at_a_time\""
}, },
"wireframe_printspeed_down": { "wireframe_printspeed_down": {
"label": "WP Downward Printing Speed", "label": "WP Downward Printing Speed",
@ -1938,7 +2000,8 @@
"max_value_warning": "50", "max_value_warning": "50",
"visible": false, "visible": false,
"inherit": true, "inherit": true,
"enabled": "wireframe_enabled" "enabled": "wireframe_enabled",
"global_only": "print_sequence != \"one_at_a_time\""
}, },
"wireframe_printspeed_flat": { "wireframe_printspeed_flat": {
"label": "WP Horizontal Printing Speed", "label": "WP Horizontal Printing Speed",
@ -1950,7 +2013,8 @@
"max_value_warning": "100", "max_value_warning": "100",
"visible": false, "visible": false,
"inherit": true, "inherit": true,
"enabled": "wireframe_enabled" "enabled": "wireframe_enabled",
"global_only": "print_sequence != \"one_at_a_time\""
} }
} }
}, },
@ -1964,6 +2028,7 @@
"type": "float", "type": "float",
"visible": false, "visible": false,
"enabled": "wireframe_enabled", "enabled": "wireframe_enabled",
"global_only": "print_sequence != \"one_at_a_time\"",
"children": { "children": {
"wireframe_flow_connection": { "wireframe_flow_connection": {
"label": "WP Connection Flow", "label": "WP Connection Flow",
@ -1974,7 +2039,8 @@
"max_value_warning": "100", "max_value_warning": "100",
"type": "float", "type": "float",
"visible": false, "visible": false,
"enabled": "wireframe_enabled" "enabled": "wireframe_enabled",
"global_only": "print_sequence != \"one_at_a_time\""
}, },
"wireframe_flow_flat": { "wireframe_flow_flat": {
"label": "WP Flat Flow", "label": "WP Flat Flow",
@ -1985,7 +2051,8 @@
"max_value_warning": "100", "max_value_warning": "100",
"type": "float", "type": "float",
"visible": false, "visible": false,
"enabled": "wireframe_enabled" "enabled": "wireframe_enabled",
"global_only": "print_sequence != \"one_at_a_time\""
} }
} }
}, },
@ -1998,7 +2065,8 @@
"min_value": "0", "min_value": "0",
"max_value_warning": "1", "max_value_warning": "1",
"visible": false, "visible": false,
"enabled": "wireframe_enabled" "enabled": "wireframe_enabled",
"global_only": "print_sequence != \"one_at_a_time\""
}, },
"wireframe_bottom_delay": { "wireframe_bottom_delay": {
"label": "WP Bottom Delay", "label": "WP Bottom Delay",
@ -2009,7 +2077,8 @@
"min_value": "0", "min_value": "0",
"max_value_warning": "1", "max_value_warning": "1",
"visible": false, "visible": false,
"enabled": "wireframe_enabled" "enabled": "wireframe_enabled",
"global_only": "print_sequence != \"one_at_a_time\""
}, },
"wireframe_flat_delay": { "wireframe_flat_delay": {
"label": "WP Flat Delay", "label": "WP Flat Delay",
@ -2020,7 +2089,8 @@
"min_value": "0", "min_value": "0",
"max_value_warning": "0.5", "max_value_warning": "0.5",
"visible": false, "visible": false,
"enabled": "wireframe_enabled" "enabled": "wireframe_enabled",
"global_only": "print_sequence != \"one_at_a_time\""
}, },
"wireframe_up_half_speed": { "wireframe_up_half_speed": {
"label": "WP Ease Upward", "label": "WP Ease Upward",
@ -2031,7 +2101,8 @@
"min_value": "0", "min_value": "0",
"max_value_warning": "5.0", "max_value_warning": "5.0",
"visible": false, "visible": false,
"enabled": "wireframe_enabled" "enabled": "wireframe_enabled",
"global_only": "print_sequence != \"one_at_a_time\""
}, },
"wireframe_top_jump": { "wireframe_top_jump": {
"label": "WP Knot Size", "label": "WP Knot Size",
@ -2042,7 +2113,8 @@
"min_value": "0", "min_value": "0",
"max_value_warning": "2.0", "max_value_warning": "2.0",
"visible": false, "visible": false,
"enabled": "wireframe_enabled" "enabled": "wireframe_enabled",
"global_only": "print_sequence != \"one_at_a_time\""
}, },
"wireframe_fall_down": { "wireframe_fall_down": {
"label": "WP Fall Down", "label": "WP Fall Down",
@ -2053,7 +2125,8 @@
"min_value": "0", "min_value": "0",
"max_value_warning": "wireframe_height", "max_value_warning": "wireframe_height",
"visible": false, "visible": false,
"enabled": "wireframe_enabled" "enabled": "wireframe_enabled",
"global_only": "print_sequence != \"one_at_a_time\""
}, },
"wireframe_drag_along": { "wireframe_drag_along": {
"label": "WP Drag along", "label": "WP Drag along",
@ -2064,7 +2137,8 @@
"min_value": "0", "min_value": "0",
"max_value_warning": "wireframe_height", "max_value_warning": "wireframe_height",
"visible": false, "visible": false,
"enabled": "wireframe_enabled" "enabled": "wireframe_enabled",
"global_only": "print_sequence != \"one_at_a_time\""
}, },
"wireframe_strategy": { "wireframe_strategy": {
"label": "WP Strategy", "label": "WP Strategy",
@ -2077,7 +2151,8 @@
}, },
"default": "compensate", "default": "compensate",
"visible": false, "visible": false,
"enabled": "wireframe_enabled" "enabled": "wireframe_enabled",
"global_only": "print_sequence != \"one_at_a_time\""
}, },
"wireframe_straight_before_down": { "wireframe_straight_before_down": {
"label": "WP Straighten Downward Lines", "label": "WP Straighten Downward Lines",
@ -2088,7 +2163,8 @@
"min_value": "0", "min_value": "0",
"max_value": "100", "max_value": "100",
"visible": false, "visible": false,
"enabled": "wireframe_enabled" "enabled": "wireframe_enabled",
"global_only": "print_sequence != \"one_at_a_time\""
}, },
"wireframe_roof_fall_down": { "wireframe_roof_fall_down": {
"label": "WP Roof Fall Down", "label": "WP Roof Fall Down",
@ -2099,7 +2175,8 @@
"min_value_warning": "0", "min_value_warning": "0",
"max_value_warning": "wireframe_roof_inset", "max_value_warning": "wireframe_roof_inset",
"visible": false, "visible": false,
"enabled": "wireframe_enabled" "enabled": "wireframe_enabled",
"global_only": "print_sequence != \"one_at_a_time\""
}, },
"wireframe_roof_drag_along": { "wireframe_roof_drag_along": {
"label": "WP Roof Drag Along", "label": "WP Roof Drag Along",
@ -2110,7 +2187,8 @@
"min_value": "0", "min_value": "0",
"max_value_warning": "10", "max_value_warning": "10",
"visible": false, "visible": false,
"enabled": "wireframe_enabled" "enabled": "wireframe_enabled",
"global_only": "print_sequence != \"one_at_a_time\""
}, },
"wireframe_roof_outer_delay": { "wireframe_roof_outer_delay": {
"label": "WP Roof Outer Delay", "label": "WP Roof Outer Delay",
@ -2121,7 +2199,8 @@
"min_value": "0", "min_value": "0",
"max_value_warning": "2.0", "max_value_warning": "2.0",
"visible": false, "visible": false,
"enabled": "wireframe_enabled" "enabled": "wireframe_enabled",
"global_only": "print_sequence != \"one_at_a_time\""
}, },
"wireframe_nozzle_clearance": { "wireframe_nozzle_clearance": {
"label": "WP Nozzle Clearance", "label": "WP Nozzle Clearance",
@ -2132,7 +2211,8 @@
"min_value_warning": "0", "min_value_warning": "0",
"max_value_warning": "10.0", "max_value_warning": "10.0",
"visible": false, "visible": false,
"enabled": "wireframe_enabled" "enabled": "wireframe_enabled",
"global_only": "print_sequence != \"one_at_a_time\""
} }
} }
} }

View File

@ -6,7 +6,7 @@
"author": "Other", "author": "Other",
"icon": "icon_ultimaker.png", "icon": "icon_ultimaker.png",
"platform": "grr_neo_platform.stl", "platform": "grr_neo_platform.stl",
"file_formats": "text/x-gcode",
"inherits": "fdmprinter.json", "inherits": "fdmprinter.json",
"visible": "true", "visible": "true",

View File

@ -5,6 +5,7 @@
"manufacturer": "Other", "manufacturer": "Other",
"icon": "icon_ultimaker.png", "icon": "icon_ultimaker.png",
"platform": "", "platform": "",
"file_formats": "application/x3g",
"inherits": "fdmprinter.json", "inherits": "fdmprinter.json",
"machine_settings": { "machine_settings": {

View File

@ -6,7 +6,7 @@
"author": "Other", "author": "Other",
"icon": "icon_ultimaker2.png", "icon": "icon_ultimaker2.png",
"platform": "makerstarter_platform.stl", "platform": "makerstarter_platform.stl",
"file_formats": "text/x-gcode;application/x-stl-ascii;application/x-stl-binary;application/x-wavefront-obj",
"inherits": "fdmprinter.json", "inherits": "fdmprinter.json",
"overrides": { "overrides": {

View File

@ -6,7 +6,7 @@
"author": "Other", "author": "Other",
"icon": "icon_ultimaker2.png", "icon": "icon_ultimaker2.png",
"platform": "prusai3_platform.stl", "platform": "prusai3_platform.stl",
"file_formats": "text/x-gcode",
"inherits": "fdmprinter.json", "inherits": "fdmprinter.json",
"overrides": { "overrides": {

View File

@ -7,6 +7,7 @@
"icon": "icon_ultimaker2.png", "icon": "icon_ultimaker2.png",
"platform": "ultimaker2_platform.obj", "platform": "ultimaker2_platform.obj",
"platform_texture": "Ultimaker2backplate.png", "platform_texture": "Ultimaker2backplate.png",
"file_formats": "text/x-gcode",
"inherits": "fdmprinter.json", "inherits": "fdmprinter.json",

View File

@ -7,7 +7,7 @@
"icon": "icon_ultimaker2.png", "icon": "icon_ultimaker2.png",
"platform": "ultimaker2_platform.obj", "platform": "ultimaker2_platform.obj",
"platform_texture": "Ultimaker2Extendedbackplate.png", "platform_texture": "Ultimaker2Extendedbackplate.png",
"file_formats": "text/x-gcode",
"inherits": "ultimaker2.json", "inherits": "ultimaker2.json",
"overrides": { "overrides": {

View File

@ -7,6 +7,7 @@
"platform": "ultimaker2_platform.obj", "platform": "ultimaker2_platform.obj",
"platform_texture": "ultimaker2plus_backplate.png", "platform_texture": "ultimaker2plus_backplate.png",
"visible": false, "visible": false,
"file_formats": "text/x-gcode",
"inherits": "ultimaker2plus.json", "inherits": "ultimaker2plus.json",
"machine_settings": { "machine_settings": {

View File

@ -6,8 +6,10 @@
"author": "Ultimaker", "author": "Ultimaker",
"platform": "ultimaker2_platform.obj", "platform": "ultimaker2_platform.obj",
"platform_texture": "ultimaker2plus_backplate.png", "platform_texture": "ultimaker2plus_backplate.png",
"file_formats": "text/x-gcode",
"inherits": "ultimaker2_extended_plus.json", "inherits": "ultimaker2_extended_plus.json",
"variant": "0.25mm Nozzle", "variant": "0.25 mm",
"profiles_machine": "ultimaker2plus",
"machine_settings": { "machine_settings": {
"machine_nozzle_size": { "default": 0.25 } "machine_nozzle_size": { "default": 0.25 }
} }

View File

@ -6,8 +6,10 @@
"author": "Ultimaker", "author": "Ultimaker",
"platform": "ultimaker2_platform.obj", "platform": "ultimaker2_platform.obj",
"platform_texture": "ultimaker2plus_backplate.png", "platform_texture": "ultimaker2plus_backplate.png",
"file_formats": "text/x-gcode",
"inherits": "ultimaker2_extended_plus.json", "inherits": "ultimaker2_extended_plus.json",
"variant": "0.40mm Nozzle", "variant": "0.4 mm",
"profiles_machine": "ultimaker2plus",
"machine_settings": { "machine_settings": {
"machine_nozzle_size": { "default": 0.40 } "machine_nozzle_size": { "default": 0.40 }
} }

View File

@ -6,8 +6,10 @@
"author": "Ultimaker", "author": "Ultimaker",
"platform": "ultimaker2_platform.obj", "platform": "ultimaker2_platform.obj",
"platform_texture": "ultimaker2plus_backplate.png", "platform_texture": "ultimaker2plus_backplate.png",
"file_formats": "text/x-gcode",
"inherits": "ultimaker2_extended_plus.json", "inherits": "ultimaker2_extended_plus.json",
"variant": "0.60mm Nozzle", "variant": "0.6 mm",
"profiles_machine": "ultimaker2plus",
"machine_settings": { "machine_settings": {
"machine_nozzle_size": { "default": 0.60 } "machine_nozzle_size": { "default": 0.60 }
} }

View File

@ -6,8 +6,10 @@
"author": "Ultimaker", "author": "Ultimaker",
"platform": "ultimaker2_platform.obj", "platform": "ultimaker2_platform.obj",
"platform_texture": "ultimaker2plus_backplate.png", "platform_texture": "ultimaker2plus_backplate.png",
"file_formats": "text/x-gcode",
"inherits": "ultimaker2_extended_plus.json", "inherits": "ultimaker2_extended_plus.json",
"variant": "0.80mm Nozzle", "variant": "0.8 mm",
"profiles_machine": "ultimaker2plus",
"machine_settings": { "machine_settings": {
"machine_nozzle_size": { "default": 0.80 } "machine_nozzle_size": { "default": 0.80 }
} }

View File

@ -7,7 +7,7 @@
"icon": "icon_ultimaker2.png", "icon": "icon_ultimaker2.png",
"platform": "ultimaker2go_platform.obj", "platform": "ultimaker2go_platform.obj",
"platform_texture": "Ultimaker2Gobackplate.png", "platform_texture": "Ultimaker2Gobackplate.png",
"file_formats": "text/x-gcode",
"inherits": "ultimaker2.json", "inherits": "ultimaker2.json",
"overrides": { "overrides": {

View File

@ -7,18 +7,15 @@
"platform": "ultimaker2_platform.obj", "platform": "ultimaker2_platform.obj",
"platform_texture": "ultimaker2plus_backplate.png", "platform_texture": "ultimaker2plus_backplate.png",
"visible": false, "visible": false,
"file_formats": "text/x-gcode",
"inherits": "ultimaker2.json", "inherits": "ultimaker2.json",
"machine_settings": { "overrides": {
"machine_width": { "default": 230 }, "machine_width": { "default": 230 },
"machine_depth": { "default": 225 }, "machine_depth": { "default": 225 },
"machine_height": { "default": 200 }, "machine_height": { "default": 200 },
"machine_show_variants": { "default": true }, "machine_show_variants": { "default": true },
"gantry_height": { "default": 50 } "gantry_height": { "default": 50 },
},
"overrides": {
"shell_thickness": { "default": 1.2 }, "shell_thickness": { "default": 1.2 },
"top_bottom_thickness": { "inherit_function": "(parent_value / 3) * 2" }, "top_bottom_thickness": { "inherit_function": "(parent_value / 3) * 2" },
"travel_compensate_overlapping_walls_enabled": { "default": true }, "travel_compensate_overlapping_walls_enabled": { "default": true },

View File

@ -6,16 +6,14 @@
"author": "Ultimaker", "author": "Ultimaker",
"platform": "ultimaker2_platform.obj", "platform": "ultimaker2_platform.obj",
"platform_texture": "ultimaker2plus_backplate.png", "platform_texture": "ultimaker2plus_backplate.png",
"file_formats": "text/x-gcode",
"inherits": "ultimaker2plus.json", "inherits": "ultimaker2plus.json",
"variant": "0.25mm Nozzle", "variant": "0.25 mm",
"machine_settings": {
"machine_nozzle_size": { "default": 0.25 }
},
"overrides": { "overrides": {
"machine_nozzle_size": { "default": 0.25 },
"layer_height": { "default": 0.06 }, "layer_height": { "default": 0.06 },
"layer_height_0": { "default": 0.15 }, "layer_height_0": { "default": 0.15 },

View File

@ -6,16 +6,14 @@
"author": "Ultimaker", "author": "Ultimaker",
"platform": "ultimaker2_platform.obj", "platform": "ultimaker2_platform.obj",
"platform_texture": "ultimaker2plus_backplate.png", "platform_texture": "ultimaker2plus_backplate.png",
"file_formats": "text/x-gcode",
"inherits": "ultimaker2plus.json", "inherits": "ultimaker2plus.json",
"variant": "0.40mm Nozzle", "variant": "0.4 mm",
"machine_settings": {
"machine_nozzle_size": { "default": 0.40 }
},
"overrides": { "overrides": {
"machine_nozzle_size": { "default": 0.40 },
"wall_line_width_0": { "inherit_function": "parent_value * 0.875" }, "wall_line_width_0": { "inherit_function": "parent_value * 0.875" },
"skin_line_width": { "inherit_function": "parent_value * 0.875" } "skin_line_width": { "inherit_function": "parent_value * 0.875" }
} }

View File

@ -6,16 +6,14 @@
"author": "Ultimaker", "author": "Ultimaker",
"platform": "ultimaker2_platform.obj", "platform": "ultimaker2_platform.obj",
"platform_texture": "ultimaker2plus_backplate.png", "platform_texture": "ultimaker2plus_backplate.png",
"file_formats": "text/x-gcode",
"inherits": "ultimaker2plus.json", "inherits": "ultimaker2plus.json",
"variant": "0.60mm Nozzle", "variant": "0.6 mm",
"machine_settings": {
"machine_nozzle_size": { "default": 0.60 }
},
"overrides": { "overrides": {
"machine_nozzle_size": { "default": 0.60 },
"layer_height": { "default": 0.15 }, "layer_height": { "default": 0.15 },
"layer_height_0": { "default": 0.4 }, "layer_height_0": { "default": 0.4 },

View File

@ -6,16 +6,14 @@
"author": "Ultimaker", "author": "Ultimaker",
"platform": "ultimaker2_platform.obj", "platform": "ultimaker2_platform.obj",
"platform_texture": "ultimaker2plus_backplate.png", "platform_texture": "ultimaker2plus_backplate.png",
"file_formats": "text/x-gcode",
"inherits": "ultimaker2plus.json", "inherits": "ultimaker2plus.json",
"variant": "0.80mm Nozzle", "variant": "0.8 mm",
"machine_settings": {
"machine_nozzle_size": { "default": 0.80 }
},
"overrides": { "overrides": {
"machine_nozzle_size": { "default": 0.80 },
"layer_height": { "default": 0.2 }, "layer_height": { "default": 0.2 },
"layer_height_0": { "default": 0.5 }, "layer_height_0": { "default": 0.5 },

View File

@ -6,7 +6,7 @@
"author": "Ultimaker", "author": "Ultimaker",
"icon": "icon_ultimaker.png", "icon": "icon_ultimaker.png",
"platform": "ultimaker_platform.stl", "platform": "ultimaker_platform.stl",
"file_formats": "text/x-gcode",
"inherits": "fdmprinter.json", "inherits": "fdmprinter.json",
"pages": [ "pages": [

View File

@ -7,7 +7,7 @@
"icon": "icon_ultimaker.png", "icon": "icon_ultimaker.png",
"platform": "ultimaker2_platform.obj", "platform": "ultimaker2_platform.obj",
"platform_texture": "UltimakerPlusbackplate.png", "platform_texture": "UltimakerPlusbackplate.png",
"file_formats": "text/x-gcode",
"inherits": "ultimaker_original.json", "inherits": "ultimaker_original.json",
"pages": [ "pages": [

View File

@ -1,15 +0,0 @@
[general]
version = 1
name = Low Quality
[settings]
layer_height = 0.15
shell_thickness = 0.8
infill_sparse_density = 8
speed_print = 60
speed_wall_0 = 40
speed_wall_x = 50
speed_topbottom = 30
speed_travel = 150
speed_layer_0 = 30
skirt_speed = 30

View File

@ -1,5 +0,0 @@
[general]
version = 1
name = Normal Quality
[settings]

View File

@ -1,9 +0,0 @@
[general]
version = 1
name = Ulti Quality
[settings]
layer_height = 0.04
shell_thickness = 1.6
top_bottom_thickness = 0.8
infill_sparse_density = 14

View File

@ -4,5 +4,7 @@ name = High Quality
[settings] [settings]
layer_height = 0.06 layer_height = 0.06
infill_sparse_density = 12 speed_wall_0 = 30
speed_topbottom = 15
speed_infill = 80

View File

@ -0,0 +1,14 @@
[general]
version = 1
name = Low Quality
[settings]
infill_sparse_density = 10
layer_height = 0.15
cool_min_layer_time = 3
speed_wall_0 = 40
speed_wall_x = 80
speed_infill = 100
shell_thickness = 1
speed_topbottom = 30

View File

@ -0,0 +1,9 @@
[general]
version = 1
name = Normal Quality
[settings]
speed_wall_0 = 30
speed_topbottom = 15
speed_infill = 80

View File

@ -0,0 +1,10 @@
[general]
version = 1
name = Ulti Quality
[settings]
layer_height = 0.04
speed_wall_0 = 30
speed_topbottom = 15
speed_infill = 80

View File

@ -0,0 +1,12 @@
[general]
version = 1
type = material
name = ABS
[settings]
material_bed_temperature = 100
platform_adhesion = Brim
material_flow = 107
material_print_temperature = 250
cool_fan_speed = 50
cool_fan_speed_max = 50

View File

@ -0,0 +1,12 @@
[general]
version = 1
type = material
name = CPE
[settings]
material_bed_temperature = 60
platform_adhesion = Brim
material_flow = 100
material_print_temperature = 250
cool_fan_speed = 50
cool_fan_speed_max = 50

View File

@ -0,0 +1,12 @@
[general]
version = 1
type = material
name = PLA
[settings]
material_bed_temperature = 60
platform_adhesion = Skirt
material_flow = 100
material_print_temperature = 210
cool_fan_speed = 100
cool_fan_speed_max = 100

View File

@ -0,0 +1,51 @@
[general]
version = 1
name = High Quality
machine_type = ultimaker2plus
machine_variant = 0.25 mm
material = ABS
[settings]
raft_surface_thickness = 0.27
raft_base_line_width = 1.0
raft_margin = 5.0
cool_min_layer_time = 2
support_enable = False
retraction_combing = All
cool_min_speed = 25
brim_line_count = 32
top_thickness = 0.72
material_flow = 100.0
cool_lift_head = True
speed_print = 20
retraction_hop = 0.0
machine_nozzle_size = 0.22
layer_height = 0.06
speed_wall_0 = 20
raft_interface_line_spacing = 3.0
speed_topbottom = 20
speed_infill = 30
infill_before_walls = False
retraction_speed = 40.0
skin_no_small_gaps_heuristic = False
infill_sparse_density = 22
shell_thickness = 0.88
cool_fan_speed_max = 100
raft_airgap = 0.0
material_bed_temperature = 70
infill_overlap = 15
speed_wall_x = 25
skirt_minimal_length = 150.0
speed_layer_0 = 20
bottom_thickness = 0.72
layer_height_0 = 0.15
magic_mesh_surface_mode = False
cool_fan_speed_min = 50
top_bottom_thickness = 0.72
skirt_gap = 3.0
raft_interface_line_width = 0.4
adhesion_type = brim
support_pattern = lines
raft_surface_line_width = 0.4
raft_surface_line_spacing = 3.0

View File

@ -0,0 +1,51 @@
[general]
version = 1
name = Fast Prints
machine_type = ultimaker2plus
machine_variant = 0.4 mm
material = ABS
[settings]
raft_surface_thickness = 0.27
raft_base_line_width = 1.0
raft_margin = 5.0
cool_min_layer_time = 3
support_enable = False
retraction_combing = All
speed_travel = 150
cool_min_speed = 20
brim_line_count = 20
top_thickness = 0.75
material_flow = 100.0
cool_lift_head = True
speed_print = 40
retraction_hop = 0.0
machine_nozzle_size = 0.35
layer_height = 0.15
speed_wall_0 = 30
raft_interface_line_spacing = 3.0
speed_topbottom = 30
speed_infill = 55
infill_before_walls = False
retraction_speed = 40.0
skin_no_small_gaps_heuristic = False
infill_sparse_density = 18
shell_thickness = 0.7
cool_fan_speed_max = 100
raft_airgap = 0.0
material_bed_temperature = 70
infill_overlap = 15
speed_wall_x = 40
skirt_minimal_length = 150.0
bottom_thickness = 0.75
layer_height_0 = 0.26
magic_mesh_surface_mode = False
cool_fan_speed_min = 50
top_bottom_thickness = 0.75
skirt_gap = 3.0
raft_interface_line_width = 0.4
adhesion_type = brim
support_pattern = lines
raft_surface_line_width = 0.4
raft_surface_line_spacing = 3.0

View File

@ -0,0 +1,51 @@
[general]
version = 1
name = High Quality
machine_type = ultimaker2plus
machine_variant = 0.4 mm
material = ABS
[settings]
raft_surface_thickness = 0.27
raft_base_line_width = 1.0
raft_margin = 5.0
cool_min_layer_time = 3
support_enable = False
retraction_combing = All
cool_min_speed = 20
brim_line_count = 20
top_thickness = 0.72
material_flow = 100.0
cool_lift_head = True
speed_print = 30
retraction_hop = 0.0
machine_nozzle_size = 0.35
layer_height = 0.06
speed_wall_0 = 20
raft_interface_line_spacing = 3.0
speed_topbottom = 20
speed_infill = 45
infill_before_walls = False
retraction_speed = 40.0
skin_no_small_gaps_heuristic = False
infill_sparse_density = 22
shell_thickness = 1.05
cool_fan_speed_max = 100
raft_airgap = 0.0
material_bed_temperature = 70
infill_overlap = 15
speed_wall_x = 30
skirt_minimal_length = 150.0
speed_layer_0 = 20
bottom_thickness = 0.72
layer_height_0 = 0.26
magic_mesh_surface_mode = False
cool_fan_speed_min = 50
top_bottom_thickness = 0.72
skirt_gap = 3.0
raft_interface_line_width = 0.4
adhesion_type = brim
support_pattern = lines
raft_surface_line_width = 0.4
raft_surface_line_spacing = 3.0

View File

@ -0,0 +1,46 @@
[general]
version = 1
name = Normal Quality
machine_type = ultimaker2plus
machine_variant = 0.4 mm
material = ABS
[settings]
raft_surface_thickness = 0.27
raft_base_line_width = 1.0
raft_margin = 5.0
support_enable = False
retraction_combing = All
cool_min_speed = 20
brim_line_count = 20
material_flow = 100.0
cool_lift_head = True
speed_print = 30
retraction_hop = 0.0
machine_nozzle_size = 0.35
speed_wall_0 = 20
raft_interface_line_spacing = 3.0
speed_topbottom = 20
speed_infill = 45
infill_before_walls = False
retraction_speed = 40.0
skin_no_small_gaps_heuristic = False
shell_thickness = 1.05
cool_fan_speed_max = 100
raft_airgap = 0.0
material_bed_temperature = 70
infill_overlap = 15
speed_wall_x = 30
skirt_minimal_length = 150.0
speed_layer_0 = 20
layer_height_0 = 0.26
magic_mesh_surface_mode = False
cool_fan_speed_min = 50
cool_min_layer_time = 3
skirt_gap = 3.0
raft_interface_line_width = 0.4
adhesion_type = brim
support_pattern = lines
raft_surface_line_width = 0.4
raft_surface_line_spacing = 3.0

View File

@ -0,0 +1,50 @@
[general]
version = 1
name = Normal Quality
machine_type = ultimaker2plus
machine_variant = 0.6 mm
material = ABS
[settings]
raft_surface_thickness = 0.27
raft_base_line_width = 1.0
raft_margin = 5.0
cool_min_layer_time = 3
support_enable = False
retraction_combing = All
cool_min_speed = 20
brim_line_count = 14
top_thickness = 1.2
material_flow = 100.0
cool_lift_head = True
speed_print = 25
retraction_hop = 0.0
machine_nozzle_size = 0.53
layer_height = 0.15
speed_wall_0 = 20
raft_interface_line_spacing = 3.0
speed_topbottom = 20
speed_infill = 55
infill_before_walls = False
retraction_speed = 40.0
skin_no_small_gaps_heuristic = False
shell_thickness = 1.59
cool_fan_speed_max = 100
raft_airgap = 0.0
material_bed_temperature = 70
infill_overlap = 15
speed_wall_x = 30
skirt_minimal_length = 150.0
speed_layer_0 = 20
bottom_thickness = 1.2
layer_height_0 = 0.39
magic_mesh_surface_mode = False
cool_fan_speed_min = 50
top_bottom_thickness = 1.2
skirt_gap = 3.0
raft_interface_line_width = 0.4
adhesion_type = brim
support_pattern = lines
raft_surface_line_width = 0.4
raft_surface_line_spacing = 3.0

View File

@ -0,0 +1,50 @@
[general]
version = 1
name = Fast Prints
machine_type = ultimaker2plus
machine_variant = 0.8 mm
material = ABS
[settings]
raft_surface_thickness = 0.27
raft_base_line_width = 1.0
raft_margin = 5.0
cool_min_layer_time = 3
support_enable = False
retraction_combing = All
cool_min_speed = 15
brim_line_count = 10
top_thickness = 1.2
material_flow = 100.0
cool_lift_head = True
speed_print = 20
retraction_hop = 0.0
machine_nozzle_size = 0.7
layer_height = 0.2
speed_wall_0 = 20
raft_interface_line_spacing = 3.0
speed_topbottom = 20
speed_infill = 40
infill_before_walls = False
retraction_speed = 40.0
skin_no_small_gaps_heuristic = False
shell_thickness = 2.1
cool_fan_speed_max = 100
raft_airgap = 0.0
material_bed_temperature = 70
infill_overlap = 15
speed_wall_x = 30
skirt_minimal_length = 150.0
speed_layer_0 = 20
bottom_thickness = 1.2
layer_height_0 = 0.5
magic_mesh_surface_mode = False
cool_fan_speed_min = 50
top_bottom_thickness = 1.2
skirt_gap = 3.0
raft_interface_line_width = 0.4
adhesion_type = brim
support_pattern = lines
raft_surface_line_width = 0.4
raft_surface_line_spacing = 3.0

View File

@ -0,0 +1,50 @@
[general]
version = 1
name = High Quality
machine_type = ultimaker2plus
machine_variant = 0.25 mm
material = CPE
[settings]
cool_fan_speed_min = 50
retraction_hop = 0.0
support_enable = False
raft_airgap = 0.0
raft_surface_thickness = 0.27
raft_interface_line_spacing = 3.0
skin_no_small_gaps_heuristic = False
bottom_thickness = 0.72
raft_surface_line_spacing = 3.0
retraction_combing = All
adhesion_type = brim
cool_min_layer_time = 2
layer_height = 0.06
raft_margin = 5.0
speed_infill = 30
speed_layer_0 = 20
brim_line_count = 32
cool_lift_head = True
retraction_speed = 40.0
cool_fan_speed_max = 100
magic_mesh_surface_mode = False
speed_print = 20
shell_thickness = 0.88
speed_wall_0 = 20
material_flow = 100.0
support_pattern = lines
infill_sparse_density = 22
raft_interface_line_width = 0.4
layer_height_0 = 0.15
material_bed_temperature = 70
top_thickness = 0.72
top_bottom_thickness = 0.72
speed_wall_x = 25
infill_overlap = 17
infill_before_walls = False
raft_surface_line_width = 0.4
skirt_minimal_length = 150.0
speed_topbottom = 20
skirt_gap = 3.0
raft_base_line_width = 1.0
machine_nozzle_size = 0.22

View File

@ -0,0 +1,50 @@
[general]
version = 1
name = Fast Prints
machine_type = ultimaker2plus
machine_variant = 0.4 mm
material = CPE
[settings]
cool_fan_speed_min = 50
retraction_hop = 0.0
skin_no_small_gaps_heuristic = False
raft_airgap = 0.0
speed_travel = 150
raft_surface_thickness = 0.27
raft_interface_line_spacing = 3.0
support_enable = False
raft_surface_line_width = 0.4
raft_surface_line_spacing = 3.0
retraction_combing = All
adhesion_type = brim
cool_min_layer_time = 3
layer_height = 0.15
raft_margin = 5.0
speed_infill = 45
bottom_thickness = 0.75
brim_line_count = 20
cool_lift_head = True
retraction_speed = 40.0
cool_fan_speed_max = 100
magic_mesh_surface_mode = False
speed_print = 30
shell_thickness = 0.7
speed_wall_0 = 30
material_flow = 100.0
support_pattern = lines
infill_sparse_density = 18
raft_interface_line_width = 0.4
layer_height_0 = 0.26
material_bed_temperature = 70
top_thickness = 0.75
top_bottom_thickness = 0.75
speed_wall_x = 40
infill_overlap = 17
infill_before_walls = False
skirt_minimal_length = 150.0
speed_topbottom = 20
skirt_gap = 3.0
raft_base_line_width = 1.0
machine_nozzle_size = 0.35

View File

@ -0,0 +1,50 @@
[general]
version = 1
name = High Quality
machine_type = ultimaker2plus
machine_variant = 0.4 mm
material = CPE
[settings]
cool_fan_speed_min = 50
retraction_hop = 0.0
support_enable = False
raft_airgap = 0.0
raft_surface_thickness = 0.27
raft_interface_line_spacing = 3.0
skin_no_small_gaps_heuristic = False
bottom_thickness = 0.72
raft_surface_line_spacing = 3.0
retraction_combing = All
adhesion_type = brim
cool_min_layer_time = 3
layer_height = 0.06
raft_margin = 5.0
speed_infill = 45
speed_layer_0 = 20
brim_line_count = 20
cool_lift_head = True
retraction_speed = 40.0
cool_fan_speed_max = 100
magic_mesh_surface_mode = False
speed_print = 20
shell_thickness = 1.05
speed_wall_0 = 20
material_flow = 100.0
support_pattern = lines
infill_sparse_density = 22
raft_interface_line_width = 0.4
layer_height_0 = 0.26
material_bed_temperature = 70
top_thickness = 0.72
top_bottom_thickness = 0.72
speed_wall_x = 30
infill_overlap = 15
infill_before_walls = False
raft_surface_line_width = 0.4
skirt_minimal_length = 150.0
speed_topbottom = 20
skirt_gap = 3.0
raft_base_line_width = 1.0
machine_nozzle_size = 0.35

View File

@ -0,0 +1,45 @@
[general]
version = 1
name = Normal Quality
machine_type = ultimaker2plus
machine_variant = 0.4 mm
material = CPE
[settings]
retraction_hop = 0.0
support_enable = False
raft_airgap = 0.0
raft_surface_thickness = 0.27
support_pattern = lines
raft_interface_line_spacing = 3.0
skin_no_small_gaps_heuristic = False
raft_surface_line_width = 0.4
cool_fan_speed_min = 50
retraction_combing = All
adhesion_type = brim
cool_min_layer_time = 3
infill_before_walls = False
speed_layer_0 = 20
brim_line_count = 20
cool_lift_head = True
raft_interface_line_width = 0.4
cool_fan_speed_max = 100
magic_mesh_surface_mode = False
speed_print = 20
shell_thickness = 1.05
speed_wall_0 = 20
material_flow = 100.0
raft_surface_line_spacing = 3.0
raft_margin = 5.0
retraction_speed = 40.0
layer_height_0 = 0.26
material_bed_temperature = 70
speed_wall_x = 30
infill_overlap = 15
speed_infill = 45
skirt_minimal_length = 150.0
speed_topbottom = 20
skirt_gap = 3.0
raft_base_line_width = 1.0
machine_nozzle_size = 0.35

View File

@ -0,0 +1,49 @@
[general]
version = 1
name = Normal Quality
machine_type = ultimaker2plus
machine_variant = 0.6 mm
material = CPE
[settings]
cool_fan_speed_min = 50
retraction_hop = 0.0
support_enable = False
raft_airgap = 0.0
raft_surface_thickness = 0.27
raft_interface_line_spacing = 3.0
skin_no_small_gaps_heuristic = False
bottom_thickness = 1.2
support_pattern = lines
retraction_combing = All
adhesion_type = brim
cool_min_layer_time = 3
layer_height = 0.15
speed_infill = 40
speed_layer_0 = 20
brim_line_count = 14
cool_lift_head = True
retraction_speed = 40.0
cool_fan_speed_max = 100
magic_mesh_surface_mode = False
speed_print = 20
shell_thickness = 1.59
speed_wall_0 = 20
material_flow = 100.0
raft_surface_line_spacing = 3.0
raft_margin = 5.0
raft_interface_line_width = 0.4
layer_height_0 = 0.39
material_bed_temperature = 70
top_thickness = 1.2
top_bottom_thickness = 1.2
speed_wall_x = 30
infill_overlap = 17
infill_before_walls = False
raft_surface_line_width = 0.4
skirt_minimal_length = 150.0
speed_topbottom = 20
skirt_gap = 3.0
raft_base_line_width = 1.0
machine_nozzle_size = 0.53

View File

@ -0,0 +1,49 @@
[general]
version = 1
name = Fast Prints
machine_type = ultimaker2plus
machine_variant = 0.8 mm
material = CPE
[settings]
cool_fan_speed_min = 50
retraction_hop = 0.0
support_enable = False
raft_airgap = 0.0
raft_surface_thickness = 0.27
raft_interface_line_spacing = 3.0
skin_no_small_gaps_heuristic = False
bottom_thickness = 1.2
support_pattern = lines
retraction_combing = All
adhesion_type = brim
cool_min_layer_time = 3
layer_height = 0.2
speed_infill = 40
speed_layer_0 = 20
brim_line_count = 10
cool_lift_head = True
retraction_speed = 40.0
cool_fan_speed_max = 100
magic_mesh_surface_mode = False
speed_print = 20
shell_thickness = 2.1
speed_wall_0 = 20
material_flow = 100.0
raft_surface_line_spacing = 3.0
raft_margin = 5.0
raft_interface_line_width = 0.4
layer_height_0 = 0.5
material_bed_temperature = 70
top_thickness = 1.2
top_bottom_thickness = 1.2
speed_wall_x = 30
infill_overlap = 17
infill_before_walls = False
raft_surface_line_width = 0.4
skirt_minimal_length = 150.0
speed_topbottom = 20
skirt_gap = 3.0
raft_base_line_width = 1.0
machine_nozzle_size = 0.7

View File

@ -0,0 +1,48 @@
[general]
version = 1
name = High Quality
machine_type = ultimaker2plus
machine_variant = 0.25 mm
material = PLA
[settings]
retraction_combing = All
top_thickness = 0.72
speed_layer_0 = 20
speed_print = 20
speed_wall_0 = 20
raft_interface_line_spacing = 3.0
shell_thickness = 0.88
infill_overlap = 15
retraction_hop = 0.0
material_bed_temperature = 70
skin_no_small_gaps_heuristic = False
retraction_speed = 40.0
raft_surface_line_width = 0.4
raft_base_line_width = 1.0
raft_margin = 5.0
adhesion_type = brim
skirt_minimal_length = 150.0
layer_height = 0.06
brim_line_count = 36
infill_before_walls = False
raft_surface_thickness = 0.27
raft_airgap = 0.0
skirt_gap = 3.0
raft_interface_line_width = 0.4
speed_topbottom = 20
support_pattern = lines
layer_height_0 = 0.15
infill_sparse_density = 22
material_flow = 100.0
cool_fan_speed_min = 100
top_bottom_thickness = 0.72
cool_fan_speed_max = 100
speed_infill = 30
magic_mesh_surface_mode = False
bottom_thickness = 0.72
speed_wall_x = 25
machine_nozzle_size = 0.22
raft_surface_line_spacing = 3.0
support_enable = False

View File

@ -0,0 +1,47 @@
[general]
version = 1
name = Fast Prints
machine_type = ultimaker2plus
machine_variant = 0.4 mm
material = PLA
[settings]
retraction_combing = All
top_thickness = 0.75
speed_print = 40
speed_wall_0 = 40
raft_surface_line_spacing = 3.0
shell_thickness = 0.7
infill_sparse_density = 18
retraction_hop = 0.0
material_bed_temperature = 70
skin_no_small_gaps_heuristic = False
retraction_speed = 40.0
raft_surface_line_width = 0.4
raft_base_line_width = 1.0
raft_margin = 5.0
adhesion_type = brim
skirt_minimal_length = 150.0
layer_height = 0.15
brim_line_count = 22
infill_before_walls = False
raft_surface_thickness = 0.27
raft_airgap = 0.0
infill_overlap = 15
raft_interface_line_width = 0.4
speed_topbottom = 30
support_pattern = lines
layer_height_0 = 0.26
raft_interface_line_spacing = 3.0
material_flow = 100.0
cool_fan_speed_min = 100
cool_fan_speed_max = 100
speed_travel = 150
skirt_gap = 3.0
magic_mesh_surface_mode = False
bottom_thickness = 0.75
speed_wall_x = 50
machine_nozzle_size = 0.35
top_bottom_thickness = 0.75
support_enable = False

View File

@ -0,0 +1,48 @@
[general]
version = 1
name = High Quality
machine_type = ultimaker2plus
machine_variant = 0.4 mm
material = PLA
[settings]
retraction_combing = All
top_thickness = 0.72
speed_layer_0 = 20
speed_print = 30
speed_wall_0 = 30
raft_interface_line_spacing = 3.0
shell_thickness = 1.05
infill_overlap = 15
retraction_hop = 0.0
material_bed_temperature = 70
skin_no_small_gaps_heuristic = False
retraction_speed = 40.0
raft_surface_line_width = 0.4
raft_base_line_width = 1.0
raft_margin = 5.0
adhesion_type = brim
skirt_minimal_length = 150.0
layer_height = 0.06
brim_line_count = 22
infill_before_walls = False
raft_surface_thickness = 0.27
raft_airgap = 0.0
skirt_gap = 3.0
raft_interface_line_width = 0.4
speed_topbottom = 20
support_pattern = lines
layer_height_0 = 0.26
infill_sparse_density = 22
material_flow = 100.0
cool_fan_speed_min = 100
top_bottom_thickness = 0.72
cool_fan_speed_max = 100
speed_infill = 50
magic_mesh_surface_mode = False
bottom_thickness = 0.72
speed_wall_x = 40
machine_nozzle_size = 0.35
raft_surface_line_spacing = 3.0
support_enable = False

View File

@ -0,0 +1,43 @@
[general]
version = 1
name = Normal Quality
machine_type = ultimaker2plus
machine_variant = 0.4 mm
material = PLA
[settings]
retraction_combing = All
shell_thickness = 1.05
speed_print = 30
speed_wall_0 = 30
raft_interface_line_spacing = 3.0
speed_layer_0 = 20
layer_height_0 = 0.26
retraction_hop = 0.0
material_bed_temperature = 70
skirt_gap = 3.0
retraction_speed = 40.0
raft_surface_line_width = 0.4
raft_base_line_width = 1.0
raft_margin = 5.0
adhesion_type = brim
skirt_minimal_length = 150.0
brim_line_count = 22
infill_before_walls = False
raft_surface_thickness = 0.27
raft_airgap = 0.0
infill_overlap = 15
raft_interface_line_width = 0.4
speed_topbottom = 20
support_pattern = lines
speed_infill = 50
material_flow = 100.0
cool_fan_speed_min = 100
cool_fan_speed_max = 100
skin_no_small_gaps_heuristic = False
magic_mesh_surface_mode = False
speed_wall_x = 40
machine_nozzle_size = 0.35
raft_surface_line_spacing = 3.0
support_enable = False

View File

@ -0,0 +1,47 @@
[general]
version = 1
name = Normal Quality
machine_type = ultimaker2plus
machine_variant = 0.6 mm
material = PLA
[settings]
retraction_combing = All
top_thickness = 1.2
speed_layer_0 = 20
speed_print = 25
speed_wall_0 = 25
raft_interface_line_spacing = 3.0
shell_thickness = 1.59
infill_overlap = 15
retraction_hop = 0.0
material_bed_temperature = 70
skin_no_small_gaps_heuristic = False
retraction_speed = 40.0
raft_surface_line_width = 0.4
raft_base_line_width = 1.0
raft_margin = 5.0
adhesion_type = brim
skirt_minimal_length = 150.0
layer_height = 0.15
brim_line_count = 15
infill_before_walls = False
raft_surface_thickness = 0.27
raft_airgap = 0.0
skirt_gap = 3.0
raft_interface_line_width = 0.4
speed_topbottom = 20
support_pattern = lines
layer_height_0 = 0.39
material_flow = 100.0
cool_fan_speed_min = 100
top_bottom_thickness = 1.2
cool_fan_speed_max = 100
speed_infill = 55
magic_mesh_surface_mode = False
bottom_thickness = 1.2
speed_wall_x = 40
machine_nozzle_size = 0.53
raft_surface_line_spacing = 3.0
support_enable = False

View File

@ -0,0 +1,47 @@
[general]
version = 1
name = Fast Prints
machine_type = ultimaker2plus
machine_variant = 0.8 mm
material = PLA
[settings]
retraction_combing = All
top_thickness = 1.2
speed_layer_0 = 20
speed_print = 20
speed_wall_0 = 25
raft_interface_line_spacing = 3.0
shell_thickness = 2.1
infill_overlap = 15
retraction_hop = 0.0
material_bed_temperature = 70
skin_no_small_gaps_heuristic = False
retraction_speed = 40.0
raft_surface_line_width = 0.4
raft_base_line_width = 1.0
raft_margin = 5.0
adhesion_type = brim
skirt_minimal_length = 150.0
layer_height = 0.2
brim_line_count = 11
infill_before_walls = False
raft_surface_thickness = 0.27
raft_airgap = 0.0
skirt_gap = 3.0
raft_interface_line_width = 0.4
speed_topbottom = 20
support_pattern = lines
layer_height_0 = 0.5
material_flow = 100.0
cool_fan_speed_min = 100
top_bottom_thickness = 1.2
cool_fan_speed_max = 100
speed_infill = 40
magic_mesh_surface_mode = False
bottom_thickness = 1.2
speed_wall_x = 30
machine_nozzle_size = 0.7
raft_surface_line_spacing = 3.0
support_enable = False

View File

@ -31,6 +31,7 @@ Item
property alias addMachine: addMachineAction; property alias addMachine: addMachineAction;
property alias configureMachines: settingsAction; property alias configureMachines: settingsAction;
property alias addProfile: addProfileAction;
property alias manageProfiles: manageProfilesAction; property alias manageProfiles: manageProfilesAction;
property alias preferences: preferencesAction; property alias preferences: preferencesAction;
@ -95,6 +96,12 @@ Item
iconName: "configure"; iconName: "configure";
} }
Action
{
id: addProfileAction;
text: catalog.i18nc("@action:inmenu menubar:profile","&Add Profile...");
}
Action Action
{ {
id: manageProfilesAction; id: manageProfilesAction;

View File

@ -92,7 +92,7 @@ UM.MainWindow
text: catalog.i18nc("@action:inmenu menubar:file", "&Save Selection to File"); text: catalog.i18nc("@action:inmenu menubar:file", "&Save Selection to File");
enabled: UM.Selection.hasSelection; enabled: UM.Selection.hasSelection;
iconName: "document-save-as"; iconName: "document-save-as";
onTriggered: UM.OutputDeviceManager.requestWriteSelectionToDevice("local_file", Printer.jobName); onTriggered: UM.OutputDeviceManager.requestWriteSelectionToDevice("local_file", Printer.jobName, false);
} }
Menu Menu
{ {
@ -108,7 +108,7 @@ UM.MainWindow
MenuItem MenuItem
{ {
text: model.description; text: model.description;
onTriggered: UM.OutputDeviceManager.requestWriteToDevice(model.id, Printer.jobName); onTriggered: UM.OutputDeviceManager.requestWriteToDevice(model.id, Printer.jobName, false);
} }
onObjectAdded: saveAllMenu.insertItem(index, object) onObjectAdded: saveAllMenu.insertItem(index, object)
onObjectRemoved: saveAllMenu.removeItem(object) onObjectRemoved: saveAllMenu.removeItem(object)
@ -230,6 +230,7 @@ UM.MainWindow
MenuSeparator { } MenuSeparator { }
MenuItem { action: actions.addProfile; }
MenuItem { action: actions.manageProfiles; } MenuItem { action: actions.manageProfiles; }
} }
@ -461,6 +462,7 @@ UM.MainWindow
addMachineAction: actions.addMachine; addMachineAction: actions.addMachine;
configureMachinesAction: actions.configureMachines; configureMachinesAction: actions.configureMachines;
addProfileAction: actions.addProfile;
manageProfilesAction: actions.manageProfiles; manageProfilesAction: actions.manageProfiles;
} }
@ -473,7 +475,7 @@ UM.MainWindow
height: childrenRect.height; height: childrenRect.height;
Label Label
{ {
text: UM.ActiveTool.properties.Rotation != undefined ? "%1°".arg(UM.ActiveTool.properties.Rotation) : ""; text: UM.ActiveTool.properties.getValue("Rotation") != undefined ? "%1°".arg(UM.ActiveTool.properties.getValue("Rotation")) : "";
} }
visible: UM.ActiveTool.valid && UM.ActiveTool.properties.Rotation != undefined; visible: UM.ActiveTool.valid && UM.ActiveTool.properties.Rotation != undefined;
@ -578,6 +580,7 @@ UM.MainWindow
reloadAll.onTriggered: Printer.reloadAll() reloadAll.onTriggered: Printer.reloadAll()
addMachine.onTriggered: addMachineWizard.visible = true; addMachine.onTriggered: addMachineWizard.visible = true;
addProfile.onTriggered: { UM.MachineManager.createProfile(); preferences.visible = true; preferences.setPage(4); }
preferences.onTriggered: { preferences.visible = true; preferences.setPage(0); } preferences.onTriggered: { preferences.visible = true; preferences.setPage(0); }
configureMachines.onTriggered: { preferences.visible = true; preferences.setPage(3); } configureMachines.onTriggered: { preferences.visible = true; preferences.setPage(3); }
@ -670,7 +673,6 @@ UM.MainWindow
id: addMachineWizard id: addMachineWizard
} }
AboutDialog AboutDialog
{ {
id: aboutDialog id: aboutDialog

View File

@ -59,16 +59,13 @@ UM.PreferencesPage
id: languageList id: languageList
Component.onCompleted: { Component.onCompleted: {
// append({ text: catalog.i18nc("@item:inlistbox", "Bulgarian"), code: "bg" })
// append({ text: catalog.i18nc("@item:inlistbox", "Czech"), code: "cs" })
append({ text: catalog.i18nc("@item:inlistbox", "English"), code: "en" }) append({ text: catalog.i18nc("@item:inlistbox", "English"), code: "en" })
append({ text: catalog.i18nc("@item:inlistbox", "Finnish"), code: "fi" }) append({ text: catalog.i18nc("@item:inlistbox", "Finnish"), code: "fi" })
append({ text: catalog.i18nc("@item:inlistbox", "French"), code: "fr" }) append({ text: catalog.i18nc("@item:inlistbox", "French"), code: "fr" })
append({ text: catalog.i18nc("@item:inlistbox", "German"), code: "de" }) append({ text: catalog.i18nc("@item:inlistbox", "German"), code: "de" })
// append({ text: catalog.i18nc("@item:inlistbox", "Italian"), code: "it" }) append({ text: catalog.i18nc("@item:inlistbox", "Italian"), code: "it" })
append({ text: catalog.i18nc("@item:inlistbox", "Polish"), code: "pl" }) append({ text: catalog.i18nc("@item:inlistbox", "Dutch"), code: "nl" })
// append({ text: catalog.i18nc("@item:inlistbox", "Russian"), code: "ru" }) append({ text: catalog.i18nc("@item:inlistbox", "Spanish"), code: "es" })
// append({ text: catalog.i18nc("@item:inlistbox", "Spanish"), code: "es" })
} }
} }

View File

@ -1,64 +0,0 @@
// Copyright (c) 2015 Ultimaker B.V.
// Cura is released under the terms of the AGPLv3 or higher.
import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Window 2.1
import UM 1.1 as UM
UM.Dialog
{
id: base
//: About dialog title
title: catalog.i18nc("@title:window","Load profile")
width: 400
height: childrenRect.height
Label
{
id: body
//: About dialog application description
text: catalog.i18nc("@label","Selecting this profile overwrites some of your customised settings. Do you want to merge the new settings into your current profile or do you want to load a clean copy of the profile?")
wrapMode: Text.WordWrap
width: parent.width
anchors.top: parent.top
anchors.margins: UM.Theme.sizes.default_margin.height
UM.I18nCatalog { id: catalog; name: "cura"; }
}
Label
{
id: show_details
//: About dialog application author note
text: catalog.i18nc("@label","Show details.")
wrapMode: Text.WordWrap
anchors.top: body.bottom
anchors.topMargin: UM.Theme.sizes.default_margin.height
}
rightButtons: Row
{
spacing: UM.Theme.sizes.default_margin.width
Button
{
text: catalog.i18nc("@action:button","Merge settings");
}
Button
{
text: catalog.i18nc("@action:button","Reset profile");
}
Button
{
text: catalog.i18nc("@action:button","Cancel");
onClicked: base.visible = false;
}
}
}

Some files were not shown because too many files have changed in this diff Show More