mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-06 22:47:29 -06:00
Merge branch 'master' into python_type_hinting
This commit is contained in:
commit
fb70eb6813
124 changed files with 65675 additions and 49200 deletions
|
@ -10,6 +10,7 @@ set(URANIUM_SCRIPTS_DIR "${CMAKE_SOURCE_DIR}/../uranium/scripts" CACHE DIRECTORY
|
||||||
add_custom_target(tests)
|
add_custom_target(tests)
|
||||||
add_custom_command(TARGET tests POST_BUILD COMMAND "PYTHONPATH=${CMAKE_SOURCE_DIR}/../Uranium/:${CMAKE_SOURCE_DIR}" ${PYTHON_EXECUTABLE} -m pytest -r a --junitxml=${CMAKE_BINARY_DIR}/junit.xml ${CMAKE_SOURCE_DIR} || exit 0)
|
add_custom_command(TARGET tests POST_BUILD COMMAND "PYTHONPATH=${CMAKE_SOURCE_DIR}/../Uranium/:${CMAKE_SOURCE_DIR}" ${PYTHON_EXECUTABLE} -m pytest -r a --junitxml=${CMAKE_BINARY_DIR}/junit.xml ${CMAKE_SOURCE_DIR} || exit 0)
|
||||||
|
|
||||||
|
option(CURA_DEBUGMODE "Enable debug dialog and other debug features" OFF)
|
||||||
|
|
||||||
set(CURA_VERSION "master" CACHE STRING "Version name of Cura")
|
set(CURA_VERSION "master" CACHE STRING "Version name of Cura")
|
||||||
set(CURA_BUILDTYPE "" CACHE STRING "Build type of Cura, eg. 'PPA'")
|
set(CURA_BUILDTYPE "" CACHE STRING "Build type of Cura, eg. 'PPA'")
|
||||||
|
|
9
cura/BlockSlicingDecorator.py
Normal file
9
cura/BlockSlicingDecorator.py
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
from UM.Scene.SceneNodeDecorator import SceneNodeDecorator
|
||||||
|
|
||||||
|
|
||||||
|
class BlockSlicingDecorator(SceneNodeDecorator):
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
|
def isBlockSlicing(self):
|
||||||
|
return True
|
|
@ -223,7 +223,7 @@ class BuildVolume(SceneNode):
|
||||||
scale_matrix = Matrix()
|
scale_matrix = Matrix()
|
||||||
if self._width != 0:
|
if self._width != 0:
|
||||||
# Scale circular meshes by aspect ratio if width != height
|
# Scale circular meshes by aspect ratio if width != height
|
||||||
aspect = self._height / self._width
|
aspect = self._depth / self._width
|
||||||
scale_matrix.compose(scale = Vector(1, 1, aspect))
|
scale_matrix.compose(scale = Vector(1, 1, aspect))
|
||||||
mb = MeshBuilder()
|
mb = MeshBuilder()
|
||||||
mb.addArc(max_w, Vector.Unit_Y, center = (0, min_h - z_fight_distance, 0), color = self.VolumeOutlineColor)
|
mb.addArc(max_w, Vector.Unit_Y, center = (0, min_h - z_fight_distance, 0), color = self.VolumeOutlineColor)
|
||||||
|
@ -283,6 +283,9 @@ class BuildVolume(SceneNode):
|
||||||
color = Color(0.0, 0.0, 0.0, 0.15)
|
color = Color(0.0, 0.0, 0.0, 0.15)
|
||||||
for polygon in self._disallowed_areas:
|
for polygon in self._disallowed_areas:
|
||||||
points = polygon.getPoints()
|
points = polygon.getPoints()
|
||||||
|
if len(points) == 0:
|
||||||
|
continue
|
||||||
|
|
||||||
first = Vector(self._clamp(points[0][0], min_w, max_w), disallowed_area_height, self._clamp(points[0][1], min_d, max_d))
|
first = Vector(self._clamp(points[0][0], min_w, max_w), disallowed_area_height, self._clamp(points[0][1], min_d, max_d))
|
||||||
previous_point = Vector(self._clamp(points[0][0], min_w, max_w), disallowed_area_height, self._clamp(points[0][1], min_d, max_d))
|
previous_point = Vector(self._clamp(points[0][0], min_w, max_w), disallowed_area_height, self._clamp(points[0][1], min_d, max_d))
|
||||||
for point in points:
|
for point in points:
|
||||||
|
@ -533,8 +536,11 @@ class BuildVolume(SceneNode):
|
||||||
prime_tower_size = self._global_container_stack.getProperty("prime_tower_size", "value")
|
prime_tower_size = self._global_container_stack.getProperty("prime_tower_size", "value")
|
||||||
machine_width = self._global_container_stack.getProperty("machine_width", "value")
|
machine_width = self._global_container_stack.getProperty("machine_width", "value")
|
||||||
machine_depth = self._global_container_stack.getProperty("machine_depth", "value")
|
machine_depth = self._global_container_stack.getProperty("machine_depth", "value")
|
||||||
prime_tower_x = self._global_container_stack.getProperty("prime_tower_position_x", "value") - machine_width / 2 #Offset by half machine_width and _depth to put the origin in the front-left.
|
prime_tower_x = self._global_container_stack.getProperty("prime_tower_position_x", "value")
|
||||||
prime_tower_y = - self._global_container_stack.getProperty("prime_tower_position_y", "value") + machine_depth / 2
|
prime_tower_y = - self._global_container_stack.getProperty("prime_tower_position_y", "value")
|
||||||
|
if not self._global_container_stack.getProperty("machine_center_is_zero", "value"):
|
||||||
|
prime_tower_x = prime_tower_x - machine_width / 2 #Offset by half machine_width and _depth to put the origin in the front-left.
|
||||||
|
prime_tower_y = prime_tower_y + machine_depth / 2
|
||||||
|
|
||||||
prime_tower_area = Polygon([
|
prime_tower_area = Polygon([
|
||||||
[prime_tower_x - prime_tower_size, prime_tower_y - prime_tower_size],
|
[prime_tower_x - prime_tower_size, prime_tower_y - prime_tower_size],
|
||||||
|
@ -565,8 +571,17 @@ class BuildVolume(SceneNode):
|
||||||
machine_width = self._global_container_stack.getProperty("machine_width", "value")
|
machine_width = self._global_container_stack.getProperty("machine_width", "value")
|
||||||
machine_depth = self._global_container_stack.getProperty("machine_depth", "value")
|
machine_depth = self._global_container_stack.getProperty("machine_depth", "value")
|
||||||
for extruder in used_extruders:
|
for extruder in used_extruders:
|
||||||
prime_x = extruder.getProperty("extruder_prime_pos_x", "value") - machine_width / 2 #Offset by half machine_width and _depth to put the origin in the front-left.
|
prime_x = extruder.getProperty("extruder_prime_pos_x", "value")
|
||||||
prime_y = machine_depth / 2 - extruder.getProperty("extruder_prime_pos_y", "value")
|
prime_y = - extruder.getProperty("extruder_prime_pos_y", "value")
|
||||||
|
|
||||||
|
#Ignore extruder prime position if it is not set
|
||||||
|
if prime_x == 0 and prime_y == 0:
|
||||||
|
result[extruder.getId()] = []
|
||||||
|
continue
|
||||||
|
|
||||||
|
if not self._global_container_stack.getProperty("machine_center_is_zero", "value"):
|
||||||
|
prime_x = prime_x - machine_width / 2 #Offset by half machine_width and _depth to put the origin in the front-left.
|
||||||
|
prime_y = prime_x + machine_depth / 2
|
||||||
|
|
||||||
prime_polygon = Polygon.approximatedCircle(PRIME_CLEARANCE)
|
prime_polygon = Polygon.approximatedCircle(PRIME_CLEARANCE)
|
||||||
prime_polygon = prime_polygon.translate(prime_x, prime_y)
|
prime_polygon = prime_polygon.translate(prime_x, prime_y)
|
||||||
|
@ -716,7 +731,12 @@ class BuildVolume(SceneNode):
|
||||||
#
|
#
|
||||||
# \return A sequence of setting values, one for each extruder.
|
# \return A sequence of setting values, one for each extruder.
|
||||||
def _getSettingFromAllExtruders(self, setting_key, property = "value"):
|
def _getSettingFromAllExtruders(self, setting_key, property = "value"):
|
||||||
return ExtruderManager.getInstance().getAllExtruderSettings(setting_key, property)
|
all_values = ExtruderManager.getInstance().getAllExtruderSettings(setting_key, property)
|
||||||
|
all_types = ExtruderManager.getInstance().getAllExtruderSettings(setting_key, "type")
|
||||||
|
for i in range(len(all_values)):
|
||||||
|
if not all_values[i] and (all_types[i] == "int" or all_types[i] == "float"):
|
||||||
|
all_values[i] = 0
|
||||||
|
return all_values
|
||||||
|
|
||||||
## Private convenience function to get a setting from the support infill
|
## Private convenience function to get a setting from the support infill
|
||||||
# extruder.
|
# extruder.
|
||||||
|
@ -740,16 +760,21 @@ class BuildVolume(SceneNode):
|
||||||
multi_extrusion = self._global_container_stack.getProperty("machine_extruder_count", "value") > 1
|
multi_extrusion = self._global_container_stack.getProperty("machine_extruder_count", "value") > 1
|
||||||
|
|
||||||
if not multi_extrusion:
|
if not multi_extrusion:
|
||||||
return self._global_container_stack.getProperty(setting_key, property)
|
stack = self._global_container_stack
|
||||||
|
else:
|
||||||
|
extruder_index = self._global_container_stack.getProperty(extruder_setting_key, "value")
|
||||||
|
|
||||||
extruder_index = self._global_container_stack.getProperty(extruder_setting_key, "value")
|
if extruder_index == "-1": # If extruder index is -1 use global instead
|
||||||
|
stack = self._global_container_stack
|
||||||
|
else:
|
||||||
|
extruder_stack_id = ExtruderManager.getInstance().extruderIds[str(extruder_index)]
|
||||||
|
stack = ContainerRegistry.getInstance().findContainerStacks(id = extruder_stack_id)[0]
|
||||||
|
|
||||||
if extruder_index == "-1": # If extruder index is -1 use global instead
|
value = stack.getProperty(setting_key, property)
|
||||||
return self._global_container_stack.getProperty(setting_key, property)
|
setting_type = stack.getProperty(setting_key, "type")
|
||||||
|
if not value and (setting_type == "int" or setting_type == "float"):
|
||||||
extruder_stack_id = ExtruderManager.getInstance().extruderIds[str(extruder_index)]
|
return 0
|
||||||
stack = ContainerRegistry.getInstance().findContainerStacks(id = extruder_stack_id)[0]
|
return value
|
||||||
return stack.getProperty(setting_key, property)
|
|
||||||
|
|
||||||
## Convenience function to calculate the disallowed radius around the edge.
|
## Convenience function to calculate the disallowed radius around the edge.
|
||||||
#
|
#
|
||||||
|
@ -825,4 +850,4 @@ class BuildVolume(SceneNode):
|
||||||
_tower_settings = ["prime_tower_enable", "prime_tower_size", "prime_tower_position_x", "prime_tower_position_y"]
|
_tower_settings = ["prime_tower_enable", "prime_tower_size", "prime_tower_position_x", "prime_tower_position_y"]
|
||||||
_ooze_shield_settings = ["ooze_shield_enabled", "ooze_shield_dist"]
|
_ooze_shield_settings = ["ooze_shield_enabled", "ooze_shield_dist"]
|
||||||
_distance_settings = ["infill_wipe_dist", "travel_avoid_distance", "support_offset", "support_enable", "travel_avoid_other_parts"]
|
_distance_settings = ["infill_wipe_dist", "travel_avoid_distance", "support_offset", "support_enable", "travel_avoid_other_parts"]
|
||||||
_extruder_settings = ["support_enable", "support_interface_enable", "support_infill_extruder_nr", "support_extruder_nr_layer_0", "support_interface_extruder_nr", "brim_line_count", "adhesion_extruder_nr", "adhesion_type"] #Settings that can affect which extruders are used.
|
_extruder_settings = ["support_enable", "support_interface_enable", "support_infill_extruder_nr", "support_extruder_nr_layer_0", "support_interface_extruder_nr", "brim_line_count", "adhesion_extruder_nr", "adhesion_type"] #Settings that can affect which extruders are used.
|
||||||
|
|
|
@ -12,6 +12,11 @@ from UM.Logger import Logger
|
||||||
from UM.i18n import i18nCatalog
|
from UM.i18n import i18nCatalog
|
||||||
catalog = i18nCatalog("cura")
|
catalog = i18nCatalog("cura")
|
||||||
|
|
||||||
|
try:
|
||||||
|
from cura.CuraVersion import CuraDebugMode
|
||||||
|
except ImportError:
|
||||||
|
CuraDebugMode = False # [CodeStyle: Reflecting imported value]
|
||||||
|
|
||||||
# List of exceptions that should be considered "fatal" and abort the program.
|
# List of exceptions that should be considered "fatal" and abort the program.
|
||||||
# These are primarily some exception types that we simply cannot really recover from
|
# These are primarily some exception types that we simply cannot really recover from
|
||||||
# (MemoryError and SystemError) and exceptions that indicate grave errors in the
|
# (MemoryError and SystemError) and exceptions that indicate grave errors in the
|
||||||
|
@ -24,21 +29,18 @@ fatal_exception_types = [
|
||||||
]
|
]
|
||||||
|
|
||||||
def show(exception_type, value, tb):
|
def show(exception_type, value, tb):
|
||||||
debug_mode = True
|
|
||||||
|
|
||||||
Logger.log("c", "An uncaught exception has occurred!")
|
Logger.log("c", "An uncaught exception has occurred!")
|
||||||
for line in traceback.format_exception(exception_type, value, tb):
|
for line in traceback.format_exception(exception_type, value, tb):
|
||||||
for part in line.rstrip("\n").split("\n"):
|
for part in line.rstrip("\n").split("\n"):
|
||||||
Logger.log("c", part)
|
Logger.log("c", part)
|
||||||
|
|
||||||
if not debug_mode and exception_type not in fatal_exception_types:
|
if not CuraDebugMode and exception_type not in fatal_exception_types:
|
||||||
return
|
return
|
||||||
|
|
||||||
application = QCoreApplication.instance()
|
application = QCoreApplication.instance()
|
||||||
if not application:
|
if not application:
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
dialog = QDialog()
|
dialog = QDialog()
|
||||||
dialog.setMinimumWidth(640)
|
dialog.setMinimumWidth(640)
|
||||||
dialog.setMinimumHeight(640)
|
dialog.setMinimumHeight(640)
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
from PyQt5.QtCore import QObject, pyqtSlot, QUrl
|
from PyQt5.QtCore import QObject, QUrl
|
||||||
from PyQt5.QtGui import QDesktopServices
|
from PyQt5.QtGui import QDesktopServices
|
||||||
|
from UM.FlameProfiler import pyqtSlot
|
||||||
|
|
||||||
from UM.Event import CallFunctionEvent
|
from UM.Event import CallFunctionEvent
|
||||||
from UM.Application import Application
|
from UM.Application import Application
|
||||||
|
|
|
@ -19,13 +19,16 @@ from UM.SaveFile import SaveFile
|
||||||
from UM.Scene.Selection import Selection
|
from UM.Scene.Selection import Selection
|
||||||
from UM.Scene.GroupDecorator import GroupDecorator
|
from UM.Scene.GroupDecorator import GroupDecorator
|
||||||
from UM.Settings.Validator import Validator
|
from UM.Settings.Validator import Validator
|
||||||
|
from UM.Message import Message
|
||||||
|
from UM.i18n import i18nCatalog
|
||||||
|
|
||||||
from UM.Operations.AddSceneNodeOperation import AddSceneNodeOperation
|
from UM.Operations.AddSceneNodeOperation import AddSceneNodeOperation
|
||||||
from UM.Operations.RemoveSceneNodeOperation import RemoveSceneNodeOperation
|
from UM.Operations.RemoveSceneNodeOperation import RemoveSceneNodeOperation
|
||||||
from UM.Operations.GroupedOperation import GroupedOperation
|
from UM.Operations.GroupedOperation import GroupedOperation
|
||||||
from UM.Operations.SetTransformOperation import SetTransformOperation
|
from UM.Operations.SetTransformOperation import SetTransformOperation
|
||||||
from UM.Operations.TranslateOperation import TranslateOperation
|
|
||||||
from cura.SetParentOperation import SetParentOperation
|
from cura.SetParentOperation import SetParentOperation
|
||||||
|
from cura.SliceableObjectDecorator import SliceableObjectDecorator
|
||||||
|
from cura.BlockSlicingDecorator import BlockSlicingDecorator
|
||||||
|
|
||||||
from UM.Settings.SettingDefinition import SettingDefinition, DefinitionPropertyType
|
from UM.Settings.SettingDefinition import SettingDefinition, DefinitionPropertyType
|
||||||
from UM.Settings.ContainerRegistry import ContainerRegistry
|
from UM.Settings.ContainerRegistry import ContainerRegistry
|
||||||
|
@ -34,8 +37,6 @@ from cura.Settings.MachineNameValidator import MachineNameValidator
|
||||||
from cura.Settings.ProfilesModel import ProfilesModel
|
from cura.Settings.ProfilesModel import ProfilesModel
|
||||||
from cura.Settings.QualityAndUserProfilesModel import QualityAndUserProfilesModel
|
from cura.Settings.QualityAndUserProfilesModel import QualityAndUserProfilesModel
|
||||||
from cura.Settings.SettingInheritanceManager import SettingInheritanceManager
|
from cura.Settings.SettingInheritanceManager import SettingInheritanceManager
|
||||||
|
|
||||||
from UM.i18n import i18nCatalog
|
|
||||||
from cura.Settings.UserProfilesModel import UserProfilesModel
|
from cura.Settings.UserProfilesModel import UserProfilesModel
|
||||||
|
|
||||||
from . import PlatformPhysics
|
from . import PlatformPhysics
|
||||||
|
@ -57,7 +58,8 @@ from cura.Settings.MaterialSettingsVisibilityHandler import MaterialSettingsVisi
|
||||||
from cura.Settings.QualitySettingsModel import QualitySettingsModel
|
from cura.Settings.QualitySettingsModel import QualitySettingsModel
|
||||||
from cura.Settings.ContainerManager import ContainerManager
|
from cura.Settings.ContainerManager import ContainerManager
|
||||||
|
|
||||||
from PyQt5.QtCore import pyqtSlot, QUrl, pyqtSignal, pyqtProperty, QEvent, Q_ENUMS
|
from PyQt5.QtCore import QUrl, pyqtSignal, pyqtProperty, QEvent, Q_ENUMS
|
||||||
|
from UM.FlameProfiler import pyqtSlot
|
||||||
from PyQt5.QtGui import QColor, QIcon
|
from PyQt5.QtGui import QColor, QIcon
|
||||||
from PyQt5.QtWidgets import QMessageBox
|
from PyQt5.QtWidgets import QMessageBox
|
||||||
from PyQt5.QtQml import qmlRegisterUncreatableType, qmlRegisterSingletonType, qmlRegisterType
|
from PyQt5.QtQml import qmlRegisterUncreatableType, qmlRegisterSingletonType, qmlRegisterType
|
||||||
|
@ -151,6 +153,9 @@ class CuraApplication(QtApplication):
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
self._currently_loading_files = []
|
||||||
|
self._non_sliceable_extensions = []
|
||||||
|
|
||||||
self._machine_action_manager = MachineActionManager.MachineActionManager()
|
self._machine_action_manager = MachineActionManager.MachineActionManager()
|
||||||
self._machine_manager = None # This is initialized on demand.
|
self._machine_manager = None # This is initialized on demand.
|
||||||
self._setting_inheritance_manager = None
|
self._setting_inheritance_manager = None
|
||||||
|
@ -228,7 +233,7 @@ class CuraApplication(QtApplication):
|
||||||
Preferences.getInstance().addPreference("cura/recent_files", "")
|
Preferences.getInstance().addPreference("cura/recent_files", "")
|
||||||
Preferences.getInstance().addPreference("cura/categories_expanded", "")
|
Preferences.getInstance().addPreference("cura/categories_expanded", "")
|
||||||
Preferences.getInstance().addPreference("cura/jobname_prefix", True)
|
Preferences.getInstance().addPreference("cura/jobname_prefix", True)
|
||||||
Preferences.getInstance().addPreference("view/center_on_select", True)
|
Preferences.getInstance().addPreference("view/center_on_select", False)
|
||||||
Preferences.getInstance().addPreference("mesh/scale_to_fit", True)
|
Preferences.getInstance().addPreference("mesh/scale_to_fit", True)
|
||||||
Preferences.getInstance().addPreference("mesh/scale_tiny_meshes", True)
|
Preferences.getInstance().addPreference("mesh/scale_tiny_meshes", True)
|
||||||
Preferences.getInstance().addPreference("cura/dialog_on_project_save", True)
|
Preferences.getInstance().addPreference("cura/dialog_on_project_save", True)
|
||||||
|
@ -598,9 +603,12 @@ class CuraApplication(QtApplication):
|
||||||
def updatePlatformActivity(self, node = None):
|
def updatePlatformActivity(self, node = None):
|
||||||
count = 0
|
count = 0
|
||||||
scene_bounding_box = None
|
scene_bounding_box = None
|
||||||
|
is_block_slicing_node = False
|
||||||
for node in DepthFirstIterator(self.getController().getScene().getRoot()):
|
for node in DepthFirstIterator(self.getController().getScene().getRoot()):
|
||||||
if type(node) is not SceneNode or not node.getMeshData():
|
if type(node) is not SceneNode or (not node.getMeshData() and not node.callDecoration("getLayerData")):
|
||||||
continue
|
continue
|
||||||
|
if node.callDecoration("isBlockSlicing"):
|
||||||
|
is_block_slicing_node = True
|
||||||
|
|
||||||
count += 1
|
count += 1
|
||||||
if not scene_bounding_box:
|
if not scene_bounding_box:
|
||||||
|
@ -610,6 +618,10 @@ class CuraApplication(QtApplication):
|
||||||
if other_bb is not None:
|
if other_bb is not None:
|
||||||
scene_bounding_box = scene_bounding_box + node.getBoundingBox()
|
scene_bounding_box = scene_bounding_box + node.getBoundingBox()
|
||||||
|
|
||||||
|
print_information = self.getPrintInformation()
|
||||||
|
if print_information:
|
||||||
|
print_information.setPreSliced(is_block_slicing_node)
|
||||||
|
|
||||||
if not scene_bounding_box:
|
if not scene_bounding_box:
|
||||||
scene_bounding_box = AxisAlignedBox.Null
|
scene_bounding_box = AxisAlignedBox.Null
|
||||||
|
|
||||||
|
@ -730,7 +742,7 @@ class CuraApplication(QtApplication):
|
||||||
for node in DepthFirstIterator(self.getController().getScene().getRoot()):
|
for node in DepthFirstIterator(self.getController().getScene().getRoot()):
|
||||||
if type(node) is not SceneNode:
|
if type(node) is not SceneNode:
|
||||||
continue
|
continue
|
||||||
if not node.getMeshData() and not node.callDecoration("isGroup"):
|
if (not node.getMeshData() and not node.callDecoration("getLayerData")) and not node.callDecoration("isGroup"):
|
||||||
continue # Node that doesnt have a mesh and is not a group.
|
continue # Node that doesnt have a mesh and is not a group.
|
||||||
if node.getParent() and node.getParent().callDecoration("isGroup"):
|
if node.getParent() and node.getParent().callDecoration("isGroup"):
|
||||||
continue # Grouped nodes don't need resetting as their parent (the group) is resetted)
|
continue # Grouped nodes don't need resetting as their parent (the group) is resetted)
|
||||||
|
@ -1025,3 +1037,78 @@ class CuraApplication(QtApplication):
|
||||||
@pyqtSlot(str)
|
@pyqtSlot(str)
|
||||||
def log(self, msg):
|
def log(self, msg):
|
||||||
Logger.log("d", msg)
|
Logger.log("d", msg)
|
||||||
|
|
||||||
|
@pyqtSlot(QUrl)
|
||||||
|
def readLocalFile(self, file):
|
||||||
|
if not file.isValid():
|
||||||
|
return
|
||||||
|
|
||||||
|
scene = self.getController().getScene()
|
||||||
|
|
||||||
|
for node in DepthFirstIterator(scene.getRoot()):
|
||||||
|
if node.callDecoration("isBlockSlicing"):
|
||||||
|
self.deleteAll()
|
||||||
|
break
|
||||||
|
|
||||||
|
f = file.toLocalFile()
|
||||||
|
extension = os.path.splitext(f)[1]
|
||||||
|
filename = os.path.basename(f)
|
||||||
|
if len(self._currently_loading_files) > 0:
|
||||||
|
# If a non-slicable file is already being loaded, we prevent loading of any further non-slicable files
|
||||||
|
if extension.lower() in self._non_sliceable_extensions:
|
||||||
|
message = Message(
|
||||||
|
self._i18n_catalog.i18nc("@info:status",
|
||||||
|
"Only one G-code file can be loaded at a time. Skipped importing {0}",
|
||||||
|
filename))
|
||||||
|
message.show()
|
||||||
|
return
|
||||||
|
# If file being loaded is non-slicable file, then prevent loading of any other files
|
||||||
|
extension = os.path.splitext(self._currently_loading_files[0])[1]
|
||||||
|
if extension.lower() in self._non_sliceable_extensions:
|
||||||
|
message = Message(
|
||||||
|
self._i18n_catalog.i18nc("@info:status",
|
||||||
|
"Can't open any other file if G-code is loading. Skipped importing {0}",
|
||||||
|
filename))
|
||||||
|
message.show()
|
||||||
|
return
|
||||||
|
|
||||||
|
self._currently_loading_files.append(f)
|
||||||
|
if extension in self._non_sliceable_extensions:
|
||||||
|
self.deleteAll()
|
||||||
|
|
||||||
|
job = ReadMeshJob(f)
|
||||||
|
job.finished.connect(self._readMeshFinished)
|
||||||
|
job.start()
|
||||||
|
|
||||||
|
def _readMeshFinished(self, job):
|
||||||
|
nodes = job.getResult()
|
||||||
|
filename = job.getFileName()
|
||||||
|
self._currently_loading_files.remove(filename)
|
||||||
|
|
||||||
|
for node in nodes:
|
||||||
|
node.setSelectable(True)
|
||||||
|
node.setName(os.path.basename(filename))
|
||||||
|
|
||||||
|
extension = os.path.splitext(filename)[1]
|
||||||
|
if extension.lower() in self._non_sliceable_extensions:
|
||||||
|
self.getController().setActiveView("LayerView")
|
||||||
|
view = self.getController().getActiveView()
|
||||||
|
view.resetLayerData()
|
||||||
|
view.setLayer(9999999)
|
||||||
|
view.calculateMaxLayers()
|
||||||
|
|
||||||
|
block_slicing_decorator = BlockSlicingDecorator()
|
||||||
|
node.addDecorator(block_slicing_decorator)
|
||||||
|
else:
|
||||||
|
sliceable_decorator = SliceableObjectDecorator()
|
||||||
|
node.addDecorator(sliceable_decorator)
|
||||||
|
|
||||||
|
scene = self.getController().getScene()
|
||||||
|
|
||||||
|
op = AddSceneNodeOperation(node, scene.getRoot())
|
||||||
|
op.push()
|
||||||
|
|
||||||
|
scene.sceneChanged.emit(node)
|
||||||
|
|
||||||
|
def addNonSliceableExtension(self, extension):
|
||||||
|
self._non_sliceable_extensions.append(extension)
|
||||||
|
|
|
@ -2,4 +2,5 @@
|
||||||
# Cura is released under the terms of the AGPLv3 or higher.
|
# Cura is released under the terms of the AGPLv3 or higher.
|
||||||
|
|
||||||
CuraVersion = "@CURA_VERSION@"
|
CuraVersion = "@CURA_VERSION@"
|
||||||
CuraBuildType = "@CURA_BUILDTYPE@"
|
CuraBuildType = "@CURA_BUILDTYPE@"
|
||||||
|
CuraDebugMode = True if "@CURA_DEBUGMODE@" == "ON" else False
|
||||||
|
|
13
cura/GCodeListDecorator.py
Normal file
13
cura/GCodeListDecorator.py
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
from UM.Scene.SceneNodeDecorator import SceneNodeDecorator
|
||||||
|
|
||||||
|
|
||||||
|
class GCodeListDecorator(SceneNodeDecorator):
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__()
|
||||||
|
self._gcode_list = []
|
||||||
|
|
||||||
|
def getGCodeList(self):
|
||||||
|
return self._gcode_list
|
||||||
|
|
||||||
|
def setGCodeList(self, list):
|
||||||
|
self._gcode_list = list
|
|
@ -6,7 +6,8 @@ from UM.PluginRegistry import PluginRegistry # So MachineAction can be added as
|
||||||
from UM.Settings.ContainerRegistry import ContainerRegistry
|
from UM.Settings.ContainerRegistry import ContainerRegistry
|
||||||
from UM.Settings.DefinitionContainer import DefinitionContainer
|
from UM.Settings.DefinitionContainer import DefinitionContainer
|
||||||
|
|
||||||
from PyQt5.QtCore import QObject, pyqtSlot
|
from PyQt5.QtCore import QObject
|
||||||
|
from UM.FlameProfiler import pyqtSlot
|
||||||
|
|
||||||
## Raised when trying to add an unknown machine action as a required action
|
## Raised when trying to add an unknown machine action as a required action
|
||||||
class UnknownMachineActionError(Exception):
|
class UnknownMachineActionError(Exception):
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
# Copyright (c) 2015 Ultimaker B.V.
|
# Copyright (c) 2015 Ultimaker B.V.
|
||||||
# Cura is released under the terms of the AGPLv3 or higher.
|
# Cura is released under the terms of the AGPLv3 or higher.
|
||||||
|
|
||||||
from PyQt5.QtCore import QObject, pyqtSignal, pyqtProperty, pyqtSlot
|
from PyQt5.QtCore import QObject, pyqtSignal, pyqtProperty
|
||||||
|
from UM.FlameProfiler import pyqtSlot
|
||||||
|
|
||||||
from UM.Application import Application
|
from UM.Application import Application
|
||||||
from UM.Qt.Duration import Duration
|
from UM.Qt.Duration import Duration
|
||||||
|
@ -13,6 +14,9 @@ import math
|
||||||
import os.path
|
import os.path
|
||||||
import unicodedata
|
import unicodedata
|
||||||
|
|
||||||
|
from UM.i18n import i18nCatalog
|
||||||
|
catalog = i18nCatalog("cura")
|
||||||
|
|
||||||
## A class for processing and calculating minimum, current and maximum print time as well as managing the job name
|
## A class for processing and calculating minimum, current and maximum print time as well as managing the job name
|
||||||
#
|
#
|
||||||
# This class contains all the logic relating to calculation and slicing for the
|
# This class contains all the logic relating to calculation and slicing for the
|
||||||
|
@ -49,6 +53,8 @@ class PrintInformation(QObject):
|
||||||
self._material_lengths = []
|
self._material_lengths = []
|
||||||
self._material_weights = []
|
self._material_weights = []
|
||||||
|
|
||||||
|
self._pre_sliced = False
|
||||||
|
|
||||||
self._backend = Application.getInstance().getBackend()
|
self._backend = Application.getInstance().getBackend()
|
||||||
if self._backend:
|
if self._backend:
|
||||||
self._backend.printDurationMessage.connect(self._onPrintDurationMessage)
|
self._backend.printDurationMessage.connect(self._onPrintDurationMessage)
|
||||||
|
@ -61,6 +67,16 @@ class PrintInformation(QObject):
|
||||||
|
|
||||||
currentPrintTimeChanged = pyqtSignal()
|
currentPrintTimeChanged = pyqtSignal()
|
||||||
|
|
||||||
|
preSlicedChanged = pyqtSignal()
|
||||||
|
|
||||||
|
@pyqtProperty(bool, notify=preSlicedChanged)
|
||||||
|
def preSliced(self):
|
||||||
|
return self._pre_sliced
|
||||||
|
|
||||||
|
def setPreSliced(self, pre_sliced):
|
||||||
|
self._pre_sliced = pre_sliced
|
||||||
|
self.preSlicedChanged.emit()
|
||||||
|
|
||||||
@pyqtProperty(Duration, notify = currentPrintTimeChanged)
|
@pyqtProperty(Duration, notify = currentPrintTimeChanged)
|
||||||
def currentPrintTime(self):
|
def currentPrintTime(self):
|
||||||
return self._current_print_time
|
return self._current_print_time
|
||||||
|
@ -122,7 +138,9 @@ class PrintInformation(QObject):
|
||||||
def createJobName(self, base_name):
|
def createJobName(self, base_name):
|
||||||
base_name = self._stripAccents(base_name)
|
base_name = self._stripAccents(base_name)
|
||||||
self._setAbbreviatedMachineName()
|
self._setAbbreviatedMachineName()
|
||||||
if Preferences.getInstance().getValue("cura/jobname_prefix"):
|
if self._pre_sliced:
|
||||||
|
return catalog.i18nc("@label", "Pre-sliced file {0}", base_name)
|
||||||
|
elif Preferences.getInstance().getValue("cura/jobname_prefix"):
|
||||||
return self._abbr_machine + "_" + base_name
|
return self._abbr_machine + "_" + base_name
|
||||||
else:
|
else:
|
||||||
return base_name
|
return base_name
|
||||||
|
@ -150,4 +168,4 @@ class PrintInformation(QObject):
|
||||||
|
|
||||||
## Utility method that strips accents from characters (eg: â -> a)
|
## Utility method that strips accents from characters (eg: â -> a)
|
||||||
def _stripAccents(self, str):
|
def _stripAccents(self, str):
|
||||||
return ''.join(char for char in unicodedata.normalize('NFD', str) if unicodedata.category(char) != 'Mn')
|
return ''.join(char for char in unicodedata.normalize('NFD', str) if unicodedata.category(char) != 'Mn')
|
||||||
|
|
|
@ -224,6 +224,9 @@ class QualityManager:
|
||||||
material_ids = set()
|
material_ids = set()
|
||||||
for material_instance in material_containers:
|
for material_instance in material_containers:
|
||||||
if material_instance is not None:
|
if material_instance is not None:
|
||||||
|
# Add the parent material too.
|
||||||
|
for basic_material in self._getBasicMaterials(material_instance):
|
||||||
|
material_ids.add(basic_material.getId())
|
||||||
material_ids.add(material_instance.getId())
|
material_ids.add(material_instance.getId())
|
||||||
|
|
||||||
containers = ContainerRegistry.getInstance().findInstanceContainers(**criteria)
|
containers = ContainerRegistry.getInstance().findInstanceContainers(**criteria)
|
||||||
|
|
|
@ -4,7 +4,8 @@
|
||||||
import os.path
|
import os.path
|
||||||
import urllib
|
import urllib
|
||||||
|
|
||||||
from PyQt5.QtCore import QObject, pyqtSlot, pyqtProperty, pyqtSignal, QUrl, QVariant
|
from PyQt5.QtCore import QObject, pyqtProperty, pyqtSignal, QUrl, QVariant
|
||||||
|
from UM.FlameProfiler import pyqtSlot
|
||||||
from PyQt5.QtWidgets import QMessageBox
|
from PyQt5.QtWidgets import QMessageBox
|
||||||
|
|
||||||
from UM.PluginRegistry import PluginRegistry
|
from UM.PluginRegistry import PluginRegistry
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
# Copyright (c) 2016 Ultimaker B.V.
|
# Copyright (c) 2016 Ultimaker B.V.
|
||||||
# Cura is released under the terms of the AGPLv3 or higher.
|
# Cura is released under the terms of the AGPLv3 or higher.
|
||||||
|
|
||||||
from PyQt5.QtCore import pyqtSignal, pyqtProperty, pyqtSlot, QObject, QVariant #For communicating data and events to Qt.
|
from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject, QVariant #For communicating data and events to Qt.
|
||||||
|
from UM.FlameProfiler import pyqtSlot
|
||||||
|
|
||||||
from UM.Application import Application #To get the global container stack to find the current machine.
|
from UM.Application import Application #To get the global container stack to find the current machine.
|
||||||
from UM.Logger import Logger
|
from UM.Logger import Logger
|
||||||
|
@ -355,8 +356,11 @@ class ExtruderManager(QObject):
|
||||||
#The platform adhesion extruder. Not used if using none.
|
#The platform adhesion extruder. Not used if using none.
|
||||||
if global_stack.getProperty("adhesion_type", "value") != "none":
|
if global_stack.getProperty("adhesion_type", "value") != "none":
|
||||||
used_extruder_stack_ids.add(self.extruderIds[str(global_stack.getProperty("adhesion_extruder_nr", "value"))])
|
used_extruder_stack_ids.add(self.extruderIds[str(global_stack.getProperty("adhesion_extruder_nr", "value"))])
|
||||||
|
try:
|
||||||
return [container_registry.findContainerStacks(id = stack_id)[0] for stack_id in used_extruder_stack_ids]
|
return [container_registry.findContainerStacks(id = stack_id)[0] for stack_id in used_extruder_stack_ids]
|
||||||
|
except IndexError: # One or more of the extruders was not found.
|
||||||
|
Logger.log("e", "Unable to find one or more of the extruders in %s", used_extruder_stack_ids)
|
||||||
|
return []
|
||||||
|
|
||||||
## Removes the container stack and user profile for the extruders for a specific machine.
|
## Removes the container stack and user profile for the extruders for a specific machine.
|
||||||
#
|
#
|
||||||
|
@ -395,7 +399,12 @@ class ExtruderManager(QObject):
|
||||||
# \return \type{List[ContainerStack]} a list of
|
# \return \type{List[ContainerStack]} a list of
|
||||||
def getActiveExtruderStacks(self):
|
def getActiveExtruderStacks(self):
|
||||||
global_stack = Application.getInstance().getGlobalContainerStack()
|
global_stack = Application.getInstance().getGlobalContainerStack()
|
||||||
return list(self._extruder_trains[global_stack.getId()].values()) if global_stack else []
|
|
||||||
|
result = []
|
||||||
|
if global_stack:
|
||||||
|
for extruder in sorted(self._extruder_trains[global_stack.getId()]):
|
||||||
|
result.append(self._extruder_trains[global_stack.getId()][extruder])
|
||||||
|
return result
|
||||||
|
|
||||||
def __globalContainerStackChanged(self) -> None:
|
def __globalContainerStackChanged(self) -> None:
|
||||||
self._addCurrentMachineExtruders()
|
self._addCurrentMachineExtruders()
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
# Cura is released under the terms of the AGPLv3 or higher.
|
# Cura is released under the terms of the AGPLv3 or higher.
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
from PyQt5.QtCore import QObject, pyqtSlot, pyqtProperty, pyqtSignal
|
from PyQt5.QtCore import QObject, pyqtProperty, pyqtSignal
|
||||||
|
from UM.FlameProfiler import pyqtSlot
|
||||||
from PyQt5.QtWidgets import QMessageBox
|
from PyQt5.QtWidgets import QMessageBox
|
||||||
from UM import Util
|
from UM import Util
|
||||||
|
|
||||||
|
@ -419,6 +420,17 @@ class MachineManager(QObject):
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@pyqtProperty(int, notify = activeStackValueChanged)
|
||||||
|
def numUserSettings(self):
|
||||||
|
if not self._global_container_stack:
|
||||||
|
return 0
|
||||||
|
num_user_settings = 0
|
||||||
|
num_user_settings += len(self._global_container_stack.getTop().findInstances())
|
||||||
|
stacks = list(ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId()))
|
||||||
|
for stack in stacks:
|
||||||
|
num_user_settings += len(stack.getTop().findInstances())
|
||||||
|
return num_user_settings
|
||||||
|
|
||||||
## Delete a user setting from the global stack and all extruder stacks.
|
## Delete a user setting from the global stack and all extruder stacks.
|
||||||
# \param key \type{str} the name of the key to delete
|
# \param key \type{str} the name of the key to delete
|
||||||
@pyqtSlot(str)
|
@pyqtSlot(str)
|
||||||
|
@ -494,6 +506,17 @@ class MachineManager(QObject):
|
||||||
|
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
|
@pyqtProperty("QVariantList", notify=activeVariantChanged)
|
||||||
|
def activeVariantNames(self):
|
||||||
|
result = []
|
||||||
|
if ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks() is not None:
|
||||||
|
for stack in ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks():
|
||||||
|
variant_container = stack.findContainer({"type": "variant"})
|
||||||
|
if variant_container and variant_container != self._empty_variant_container:
|
||||||
|
result.append(variant_container.getName())
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
@pyqtProperty("QVariantList", notify = activeMaterialChanged)
|
@pyqtProperty("QVariantList", notify = activeMaterialChanged)
|
||||||
def activeMaterialNames(self):
|
def activeMaterialNames(self):
|
||||||
result = []
|
result = []
|
||||||
|
@ -823,6 +846,8 @@ class MachineManager(QObject):
|
||||||
for stack in stacks:
|
for stack in stacks:
|
||||||
material = stack.findContainer(type="material")
|
material = stack.findContainer(type="material")
|
||||||
quality = quality_manager.findQualityByQualityType(quality_type, global_machine_definition, [material])
|
quality = quality_manager.findQualityByQualityType(quality_type, global_machine_definition, [material])
|
||||||
|
if not quality: #No quality profile is found for this quality type.
|
||||||
|
quality = self._empty_quality_container
|
||||||
result.append({"stack": stack, "quality": quality, "quality_changes": empty_quality_changes})
|
result.append({"stack": stack, "quality": quality, "quality_changes": empty_quality_changes})
|
||||||
|
|
||||||
if extruder_stacks:
|
if extruder_stacks:
|
||||||
|
@ -876,6 +901,8 @@ class MachineManager(QObject):
|
||||||
|
|
||||||
material = stack.findContainer(type="material")
|
material = stack.findContainer(type="material")
|
||||||
quality = quality_manager.findQualityByQualityType(quality_type, global_machine_definition, [material])
|
quality = quality_manager.findQualityByQualityType(quality_type, global_machine_definition, [material])
|
||||||
|
if not quality: #No quality profile found for this quality type.
|
||||||
|
quality = self._empty_quality_container
|
||||||
|
|
||||||
result.append({"stack": stack, "quality": quality, "quality_changes": quality_changes})
|
result.append({"stack": stack, "quality": quality, "quality_changes": quality_changes})
|
||||||
|
|
||||||
|
@ -975,6 +1002,15 @@ class MachineManager(QObject):
|
||||||
|
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
|
@pyqtProperty(str, notify=globalContainerChanged)
|
||||||
|
def activeDefinitionName(self):
|
||||||
|
if self._global_container_stack:
|
||||||
|
definition = self._global_container_stack.getBottom()
|
||||||
|
if definition:
|
||||||
|
return definition.getName()
|
||||||
|
|
||||||
|
return ""
|
||||||
|
|
||||||
## Get the Definition ID to use to select quality profiles for the currently active machine
|
## Get the Definition ID to use to select quality profiles for the currently active machine
|
||||||
# \returns DefinitionID (string) if found, empty string otherwise
|
# \returns DefinitionID (string) if found, empty string otherwise
|
||||||
# \sa getQualityDefinitionId
|
# \sa getQualityDefinitionId
|
||||||
|
|
|
@ -192,6 +192,7 @@ class QualitySettingsModel(UM.Qt.ListModel.ListModel):
|
||||||
profile_value_source = ""
|
profile_value_source = ""
|
||||||
for container in containers:
|
for container in containers:
|
||||||
new_value = container.getProperty(definition.key, "value")
|
new_value = container.getProperty(definition.key, "value")
|
||||||
|
|
||||||
if new_value is not None:
|
if new_value is not None:
|
||||||
profile_value_source = container.getMetaDataEntry("type")
|
profile_value_source = container.getMetaDataEntry("type")
|
||||||
profile_value = new_value
|
profile_value = new_value
|
||||||
|
@ -199,7 +200,7 @@ class QualitySettingsModel(UM.Qt.ListModel.ListModel):
|
||||||
# Global tab should use resolve (if there is one)
|
# Global tab should use resolve (if there is one)
|
||||||
if not self._extruder_id:
|
if not self._extruder_id:
|
||||||
resolve_value = global_container_stack.getProperty(definition.key, "resolve")
|
resolve_value = global_container_stack.getProperty(definition.key, "resolve")
|
||||||
if resolve_value is not None and profile_value is not None:
|
if resolve_value is not None and profile_value is not None and profile_value_source != "quality_changes":
|
||||||
profile_value = resolve_value
|
profile_value = resolve_value
|
||||||
|
|
||||||
user_value = None
|
user_value = None
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
# Copyright (c) 2016 Ultimaker B.V.
|
# Copyright (c) 2016 Ultimaker B.V.
|
||||||
# Cura is released under the terms of the AGPLv3 or higher.
|
# Cura is released under the terms of the AGPLv3 or higher.
|
||||||
|
|
||||||
from PyQt5.QtCore import QObject, pyqtSlot, pyqtProperty, pyqtSignal
|
from PyQt5.QtCore import QObject, pyqtProperty, pyqtSignal
|
||||||
|
from UM.FlameProfiler import pyqtSlot
|
||||||
from UM.Application import Application
|
from UM.Application import Application
|
||||||
from UM.Logger import Logger
|
from UM.Logger import Logger
|
||||||
|
|
||||||
|
@ -36,7 +37,8 @@ class SettingInheritanceManager(QObject):
|
||||||
def getChildrenKeysWithOverride(self, key):
|
def getChildrenKeysWithOverride(self, key):
|
||||||
definitions = self._global_container_stack.getBottom().findDefinitions(key=key)
|
definitions = self._global_container_stack.getBottom().findDefinitions(key=key)
|
||||||
if not definitions:
|
if not definitions:
|
||||||
return
|
Logger.log("w", "Could not find definition for key [%s]", key)
|
||||||
|
return []
|
||||||
result = []
|
result = []
|
||||||
for key in definitions[0].getAllKeys():
|
for key in definitions[0].getAllKeys():
|
||||||
if key in self._settings_with_inheritance_warning:
|
if key in self._settings_with_inheritance_warning:
|
||||||
|
@ -55,7 +57,8 @@ class SettingInheritanceManager(QObject):
|
||||||
|
|
||||||
definitions = self._global_container_stack.getBottom().findDefinitions(key=key)
|
definitions = self._global_container_stack.getBottom().findDefinitions(key=key)
|
||||||
if not definitions:
|
if not definitions:
|
||||||
return
|
Logger.log("w", "Could not find definition for key [%s] (2)", key)
|
||||||
|
return []
|
||||||
result = []
|
result = []
|
||||||
for key in definitions[0].getAllKeys():
|
for key in definitions[0].getAllKeys():
|
||||||
if self._settingIsOverwritingInheritance(key, extruder):
|
if self._settingIsOverwritingInheritance(key, extruder):
|
||||||
|
|
12
cura/SliceableObjectDecorator.py
Normal file
12
cura/SliceableObjectDecorator.py
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
from UM.Scene.SceneNodeDecorator import SceneNodeDecorator
|
||||||
|
|
||||||
|
|
||||||
|
class SliceableObjectDecorator(SceneNodeDecorator):
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
|
def isSliceable(self):
|
||||||
|
return True
|
||||||
|
|
||||||
|
def __deepcopy__(self, memo):
|
||||||
|
return type(self)()
|
35
docs/How_to_use_the_flame_graph_profiler.md
Normal file
35
docs/How_to_use_the_flame_graph_profiler.md
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
|
||||||
|
How to Profile Cura and See What It is Doing
|
||||||
|
============================================
|
||||||
|
Cura has a simple flame graph profiler available as a plugin which can be used to see what Cura is doing as it runs and how much time it takes. A flame graph profile shows its output as a timeline and stacks of "blocks" which represent parts of the code and are stacked up to show call depth. These often form little peaks which look like flames. It is a simple yet powerful way to visualise the activity of a program.
|
||||||
|
|
||||||
|
|
||||||
|
Setting up and installing the profiler
|
||||||
|
--------------------------------------
|
||||||
|
|
||||||
|
The profiler plugin is kept outside of the Cura source code here: https://github.com/sedwards2009/cura-big-flame-graph
|
||||||
|
|
||||||
|
To install it do:
|
||||||
|
|
||||||
|
* Use `git clone https://github.com/sedwards2009/cura-big-flame-graph.git` to grab a copy of the code.
|
||||||
|
* Copy the `BigFlameGraph` directory into the `plugins` directory in your local Cura.
|
||||||
|
* Set the `URANIUM_FLAME_PROFILER` environment variable to something before starting Cura. This flags to the profiler code in Cura to activate and insert the needed hooks into the code.
|
||||||
|
|
||||||
|
|
||||||
|
Using the profiler
|
||||||
|
------------------
|
||||||
|
To open the profiler go to the Extensions menu and select "Start BFG" from the "Big Flame Graph" menu. A page will open up in your default browser. This is the profiler UI. Click on "Record" to start recording, go to Cura and perform an action and then back in the profiler click on "Stop". The results should now load in.
|
||||||
|
|
||||||
|
The time scale is at the top of the window. The blocks should be read as meaning the blocks at the bottom call the blocks which are stacked on top of them. Hover the mouse to get more detailed information about a block such as the name of the code involved and its duration. Use the zoom buttons or mouse wheel to zoom in. The display can be panned by dragging with the left mouse button.
|
||||||
|
|
||||||
|
|
||||||
|
What the Profiler Sees
|
||||||
|
----------------------
|
||||||
|
The profiler doesn't capture every function call in Cura. It hooks into a number of important systems which give a good picture of activity without too much run time overhead. The most important system is Uranium's signal mechanism and PyQt5 slots. Functions which are called via the signal mechanism are recorded and thier names appear in the results. PyQt5 slots appear in the results with the prefix `[SLOT]`.
|
||||||
|
|
||||||
|
Note that not all slots are captured. Only those slots which belong to classes which use the `pyqtSlot` decorator from the `UM.FlameProfiler` module.
|
||||||
|
|
||||||
|
|
||||||
|
Manually adding profiling code to more detail
|
||||||
|
---------------------------------------------
|
||||||
|
It is also possible to manually add decorators to methods to make them appear in the profiler results. The `UM.FlameProfiler` module contains the `profile` decorator which can be applied to methods. There is also a `profileCall` context manager which can be used with Python's `with` statement to measure a block of code. `profileCall` takes one argument, a label to use in the results.
|
|
@ -1,21 +1,21 @@
|
||||||
# Copyright (c) 2015 Ultimaker B.V.
|
# Copyright (c) 2015 Ultimaker B.V.
|
||||||
# Cura is released under the terms of the AGPLv3 or higher.
|
# Cura is released under the terms of the AGPLv3 or higher.
|
||||||
|
|
||||||
from UM.Mesh.MeshReader import MeshReader
|
import os.path
|
||||||
from UM.Mesh.MeshBuilder import MeshBuilder
|
import zipfile
|
||||||
|
|
||||||
|
from UM.Job import Job
|
||||||
from UM.Logger import Logger
|
from UM.Logger import Logger
|
||||||
from UM.Math.Matrix import Matrix
|
from UM.Math.Matrix import Matrix
|
||||||
from UM.Math.Vector import Vector
|
from UM.Math.Vector import Vector
|
||||||
from UM.Scene.SceneNode import SceneNode
|
from UM.Mesh.MeshBuilder import MeshBuilder
|
||||||
|
from UM.Mesh.MeshReader import MeshReader
|
||||||
from UM.Scene.GroupDecorator import GroupDecorator
|
from UM.Scene.GroupDecorator import GroupDecorator
|
||||||
from UM.Job import Job
|
|
||||||
from cura.Settings.SettingOverrideDecorator import SettingOverrideDecorator
|
from cura.Settings.SettingOverrideDecorator import SettingOverrideDecorator
|
||||||
from UM.Application import Application
|
from UM.Application import Application
|
||||||
from cura.Settings.ExtruderManager import ExtruderManager
|
from cura.Settings.ExtruderManager import ExtruderManager
|
||||||
from cura.QualityManager import QualityManager
|
from cura.QualityManager import QualityManager
|
||||||
|
from UM.Scene.SceneNode import SceneNode
|
||||||
import os.path
|
|
||||||
import zipfile
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import xml.etree.cElementTree as ET
|
import xml.etree.cElementTree as ET
|
||||||
|
@ -262,4 +262,4 @@ class ThreeMFReader(MeshReader):
|
||||||
Logger.log("w", "Unrecognised unit %s used. Assuming mm instead", unit)
|
Logger.log("w", "Unrecognised unit %s used. Assuming mm instead", unit)
|
||||||
scale = 1
|
scale = 1
|
||||||
|
|
||||||
return Vector(scale, scale, scale)
|
return Vector(scale, scale, scale)
|
||||||
|
|
|
@ -54,7 +54,12 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||||
else:
|
else:
|
||||||
Logger.log("w", "Could not find reader that was able to read the scene data for 3MF workspace")
|
Logger.log("w", "Could not find reader that was able to read the scene data for 3MF workspace")
|
||||||
return WorkspaceReader.PreReadResult.failed
|
return WorkspaceReader.PreReadResult.failed
|
||||||
|
|
||||||
machine_name = ""
|
machine_name = ""
|
||||||
|
machine_type = ""
|
||||||
|
variant_type_name = i18n_catalog.i18nc("@label", "Nozzle")
|
||||||
|
|
||||||
|
num_extruders = 0
|
||||||
# Check if there are any conflicts, so we can ask the user.
|
# Check if there are any conflicts, so we can ask the user.
|
||||||
archive = zipfile.ZipFile(file_name, "r")
|
archive = zipfile.ZipFile(file_name, "r")
|
||||||
cura_file_names = [name for name in archive.namelist() if name.startswith("Cura/")]
|
cura_file_names = [name for name in archive.namelist() if name.startswith("Cura/")]
|
||||||
|
@ -76,6 +81,30 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||||
machine_conflict = True
|
machine_conflict = True
|
||||||
Job.yieldThread()
|
Job.yieldThread()
|
||||||
|
|
||||||
|
definition_container_files = [name for name in cura_file_names if name.endswith(self._definition_container_suffix)]
|
||||||
|
for definition_container_file in definition_container_files:
|
||||||
|
container_id = self._stripFileToId(definition_container_file)
|
||||||
|
definitions = self._container_registry.findDefinitionContainers(id=container_id)
|
||||||
|
|
||||||
|
if not definitions:
|
||||||
|
definition_container = DefinitionContainer(container_id)
|
||||||
|
definition_container.deserialize(archive.open(definition_container_file).read().decode("utf-8"))
|
||||||
|
|
||||||
|
else:
|
||||||
|
definition_container = definitions[0]
|
||||||
|
|
||||||
|
if definition_container.getMetaDataEntry("type") != "extruder":
|
||||||
|
machine_type = definition_container.getName()
|
||||||
|
variant_type_name = definition_container.getMetaDataEntry("variants_name", variant_type_name)
|
||||||
|
else:
|
||||||
|
num_extruders += 1
|
||||||
|
Job.yieldThread()
|
||||||
|
|
||||||
|
if num_extruders == 0:
|
||||||
|
num_extruders = 1 # No extruder stacks found, which means there is one extruder
|
||||||
|
|
||||||
|
extruders = num_extruders * [""]
|
||||||
|
|
||||||
material_labels = []
|
material_labels = []
|
||||||
material_conflict = False
|
material_conflict = False
|
||||||
xml_material_profile = self._getXmlProfileClass()
|
xml_material_profile = self._getXmlProfileClass()
|
||||||
|
@ -95,6 +124,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||||
quality_name = ""
|
quality_name = ""
|
||||||
quality_type = ""
|
quality_type = ""
|
||||||
num_settings_overriden_by_quality_changes = 0 # How many settings are changed by the quality changes
|
num_settings_overriden_by_quality_changes = 0 # How many settings are changed by the quality changes
|
||||||
|
num_user_settings = 0
|
||||||
for instance_container_file in instance_container_files:
|
for instance_container_file in instance_container_files:
|
||||||
container_id = self._stripFileToId(instance_container_file)
|
container_id = self._stripFileToId(instance_container_file)
|
||||||
instance_container = InstanceContainer(container_id)
|
instance_container = InstanceContainer(container_id)
|
||||||
|
@ -117,6 +147,9 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||||
if quality_name == "":
|
if quality_name == "":
|
||||||
quality_name = instance_container.getName()
|
quality_name = instance_container.getName()
|
||||||
quality_type = instance_container.getName()
|
quality_type = instance_container.getName()
|
||||||
|
elif container_type == "user":
|
||||||
|
num_user_settings += len(instance_container._instances)
|
||||||
|
|
||||||
Job.yieldThread()
|
Job.yieldThread()
|
||||||
num_visible_settings = 0
|
num_visible_settings = 0
|
||||||
try:
|
try:
|
||||||
|
@ -142,9 +175,13 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
|
||||||
self._dialog.setQualityName(quality_name)
|
self._dialog.setQualityName(quality_name)
|
||||||
self._dialog.setQualityType(quality_type)
|
self._dialog.setQualityType(quality_type)
|
||||||
self._dialog.setNumSettingsOverridenByQualityChanges(num_settings_overriden_by_quality_changes)
|
self._dialog.setNumSettingsOverridenByQualityChanges(num_settings_overriden_by_quality_changes)
|
||||||
|
self._dialog.setNumUserSettings(num_user_settings)
|
||||||
self._dialog.setActiveMode(active_mode)
|
self._dialog.setActiveMode(active_mode)
|
||||||
self._dialog.setMachineName(machine_name)
|
self._dialog.setMachineName(machine_name)
|
||||||
self._dialog.setMaterialLabels(material_labels)
|
self._dialog.setMaterialLabels(material_labels)
|
||||||
|
self._dialog.setMachineType(machine_type)
|
||||||
|
self._dialog.setExtruders(extruders)
|
||||||
|
self._dialog.setVariantType(variant_type_name)
|
||||||
self._dialog.setHasObjectsOnPlate(Application.getInstance().getPlatformActivity)
|
self._dialog.setHasObjectsOnPlate(Application.getInstance().getPlatformActivity)
|
||||||
self._dialog.show()
|
self._dialog.show()
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
# Copyright (c) 2016 Ultimaker B.V.
|
# Copyright (c) 2016 Ultimaker B.V.
|
||||||
# Cura is released under the terms of the AGPLv3 or higher.
|
# Cura is released under the terms of the AGPLv3 or higher.
|
||||||
|
|
||||||
from PyQt5.QtCore import Qt, QUrl, pyqtSignal, pyqtSlot, QObject, pyqtProperty, QCoreApplication
|
from PyQt5.QtCore import Qt, QUrl, pyqtSignal, QObject, pyqtProperty, QCoreApplication
|
||||||
|
from UM.FlameProfiler import pyqtSlot
|
||||||
from PyQt5.QtQml import QQmlComponent, QQmlContext
|
from PyQt5.QtQml import QQmlComponent, QQmlContext
|
||||||
from UM.PluginRegistry import PluginRegistry
|
from UM.PluginRegistry import PluginRegistry
|
||||||
from UM.Application import Application
|
from UM.Application import Application
|
||||||
|
@ -36,12 +37,16 @@ class WorkspaceDialog(QObject):
|
||||||
self._has_machine_conflict = False
|
self._has_machine_conflict = False
|
||||||
self._has_material_conflict = False
|
self._has_material_conflict = False
|
||||||
self._num_visible_settings = 0
|
self._num_visible_settings = 0
|
||||||
|
self._num_user_settings = 0
|
||||||
self._active_mode = ""
|
self._active_mode = ""
|
||||||
self._quality_name = ""
|
self._quality_name = ""
|
||||||
self._num_settings_overriden_by_quality_changes = 0
|
self._num_settings_overriden_by_quality_changes = 0
|
||||||
self._quality_type = ""
|
self._quality_type = ""
|
||||||
self._machine_name = ""
|
self._machine_name = ""
|
||||||
|
self._machine_type = ""
|
||||||
|
self._variant_type = ""
|
||||||
self._material_labels = []
|
self._material_labels = []
|
||||||
|
self._extruders = []
|
||||||
self._objects_on_plate = False
|
self._objects_on_plate = False
|
||||||
|
|
||||||
machineConflictChanged = pyqtSignal()
|
machineConflictChanged = pyqtSignal()
|
||||||
|
@ -55,6 +60,34 @@ class WorkspaceDialog(QObject):
|
||||||
machineNameChanged = pyqtSignal()
|
machineNameChanged = pyqtSignal()
|
||||||
materialLabelsChanged = pyqtSignal()
|
materialLabelsChanged = pyqtSignal()
|
||||||
objectsOnPlateChanged = pyqtSignal()
|
objectsOnPlateChanged = pyqtSignal()
|
||||||
|
numUserSettingsChanged = pyqtSignal()
|
||||||
|
machineTypeChanged = pyqtSignal()
|
||||||
|
variantTypeChanged = pyqtSignal()
|
||||||
|
extrudersChanged = pyqtSignal()
|
||||||
|
|
||||||
|
@pyqtProperty(str, notify=variantTypeChanged)
|
||||||
|
def variantType(self):
|
||||||
|
return self._variant_type
|
||||||
|
|
||||||
|
def setVariantType(self, variant_type):
|
||||||
|
self._variant_type = variant_type
|
||||||
|
self.variantTypeChanged.emit()
|
||||||
|
|
||||||
|
@pyqtProperty(str, notify=machineTypeChanged)
|
||||||
|
def machineType(self):
|
||||||
|
return self._machine_type
|
||||||
|
|
||||||
|
def setMachineType(self, machine_type):
|
||||||
|
self._machine_type = machine_type
|
||||||
|
self.machineTypeChanged.emit()
|
||||||
|
|
||||||
|
def setNumUserSettings(self, num_user_settings):
|
||||||
|
self._num_user_settings = num_user_settings
|
||||||
|
self.numVisibleSettingsChanged.emit()
|
||||||
|
|
||||||
|
@pyqtProperty(int, notify=numUserSettingsChanged)
|
||||||
|
def numUserSettings(self):
|
||||||
|
return self._num_user_settings
|
||||||
|
|
||||||
@pyqtProperty(bool, notify=objectsOnPlateChanged)
|
@pyqtProperty(bool, notify=objectsOnPlateChanged)
|
||||||
def hasObjectsOnPlate(self):
|
def hasObjectsOnPlate(self):
|
||||||
|
@ -72,6 +105,14 @@ class WorkspaceDialog(QObject):
|
||||||
self._material_labels = material_labels
|
self._material_labels = material_labels
|
||||||
self.materialLabelsChanged.emit()
|
self.materialLabelsChanged.emit()
|
||||||
|
|
||||||
|
@pyqtProperty("QVariantList", notify=extrudersChanged)
|
||||||
|
def extruders(self):
|
||||||
|
return self._extruders
|
||||||
|
|
||||||
|
def setExtruders(self, extruders):
|
||||||
|
self._extruders = extruders
|
||||||
|
self.extrudersChanged.emit()
|
||||||
|
|
||||||
@pyqtProperty(str, notify = machineNameChanged)
|
@pyqtProperty(str, notify = machineNameChanged)
|
||||||
def machineName(self):
|
def machineName(self):
|
||||||
return self._machine_name
|
return self._machine_name
|
||||||
|
@ -144,6 +185,11 @@ class WorkspaceDialog(QObject):
|
||||||
if key in self._result:
|
if key in self._result:
|
||||||
self._result[key] = strategy
|
self._result[key] = strategy
|
||||||
|
|
||||||
|
## Close the backend: otherwise one could end up with "Slicing..."
|
||||||
|
@pyqtSlot()
|
||||||
|
def closeBackend(self):
|
||||||
|
Application.getInstance().getBackend().close()
|
||||||
|
|
||||||
def setMaterialConflict(self, material_conflict):
|
def setMaterialConflict(self, material_conflict):
|
||||||
self._has_material_conflict = material_conflict
|
self._has_material_conflict = material_conflict
|
||||||
self.materialConflictChanged.emit()
|
self.materialConflictChanged.emit()
|
||||||
|
|
|
@ -16,9 +16,9 @@ UM.Dialog
|
||||||
minimumWidth: 550
|
minimumWidth: 550
|
||||||
maximumWidth: 550
|
maximumWidth: 550
|
||||||
|
|
||||||
height: 350
|
height: 400
|
||||||
minimumHeight: 350
|
minimumHeight: 400
|
||||||
maximumHeight: 350
|
maximumHeight: 400
|
||||||
property int comboboxHeight: 15
|
property int comboboxHeight: 15
|
||||||
property int spacerHeight: 10
|
property int spacerHeight: 10
|
||||||
onClosing: manager.notifyClosed()
|
onClosing: manager.notifyClosed()
|
||||||
|
@ -28,12 +28,20 @@ UM.Dialog
|
||||||
{
|
{
|
||||||
machineResolveComboBox.currentIndex = 0
|
machineResolveComboBox.currentIndex = 0
|
||||||
qualityChangesResolveComboBox.currentIndex = 0
|
qualityChangesResolveComboBox.currentIndex = 0
|
||||||
materialConflictComboBox.currentIndex = 0
|
materialResolveComboBox.currentIndex = 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Item
|
Item
|
||||||
{
|
{
|
||||||
anchors.fill: parent
|
anchors.top: parent.top
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.right: parent.right
|
||||||
|
|
||||||
|
anchors.topMargin: 20
|
||||||
|
anchors.bottomMargin: 20
|
||||||
|
anchors.leftMargin:20
|
||||||
|
anchors.rightMargin: 20
|
||||||
|
|
||||||
UM.I18nCatalog
|
UM.I18nCatalog
|
||||||
{
|
{
|
||||||
|
@ -77,27 +85,22 @@ UM.Dialog
|
||||||
width: height
|
width: height
|
||||||
}
|
}
|
||||||
|
|
||||||
Label
|
|
||||||
{
|
|
||||||
text: catalog.i18nc("@action:label", "Printer settings")
|
|
||||||
font.bold: true
|
|
||||||
}
|
|
||||||
|
|
||||||
Row
|
Row
|
||||||
{
|
{
|
||||||
width: parent.width
|
|
||||||
height: childrenRect.height
|
height: childrenRect.height
|
||||||
|
width: parent.width
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: catalog.i18nc("@action:label", "Name")
|
text: catalog.i18nc("@action:label", "Printer settings")
|
||||||
width: parent.width / 3
|
font.bold: true
|
||||||
|
width: parent.width /3
|
||||||
}
|
}
|
||||||
Label
|
Item
|
||||||
{
|
{
|
||||||
text: manager.machineName
|
// spacer
|
||||||
|
height: spacerHeight
|
||||||
width: parent.width / 3
|
width: parent.width / 3
|
||||||
}
|
}
|
||||||
|
|
||||||
UM.TooltipArea
|
UM.TooltipArea
|
||||||
{
|
{
|
||||||
id: machineResolveTooltip
|
id: machineResolveTooltip
|
||||||
|
@ -118,16 +121,20 @@ UM.Dialog
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Item // Spacer
|
Row
|
||||||
{
|
{
|
||||||
height: spacerHeight
|
width: parent.width
|
||||||
width: height
|
height: childrenRect.height
|
||||||
}
|
Label
|
||||||
|
{
|
||||||
Label
|
text: catalog.i18nc("@action:label", "Type")
|
||||||
{
|
width: parent.width / 3
|
||||||
text: catalog.i18nc("@action:label", "Profile settings")
|
}
|
||||||
font.bold: true
|
Label
|
||||||
|
{
|
||||||
|
text: manager.machineType
|
||||||
|
width: parent.width / 3
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Row
|
Row
|
||||||
|
@ -141,10 +148,32 @@ UM.Dialog
|
||||||
}
|
}
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: manager.qualityName
|
text: manager.machineName
|
||||||
width: parent.width / 3
|
width: parent.width / 3
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Item // Spacer
|
||||||
|
{
|
||||||
|
height: spacerHeight
|
||||||
|
width: height
|
||||||
|
}
|
||||||
|
Row
|
||||||
|
{
|
||||||
|
height: childrenRect.height
|
||||||
|
width: parent.width
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: catalog.i18nc("@action:label", "Profile settings")
|
||||||
|
font.bold: true
|
||||||
|
width: parent.width / 3
|
||||||
|
}
|
||||||
|
Item
|
||||||
|
{
|
||||||
|
// spacer
|
||||||
|
height: spacerHeight
|
||||||
|
width: parent.width / 3
|
||||||
|
}
|
||||||
UM.TooltipArea
|
UM.TooltipArea
|
||||||
{
|
{
|
||||||
id: qualityChangesResolveTooltip
|
id: qualityChangesResolveTooltip
|
||||||
|
@ -170,13 +199,44 @@ UM.Dialog
|
||||||
width: parent.width
|
width: parent.width
|
||||||
height: childrenRect.height
|
height: childrenRect.height
|
||||||
Label
|
Label
|
||||||
|
{
|
||||||
|
text: catalog.i18nc("@action:label", "Name")
|
||||||
|
width: parent.width / 3
|
||||||
|
}
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: manager.qualityName
|
||||||
|
width: parent.width / 3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Row
|
||||||
|
{
|
||||||
|
width: parent.width
|
||||||
|
height: manager.numUserSettings != 0 ? childrenRect.height : 0
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: catalog.i18nc("@action:label", "Not in profile")
|
||||||
|
width: parent.width / 3
|
||||||
|
}
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: catalog.i18ncp("@action:label", "%1 override", "%1 overrides", manager.numUserSettings).arg(manager.numUserSettings)
|
||||||
|
width: parent.width / 3
|
||||||
|
}
|
||||||
|
visible: manager.numUserSettings != 0
|
||||||
|
}
|
||||||
|
Row
|
||||||
|
{
|
||||||
|
width: parent.width
|
||||||
|
height: manager.numSettingsOverridenByQualityChanges != 0 ? childrenRect.height : 0
|
||||||
|
Label
|
||||||
{
|
{
|
||||||
text: catalog.i18nc("@action:label", "Derivative from")
|
text: catalog.i18nc("@action:label", "Derivative from")
|
||||||
width: parent.width / 3
|
width: parent.width / 3
|
||||||
}
|
}
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: catalog.i18nc("@action:label", "%1, %2 override(s)" ).arg(manager.qualityType).arg(manager.numSettingsOverridenByQualityChanges)
|
text: catalog.i18ncp("@action:label", "%1, %2 override", "%1, %2 overrides", manager.numSettingsOverridenByQualityChanges).arg(manager.qualityType).arg(manager.numSettingsOverridenByQualityChanges)
|
||||||
width: parent.width / 3
|
width: parent.width / 3
|
||||||
}
|
}
|
||||||
visible: manager.numSettingsOverridenByQualityChanges != 0
|
visible: manager.numSettingsOverridenByQualityChanges != 0
|
||||||
|
@ -186,11 +246,41 @@ UM.Dialog
|
||||||
height: spacerHeight
|
height: spacerHeight
|
||||||
width: height
|
width: height
|
||||||
}
|
}
|
||||||
|
Row
|
||||||
Label
|
|
||||||
{
|
{
|
||||||
text: catalog.i18nc("@action:label", "Material settings")
|
height: childrenRect.height
|
||||||
font.bold: true
|
width: parent.width
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: catalog.i18nc("@action:label", "Material settings")
|
||||||
|
font.bold: true
|
||||||
|
width: parent.width / 3
|
||||||
|
}
|
||||||
|
Item
|
||||||
|
{
|
||||||
|
// spacer
|
||||||
|
height: spacerHeight
|
||||||
|
width: parent.width / 3
|
||||||
|
}
|
||||||
|
UM.TooltipArea
|
||||||
|
{
|
||||||
|
id: materialResolveTooltip
|
||||||
|
width: parent.width / 3
|
||||||
|
height: visible ? comboboxHeight : 0
|
||||||
|
visible: manager.materialConflict
|
||||||
|
text: catalog.i18nc("@info:tooltip", "How should the conflict in the material be resolved?")
|
||||||
|
ComboBox
|
||||||
|
{
|
||||||
|
model: resolveStrategiesModel
|
||||||
|
textRole: "label"
|
||||||
|
id: materialResolveComboBox
|
||||||
|
width: parent.width
|
||||||
|
onActivated:
|
||||||
|
{
|
||||||
|
manager.setResolveStrategy("material", resolveStrategiesModel.get(index).key)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Repeater
|
Repeater
|
||||||
|
@ -213,37 +303,6 @@ UM.Dialog
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Row
|
|
||||||
{
|
|
||||||
width: parent.width
|
|
||||||
height: childrenRect.height
|
|
||||||
visible: manager.materialConflict
|
|
||||||
Item
|
|
||||||
{
|
|
||||||
width: parent.width / 3 * 2
|
|
||||||
height: comboboxHeight
|
|
||||||
}
|
|
||||||
|
|
||||||
UM.TooltipArea
|
|
||||||
{
|
|
||||||
id: materialResolveTooltip
|
|
||||||
width: parent.width / 3
|
|
||||||
height: visible ? comboboxHeight : 0
|
|
||||||
|
|
||||||
text: catalog.i18nc("@info:tooltip", "How should the conflict in the material be resolved?")
|
|
||||||
ComboBox
|
|
||||||
{
|
|
||||||
model: resolveStrategiesModel
|
|
||||||
textRole: "label"
|
|
||||||
id: materialResolveComboBox
|
|
||||||
width: parent.width
|
|
||||||
onActivated:
|
|
||||||
{
|
|
||||||
manager.setResolveStrategy("material", resolveStrategiesModel.get(index).key)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Item // Spacer
|
Item // Spacer
|
||||||
{
|
{
|
||||||
height: spacerHeight
|
height: spacerHeight
|
||||||
|
@ -290,30 +349,47 @@ UM.Dialog
|
||||||
height: spacerHeight
|
height: spacerHeight
|
||||||
width: height
|
width: height
|
||||||
}
|
}
|
||||||
Label
|
Row
|
||||||
{
|
{
|
||||||
text: catalog.i18nc("@action:warning", "Loading a project will clear all models on the buildplate")
|
|
||||||
visible: manager.hasObjectsOnPlate
|
|
||||||
color: "red"
|
|
||||||
width: parent.width
|
width: parent.width
|
||||||
wrapMode: Text.Wrap
|
height: childrenRect.height
|
||||||
|
visible: manager.hasObjectsOnPlate
|
||||||
|
UM.RecolorImage
|
||||||
|
{
|
||||||
|
width: warningLabel.height
|
||||||
|
height: width
|
||||||
|
|
||||||
|
source: UM.Theme.getIcon("notice")
|
||||||
|
color: "black"
|
||||||
|
|
||||||
|
}
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
id: warningLabel
|
||||||
|
text: catalog.i18nc("@action:warning", "Loading a project will clear all models on the buildplate")
|
||||||
|
wrapMode: Text.Wrap
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
rightButtons: [
|
|
||||||
Button
|
|
||||||
{
|
|
||||||
id: ok_button
|
|
||||||
text: catalog.i18nc("@action:button","OK");
|
|
||||||
onClicked: { manager.onOkButtonClicked() }
|
|
||||||
enabled: true
|
|
||||||
},
|
|
||||||
Button
|
Button
|
||||||
{
|
{
|
||||||
id: cancel_button
|
id: cancel_button
|
||||||
text: catalog.i18nc("@action:button","Cancel");
|
text: catalog.i18nc("@action:button","Cancel");
|
||||||
onClicked: { manager.onCancelButtonClicked() }
|
onClicked: { manager.onCancelButtonClicked() }
|
||||||
enabled: true
|
enabled: true
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
anchors.right: ok_button.left
|
||||||
|
anchors.bottomMargin: - 0.5 * height
|
||||||
|
anchors.rightMargin:2
|
||||||
}
|
}
|
||||||
]
|
Button
|
||||||
|
{
|
||||||
|
id: ok_button
|
||||||
|
text: catalog.i18nc("@action:button","Open");
|
||||||
|
onClicked: { manager.closeBackend(); manager.onOkButtonClicked() }
|
||||||
|
anchors.bottomMargin: - 0.5 * height
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
anchors.right: parent.right
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -4,10 +4,16 @@
|
||||||
from . import ThreeMFReader
|
from . import ThreeMFReader
|
||||||
from . import ThreeMFWorkspaceReader
|
from . import ThreeMFWorkspaceReader
|
||||||
from UM.i18n import i18nCatalog
|
from UM.i18n import i18nCatalog
|
||||||
|
import UM.Platform
|
||||||
catalog = i18nCatalog("cura")
|
catalog = i18nCatalog("cura")
|
||||||
|
|
||||||
|
|
||||||
def getMetaData():
|
def getMetaData():
|
||||||
|
# Workarround for osx not supporting double file extensions correclty.
|
||||||
|
if UM.Platform.isOSX():
|
||||||
|
workspace_extension = "3mf"
|
||||||
|
else:
|
||||||
|
workspace_extension = "curaproject.3mf"
|
||||||
return {
|
return {
|
||||||
"plugin": {
|
"plugin": {
|
||||||
"name": catalog.i18nc("@label", "3MF Reader"),
|
"name": catalog.i18nc("@label", "3MF Reader"),
|
||||||
|
@ -25,7 +31,7 @@ def getMetaData():
|
||||||
"workspace_reader":
|
"workspace_reader":
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"extension": "curaproject.3mf",
|
"extension": workspace_extension,
|
||||||
"description": catalog.i18nc("@item:inlistbox", "3MF File")
|
"description": catalog.i18nc("@item:inlistbox", "3MF File")
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,3 +1,128 @@
|
||||||
|
[2.4.0]
|
||||||
|
*Project saving & opening
|
||||||
|
You can now save your build plate configuration - with all your active machine’s meshes and settings. When you reopen the project file, you’ll find that the build plate configuration and all settings will be exactly as you last left them when you saved the project.
|
||||||
|
|
||||||
|
*Setting search
|
||||||
|
You can now search the custom settings directly from the side panel, which means you can easily locate the setting you need to tweak. Thanks to community member Aldo Hoeben & LulzBot for this feature.
|
||||||
|
|
||||||
|
*Editing start g-code and end g-code
|
||||||
|
Aldo Hoeben also added this feature, enabling you to alter both start and end code g-code settings for single extrusion machines.
|
||||||
|
|
||||||
|
*Multiply object function
|
||||||
|
By right-clicking on an object, you can multiply it by a variable amount, rather than duplicating multiple times. Thanks again to Aldo Hoeben for this feature.
|
||||||
|
|
||||||
|
*Ultimaker 3 single extrusion prints
|
||||||
|
Dual extrusion printers now allow for single extrusion prints in a larger printable area.
|
||||||
|
|
||||||
|
*Streaming printer monitor view
|
||||||
|
Ultimaker 3’s camera views no longer only show snapshots. They now show a live stream.
|
||||||
|
|
||||||
|
*Explain why slicing is disabled
|
||||||
|
When slicing is blocked by settings with error values, a message now appears, clearly indicating which settings need to be changed.
|
||||||
|
|
||||||
|
*Ultimaker 3 print profiles
|
||||||
|
The initial and final printing temperatures reduce the amount of oozing during PLA-PLA, PLA-PVA and Nylon-PVA prints. This means printing a prime tower is now optional (except for CPE and ABS at the moment). The new Ultimaker 3 printing profiles ensure increased reliability and shorter print time.
|
||||||
|
|
||||||
|
*Initial Layer Printing Temperature
|
||||||
|
Initial and final printing temperature settings have been tuned for higher quality results.
|
||||||
|
|
||||||
|
*Printing temperature of the materials
|
||||||
|
The printing temperature of the materials in the material profiles is now the same as the printing temperature for the Normal Quality profile.
|
||||||
|
|
||||||
|
*Improved PLA-PVA layer adhesion
|
||||||
|
The PVA jerk and acceleration have been optimized to improve the layer adhesion between PVA and PLA.
|
||||||
|
|
||||||
|
*Default build plate adhesion type for Nylon
|
||||||
|
The default build plate adhesion type for Nylon prints has been changed from raft to brim.
|
||||||
|
|
||||||
|
*Support Interface Thickness
|
||||||
|
The Support Roof Thickness is now 0.8 mm and PVA support infill has been slightly decreased to lower the printing time.
|
||||||
|
|
||||||
|
*Ultimaker 2+ PC prints
|
||||||
|
In the polycarbonate profiles, the raft settings for the 0.25 mm and 0.4 mm nozzles are tweaked for less warping.
|
||||||
|
|
||||||
|
*Hollow prime tower
|
||||||
|
Print the prime tower hollow to minimize material use while maintaining stability. Wiping the oozed material on the prime tower is now done from the inside, which means the excess material is contained within the prime tower.
|
||||||
|
|
||||||
|
*Precooling and prewarming
|
||||||
|
Printing now starts at a lower temperature, before increasing swiftly to the normal printing temperature. Cooling also starts earlier than the last extrusion (with that print core). This minimizes the material’s heat absorption, which decreases the amount of degradation of the PVA material. This reduces the risk of clogging your nozzles.
|
||||||
|
|
||||||
|
*Remove Mesh Intersection
|
||||||
|
You are now able to turn off resolving of overlapping meshes. Models can now overlap, so you can perform build plate color mixing, by placing meshes over one another and lowering their flow.
|
||||||
|
|
||||||
|
*Alternate Mesh Removal
|
||||||
|
For areas where two models overlap, let each layer of the overlapping volume alternate (depending on which object the overlapping area of that layer belongs to). This improves the bonding between dual color models and allows for more controlled build plate color mixing.
|
||||||
|
|
||||||
|
*Hollow Object
|
||||||
|
Remove the infill from a mesh and treat internal cavities as overhangs, so as to create support in the model’s interior. This experimental setting greatly reduces the amount of material needed on the inside of the print.
|
||||||
|
|
||||||
|
*Fill Gaps Between Walls
|
||||||
|
Fill up small gaps between consecutive walls, making thin pieces in your model dense, rather than hollow. This feature makes the thin pieces stronger.
|
||||||
|
|
||||||
|
*Cubic subdivision infill
|
||||||
|
This experimental new infill pattern is similar to cubic infill, but generates bigger cubes farther inside the mesh. This greatly reduces print times and material use, while maintaining structural integrity. Thanks to community members Martin Boerwinckle and Nicholas Seward for this feature.
|
||||||
|
|
||||||
|
*Concentric 3D infill
|
||||||
|
This new infill pattern is similar to concentric infill, but touches the shell every X layers, creating better support for the top layers.
|
||||||
|
|
||||||
|
* Printing Temperature Initial Layer
|
||||||
|
Nozzle temperature to be used during the first layer.
|
||||||
|
|
||||||
|
*Build Plate Temperature Initial Layer
|
||||||
|
Bed temperature to be used during the first layer.
|
||||||
|
|
||||||
|
*Initial Fan Speed
|
||||||
|
Fan speed to be used during the first layer.
|
||||||
|
|
||||||
|
*Retract at Layer Change
|
||||||
|
Retract each time the printer progresses to the next layer.
|
||||||
|
|
||||||
|
*Outer Wall Wipe Distance
|
||||||
|
Wipe the nozzle after printing the outer wall.
|
||||||
|
|
||||||
|
*Set X-Y coordinate of z-seam
|
||||||
|
Select where to place the Z seam.
|
||||||
|
|
||||||
|
*Start Layers with the Same Part
|
||||||
|
Start each layer with the part closest to a given location.
|
||||||
|
|
||||||
|
*Turn off nozzle after last use
|
||||||
|
Turn off the nozzle after its last use, while other nozzles are still in use.
|
||||||
|
|
||||||
|
*Option for no build plate adhesion
|
||||||
|
Select not to print any build plate adhesion helper parts.
|
||||||
|
|
||||||
|
*Anti-overhang and support meshes
|
||||||
|
Use a mesh to specify a volume within which to classify nothing as overhang for support or specify a volume within which to print support.
|
||||||
|
|
||||||
|
*Delta printer support
|
||||||
|
This release adds support for printers with elliptic buildplates. This feature has not been extensively tested so please let us know if it works or get involved in improving it.
|
||||||
|
|
||||||
|
*bugfixes
|
||||||
|
The user is now notified when a new version of Cura is available.
|
||||||
|
When searching in the setting visibility preferences, the category for each setting is always displayed.
|
||||||
|
3MF files are now saved and loaded correctly.
|
||||||
|
Dragging a profile onto Cura now loads it automatically.
|
||||||
|
You can now view which print cores and materials are currently in your Ultimaker 3, via the machine manager.
|
||||||
|
You can now add the heated bed upgrade etc. from the machine manager.
|
||||||
|
Print core and material is now arranged under extruder tabs.
|
||||||
|
Cura now remembers all printers and profiles when you open just after closing it.
|
||||||
|
You can now duplicate the standard profiles.
|
||||||
|
Layer view now doesn’t use as much RAM.
|
||||||
|
It’s now quicker to change the value of the Support Enable setting.
|
||||||
|
Changing a setting updates all dependent settings more quickly.
|
||||||
|
Having errors in your setting values now always blocks slicing.
|
||||||
|
Selecting a model with any active tool no longer causes a reslice.
|
||||||
|
The prime poop now introduces a separate area where you cannot print.
|
||||||
|
Support Extruder setting is now near the support settings.
|
||||||
|
Build Plate Adhesion Extruder setting is now near the build plate adhesion settings.
|
||||||
|
Z hop settings have been moved to the Travel category.
|
||||||
|
Inactive nozzle wiping on the prime tower is re-enabled.
|
||||||
|
There are no more unnecessary retractions in support.
|
||||||
|
Each layer now has less extruder switches than the machine has extruders.
|
||||||
|
Concentric infill doesn’t generate the first infill perimeter next to the walls.
|
||||||
|
Extruder priming now always happens on the first layer.
|
||||||
|
|
||||||
[2.3.1]
|
[2.3.1]
|
||||||
*Layer Height in Profile Selection
|
*Layer Height in Profile Selection
|
||||||
Added the layer height to the profile selection menu.
|
Added the layer height to the profile selection menu.
|
||||||
|
|
|
@ -12,6 +12,8 @@ from UM.PluginRegistry import PluginRegistry
|
||||||
from UM.Resources import Resources
|
from UM.Resources import Resources
|
||||||
from UM.Settings.Validator import ValidatorState #To find if a setting is in an error state. We can't slice then.
|
from UM.Settings.Validator import ValidatorState #To find if a setting is in an error state. We can't slice then.
|
||||||
from UM.Platform import Platform
|
from UM.Platform import Platform
|
||||||
|
from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
|
||||||
|
|
||||||
|
|
||||||
from cura.Settings.ExtruderManager import ExtruderManager
|
from cura.Settings.ExtruderManager import ExtruderManager
|
||||||
from . import ProcessSlicedLayersJob
|
from . import ProcessSlicedLayersJob
|
||||||
|
@ -65,6 +67,8 @@ class CuraEngineBackend(Backend):
|
||||||
self._scene = Application.getInstance().getController().getScene()
|
self._scene = Application.getInstance().getController().getScene()
|
||||||
self._scene.sceneChanged.connect(self._onSceneChanged)
|
self._scene.sceneChanged.connect(self._onSceneChanged)
|
||||||
|
|
||||||
|
self._pause_slicing = False
|
||||||
|
|
||||||
# Workaround to disable layer view processing if layer view is not active.
|
# Workaround to disable layer view processing if layer view is not active.
|
||||||
self._layer_view_active = False
|
self._layer_view_active = False
|
||||||
Application.getInstance().getController().activeViewChanged.connect(self._onActiveViewChanged)
|
Application.getInstance().getController().activeViewChanged.connect(self._onActiveViewChanged)
|
||||||
|
@ -145,6 +149,9 @@ class CuraEngineBackend(Backend):
|
||||||
|
|
||||||
## Perform a slice of the scene.
|
## Perform a slice of the scene.
|
||||||
def slice(self):
|
def slice(self):
|
||||||
|
Logger.log("d", "Starting slice job...")
|
||||||
|
if self._pause_slicing:
|
||||||
|
return
|
||||||
self._slice_start_time = time()
|
self._slice_start_time = time()
|
||||||
if not self._enabled or not self._global_container_stack: # We shouldn't be slicing.
|
if not self._enabled or not self._global_container_stack: # We shouldn't be slicing.
|
||||||
# try again in a short time
|
# try again in a short time
|
||||||
|
@ -178,6 +185,17 @@ class CuraEngineBackend(Backend):
|
||||||
self._start_slice_job.start()
|
self._start_slice_job.start()
|
||||||
self._start_slice_job.finished.connect(self._onStartSliceCompleted)
|
self._start_slice_job.finished.connect(self._onStartSliceCompleted)
|
||||||
|
|
||||||
|
|
||||||
|
def pauseSlicing(self):
|
||||||
|
self.close()
|
||||||
|
self._pause_slicing = True
|
||||||
|
self.backendStateChange.emit(BackendState.Disabled)
|
||||||
|
|
||||||
|
def continueSlicing(self):
|
||||||
|
if self._pause_slicing:
|
||||||
|
self._pause_slicing = False
|
||||||
|
self.backendStateChange.emit(BackendState.NotStarted)
|
||||||
|
|
||||||
## Terminate the engine process.
|
## Terminate the engine process.
|
||||||
def _terminate(self):
|
def _terminate(self):
|
||||||
self._slicing = False
|
self._slicing = False
|
||||||
|
@ -293,6 +311,19 @@ class CuraEngineBackend(Backend):
|
||||||
if source is self._scene.getRoot():
|
if source is self._scene.getRoot():
|
||||||
return
|
return
|
||||||
|
|
||||||
|
should_pause = False
|
||||||
|
for node in DepthFirstIterator(self._scene.getRoot()):
|
||||||
|
if node.callDecoration("isBlockSlicing"):
|
||||||
|
should_pause = True
|
||||||
|
gcode_list = node.callDecoration("getGCodeList")
|
||||||
|
if gcode_list is not None:
|
||||||
|
self._scene.gcode_list = gcode_list
|
||||||
|
|
||||||
|
if should_pause:
|
||||||
|
self.pauseSlicing()
|
||||||
|
else:
|
||||||
|
self.continueSlicing()
|
||||||
|
|
||||||
if source.getMeshData() is None:
|
if source.getMeshData() is None:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
|
@ -253,7 +253,7 @@ class StartSliceJob(Job):
|
||||||
for key, value in settings.items(): #Add all submessages for each individual setting.
|
for key, value in settings.items(): #Add all submessages for each individual setting.
|
||||||
setting_message = self._slice_message.getMessage("global_settings").addRepeatedMessage("settings")
|
setting_message = self._slice_message.getMessage("global_settings").addRepeatedMessage("settings")
|
||||||
setting_message.name = key
|
setting_message.name = key
|
||||||
if key == "machine_start_gcode" or key == "machine_end_gcode": #If it's a g-code message, use special formatting.
|
if key == "machine_start_gcode" or key == "machine_end_gcode" or key == "machine_extruder_start_code" or key == "machine_extruder_end_code": #If it's a g-code message, use special formatting.
|
||||||
setting_message.value = self._expandGcodeTokens(key, value, settings)
|
setting_message.value = self._expandGcodeTokens(key, value, settings)
|
||||||
else:
|
else:
|
||||||
setting_message.value = str(value).encode("utf-8")
|
setting_message.value = str(value).encode("utf-8")
|
||||||
|
|
303
plugins/GCodeReader/GCodeReader.py
Normal file
303
plugins/GCodeReader/GCodeReader.py
Normal file
|
@ -0,0 +1,303 @@
|
||||||
|
# Copyright (c) 2016 Aleph Objects, Inc.
|
||||||
|
# Cura is released under the terms of the AGPLv3 or higher.
|
||||||
|
|
||||||
|
from UM.Application import Application
|
||||||
|
from UM.Logger import Logger
|
||||||
|
from UM.Math.AxisAlignedBox import AxisAlignedBox
|
||||||
|
from UM.Math.Vector import Vector
|
||||||
|
from UM.Mesh.MeshReader import MeshReader
|
||||||
|
from UM.Message import Message
|
||||||
|
from UM.Scene.SceneNode import SceneNode
|
||||||
|
from UM.i18n import i18nCatalog
|
||||||
|
|
||||||
|
catalog = i18nCatalog("cura")
|
||||||
|
|
||||||
|
|
||||||
|
from cura import LayerDataBuilder
|
||||||
|
from cura import LayerDataDecorator
|
||||||
|
from cura.LayerPolygon import LayerPolygon
|
||||||
|
from cura.GCodeListDecorator import GCodeListDecorator
|
||||||
|
|
||||||
|
import numpy
|
||||||
|
import math
|
||||||
|
import re
|
||||||
|
from collections import namedtuple
|
||||||
|
|
||||||
|
|
||||||
|
# Class for loading and parsing G-code files
|
||||||
|
class GCodeReader(MeshReader):
|
||||||
|
def __init__(self):
|
||||||
|
super(GCodeReader, self).__init__()
|
||||||
|
self._supported_extensions = [".gcode", ".g"]
|
||||||
|
Application.getInstance().hideMessageSignal.connect(self._onHideMessage)
|
||||||
|
self._cancelled = False
|
||||||
|
self._message = None
|
||||||
|
self._clearValues()
|
||||||
|
self._scene_node = None
|
||||||
|
self._position = namedtuple('Position', ['x', 'y', 'z', 'e'])
|
||||||
|
|
||||||
|
def _clearValues(self):
|
||||||
|
self._extruder = 0
|
||||||
|
self._layer_type = LayerPolygon.Inset0Type
|
||||||
|
self._layer = 0
|
||||||
|
self._previous_z = 0
|
||||||
|
self._layer_data_builder = LayerDataBuilder.LayerDataBuilder()
|
||||||
|
self._center_is_zero = False
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _getValue(line, code):
|
||||||
|
n = line.find(code)
|
||||||
|
if n < 0:
|
||||||
|
return None
|
||||||
|
n += len(code)
|
||||||
|
pattern = re.compile("[;\s]")
|
||||||
|
match = pattern.search(line, n)
|
||||||
|
m = match.start() if match is not None else -1
|
||||||
|
try:
|
||||||
|
if m < 0:
|
||||||
|
return line[n:]
|
||||||
|
return line[n:m]
|
||||||
|
except:
|
||||||
|
return None
|
||||||
|
|
||||||
|
def _getInt(self, line, code):
|
||||||
|
value = self._getValue(line, code)
|
||||||
|
try:
|
||||||
|
return int(value)
|
||||||
|
except:
|
||||||
|
return None
|
||||||
|
|
||||||
|
def _getFloat(self, line, code):
|
||||||
|
value = self._getValue(line, code)
|
||||||
|
try:
|
||||||
|
return float(value)
|
||||||
|
except:
|
||||||
|
return None
|
||||||
|
|
||||||
|
def _onHideMessage(self, message):
|
||||||
|
if message == self._message:
|
||||||
|
self._cancelled = True
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _getNullBoundingBox():
|
||||||
|
return AxisAlignedBox(minimum=Vector(0, 0, 0), maximum=Vector(10, 10, 10))
|
||||||
|
|
||||||
|
def _createPolygon(self, current_z, path):
|
||||||
|
countvalid = 0
|
||||||
|
for point in path:
|
||||||
|
if point[3] > 0:
|
||||||
|
countvalid += 1
|
||||||
|
if countvalid < 2:
|
||||||
|
return False
|
||||||
|
try:
|
||||||
|
self._layer_data_builder.addLayer(self._layer)
|
||||||
|
self._layer_data_builder.setLayerHeight(self._layer, path[0][2])
|
||||||
|
self._layer_data_builder.setLayerThickness(self._layer, math.fabs(current_z - self._previous_z))
|
||||||
|
this_layer = self._layer_data_builder.getLayer(self._layer)
|
||||||
|
except ValueError:
|
||||||
|
return False
|
||||||
|
count = len(path)
|
||||||
|
line_types = numpy.empty((count - 1, 1), numpy.int32)
|
||||||
|
line_widths = numpy.empty((count - 1, 1), numpy.float32)
|
||||||
|
# TODO: need to calculate actual line width based on E values
|
||||||
|
line_widths[:, 0] = 0.4
|
||||||
|
points = numpy.empty((count, 3), numpy.float32)
|
||||||
|
i = 0
|
||||||
|
for point in path:
|
||||||
|
points[i, 0] = point[0]
|
||||||
|
points[i, 1] = point[2]
|
||||||
|
points[i, 2] = -point[1]
|
||||||
|
if i > 0:
|
||||||
|
line_types[i - 1] = point[3]
|
||||||
|
if point[3] in [LayerPolygon.MoveCombingType, LayerPolygon.MoveRetractionType]:
|
||||||
|
line_widths[i - 1] = 0.2
|
||||||
|
i += 1
|
||||||
|
|
||||||
|
this_poly = LayerPolygon(self._layer_data_builder, self._extruder, line_types, points, line_widths)
|
||||||
|
this_poly.buildCache()
|
||||||
|
|
||||||
|
this_layer.polygons.append(this_poly)
|
||||||
|
return True
|
||||||
|
|
||||||
|
def _gCode0(self, position, params, path):
|
||||||
|
x, y, z, e = position
|
||||||
|
x = params.x if params.x is not None else x
|
||||||
|
y = params.y if params.y is not None else y
|
||||||
|
z_changed = False
|
||||||
|
if params.z is not None:
|
||||||
|
if z != params.z:
|
||||||
|
z_changed = True
|
||||||
|
self._previous_z = z
|
||||||
|
z = params.z
|
||||||
|
if params.e is not None:
|
||||||
|
if params.e > e[self._extruder]:
|
||||||
|
path.append([x, y, z, self._layer_type]) # extrusion
|
||||||
|
else:
|
||||||
|
path.append([x, y, z, LayerPolygon.MoveRetractionType]) # retraction
|
||||||
|
e[self._extruder] = params.e
|
||||||
|
else:
|
||||||
|
path.append([x, y, z, LayerPolygon.MoveCombingType])
|
||||||
|
if z_changed:
|
||||||
|
if not self._is_layers_in_file:
|
||||||
|
if len(path) > 1 and z > 0:
|
||||||
|
if self._createPolygon(z, path):
|
||||||
|
self._layer += 1
|
||||||
|
path.clear()
|
||||||
|
else:
|
||||||
|
path.clear()
|
||||||
|
return self._position(x, y, z, e)
|
||||||
|
|
||||||
|
def _gCode28(self, position, params, path):
|
||||||
|
return self._position(
|
||||||
|
params.x if params.x is not None else position.x,
|
||||||
|
params.y if params.y is not None else position.y,
|
||||||
|
0,
|
||||||
|
position.e)
|
||||||
|
|
||||||
|
def _gCode92(self, position, params, path):
|
||||||
|
if params.e is not None:
|
||||||
|
position.e[self._extruder] = params.e
|
||||||
|
return self._position(
|
||||||
|
params.x if params.x is not None else position.x,
|
||||||
|
params.y if params.y is not None else position.y,
|
||||||
|
params.z if params.z is not None else position.z,
|
||||||
|
position.e)
|
||||||
|
|
||||||
|
_gCode1 = _gCode0
|
||||||
|
|
||||||
|
def _processGCode(self, G, line, position, path):
|
||||||
|
func = getattr(self, "_gCode%s" % G, None)
|
||||||
|
x = self._getFloat(line, "X")
|
||||||
|
y = self._getFloat(line, "Y")
|
||||||
|
z = self._getFloat(line, "Z")
|
||||||
|
e = self._getFloat(line, "E")
|
||||||
|
if func is not None:
|
||||||
|
if (x is not None and x < 0) or (y is not None and y < 0):
|
||||||
|
self._center_is_zero = True
|
||||||
|
params = self._position(x, y, z, e)
|
||||||
|
return func(position, params, path)
|
||||||
|
return position
|
||||||
|
|
||||||
|
def _processTCode(self, T, line, position, path):
|
||||||
|
self._extruder = T
|
||||||
|
if self._extruder + 1 > len(position.e):
|
||||||
|
position.e.extend([0] * (self._extruder - len(position.e) + 1))
|
||||||
|
if not self._is_layers_in_file:
|
||||||
|
if len(path) > 1 and position[2] > 0:
|
||||||
|
if self._createPolygon(position[2], path):
|
||||||
|
self._layer += 1
|
||||||
|
path.clear()
|
||||||
|
else:
|
||||||
|
path.clear()
|
||||||
|
return position
|
||||||
|
|
||||||
|
_type_keyword = ";TYPE:"
|
||||||
|
_layer_keyword = ";LAYER:"
|
||||||
|
|
||||||
|
def read(self, file_name):
|
||||||
|
Logger.log("d", "Preparing to load %s" % file_name)
|
||||||
|
self._cancelled = False
|
||||||
|
|
||||||
|
scene_node = SceneNode()
|
||||||
|
scene_node.getBoundingBox = self._getNullBoundingBox # Manually set bounding box, because mesh doesn't have mesh data
|
||||||
|
|
||||||
|
glist = []
|
||||||
|
self._is_layers_in_file = False
|
||||||
|
|
||||||
|
|
||||||
|
Logger.log("d", "Opening file %s" % file_name)
|
||||||
|
|
||||||
|
with open(file_name, "r") as file:
|
||||||
|
file_lines = 0
|
||||||
|
current_line = 0
|
||||||
|
for line in file:
|
||||||
|
file_lines += 1
|
||||||
|
glist.append(line)
|
||||||
|
if not self._is_layers_in_file and line[:len(self._layer_keyword)] == self._layer_keyword:
|
||||||
|
self._is_layers_in_file = True
|
||||||
|
file.seek(0)
|
||||||
|
|
||||||
|
file_step = max(math.floor(file_lines / 100), 1)
|
||||||
|
|
||||||
|
self._clearValues()
|
||||||
|
|
||||||
|
self._message = Message(catalog.i18nc("@info:status", "Parsing G-code"), lifetime=0)
|
||||||
|
self._message.setProgress(0)
|
||||||
|
self._message.show()
|
||||||
|
|
||||||
|
Logger.log("d", "Parsing %s" % file_name)
|
||||||
|
|
||||||
|
current_position = self._position(0, 0, 0, [0])
|
||||||
|
current_path = []
|
||||||
|
|
||||||
|
for line in file:
|
||||||
|
if self._cancelled:
|
||||||
|
Logger.log("d", "Parsing %s cancelled" % file_name)
|
||||||
|
return None
|
||||||
|
current_line += 1
|
||||||
|
if current_line % file_step == 0:
|
||||||
|
self._message.setProgress(math.floor(current_line / file_lines * 100))
|
||||||
|
if len(line) == 0:
|
||||||
|
continue
|
||||||
|
if line.find(self._type_keyword) == 0:
|
||||||
|
type = line[len(self._type_keyword):].strip()
|
||||||
|
if type == "WALL-INNER":
|
||||||
|
self._layer_type = LayerPolygon.InsetXType
|
||||||
|
elif type == "WALL-OUTER":
|
||||||
|
self._layer_type = LayerPolygon.Inset0Type
|
||||||
|
elif type == "SKIN":
|
||||||
|
self._layer_type = LayerPolygon.SkinType
|
||||||
|
elif type == "SKIRT":
|
||||||
|
self._layer_type = LayerPolygon.SkirtType
|
||||||
|
elif type == "SUPPORT":
|
||||||
|
self._layer_type = LayerPolygon.SupportType
|
||||||
|
elif type == "FILL":
|
||||||
|
self._layer_type = LayerPolygon.InfillType
|
||||||
|
if self._is_layers_in_file and line[:len(self._layer_keyword)] == self._layer_keyword:
|
||||||
|
try:
|
||||||
|
layer_number = int(line[len(self._layer_keyword):])
|
||||||
|
self._createPolygon(current_position[2], current_path)
|
||||||
|
current_path.clear()
|
||||||
|
self._layer = layer_number
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
if line[0] == ";":
|
||||||
|
continue
|
||||||
|
|
||||||
|
G = self._getInt(line, "G")
|
||||||
|
if G is not None:
|
||||||
|
current_position = self._processGCode(G, line, current_position, current_path)
|
||||||
|
T = self._getInt(line, "T")
|
||||||
|
if T is not None:
|
||||||
|
current_position = self._processTCode(T, line, current_position, current_path)
|
||||||
|
|
||||||
|
if not self._is_layers_in_file and len(current_path) > 1 and current_position[2] > 0:
|
||||||
|
if self._createPolygon(current_position[2], current_path):
|
||||||
|
self._layer += 1
|
||||||
|
current_path.clear()
|
||||||
|
|
||||||
|
layer_mesh = self._layer_data_builder.build()
|
||||||
|
decorator = LayerDataDecorator.LayerDataDecorator()
|
||||||
|
decorator.setLayerData(layer_mesh)
|
||||||
|
scene_node.addDecorator(decorator)
|
||||||
|
|
||||||
|
gcode_list_decorator = GCodeListDecorator()
|
||||||
|
gcode_list_decorator.setGCodeList(glist)
|
||||||
|
scene_node.addDecorator(gcode_list_decorator)
|
||||||
|
|
||||||
|
Logger.log("d", "Finished parsing %s" % file_name)
|
||||||
|
self._message.hide()
|
||||||
|
|
||||||
|
if self._layer == 0:
|
||||||
|
Logger.log("w", "File %s doesn't contain any valid layers" % file_name)
|
||||||
|
|
||||||
|
settings = Application.getInstance().getGlobalContainerStack()
|
||||||
|
machine_width = settings.getProperty("machine_width", "value")
|
||||||
|
machine_depth = settings.getProperty("machine_depth", "value")
|
||||||
|
|
||||||
|
if not self._center_is_zero:
|
||||||
|
scene_node.setPosition(Vector(-machine_width / 2, 0, machine_depth / 2))
|
||||||
|
|
||||||
|
Logger.log("d", "Loaded %s" % file_name)
|
||||||
|
|
||||||
|
return scene_node
|
33
plugins/GCodeReader/__init__.py
Normal file
33
plugins/GCodeReader/__init__.py
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
# Copyright (c) 2016 Aleph Objects, Inc.
|
||||||
|
# Cura is released under the terms of the AGPLv3 or higher.
|
||||||
|
|
||||||
|
from . import GCodeReader
|
||||||
|
|
||||||
|
from UM.i18n import i18nCatalog
|
||||||
|
i18n_catalog = i18nCatalog("cura")
|
||||||
|
|
||||||
|
def getMetaData():
|
||||||
|
return {
|
||||||
|
"plugin": {
|
||||||
|
"name": i18n_catalog.i18nc("@label", "G-code Reader"),
|
||||||
|
"author": "Victor Larchenko",
|
||||||
|
"version": "1.0",
|
||||||
|
"description": i18n_catalog.i18nc("@info:whatsthis", "Allows loading and displaying G-code files."),
|
||||||
|
"api": 3
|
||||||
|
},
|
||||||
|
"mesh_reader": [
|
||||||
|
{
|
||||||
|
"extension": "gcode",
|
||||||
|
"description": i18n_catalog.i18nc("@item:inlistbox", "G-code File")
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"extension": "g",
|
||||||
|
"description": i18n_catalog.i18nc("@item:inlistbox", "G File")
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
def register(app):
|
||||||
|
app.addNonSliceableExtension(".gcode")
|
||||||
|
app.addNonSliceableExtension(".g")
|
||||||
|
return { "mesh_reader": GCodeReader.GCodeReader() }
|
|
@ -4,9 +4,9 @@
|
||||||
import os
|
import os
|
||||||
import threading
|
import threading
|
||||||
|
|
||||||
from PyQt5.QtCore import Qt, QUrl, pyqtSignal, pyqtSlot, QObject
|
from PyQt5.QtCore import Qt, QUrl, pyqtSignal, QObject
|
||||||
from PyQt5.QtQml import QQmlComponent, QQmlContext
|
from PyQt5.QtQml import QQmlComponent, QQmlContext
|
||||||
|
from UM.FlameProfiler import pyqtSlot
|
||||||
from UM.Application import Application
|
from UM.Application import Application
|
||||||
from UM.PluginRegistry import PluginRegistry
|
from UM.PluginRegistry import PluginRegistry
|
||||||
from UM.Logger import Logger
|
from UM.Logger import Logger
|
||||||
|
|
|
@ -45,10 +45,11 @@ class LayerPass(RenderPass):
|
||||||
tool_handle_batch = RenderBatch(self._tool_handle_shader, type = RenderBatch.RenderType.Overlay)
|
tool_handle_batch = RenderBatch(self._tool_handle_shader, type = RenderBatch.RenderType.Overlay)
|
||||||
|
|
||||||
for node in DepthFirstIterator(self._scene.getRoot()):
|
for node in DepthFirstIterator(self._scene.getRoot()):
|
||||||
|
|
||||||
if isinstance(node, ToolHandle):
|
if isinstance(node, ToolHandle):
|
||||||
tool_handle_batch.addItem(node.getWorldTransformation(), mesh = node.getSolidMesh())
|
tool_handle_batch.addItem(node.getWorldTransformation(), mesh = node.getSolidMesh())
|
||||||
|
|
||||||
elif isinstance(node, SceneNode) and node.getMeshData() and node.isVisible():
|
elif isinstance(node, SceneNode) and (node.getMeshData() or node.callDecoration("isBlockSlicing")) and node.isVisible():
|
||||||
layer_data = node.callDecoration("getLayerData")
|
layer_data = node.callDecoration("getLayerData")
|
||||||
if not layer_data:
|
if not layer_data:
|
||||||
continue
|
continue
|
||||||
|
|
|
@ -119,7 +119,7 @@ class LayerView(View):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if not node.render(renderer):
|
if not node.render(renderer):
|
||||||
if node.getMeshData() and node.isVisible():
|
if (node.getMeshData()) and node.isVisible():
|
||||||
renderer.queueNode(node, transparent = True, shader = self._ghost_shader)
|
renderer.queueNode(node, transparent = True, shader = self._ghost_shader)
|
||||||
|
|
||||||
def setLayer(self, value):
|
def setLayer(self, value):
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
from PyQt5.QtCore import QObject, pyqtSignal, pyqtSlot, pyqtProperty
|
from PyQt5.QtCore import QObject, pyqtSignal, pyqtProperty
|
||||||
|
from UM.FlameProfiler import pyqtSlot
|
||||||
from UM.Application import Application
|
from UM.Application import Application
|
||||||
|
|
||||||
import LayerView
|
import LayerView
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
# Copyright (c) 2016 Ultimaker B.V.
|
# Copyright (c) 2016 Ultimaker B.V.
|
||||||
# Cura is released under the terms of the AGPLv3 or higher.
|
# Cura is released under the terms of the AGPLv3 or higher.
|
||||||
|
|
||||||
from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot
|
from PyQt5.QtCore import pyqtProperty, pyqtSignal
|
||||||
|
from UM.FlameProfiler import pyqtSlot
|
||||||
|
|
||||||
from cura.MachineAction import MachineAction
|
from cura.MachineAction import MachineAction
|
||||||
|
|
||||||
|
|
|
@ -322,7 +322,7 @@ Item {
|
||||||
id: settingPickDialog
|
id: settingPickDialog
|
||||||
|
|
||||||
title: catalog.i18nc("@title:window", "Select Settings to Customize for this model")
|
title: catalog.i18nc("@title:window", "Select Settings to Customize for this model")
|
||||||
width: screenScaleFactor * 360;
|
width: Screen.devicePixelRatio * 360;
|
||||||
|
|
||||||
property string labelFilter: ""
|
property string labelFilter: ""
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# Copyright (c) 2015 Ultimaker B.V.
|
# Copyright (c) 2015 Ultimaker B.V.
|
||||||
# Uranium is released under the terms of the AGPLv3 or higher.
|
# Cura is released under the terms of the AGPLv3 or higher.
|
||||||
|
|
||||||
import platform
|
from UM.Platform import Platform
|
||||||
|
|
||||||
from UM.i18n import i18nCatalog
|
from UM.i18n import i18nCatalog
|
||||||
catalog = i18nCatalog("cura")
|
catalog = i18nCatalog("cura")
|
||||||
|
@ -18,15 +18,15 @@ def getMetaData():
|
||||||
}
|
}
|
||||||
|
|
||||||
def register(app):
|
def register(app):
|
||||||
if platform.system() == "Windows":
|
if Platform.isWindows():
|
||||||
from . import WindowsRemovableDrivePlugin
|
from . import WindowsRemovableDrivePlugin
|
||||||
return { "output_device": WindowsRemovableDrivePlugin.WindowsRemovableDrivePlugin() }
|
return { "output_device": WindowsRemovableDrivePlugin.WindowsRemovableDrivePlugin() }
|
||||||
elif platform.system() == "Darwin":
|
elif Platform.isOSX():
|
||||||
from . import OSXRemovableDrivePlugin
|
from . import OSXRemovableDrivePlugin
|
||||||
return { "output_device": OSXRemovableDrivePlugin.OSXRemovableDrivePlugin() }
|
return { "output_device": OSXRemovableDrivePlugin.OSXRemovableDrivePlugin() }
|
||||||
elif platform.system() == "Linux":
|
elif Platform.isLinux():
|
||||||
from . import LinuxRemovableDrivePlugin
|
from . import LinuxRemovableDrivePlugin
|
||||||
return { "output_device": LinuxRemovableDrivePlugin.LinuxRemovableDrivePlugin() }
|
return { "output_device": LinuxRemovableDrivePlugin.LinuxRemovableDrivePlugin() }
|
||||||
else:
|
else:
|
||||||
Logger.log("e", "Unsupported system %s, no removable device hotplugging support available.", platform.system())
|
Logger.log("e", "Unsupported system, thus no removable device hotplugging support available.")
|
||||||
return { }
|
return { }
|
||||||
|
|
|
@ -87,8 +87,10 @@ class SolidView(View):
|
||||||
extruder_id = node.callDecoration("getActiveExtruder")
|
extruder_id = node.callDecoration("getActiveExtruder")
|
||||||
if extruder_id:
|
if extruder_id:
|
||||||
extruder_index = max(0, self._extruders_model.find("id", extruder_id))
|
extruder_index = max(0, self._extruders_model.find("id", extruder_id))
|
||||||
|
try:
|
||||||
material_color = self._extruders_model.getItem(extruder_index)["color"]
|
material_color = self._extruders_model.getItem(extruder_index)["color"]
|
||||||
|
except KeyError:
|
||||||
|
material_color = self._extruders_model.defaultColors[0]
|
||||||
|
|
||||||
if extruder_index != ExtruderManager.getInstance().activeExtruderIndex:
|
if extruder_index != ExtruderManager.getInstance().activeExtruderIndex:
|
||||||
# Shade objects that are printed with the non-active extruder 25% darker
|
# Shade objects that are printed with the non-active extruder 25% darker
|
||||||
|
|
|
@ -1016,7 +1016,7 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice):
|
||||||
|
|
||||||
## Let the user decide if the hotends and/or material should be synced with the printer
|
## Let the user decide if the hotends and/or material should be synced with the printer
|
||||||
def materialHotendChangedMessage(self, callback):
|
def materialHotendChangedMessage(self, callback):
|
||||||
Application.getInstance().messageBox(i18n_catalog.i18nc("@window:title", "Changes on the Printer"),
|
Application.getInstance().messageBox(i18n_catalog.i18nc("@window:title", "Sync with your printer"),
|
||||||
i18n_catalog.i18nc("@label",
|
i18n_catalog.i18nc("@label",
|
||||||
"Would you like to use your current printer configuration in Cura?"),
|
"Would you like to use your current printer configuration in Cura?"),
|
||||||
i18n_catalog.i18nc("@label",
|
i18n_catalog.i18nc("@label",
|
||||||
|
|
|
@ -313,6 +313,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
|
||||||
if self._serial is None:
|
if self._serial is None:
|
||||||
try:
|
try:
|
||||||
self._serial = serial.Serial(str(self._serial_port), baud_rate, timeout = 3, writeTimeout = 10000)
|
self._serial = serial.Serial(str(self._serial_port), baud_rate, timeout = 3, writeTimeout = 10000)
|
||||||
|
time.sleep(10)
|
||||||
except serial.SerialException:
|
except serial.SerialException:
|
||||||
Logger.log("d", "Could not open port %s" % self._serial_port)
|
Logger.log("d", "Could not open port %s" % self._serial_port)
|
||||||
continue
|
continue
|
||||||
|
@ -468,7 +469,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
|
||||||
break # None is only returned when something went wrong. Stop listening
|
break # None is only returned when something went wrong. Stop listening
|
||||||
|
|
||||||
if time.time() > temperature_request_timeout:
|
if time.time() > temperature_request_timeout:
|
||||||
if self._num_extruders > 0:
|
if self._num_extruders > 1:
|
||||||
self._temperature_requested_extruder_index = (self._temperature_requested_extruder_index + 1) % self._num_extruders
|
self._temperature_requested_extruder_index = (self._temperature_requested_extruder_index + 1) % self._num_extruders
|
||||||
self.sendCommand("M105 T%d" % (self._temperature_requested_extruder_index))
|
self.sendCommand("M105 T%d" % (self._temperature_requested_extruder_index))
|
||||||
else:
|
else:
|
||||||
|
@ -524,7 +525,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
|
||||||
|
|
||||||
# Request the temperature on comm timeout (every 2 seconds) when we are not printing.)
|
# Request the temperature on comm timeout (every 2 seconds) when we are not printing.)
|
||||||
if line == b"":
|
if line == b"":
|
||||||
if self._num_extruders > 0:
|
if self._num_extruders > 1:
|
||||||
self._temperature_requested_extruder_index = (self._temperature_requested_extruder_index + 1) % self._num_extruders
|
self._temperature_requested_extruder_index = (self._temperature_requested_extruder_index + 1) % self._num_extruders
|
||||||
self.sendCommand("M105 T%d" % self._temperature_requested_extruder_index)
|
self.sendCommand("M105 T%d" % self._temperature_requested_extruder_index)
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -43,17 +43,20 @@ class Stk500v2(ispBase.IspBase):
|
||||||
|
|
||||||
self.serial.flushInput()
|
self.serial.flushInput()
|
||||||
self.serial.flushOutput()
|
self.serial.flushOutput()
|
||||||
if self.sendMessage([0x10, 0xc8, 0x64, 0x19, 0x20, 0x00, 0x53, 0x03, 0xac, 0x53, 0x00, 0x00]) != [0x10, 0x00]:
|
try:
|
||||||
|
if self.sendMessage([0x10, 0xc8, 0x64, 0x19, 0x20, 0x00, 0x53, 0x03, 0xac, 0x53, 0x00, 0x00]) != [0x10, 0x00]:
|
||||||
|
raise ispBase.IspError("Failed to enter programming mode")
|
||||||
|
|
||||||
|
self.sendMessage([0x06, 0x80, 0x00, 0x00, 0x00])
|
||||||
|
if self.sendMessage([0xEE])[1] == 0x00:
|
||||||
|
self._has_checksum = True
|
||||||
|
else:
|
||||||
|
self._has_checksum = False
|
||||||
|
except ispBase.IspError:
|
||||||
self.close()
|
self.close()
|
||||||
raise ispBase.IspError("Failed to enter programming mode")
|
raise
|
||||||
|
|
||||||
self.sendMessage([0x06, 0x80, 0x00, 0x00, 0x00])
|
|
||||||
if self.sendMessage([0xEE])[1] == 0x00:
|
|
||||||
self._has_checksum = True
|
|
||||||
else:
|
|
||||||
self._has_checksum = False
|
|
||||||
self.serial.timeout = 5
|
self.serial.timeout = 5
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
if self.serial is not None:
|
if self.serial is not None:
|
||||||
self.serial.close()
|
self.serial.close()
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
from cura.MachineAction import MachineAction
|
from cura.MachineAction import MachineAction
|
||||||
from cura.PrinterOutputDevice import PrinterOutputDevice
|
from cura.PrinterOutputDevice import PrinterOutputDevice
|
||||||
|
|
||||||
from PyQt5.QtCore import pyqtSlot
|
from UM.FlameProfiler import pyqtSlot
|
||||||
|
|
||||||
from UM.Application import Application
|
from UM.Application import Application
|
||||||
from UM.i18n import i18nCatalog
|
from UM.i18n import i18nCatalog
|
||||||
|
|
|
@ -8,6 +8,7 @@ import io
|
||||||
|
|
||||||
from UM.Resources import Resources
|
from UM.Resources import Resources
|
||||||
from UM.VersionUpgrade import VersionUpgrade # Superclass of the plugin.
|
from UM.VersionUpgrade import VersionUpgrade # Superclass of the plugin.
|
||||||
|
import UM.VersionUpgrade
|
||||||
|
|
||||||
class VersionUpgrade22to24(VersionUpgrade):
|
class VersionUpgrade22to24(VersionUpgrade):
|
||||||
|
|
||||||
|
@ -19,6 +20,10 @@ class VersionUpgrade22to24(VersionUpgrade):
|
||||||
|
|
||||||
config = configparser.ConfigParser(interpolation = None)
|
config = configparser.ConfigParser(interpolation = None)
|
||||||
config.read_string(serialised) # Read the input string as config file.
|
config.read_string(serialised) # Read the input string as config file.
|
||||||
|
if config.get("metadata", "type") == "definition_changes":
|
||||||
|
# This is not a container stack, don't upgrade it here
|
||||||
|
return
|
||||||
|
|
||||||
config.set("general", "version", "3")
|
config.set("general", "version", "3")
|
||||||
|
|
||||||
container_list = []
|
container_list = []
|
||||||
|
@ -44,9 +49,11 @@ class VersionUpgrade22to24(VersionUpgrade):
|
||||||
# Change the name of variant and insert empty_variant into the stack.
|
# Change the name of variant and insert empty_variant into the stack.
|
||||||
new_container_list = []
|
new_container_list = []
|
||||||
for item in container_list:
|
for item in container_list:
|
||||||
|
if not item: # the last item may be an empty string
|
||||||
|
continue
|
||||||
if item == variant_name:
|
if item == variant_name:
|
||||||
new_container_list.append(config_name)
|
|
||||||
new_container_list.append("empty_variant")
|
new_container_list.append("empty_variant")
|
||||||
|
new_container_list.append(config_name)
|
||||||
else:
|
else:
|
||||||
new_container_list.append(item)
|
new_container_list.append(item)
|
||||||
|
|
||||||
|
@ -58,7 +65,7 @@ class VersionUpgrade22to24(VersionUpgrade):
|
||||||
config.remove_option("general", "containers")
|
config.remove_option("general", "containers")
|
||||||
|
|
||||||
for index in range(len(container_list)):
|
for index in range(len(container_list)):
|
||||||
config.set("containers", index, container_list[index])
|
config.set("containers", str(index), container_list[index])
|
||||||
|
|
||||||
output = io.StringIO()
|
output = io.StringIO()
|
||||||
config.write(output)
|
config.write(output)
|
||||||
|
@ -114,6 +121,26 @@ class VersionUpgrade22to24(VersionUpgrade):
|
||||||
config.write(output)
|
config.write(output)
|
||||||
return [filename], [output.getvalue()]
|
return [filename], [output.getvalue()]
|
||||||
|
|
||||||
|
def upgradePreferences(self, serialised, filename):
|
||||||
|
config = configparser.ConfigParser(interpolation = None)
|
||||||
|
config.read_string(serialised)
|
||||||
|
|
||||||
|
if not config.has_section("general"):
|
||||||
|
raise UM.VersionUpgrade.FormatException("No \"general\" section.")
|
||||||
|
|
||||||
|
# Make z_seam_x and z_seam_y options visible. In a clean 2.4 they are visible by default.
|
||||||
|
if config.has_option("general", "visible_settings"):
|
||||||
|
visible_settings = config.get("general", "visible_settings")
|
||||||
|
visible_set = set(visible_settings.split(";"))
|
||||||
|
visible_set.add("z_seam_x")
|
||||||
|
visible_set.add("z_seam_y")
|
||||||
|
config.set("general", "visible_settings", ";".join(visible_set))
|
||||||
|
config.set("general", "version", value="4")
|
||||||
|
|
||||||
|
output = io.StringIO()
|
||||||
|
config.write(output)
|
||||||
|
return [filename], [output.getvalue()]
|
||||||
|
|
||||||
def getCfgVersion(self, serialised):
|
def getCfgVersion(self, serialised):
|
||||||
parser = configparser.ConfigParser(interpolation = None)
|
parser = configparser.ConfigParser(interpolation = None)
|
||||||
parser.read_string(serialised)
|
parser.read_string(serialised)
|
||||||
|
|
|
@ -20,8 +20,10 @@ def getMetaData():
|
||||||
"version_upgrade": {
|
"version_upgrade": {
|
||||||
# From To Upgrade function
|
# From To Upgrade function
|
||||||
("machine_instance", 2): ("machine_stack", 3, upgrade.upgradeMachineInstance),
|
("machine_instance", 2): ("machine_stack", 3, upgrade.upgradeMachineInstance),
|
||||||
("extruder_train", 2): ("extruder_train", 3, upgrade.upgradeExtruderTrain)
|
("extruder_train", 2): ("extruder_train", 3, upgrade.upgradeExtruderTrain),
|
||||||
},
|
("preferences", 3): ("preferences", 4, upgrade.upgradePreferences)
|
||||||
|
|
||||||
|
},
|
||||||
"sources": {
|
"sources": {
|
||||||
"machine_stack": {
|
"machine_stack": {
|
||||||
"get_version": upgrade.getCfgVersion,
|
"get_version": upgrade.getCfgVersion,
|
||||||
|
|
|
@ -1,15 +1,17 @@
|
||||||
# Contributed by Seva Alekseyev <sevaa@nih.gov> with National Institutes of Health, 2016
|
# Contributed by Seva Alekseyev <sevaa@nih.gov> with National Institutes of Health, 2016
|
||||||
# Cura is released under the terms of the AGPLv3 or higher.
|
# Cura is released under the terms of the AGPLv3 or higher.
|
||||||
|
|
||||||
from UM.Mesh.MeshReader import MeshReader
|
from math import pi, sin, cos, sqrt
|
||||||
from UM.Mesh.MeshBuilder import MeshBuilder
|
|
||||||
|
import numpy
|
||||||
|
|
||||||
|
from UM.Job import Job
|
||||||
from UM.Logger import Logger
|
from UM.Logger import Logger
|
||||||
from UM.Math.Matrix import Matrix
|
from UM.Math.Matrix import Matrix
|
||||||
from UM.Math.Vector import Vector
|
from UM.Math.Vector import Vector
|
||||||
|
from UM.Mesh.MeshBuilder import MeshBuilder
|
||||||
|
from UM.Mesh.MeshReader import MeshReader
|
||||||
from UM.Scene.SceneNode import SceneNode
|
from UM.Scene.SceneNode import SceneNode
|
||||||
from UM.Job import Job
|
|
||||||
from math import pi, sin, cos, sqrt
|
|
||||||
import numpy
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import xml.etree.cElementTree as ET
|
import xml.etree.cElementTree as ET
|
||||||
|
|
|
@ -593,6 +593,8 @@ class XmlMaterialProfile(InstanceContainer):
|
||||||
# Map XML file product names to internal ids
|
# Map XML file product names to internal ids
|
||||||
# TODO: Move this to definition's metadata
|
# TODO: Move this to definition's metadata
|
||||||
__product_id_map = {
|
__product_id_map = {
|
||||||
|
"Ultimaker 3": "ultimaker3",
|
||||||
|
"Ultimaker 3 Extended": "ultimaker3_extended",
|
||||||
"Ultimaker 2": "ultimaker2",
|
"Ultimaker 2": "ultimaker2",
|
||||||
"Ultimaker 2+": "ultimaker2_plus",
|
"Ultimaker 2+": "ultimaker2_plus",
|
||||||
"Ultimaker 2 Go": "ultimaker2_go",
|
"Ultimaker 2 Go": "ultimaker2_go",
|
||||||
|
|
58
resources/definitions/101Hero.def.json
Normal file
58
resources/definitions/101Hero.def.json
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
{
|
||||||
|
"id": "101Hero",
|
||||||
|
"version": 2,
|
||||||
|
"name": "101Hero",
|
||||||
|
"inherits": "fdmprinter",
|
||||||
|
"metadata": {
|
||||||
|
"visible": true,
|
||||||
|
"author": "rikky",
|
||||||
|
"manufacturer": "101Hero",
|
||||||
|
"category": "Other",
|
||||||
|
"machine_extruder_trains":
|
||||||
|
{
|
||||||
|
"0": "fdmextruder"
|
||||||
|
},
|
||||||
|
"file_formats": "text/x-gcode",
|
||||||
|
"supports_usb_connection": true
|
||||||
|
},
|
||||||
|
|
||||||
|
"overrides": {
|
||||||
|
"machine_name": { "default_value": "101Hero" },
|
||||||
|
"machine_shape": { "default_value": "elliptic"},
|
||||||
|
"machine_heated_bed": { "default_value": false },
|
||||||
|
"machine_width": { "default_value": 149.86 },
|
||||||
|
"machine_depth": { "default_value": 149.86 },
|
||||||
|
"machine_height": { "default_value": 99.822 },
|
||||||
|
"machine_center_is_zero": { "default_value": true },
|
||||||
|
"layer_height": { "default_value": 0.2 },
|
||||||
|
"machine_nozzle_size": { "default_value": 0.4 },
|
||||||
|
"material_diameter": { "default_value": 1.75 },
|
||||||
|
"machine_nozzle_heat_up_speed": { "default_value": 2 },
|
||||||
|
"machine_nozzle_cool_down_speed": { "default_value": 2 },
|
||||||
|
"machine_head_with_fans_polygon": {
|
||||||
|
"default_value": [
|
||||||
|
[ 0, 0 ],
|
||||||
|
[ 0, 0 ],
|
||||||
|
[ 0, 0 ],
|
||||||
|
[ 0, 0 ]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"speed_print": { "default_value": 14 },
|
||||||
|
"speed_travel": { "value": "speed_print" },
|
||||||
|
"speed_infill": { "default_value": 14 },
|
||||||
|
"speed_wall": { "value": "speed_print * 0.7" },
|
||||||
|
"speed_topbottom": { "value": "speed_print * 0.7" },
|
||||||
|
"speed_layer_0": { "value": "speed_print * 0.7" },
|
||||||
|
"gantry_height": { "default_value": 0 },
|
||||||
|
"retraction_speed": { "default_value" : 10 },
|
||||||
|
"retraction_amount": { "default_value" : 2.5 },
|
||||||
|
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
|
||||||
|
|
||||||
|
"machine_start_gcode": {
|
||||||
|
"default_value": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 Z0 ;home Z\nG1 Z15.0 F840\nG92 E0 ;zero the extruded length\nG1 F200 E3 ;extrude 3mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 F840\n;Put printing message on LCD screen\nM117 Printing...\n"
|
||||||
|
},
|
||||||
|
"machine_end_gcode": {
|
||||||
|
"default_value": "M104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit\nG1 Z0.5 E-5 F840 ;move Z up a bit and retract even more\nG28 X0 Y0 ;home X/Y, so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -30,6 +30,7 @@
|
||||||
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
|
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
|
||||||
"machine_depth": { "default_value": 150 },
|
"machine_depth": { "default_value": 150 },
|
||||||
"machine_width": { "default_value": 150 },
|
"machine_width": { "default_value": 150 },
|
||||||
"machine_name": { "default_value": "DeltaBot style" }
|
"machine_name": { "default_value": "DeltaBot style" },
|
||||||
|
"machine_shape": { "default_value": "elliptic"}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -890,6 +890,21 @@
|
||||||
"default_value": "lines",
|
"default_value": "lines",
|
||||||
"settable_per_mesh": true
|
"settable_per_mesh": true
|
||||||
},
|
},
|
||||||
|
"top_bottom_pattern_0":
|
||||||
|
{
|
||||||
|
"label": "Bottom Pattern Initial Layer",
|
||||||
|
"description": "The pattern on the bottom of the print on the first layer.",
|
||||||
|
"type": "enum",
|
||||||
|
"options":
|
||||||
|
{
|
||||||
|
"lines": "Lines",
|
||||||
|
"concentric": "Concentric",
|
||||||
|
"zigzag": "Zig Zag"
|
||||||
|
},
|
||||||
|
"default_value": "lines",
|
||||||
|
"value": "top_bottom_pattern",
|
||||||
|
"settable_per_mesh": true
|
||||||
|
},
|
||||||
"wall_0_inset":
|
"wall_0_inset":
|
||||||
{
|
{
|
||||||
"label": "Outer Wall Inset",
|
"label": "Outer Wall Inset",
|
||||||
|
@ -1190,7 +1205,7 @@
|
||||||
"type": "int",
|
"type": "int",
|
||||||
"minimum_value": "0",
|
"minimum_value": "0",
|
||||||
"maximum_value_warning": "4",
|
"maximum_value_warning": "4",
|
||||||
"maximum_value": "20 - math.log(infill_line_distance) / math.log(2)",
|
"maximum_value": "(20 - math.log(infill_line_distance) / math.log(2)) if infill_line_distance > 0 else 0",
|
||||||
"enabled": "infill_sparse_density > 0 and infill_pattern != 'cubicsubdiv'",
|
"enabled": "infill_sparse_density > 0 and infill_pattern != 'cubicsubdiv'",
|
||||||
"settable_per_mesh": true
|
"settable_per_mesh": true
|
||||||
},
|
},
|
||||||
|
@ -2800,7 +2815,7 @@
|
||||||
"support_z_distance":
|
"support_z_distance":
|
||||||
{
|
{
|
||||||
"label": "Support Z Distance",
|
"label": "Support Z Distance",
|
||||||
"description": "Distance from the top/bottom of the support structure to the print. This gap provides clearance to remove the supports after the model is printed. This value is rounded down to a multiple of the layer height.",
|
"description": "Distance from the top/bottom of the support structure to the print. This gap provides clearance to remove the supports after the model is printed. This value is rounded up to a multiple of the layer height.",
|
||||||
"unit": "mm",
|
"unit": "mm",
|
||||||
"type": "float",
|
"type": "float",
|
||||||
"minimum_value": "0",
|
"minimum_value": "0",
|
||||||
|
@ -3113,8 +3128,8 @@
|
||||||
"type": "float",
|
"type": "float",
|
||||||
"unit": "mm",
|
"unit": "mm",
|
||||||
"default_value": 0,
|
"default_value": 0,
|
||||||
"minimum_value_warning": "0",
|
"minimum_value_warning": "machine_width / -2 if machine_center_is_zero else 0",
|
||||||
"maximum_value_warning": "machine_width",
|
"maximum_value_warning": "machine_width / 2 if machine_center_is_zero else machine_width",
|
||||||
"settable_per_mesh": false,
|
"settable_per_mesh": false,
|
||||||
"settable_per_extruder": true,
|
"settable_per_extruder": true,
|
||||||
"enabled": false
|
"enabled": false
|
||||||
|
@ -3126,8 +3141,8 @@
|
||||||
"type": "float",
|
"type": "float",
|
||||||
"unit": "mm",
|
"unit": "mm",
|
||||||
"default_value": 0,
|
"default_value": 0,
|
||||||
"minimum_value_warning": "0",
|
"minimum_value_warning": "machine_depth / -2 if machine_center_is_zero else 0",
|
||||||
"maximum_value_warning": "machine_depth",
|
"maximum_value_warning": "machine_depth / 2 if machine_center_is_zero else machine_depth",
|
||||||
"settable_per_mesh": false,
|
"settable_per_mesh": false,
|
||||||
"settable_per_extruder": true,
|
"settable_per_extruder": true,
|
||||||
"enabled": false
|
"enabled": false
|
||||||
|
@ -3755,7 +3770,7 @@
|
||||||
"unit": "mm",
|
"unit": "mm",
|
||||||
"type": "float",
|
"type": "float",
|
||||||
"default_value": 2,
|
"default_value": 2,
|
||||||
"value": "max(2 * min(extruderValues('prime_tower_line_width')), 0.5 * (resolveOrValue('prime_tower_size') - math.sqrt(resolveOrValue('prime_tower_size') ** 2 - max(extruderValues('prime_tower_min_volume')) / resolveOrValue('layer_height'))))",
|
"value": "max(2 * min(extruderValues('prime_tower_line_width')), 0.5 * (resolveOrValue('prime_tower_size') - math.sqrt(max(0, resolveOrValue('prime_tower_size') ** 2 - max(extruderValues('prime_tower_min_volume')) / resolveOrValue('layer_height')))))",
|
||||||
"resolve": "max(extruderValues('prime_tower_wall_thickness'))",
|
"resolve": "max(extruderValues('prime_tower_wall_thickness'))",
|
||||||
"minimum_value": "0.001",
|
"minimum_value": "0.001",
|
||||||
"minimum_value_warning": "2 * min(extruderValues('prime_tower_line_width'))",
|
"minimum_value_warning": "2 * min(extruderValues('prime_tower_line_width'))",
|
||||||
|
@ -3776,8 +3791,8 @@
|
||||||
"default_value": 200,
|
"default_value": 200,
|
||||||
"minimum_value_warning": "-1000",
|
"minimum_value_warning": "-1000",
|
||||||
"maximum_value_warning": "1000",
|
"maximum_value_warning": "1000",
|
||||||
"maximum_value": "machine_width - 0.5 * resolveOrValue('prime_tower_size')",
|
"maximum_value": "machine_width / 2 if machine_center_is_zero else machine_width",
|
||||||
"minimum_value": "0.5 * resolveOrValue('prime_tower_size')",
|
"minimum_value": "resolveOrValue('prime_tower_size') - machine_width / 2 if machine_center_is_zero else resolveOrValue('prime_tower_size')",
|
||||||
"settable_per_mesh": false,
|
"settable_per_mesh": false,
|
||||||
"settable_per_extruder": false
|
"settable_per_extruder": false
|
||||||
},
|
},
|
||||||
|
@ -3791,8 +3806,10 @@
|
||||||
"default_value": 200,
|
"default_value": 200,
|
||||||
"minimum_value_warning": "-1000",
|
"minimum_value_warning": "-1000",
|
||||||
"maximum_value_warning": "1000",
|
"maximum_value_warning": "1000",
|
||||||
"maximum_value": "machine_depth - 0.5 * resolveOrValue('prime_tower_size')",
|
"maximum_value": "machine_depth - resolveOrValue('prime_tower_size')",
|
||||||
"minimum_value": "0.5 * resolveOrValue('prime_tower_size')",
|
"minimum_value": "0",
|
||||||
|
"maximum_value": "machine_depth / 2 - resolveOrValue('prime_tower_size') if machine_center_is_zero else machine_depth - resolveOrValue('prime_tower_size')",
|
||||||
|
"minimum_value": "machine_depth / -2 if machine_center_is_zero else 0",
|
||||||
"settable_per_mesh": false,
|
"settable_per_mesh": false,
|
||||||
"settable_per_extruder": false
|
"settable_per_extruder": false
|
||||||
},
|
},
|
||||||
|
@ -3804,6 +3821,7 @@
|
||||||
"unit": "%",
|
"unit": "%",
|
||||||
"enabled": "resolveOrValue('prime_tower_enable')",
|
"enabled": "resolveOrValue('prime_tower_enable')",
|
||||||
"default_value": 100,
|
"default_value": 100,
|
||||||
|
"value": "material_flow",
|
||||||
"minimum_value": "0.0001",
|
"minimum_value": "0.0001",
|
||||||
"minimum_value_warning": "50",
|
"minimum_value_warning": "50",
|
||||||
"maximum_value_warning": "150",
|
"maximum_value_warning": "150",
|
||||||
|
|
|
@ -10,7 +10,8 @@
|
||||||
"category": "Other",
|
"category": "Other",
|
||||||
"file_formats": "text/x-gcode",
|
"file_formats": "text/x-gcode",
|
||||||
"icon": "icon_ultimaker2",
|
"icon": "icon_ultimaker2",
|
||||||
"platform": "kossel_platform.stl"
|
"platform": "kossel_platform.stl",
|
||||||
|
"platform_offset": [0, -0.25, 0]
|
||||||
},
|
},
|
||||||
|
|
||||||
"overrides": {
|
"overrides": {
|
||||||
|
@ -50,18 +51,8 @@
|
||||||
"machine_end_gcode": {
|
"machine_end_gcode": {
|
||||||
"default_value": "M104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG28 ;Home all axes (max endstops)\nM84 ;steppers off\nG90 ;absolute positioning"
|
"default_value": "M104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG28 ;Home all axes (max endstops)\nM84 ;steppers off\nG90 ;absolute positioning"
|
||||||
},
|
},
|
||||||
"machine_disallowed_areas": {
|
"machine_shape": {
|
||||||
"default_value": [
|
"default_value": "elliptic"
|
||||||
[[-34, -85], [ -85, -85], [-70, -70]],
|
|
||||||
[[-85, -85], [-85, -34], [-70, -70]],
|
|
||||||
[[34, -85], [ 85, -85], [70, -70]],
|
|
||||||
[[85, -85], [85, -34], [70, -70]],
|
|
||||||
[[-34, 85], [ -85, 85], [-70, 70]],
|
|
||||||
[[-85, 85], [-85, 34], [-70, 70]],
|
|
||||||
[[34, 85], [ 85, 85], [70, 70]],
|
|
||||||
[[85, 85], [85, 34], [70, 70]]
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,8 @@
|
||||||
"category": "Other",
|
"category": "Other",
|
||||||
"file_formats": "text/x-gcode",
|
"file_formats": "text/x-gcode",
|
||||||
"icon": "icon_ultimaker2",
|
"icon": "icon_ultimaker2",
|
||||||
"platform": "kossel_pro_build_platform.stl"
|
"platform": "kossel_pro_build_platform.stl",
|
||||||
|
"platform_offset": [0, -0.25, 0]
|
||||||
},
|
},
|
||||||
"overrides": {
|
"overrides": {
|
||||||
"machine_heated_bed": {
|
"machine_heated_bed": {
|
||||||
|
@ -49,8 +50,8 @@
|
||||||
"machine_end_gcode": {
|
"machine_end_gcode": {
|
||||||
"default_value": "M104 S0 ; turn off temperature\nM140 S0 ; turn off bed\nG28 ; home all axes\nM84 ; disable motors\n"
|
"default_value": "M104 S0 ; turn off temperature\nM140 S0 ; turn off bed\nG28 ; home all axes\nM84 ; disable motors\n"
|
||||||
},
|
},
|
||||||
"machine_disallowed_areas": {
|
"machine_shape": {
|
||||||
"default_value": [[[125.0, 125.0], [125.0, 0.0], [120.741, 32.352]], [[-125.0, 125.0], [-125.0, 0.0], [-120.741, 32.352]], [[125.0, -125.0], [125.0, -0.0], [120.741, -32.352]], [[-125.0, -125.0], [-125.0, -0.0], [-120.741, -32.352]], [[125.0, 125.0], [120.741, 32.352], [108.253, 62.5]], [[-125.0, 125.0], [-120.741, 32.352], [-108.253, 62.5]], [[125.0, -125.0], [120.741, -32.352], [108.253, -62.5]], [[-125.0, -125.0], [-120.741, -32.352], [-108.253, -62.5]], [[125.0, 125.0], [108.253, 62.5], [88.388, 88.388]], [[-125.0, 125.0], [-108.253, 62.5], [-88.388, 88.388]], [[125.0, -125.0], [108.253, -62.5], [88.388, -88.388]], [[-125.0, -125.0], [-108.253, -62.5], [-88.388, -88.388]], [[125.0, 125.0], [88.388, 88.388], [62.5, 108.253]], [[-125.0, 125.0], [-88.388, 88.388], [-62.5, 108.253]], [[125.0, -125.0], [88.388, -88.388], [62.5, -108.253]], [[-125.0, -125.0], [-88.388, -88.388], [-62.5, -108.253]], [[125.0, 125.0], [62.5, 108.253], [32.352, 120.741]], [[-125.0, 125.0], [-62.5, 108.253], [-32.352, 120.741]], [[125.0, -125.0], [62.5, -108.253], [32.352, -120.741]], [[-125.0, -125.0], [-62.5, -108.253], [-32.352, -120.741]], [[125.0, 125.0], [32.352, 120.741], [0.0, 125.0]], [[-125.0, 125.0], [-32.352, 120.741], [-0.0, 125.0]], [[125.0, -125.0], [32.352, -120.741], [0.0, -125.0]], [[-125.0, -125.0], [-32.352, -120.741], [-0.0, -125.0]]]
|
"default_value": "elliptic"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -26,10 +26,10 @@
|
||||||
"machine_nozzle_cool_down_speed": { "default_value": 2 },
|
"machine_nozzle_cool_down_speed": { "default_value": 2 },
|
||||||
"machine_head_with_fans_polygon": {
|
"machine_head_with_fans_polygon": {
|
||||||
"default_value": [
|
"default_value": [
|
||||||
[ 55, -20 ],
|
[-49, 20],
|
||||||
[ 55, 99999 ],
|
[-49, -99999],
|
||||||
[ -49, 99999 ],
|
[55, 20],
|
||||||
[ -49, -20 ]
|
[55, -99999]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"gantry_height": { "default_value": 99999 },
|
"gantry_height": { "default_value": 99999 },
|
||||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1,182 +1,173 @@
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Uranium json setting files\n"
|
"Project-Id-Version: Uranium json setting files\n"
|
||||||
"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n"
|
"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n"
|
||||||
"POT-Creation-Date: 2016-09-20 17:35+0000\n"
|
"POT-Creation-Date: 2016-12-28 10:51+0000\n"
|
||||||
"PO-Revision-Date: 2016-09-29 13:02+0200\n"
|
"PO-Revision-Date: 2016-09-29 13:02+0200\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE\n"
|
"Language-Team: LANGUAGE\n"
|
||||||
"MIME-Version: 1.0\n"
|
"Language: \n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_settings label"
|
#: fdmextruder.def.json
|
||||||
msgid "Machine"
|
msgctxt "machine_settings label"
|
||||||
msgstr "Gerät"
|
msgid "Machine"
|
||||||
|
msgstr "Gerät"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_settings description"
|
#: fdmextruder.def.json
|
||||||
msgid "Machine specific settings"
|
msgctxt "machine_settings description"
|
||||||
msgstr "Gerätespezifische Einstellungen"
|
msgid "Machine specific settings"
|
||||||
|
msgstr "Gerätespezifische Einstellungen"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "extruder_nr label"
|
#: fdmextruder.def.json
|
||||||
msgid "Extruder"
|
msgctxt "extruder_nr label"
|
||||||
msgstr "Extruder"
|
msgid "Extruder"
|
||||||
|
msgstr "Extruder"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "extruder_nr description"
|
#: fdmextruder.def.json
|
||||||
msgid "The extruder train used for printing. This is used in multi-extrusion."
|
msgctxt "extruder_nr description"
|
||||||
msgstr "Die für das Drucken verwendete Extruder-Einheit. Diese wird für die Mehrfach-Extrusion benutzt."
|
msgid "The extruder train used for printing. This is used in multi-extrusion."
|
||||||
|
msgstr "Die für das Drucken verwendete Extruder-Einheit. Diese wird für die Mehrfach-Extrusion benutzt."
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_nozzle_offset_x label"
|
#: fdmextruder.def.json
|
||||||
msgid "Nozzle X Offset"
|
msgctxt "machine_nozzle_offset_x label"
|
||||||
msgstr "X-Versatz Düse"
|
msgid "Nozzle X Offset"
|
||||||
|
msgstr "X-Versatz Düse"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_nozzle_offset_x description"
|
#: fdmextruder.def.json
|
||||||
msgid "The x-coordinate of the offset of the nozzle."
|
msgctxt "machine_nozzle_offset_x description"
|
||||||
msgstr "Die X-Koordinate des Düsenversatzes."
|
msgid "The x-coordinate of the offset of the nozzle."
|
||||||
|
msgstr "Die X-Koordinate des Düsenversatzes."
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_nozzle_offset_y label"
|
#: fdmextruder.def.json
|
||||||
msgid "Nozzle Y Offset"
|
msgctxt "machine_nozzle_offset_y label"
|
||||||
msgstr "Y-Versatz Düse"
|
msgid "Nozzle Y Offset"
|
||||||
|
msgstr "Y-Versatz Düse"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_nozzle_offset_y description"
|
#: fdmextruder.def.json
|
||||||
msgid "The y-coordinate of the offset of the nozzle."
|
msgctxt "machine_nozzle_offset_y description"
|
||||||
msgstr "Die Y-Koordinate des Düsenversatzes."
|
msgid "The y-coordinate of the offset of the nozzle."
|
||||||
|
msgstr "Die Y-Koordinate des Düsenversatzes."
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_extruder_start_code label"
|
#: fdmextruder.def.json
|
||||||
msgid "Extruder Start G-Code"
|
msgctxt "machine_extruder_start_code label"
|
||||||
msgstr "G-Code Extruder-Start"
|
msgid "Extruder Start G-Code"
|
||||||
|
msgstr "G-Code Extruder-Start"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_extruder_start_code description"
|
#: fdmextruder.def.json
|
||||||
msgid "Start g-code to execute whenever turning the extruder on."
|
msgctxt "machine_extruder_start_code description"
|
||||||
msgstr "Starten Sie den G-Code jedes Mal, wenn Sie den Extruder einschalten."
|
msgid "Start g-code to execute whenever turning the extruder on."
|
||||||
|
msgstr "Starten Sie den G-Code jedes Mal, wenn Sie den Extruder einschalten."
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_extruder_start_pos_abs label"
|
#: fdmextruder.def.json
|
||||||
msgid "Extruder Start Position Absolute"
|
msgctxt "machine_extruder_start_pos_abs label"
|
||||||
msgstr "Absolute Startposition des Extruders"
|
msgid "Extruder Start Position Absolute"
|
||||||
|
msgstr "Absolute Startposition des Extruders"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_extruder_start_pos_abs description"
|
#: fdmextruder.def.json
|
||||||
msgid ""
|
msgctxt "machine_extruder_start_pos_abs description"
|
||||||
"Make the extruder starting position absolute rather than relative to the "
|
msgid "Make the extruder starting position absolute rather than relative to the last-known location of the head."
|
||||||
"last-known location of the head."
|
msgstr "Bevorzugen Sie eine absolute Startposition des Extruders anstelle einer relativen Position zur zuletzt bekannten Kopfposition."
|
||||||
msgstr "Bevorzugen Sie eine absolute Startposition des Extruders anstelle einer relativen Position zur zuletzt bekannten Kopfposition."
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_start_pos_x label"
|
||||||
msgctxt "machine_extruder_start_pos_x label"
|
msgid "Extruder Start Position X"
|
||||||
msgid "Extruder Start Position X"
|
msgstr "X-Position Extruder-Start"
|
||||||
msgstr "X-Position Extruder-Start"
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_start_pos_x description"
|
||||||
msgctxt "machine_extruder_start_pos_x description"
|
msgid "The x-coordinate of the starting position when turning the extruder on."
|
||||||
msgid "The x-coordinate of the starting position when turning the extruder on."
|
msgstr "Die X-Koordinate der Startposition beim Einschalten des Extruders."
|
||||||
msgstr "Die X-Koordinate der Startposition beim Einschalten des Extruders."
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_start_pos_y label"
|
||||||
msgctxt "machine_extruder_start_pos_y label"
|
msgid "Extruder Start Position Y"
|
||||||
msgid "Extruder Start Position Y"
|
msgstr "Y-Position Extruder-Start"
|
||||||
msgstr "Y-Position Extruder-Start"
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_start_pos_y description"
|
||||||
msgctxt "machine_extruder_start_pos_y description"
|
msgid "The y-coordinate of the starting position when turning the extruder on."
|
||||||
msgid "The y-coordinate of the starting position when turning the extruder on."
|
msgstr "Die Y-Koordinate der Startposition beim Einschalten des Extruders."
|
||||||
msgstr "Die Y-Koordinate der Startposition beim Einschalten des Extruders."
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_end_code label"
|
||||||
msgctxt "machine_extruder_end_code label"
|
msgid "Extruder End G-Code"
|
||||||
msgid "Extruder End G-Code"
|
msgstr "G-Code Extruder-Ende"
|
||||||
msgstr "G-Code Extruder-Ende"
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_end_code description"
|
||||||
msgctxt "machine_extruder_end_code description"
|
msgid "End g-code to execute whenever turning the extruder off."
|
||||||
msgid "End g-code to execute whenever turning the extruder off."
|
msgstr "Beenden Sie den G-Code jedes Mal, wenn Sie den Extruder ausschalten."
|
||||||
msgstr "Beenden Sie den G-Code jedes Mal, wenn Sie den Extruder ausschalten."
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_end_pos_abs label"
|
||||||
msgctxt "machine_extruder_end_pos_abs label"
|
msgid "Extruder End Position Absolute"
|
||||||
msgid "Extruder End Position Absolute"
|
msgstr "Absolute Extruder-Endposition"
|
||||||
msgstr "Absolute Extruder-Endposition"
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_end_pos_abs description"
|
||||||
msgctxt "machine_extruder_end_pos_abs description"
|
msgid "Make the extruder ending position absolute rather than relative to the last-known location of the head."
|
||||||
msgid ""
|
msgstr "Bevorzugen Sie eine absolute Endposition des Extruders anstelle einer relativen Position zur zuletzt bekannten Kopfposition."
|
||||||
"Make the extruder ending position absolute rather than relative to the last-"
|
|
||||||
"known location of the head."
|
#: fdmextruder.def.json
|
||||||
msgstr "Bevorzugen Sie eine absolute Endposition des Extruders anstelle einer relativen Position zur zuletzt bekannten Kopfposition."
|
msgctxt "machine_extruder_end_pos_x label"
|
||||||
|
msgid "Extruder End Position X"
|
||||||
#: fdmextruder.def.json
|
msgstr "Extruder-Endposition X"
|
||||||
msgctxt "machine_extruder_end_pos_x label"
|
|
||||||
msgid "Extruder End Position X"
|
#: fdmextruder.def.json
|
||||||
msgstr "Extruder-Endposition X"
|
msgctxt "machine_extruder_end_pos_x description"
|
||||||
|
msgid "The x-coordinate of the ending position when turning the extruder off."
|
||||||
#: fdmextruder.def.json
|
msgstr "Die X-Koordinate der Endposition beim Ausschalten des Extruders."
|
||||||
msgctxt "machine_extruder_end_pos_x description"
|
|
||||||
msgid "The x-coordinate of the ending position when turning the extruder off."
|
#: fdmextruder.def.json
|
||||||
msgstr "Die X-Koordinate der Endposition beim Ausschalten des Extruders."
|
msgctxt "machine_extruder_end_pos_y label"
|
||||||
|
msgid "Extruder End Position Y"
|
||||||
#: fdmextruder.def.json
|
msgstr "Extruder-Endposition Y"
|
||||||
msgctxt "machine_extruder_end_pos_y label"
|
|
||||||
msgid "Extruder End Position Y"
|
#: fdmextruder.def.json
|
||||||
msgstr "Extruder-Endposition Y"
|
msgctxt "machine_extruder_end_pos_y description"
|
||||||
|
msgid "The y-coordinate of the ending position when turning the extruder off."
|
||||||
#: fdmextruder.def.json
|
msgstr "Die Y-Koordinate der Endposition beim Ausschalten des Extruders."
|
||||||
msgctxt "machine_extruder_end_pos_y description"
|
|
||||||
msgid "The y-coordinate of the ending position when turning the extruder off."
|
#: fdmextruder.def.json
|
||||||
msgstr "Die Y-Koordinate der Endposition beim Ausschalten des Extruders."
|
msgctxt "extruder_prime_pos_z label"
|
||||||
|
msgid "Extruder Prime Z Position"
|
||||||
#: fdmextruder.def.json
|
msgstr "Z-Position Extruder-Einzug"
|
||||||
msgctxt "extruder_prime_pos_z label"
|
|
||||||
msgid "Extruder Prime Z Position"
|
#: fdmextruder.def.json
|
||||||
msgstr "Z-Position Extruder-Einzug"
|
msgctxt "extruder_prime_pos_z description"
|
||||||
|
msgid "The Z coordinate of the position where the nozzle primes at the start of printing."
|
||||||
#: fdmextruder.def.json
|
msgstr "Die Z-Koordinate der Position, an der die Düse am Druckbeginn einzieht."
|
||||||
msgctxt "extruder_prime_pos_z description"
|
|
||||||
msgid ""
|
#: fdmextruder.def.json
|
||||||
"The Z coordinate of the position where the nozzle primes at the start of "
|
msgctxt "platform_adhesion label"
|
||||||
"printing."
|
msgid "Build Plate Adhesion"
|
||||||
msgstr "Die Z-Koordinate der Position, an der die Düse am Druckbeginn einzieht."
|
msgstr "Druckplattenhaftung"
|
||||||
|
|
||||||
#: fdmextruder.def.json
|
#: fdmextruder.def.json
|
||||||
msgctxt "platform_adhesion label"
|
msgctxt "platform_adhesion description"
|
||||||
msgid "Build Plate Adhesion"
|
msgid "Adhesion"
|
||||||
msgstr "Druckplattenhaftung"
|
msgstr "Haftung"
|
||||||
|
|
||||||
#: fdmextruder.def.json
|
#: fdmextruder.def.json
|
||||||
msgctxt "platform_adhesion description"
|
msgctxt "extruder_prime_pos_x label"
|
||||||
msgid "Adhesion"
|
msgid "Extruder Prime X Position"
|
||||||
msgstr "Haftung"
|
msgstr "X-Position Extruder-Einzug"
|
||||||
|
|
||||||
#: fdmextruder.def.json
|
#: fdmextruder.def.json
|
||||||
msgctxt "extruder_prime_pos_x label"
|
msgctxt "extruder_prime_pos_x description"
|
||||||
msgid "Extruder Prime X Position"
|
msgid "The X coordinate of the position where the nozzle primes at the start of printing."
|
||||||
msgstr "X-Position Extruder-Einzug"
|
msgstr "Die X-Koordinate der Position, an der die Düse am Druckbeginn einzieht."
|
||||||
|
|
||||||
#: fdmextruder.def.json
|
#: fdmextruder.def.json
|
||||||
msgctxt "extruder_prime_pos_x description"
|
msgctxt "extruder_prime_pos_y label"
|
||||||
msgid ""
|
msgid "Extruder Prime Y Position"
|
||||||
"The X coordinate of the position where the nozzle primes at the start of "
|
msgstr "Y-Position Extruder-Einzug"
|
||||||
"printing."
|
|
||||||
msgstr "Die X-Koordinate der Position, an der die Düse am Druckbeginn einzieht."
|
#: fdmextruder.def.json
|
||||||
|
msgctxt "extruder_prime_pos_y description"
|
||||||
#: fdmextruder.def.json
|
msgid "The Y coordinate of the position where the nozzle primes at the start of printing."
|
||||||
msgctxt "extruder_prime_pos_y label"
|
msgstr "Die Y-Koordinate der Position, an der die Düse am Druckbeginn einzieht."
|
||||||
msgid "Extruder Prime Y Position"
|
|
||||||
msgstr "Y-Position Extruder-Einzug"
|
|
||||||
|
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "extruder_prime_pos_y description"
|
|
||||||
msgid ""
|
|
||||||
"The Y coordinate of the position where the nozzle primes at the start of "
|
|
||||||
"printing."
|
|
||||||
msgstr "Die Y-Koordinate der Position, an der die Düse am Druckbeginn einzieht."
|
|
||||||
|
|
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
|
@ -1,182 +1,173 @@
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Uranium json setting files\n"
|
"Project-Id-Version: Uranium json setting files\n"
|
||||||
"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n"
|
"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n"
|
||||||
"POT-Creation-Date: 2016-09-20 17:35+0000\n"
|
"POT-Creation-Date: 2016-12-28 10:51+0000\n"
|
||||||
"PO-Revision-Date: 2016-09-29 13:02+0200\n"
|
"PO-Revision-Date: 2016-09-29 13:02+0200\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE\n"
|
"Language-Team: LANGUAGE\n"
|
||||||
"MIME-Version: 1.0\n"
|
"Language: \n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_settings label"
|
#: fdmextruder.def.json
|
||||||
msgid "Machine"
|
msgctxt "machine_settings label"
|
||||||
msgstr "Máquina"
|
msgid "Machine"
|
||||||
|
msgstr "Máquina"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_settings description"
|
#: fdmextruder.def.json
|
||||||
msgid "Machine specific settings"
|
msgctxt "machine_settings description"
|
||||||
msgstr "Ajustes específicos de la máquina"
|
msgid "Machine specific settings"
|
||||||
|
msgstr "Ajustes específicos de la máquina"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "extruder_nr label"
|
#: fdmextruder.def.json
|
||||||
msgid "Extruder"
|
msgctxt "extruder_nr label"
|
||||||
msgstr "Extrusor"
|
msgid "Extruder"
|
||||||
|
msgstr "Extrusor"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "extruder_nr description"
|
#: fdmextruder.def.json
|
||||||
msgid "The extruder train used for printing. This is used in multi-extrusion."
|
msgctxt "extruder_nr description"
|
||||||
msgstr "El tren extrusor que se utiliza para imprimir. Se emplea en la extrusión múltiple."
|
msgid "The extruder train used for printing. This is used in multi-extrusion."
|
||||||
|
msgstr "El tren extrusor que se utiliza para imprimir. Se emplea en la extrusión múltiple."
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_nozzle_offset_x label"
|
#: fdmextruder.def.json
|
||||||
msgid "Nozzle X Offset"
|
msgctxt "machine_nozzle_offset_x label"
|
||||||
msgstr "Desplazamiento de la tobera sobre el eje X"
|
msgid "Nozzle X Offset"
|
||||||
|
msgstr "Desplazamiento de la tobera sobre el eje X"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_nozzle_offset_x description"
|
#: fdmextruder.def.json
|
||||||
msgid "The x-coordinate of the offset of the nozzle."
|
msgctxt "machine_nozzle_offset_x description"
|
||||||
msgstr "Coordenada X del desplazamiento de la tobera."
|
msgid "The x-coordinate of the offset of the nozzle."
|
||||||
|
msgstr "Coordenada X del desplazamiento de la tobera."
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_nozzle_offset_y label"
|
#: fdmextruder.def.json
|
||||||
msgid "Nozzle Y Offset"
|
msgctxt "machine_nozzle_offset_y label"
|
||||||
msgstr "Desplazamiento de la tobera sobre el eje Y"
|
msgid "Nozzle Y Offset"
|
||||||
|
msgstr "Desplazamiento de la tobera sobre el eje Y"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_nozzle_offset_y description"
|
#: fdmextruder.def.json
|
||||||
msgid "The y-coordinate of the offset of the nozzle."
|
msgctxt "machine_nozzle_offset_y description"
|
||||||
msgstr "Coordenada Y del desplazamiento de la tobera."
|
msgid "The y-coordinate of the offset of the nozzle."
|
||||||
|
msgstr "Coordenada Y del desplazamiento de la tobera."
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_extruder_start_code label"
|
#: fdmextruder.def.json
|
||||||
msgid "Extruder Start G-Code"
|
msgctxt "machine_extruder_start_code label"
|
||||||
msgstr "Gcode inicial del extrusor"
|
msgid "Extruder Start G-Code"
|
||||||
|
msgstr "Gcode inicial del extrusor"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_extruder_start_code description"
|
#: fdmextruder.def.json
|
||||||
msgid "Start g-code to execute whenever turning the extruder on."
|
msgctxt "machine_extruder_start_code description"
|
||||||
msgstr "Gcode inicial que se ejecuta cada vez que se enciende el extrusor."
|
msgid "Start g-code to execute whenever turning the extruder on."
|
||||||
|
msgstr "Gcode inicial que se ejecuta cada vez que se enciende el extrusor."
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_extruder_start_pos_abs label"
|
#: fdmextruder.def.json
|
||||||
msgid "Extruder Start Position Absolute"
|
msgctxt "machine_extruder_start_pos_abs label"
|
||||||
msgstr "Posición de inicio absoluta del extrusor"
|
msgid "Extruder Start Position Absolute"
|
||||||
|
msgstr "Posición de inicio absoluta del extrusor"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_extruder_start_pos_abs description"
|
#: fdmextruder.def.json
|
||||||
msgid ""
|
msgctxt "machine_extruder_start_pos_abs description"
|
||||||
"Make the extruder starting position absolute rather than relative to the "
|
msgid "Make the extruder starting position absolute rather than relative to the last-known location of the head."
|
||||||
"last-known location of the head."
|
msgstr "El extrusor se coloca en la posición de inicio absoluta según la última ubicación conocida del cabezal."
|
||||||
msgstr "El extrusor se coloca en la posición de inicio absoluta según la última ubicación conocida del cabezal."
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_start_pos_x label"
|
||||||
msgctxt "machine_extruder_start_pos_x label"
|
msgid "Extruder Start Position X"
|
||||||
msgid "Extruder Start Position X"
|
msgstr "Posición de inicio del extrusor sobre el eje X"
|
||||||
msgstr "Posición de inicio del extrusor sobre el eje X"
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_start_pos_x description"
|
||||||
msgctxt "machine_extruder_start_pos_x description"
|
msgid "The x-coordinate of the starting position when turning the extruder on."
|
||||||
msgid "The x-coordinate of the starting position when turning the extruder on."
|
msgstr "Coordenada X de la posición de inicio cuando se enciende el extrusor."
|
||||||
msgstr "Coordenada X de la posición de inicio cuando se enciende el extrusor."
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_start_pos_y label"
|
||||||
msgctxt "machine_extruder_start_pos_y label"
|
msgid "Extruder Start Position Y"
|
||||||
msgid "Extruder Start Position Y"
|
msgstr "Posición de inicio del extrusor sobre el eje Y"
|
||||||
msgstr "Posición de inicio del extrusor sobre el eje Y"
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_start_pos_y description"
|
||||||
msgctxt "machine_extruder_start_pos_y description"
|
msgid "The y-coordinate of the starting position when turning the extruder on."
|
||||||
msgid "The y-coordinate of the starting position when turning the extruder on."
|
msgstr "Coordenada Y de la posición de inicio cuando se enciende el extrusor."
|
||||||
msgstr "Coordenada Y de la posición de inicio cuando se enciende el extrusor."
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_end_code label"
|
||||||
msgctxt "machine_extruder_end_code label"
|
msgid "Extruder End G-Code"
|
||||||
msgid "Extruder End G-Code"
|
msgstr "Gcode final del extrusor"
|
||||||
msgstr "Gcode final del extrusor"
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_end_code description"
|
||||||
msgctxt "machine_extruder_end_code description"
|
msgid "End g-code to execute whenever turning the extruder off."
|
||||||
msgid "End g-code to execute whenever turning the extruder off."
|
msgstr "Gcode final que se ejecuta cada vez que se apaga el extrusor."
|
||||||
msgstr "Gcode final que se ejecuta cada vez que se apaga el extrusor."
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_end_pos_abs label"
|
||||||
msgctxt "machine_extruder_end_pos_abs label"
|
msgid "Extruder End Position Absolute"
|
||||||
msgid "Extruder End Position Absolute"
|
msgstr "Posición final absoluta del extrusor"
|
||||||
msgstr "Posición final absoluta del extrusor"
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_end_pos_abs description"
|
||||||
msgctxt "machine_extruder_end_pos_abs description"
|
msgid "Make the extruder ending position absolute rather than relative to the last-known location of the head."
|
||||||
msgid ""
|
msgstr "La posición final del extrusor se considera absoluta, en lugar de relativa a la última ubicación conocida del cabezal."
|
||||||
"Make the extruder ending position absolute rather than relative to the last-"
|
|
||||||
"known location of the head."
|
#: fdmextruder.def.json
|
||||||
msgstr "La posición final del extrusor se considera absoluta, en lugar de relativa a la última ubicación conocida del cabezal."
|
msgctxt "machine_extruder_end_pos_x label"
|
||||||
|
msgid "Extruder End Position X"
|
||||||
#: fdmextruder.def.json
|
msgstr "Posición de fin del extrusor sobre el eje X"
|
||||||
msgctxt "machine_extruder_end_pos_x label"
|
|
||||||
msgid "Extruder End Position X"
|
#: fdmextruder.def.json
|
||||||
msgstr "Posición de fin del extrusor sobre el eje X"
|
msgctxt "machine_extruder_end_pos_x description"
|
||||||
|
msgid "The x-coordinate of the ending position when turning the extruder off."
|
||||||
#: fdmextruder.def.json
|
msgstr "Coordenada X de la posición de fin cuando se apaga el extrusor."
|
||||||
msgctxt "machine_extruder_end_pos_x description"
|
|
||||||
msgid "The x-coordinate of the ending position when turning the extruder off."
|
#: fdmextruder.def.json
|
||||||
msgstr "Coordenada X de la posición de fin cuando se apaga el extrusor."
|
msgctxt "machine_extruder_end_pos_y label"
|
||||||
|
msgid "Extruder End Position Y"
|
||||||
#: fdmextruder.def.json
|
msgstr "Posición de fin del extrusor sobre el eje Y"
|
||||||
msgctxt "machine_extruder_end_pos_y label"
|
|
||||||
msgid "Extruder End Position Y"
|
#: fdmextruder.def.json
|
||||||
msgstr "Posición de fin del extrusor sobre el eje Y"
|
msgctxt "machine_extruder_end_pos_y description"
|
||||||
|
msgid "The y-coordinate of the ending position when turning the extruder off."
|
||||||
#: fdmextruder.def.json
|
msgstr "Coordenada Y de la posición de fin cuando se apaga el extrusor."
|
||||||
msgctxt "machine_extruder_end_pos_y description"
|
|
||||||
msgid "The y-coordinate of the ending position when turning the extruder off."
|
#: fdmextruder.def.json
|
||||||
msgstr "Coordenada Y de la posición de fin cuando se apaga el extrusor."
|
msgctxt "extruder_prime_pos_z label"
|
||||||
|
msgid "Extruder Prime Z Position"
|
||||||
#: fdmextruder.def.json
|
msgstr "Posición de preparación del extrusor sobre el eje Z"
|
||||||
msgctxt "extruder_prime_pos_z label"
|
|
||||||
msgid "Extruder Prime Z Position"
|
#: fdmextruder.def.json
|
||||||
msgstr "Posición de preparación del extrusor sobre el eje Z"
|
msgctxt "extruder_prime_pos_z description"
|
||||||
|
msgid "The Z coordinate of the position where the nozzle primes at the start of printing."
|
||||||
#: fdmextruder.def.json
|
msgstr "Coordenada Z de la posición en la que la tobera queda preparada al inicio de la impresión."
|
||||||
msgctxt "extruder_prime_pos_z description"
|
|
||||||
msgid ""
|
#: fdmextruder.def.json
|
||||||
"The Z coordinate of the position where the nozzle primes at the start of "
|
msgctxt "platform_adhesion label"
|
||||||
"printing."
|
msgid "Build Plate Adhesion"
|
||||||
msgstr "Coordenada Z de la posición en la que la tobera queda preparada al inicio de la impresión."
|
msgstr "Adherencia de la placa de impresión"
|
||||||
|
|
||||||
#: fdmextruder.def.json
|
#: fdmextruder.def.json
|
||||||
msgctxt "platform_adhesion label"
|
msgctxt "platform_adhesion description"
|
||||||
msgid "Build Plate Adhesion"
|
msgid "Adhesion"
|
||||||
msgstr "Adherencia de la placa de impresión"
|
msgstr "Adherencia"
|
||||||
|
|
||||||
#: fdmextruder.def.json
|
#: fdmextruder.def.json
|
||||||
msgctxt "platform_adhesion description"
|
msgctxt "extruder_prime_pos_x label"
|
||||||
msgid "Adhesion"
|
msgid "Extruder Prime X Position"
|
||||||
msgstr "Adherencia"
|
msgstr "Posición de preparación del extrusor sobre el eje X"
|
||||||
|
|
||||||
#: fdmextruder.def.json
|
#: fdmextruder.def.json
|
||||||
msgctxt "extruder_prime_pos_x label"
|
msgctxt "extruder_prime_pos_x description"
|
||||||
msgid "Extruder Prime X Position"
|
msgid "The X coordinate of the position where the nozzle primes at the start of printing."
|
||||||
msgstr "Posición de preparación del extrusor sobre el eje X"
|
msgstr "Coordenada X de la posición en la que la tobera se coloca al inicio de la impresión."
|
||||||
|
|
||||||
#: fdmextruder.def.json
|
#: fdmextruder.def.json
|
||||||
msgctxt "extruder_prime_pos_x description"
|
msgctxt "extruder_prime_pos_y label"
|
||||||
msgid ""
|
msgid "Extruder Prime Y Position"
|
||||||
"The X coordinate of the position where the nozzle primes at the start of "
|
msgstr "Posición de preparación del extrusor sobre el eje Y"
|
||||||
"printing."
|
|
||||||
msgstr "Coordenada X de la posición en la que la tobera se coloca al inicio de la impresión."
|
#: fdmextruder.def.json
|
||||||
|
msgctxt "extruder_prime_pos_y description"
|
||||||
#: fdmextruder.def.json
|
msgid "The Y coordinate of the position where the nozzle primes at the start of printing."
|
||||||
msgctxt "extruder_prime_pos_y label"
|
msgstr "Coordenada X de la posición en la que la tobera se coloca al inicio de la impresión."
|
||||||
msgid "Extruder Prime Y Position"
|
|
||||||
msgstr "Posición de preparación del extrusor sobre el eje Y"
|
|
||||||
|
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "extruder_prime_pos_y description"
|
|
||||||
msgid ""
|
|
||||||
"The Y coordinate of the position where the nozzle primes at the start of "
|
|
||||||
"printing."
|
|
||||||
msgstr "Coordenada X de la posición en la que la tobera se coloca al inicio de la impresión."
|
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -3,7 +3,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Uranium json setting files\n"
|
"Project-Id-Version: Uranium json setting files\n"
|
||||||
"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n"
|
"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n"
|
||||||
"POT-Creation-Date: 2016-10-27 11:28+0000\n"
|
"POT-Creation-Date: 2016-12-28 10:51+0000\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE\n"
|
"Language-Team: LANGUAGE\n"
|
||||||
|
|
|
@ -3,7 +3,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Uranium json setting files\n"
|
"Project-Id-Version: Uranium json setting files\n"
|
||||||
"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n"
|
"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n"
|
||||||
"POT-Creation-Date: 2016-10-27 11:28+0000\n"
|
"POT-Creation-Date: 2016-12-28 10:51+0000\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE\n"
|
"Language-Team: LANGUAGE\n"
|
||||||
|
@ -145,6 +145,27 @@ msgctxt "machine_depth description"
|
||||||
msgid "The depth (Y-direction) of the printable area."
|
msgid "The depth (Y-direction) of the printable area."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "machine_shape label"
|
||||||
|
msgid "Build plate shape"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "machine_shape description"
|
||||||
|
msgid ""
|
||||||
|
"The shape of the build plate without taking unprintable areas into account."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "machine_shape option rectangular"
|
||||||
|
msgid "Rectangular"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "machine_shape option elliptic"
|
||||||
|
msgid "Elliptic"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
msgctxt "machine_height label"
|
msgctxt "machine_height label"
|
||||||
msgid "Machine height"
|
msgid "Machine height"
|
||||||
|
@ -179,7 +200,7 @@ msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
msgctxt "machine_extruder_count label"
|
msgctxt "machine_extruder_count label"
|
||||||
msgid "Number extruders"
|
msgid "Number of Extruders"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
|
@ -232,7 +253,19 @@ msgstr ""
|
||||||
msgctxt "machine_heat_zone_length description"
|
msgctxt "machine_heat_zone_length description"
|
||||||
msgid ""
|
msgid ""
|
||||||
"The distance from the tip of the nozzle in which heat from the nozzle is "
|
"The distance from the tip of the nozzle in which heat from the nozzle is "
|
||||||
"transfered to the filament."
|
"transferred to the filament."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "machine_filament_park_distance label"
|
||||||
|
msgid "Filament Park Distance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "machine_filament_park_distance description"
|
||||||
|
msgid ""
|
||||||
|
"The distance from the tip of the nozzle where to park the filament when an "
|
||||||
|
"extruder is no longer used."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
|
@ -332,6 +365,16 @@ msgctxt "machine_disallowed_areas description"
|
||||||
msgid "A list of polygons with areas the print head is not allowed to enter."
|
msgid "A list of polygons with areas the print head is not allowed to enter."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "nozzle_disallowed_areas label"
|
||||||
|
msgid "Nozzle Disallowed Areas"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "nozzle_disallowed_areas description"
|
||||||
|
msgid "A list of polygons with areas the nozzle is not allowed to enter."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
msgctxt "machine_head_polygon label"
|
msgctxt "machine_head_polygon label"
|
||||||
msgid "Machine head polygon"
|
msgid "Machine head polygon"
|
||||||
|
@ -716,6 +759,18 @@ msgid ""
|
||||||
"rounded to a whole number."
|
"rounded to a whole number."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "wall_0_wipe_dist label"
|
||||||
|
msgid "Outer Wall Wipe Distance"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "wall_0_wipe_dist description"
|
||||||
|
msgid ""
|
||||||
|
"Distance of a travel move inserted after the outer wall, to hide the Z seam "
|
||||||
|
"better."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
msgctxt "top_bottom_thickness label"
|
msgctxt "top_bottom_thickness label"
|
||||||
msgid "Top/Bottom Thickness"
|
msgid "Top/Bottom Thickness"
|
||||||
|
@ -877,6 +932,26 @@ msgid ""
|
||||||
"already a wall in place."
|
"already a wall in place."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "fill_perimeter_gaps label"
|
||||||
|
msgid "Fill Gaps Between Walls"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "fill_perimeter_gaps description"
|
||||||
|
msgid "Fills the gaps between walls where no walls fit."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "fill_perimeter_gaps option nowhere"
|
||||||
|
msgid "Nowhere"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "fill_perimeter_gaps option everywhere"
|
||||||
|
msgid "Everywhere"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
msgctxt "xy_offset label"
|
msgctxt "xy_offset label"
|
||||||
msgid "Horizontal Expansion"
|
msgid "Horizontal Expansion"
|
||||||
|
@ -900,14 +975,14 @@ msgctxt "z_seam_type description"
|
||||||
msgid ""
|
msgid ""
|
||||||
"Starting point of each path in a layer. When paths in consecutive layers "
|
"Starting point of each path in a layer. When paths in consecutive layers "
|
||||||
"start at the same point a vertical seam may show on the print. When aligning "
|
"start at the same point a vertical seam may show on the print. When aligning "
|
||||||
"these at the back, the seam is easiest to remove. When placed randomly the "
|
"these near a user specified location, the seam is easiest to remove. When "
|
||||||
"inaccuracies at the paths' start will be less noticeable. When taking the "
|
"placed randomly the inaccuracies at the paths' start will be less "
|
||||||
"shortest path the print will be quicker."
|
"noticeable. When taking the shortest path the print will be quicker."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
msgctxt "z_seam_type option back"
|
msgctxt "z_seam_type option back"
|
||||||
msgid "Back"
|
msgid "User Specified"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
|
@ -920,6 +995,30 @@ msgctxt "z_seam_type option random"
|
||||||
msgid "Random"
|
msgid "Random"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "z_seam_x label"
|
||||||
|
msgid "Z Seam X"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "z_seam_x description"
|
||||||
|
msgid ""
|
||||||
|
"The X coordinate of the position near where to start printing each part in a "
|
||||||
|
"layer."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "z_seam_y label"
|
||||||
|
msgid "Z Seam Y"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "z_seam_y description"
|
||||||
|
msgid ""
|
||||||
|
"The Y coordinate of the position near where to start printing each part in a "
|
||||||
|
"layer."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
msgctxt "skin_no_small_gaps_heuristic label"
|
msgctxt "skin_no_small_gaps_heuristic label"
|
||||||
msgid "Ignore Small Z Gaps"
|
msgid "Ignore Small Z Gaps"
|
||||||
|
@ -1000,6 +1099,11 @@ msgctxt "infill_pattern option cubic"
|
||||||
msgid "Cubic"
|
msgid "Cubic"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "infill_pattern option cubicsubdiv"
|
||||||
|
msgid "Cubic Subdivision"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
msgctxt "infill_pattern option tetrahedral"
|
msgctxt "infill_pattern option tetrahedral"
|
||||||
msgid "Tetrahedral"
|
msgid "Tetrahedral"
|
||||||
|
@ -1010,11 +1114,43 @@ msgctxt "infill_pattern option concentric"
|
||||||
msgid "Concentric"
|
msgid "Concentric"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "infill_pattern option concentric_3d"
|
||||||
|
msgid "Concentric 3D"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
msgctxt "infill_pattern option zigzag"
|
msgctxt "infill_pattern option zigzag"
|
||||||
msgid "Zig Zag"
|
msgid "Zig Zag"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "sub_div_rad_mult label"
|
||||||
|
msgid "Cubic Subdivision Radius"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "sub_div_rad_mult description"
|
||||||
|
msgid ""
|
||||||
|
"A multiplier on the radius from the center of each cube to check for the "
|
||||||
|
"boundary of the model, as to decide whether this cube should be subdivided. "
|
||||||
|
"Larger values lead to more subdivisions, i.e. more small cubes."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "sub_div_rad_add label"
|
||||||
|
msgid "Cubic Subdivision Shell"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "sub_div_rad_add description"
|
||||||
|
msgid ""
|
||||||
|
"An addition to the radius from the center of each cube to check for the "
|
||||||
|
"boundary of the model, as to decide whether this cube should be subdivided. "
|
||||||
|
"Larger values lead to a thicker shell of small cubes near the boundary of "
|
||||||
|
"the model."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
msgctxt "infill_overlap label"
|
msgctxt "infill_overlap label"
|
||||||
msgid "Infill Overlap Percentage"
|
msgid "Infill Overlap Percentage"
|
||||||
|
@ -1148,6 +1284,19 @@ msgid ""
|
||||||
"speed of that layer."
|
"speed of that layer."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "default_material_print_temperature label"
|
||||||
|
msgid "Default Printing Temperature"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "default_material_print_temperature description"
|
||||||
|
msgid ""
|
||||||
|
"The default temperature used for printing. This should be the \"base\" "
|
||||||
|
"temperature of a material. All other print temperatures should use offsets "
|
||||||
|
"based on this value"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
msgctxt "material_print_temperature label"
|
msgctxt "material_print_temperature label"
|
||||||
msgid "Printing Temperature"
|
msgid "Printing Temperature"
|
||||||
|
@ -1159,6 +1308,42 @@ msgid ""
|
||||||
"The temperature used for printing. Set at 0 to pre-heat the printer manually."
|
"The temperature used for printing. Set at 0 to pre-heat the printer manually."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "material_print_temperature_layer_0 label"
|
||||||
|
msgid "Printing Temperature Initial Layer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "material_print_temperature_layer_0 description"
|
||||||
|
msgid ""
|
||||||
|
"The temperature used for printing the first layer. Set at 0 to disable "
|
||||||
|
"special handling of the initial layer."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "material_initial_print_temperature label"
|
||||||
|
msgid "Initial Printing Temperature"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "material_initial_print_temperature description"
|
||||||
|
msgid ""
|
||||||
|
"The minimal temperature while heating up to the Printing Temperature at "
|
||||||
|
"which printing can already start."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "material_final_print_temperature label"
|
||||||
|
msgid "Final Printing Temperature"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "material_final_print_temperature description"
|
||||||
|
msgid ""
|
||||||
|
"The temperature to which to already start cooling down just before the end "
|
||||||
|
"of printing."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
msgctxt "material_flow_temp_graph label"
|
msgctxt "material_flow_temp_graph label"
|
||||||
msgid "Flow Temperature Graph"
|
msgid "Flow Temperature Graph"
|
||||||
|
@ -1195,6 +1380,16 @@ msgid ""
|
||||||
"printer manually."
|
"printer manually."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "material_bed_temperature_layer_0 label"
|
||||||
|
msgid "Build Plate Temperature Initial Layer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "material_bed_temperature_layer_0 description"
|
||||||
|
msgid "The temperature used for the heated build plate at the first layer."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
msgctxt "material_diameter label"
|
msgctxt "material_diameter label"
|
||||||
msgid "Diameter"
|
msgid "Diameter"
|
||||||
|
@ -1230,6 +1425,16 @@ msgid ""
|
||||||
"Retract the filament when the nozzle is moving over a non-printed area. "
|
"Retract the filament when the nozzle is moving over a non-printed area. "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "retract_at_layer_change label"
|
||||||
|
msgid "Retract at Layer Change"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "retract_at_layer_change description"
|
||||||
|
msgid "Retract the filament when the nozzle is moving to the next layer."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
msgctxt "retraction_amount label"
|
msgctxt "retraction_amount label"
|
||||||
msgid "Retraction Distance"
|
msgid "Retraction Distance"
|
||||||
|
@ -1553,7 +1758,9 @@ msgstr ""
|
||||||
msgctxt "speed_travel_layer_0 description"
|
msgctxt "speed_travel_layer_0 description"
|
||||||
msgid ""
|
msgid ""
|
||||||
"The speed of travel moves in the initial layer. A lower value is advised to "
|
"The speed of travel moves in the initial layer. A lower value is advised to "
|
||||||
"prevent pulling previously printed parts away from the build plate."
|
"prevent pulling previously printed parts away from the build plate. The "
|
||||||
|
"value of this setting can automatically be calculated from the ratio between "
|
||||||
|
"the Travel Speed and the Print Speed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
|
@ -1991,9 +2198,7 @@ msgid ""
|
||||||
"results in slightly longer travel moves but reduces the need for "
|
"results in slightly longer travel moves but reduces the need for "
|
||||||
"retractions. If combing is off, the material will retract and the nozzle "
|
"retractions. If combing is off, the material will retract and the nozzle "
|
||||||
"moves in a straight line to the next point. It is also possible to avoid "
|
"moves in a straight line to the next point. It is also possible to avoid "
|
||||||
"combing over top/bottom skin areas by combing within the infill only. It is "
|
"combing over top/bottom skin areas by combing within the infill only."
|
||||||
"also possible to avoid combing over top/bottom skin areas by combing within "
|
|
||||||
"the infill only."
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
|
@ -2013,7 +2218,7 @@ msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
msgctxt "travel_avoid_other_parts label"
|
msgctxt "travel_avoid_other_parts label"
|
||||||
msgid "Avoid Printed Parts when Traveling"
|
msgid "Avoid Printed Parts When Traveling"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
|
@ -2035,9 +2240,47 @@ msgid ""
|
||||||
"during travel moves."
|
"during travel moves."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "start_layers_at_same_position label"
|
||||||
|
msgid "Start Layers with the Same Part"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "start_layers_at_same_position description"
|
||||||
|
msgid ""
|
||||||
|
"In each layer start with printing the object near the same point, so that we "
|
||||||
|
"don't start a new layer with printing the piece which the previous layer "
|
||||||
|
"ended with. This makes for better overhangs and small parts, but increases "
|
||||||
|
"printing time."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "layer_start_x label"
|
||||||
|
msgid "Layer Start X"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "layer_start_x description"
|
||||||
|
msgid ""
|
||||||
|
"The X coordinate of the position near where to find the part to start "
|
||||||
|
"printing each layer."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "layer_start_y label"
|
||||||
|
msgid "Layer Start Y"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "layer_start_y description"
|
||||||
|
msgid ""
|
||||||
|
"The Y coordinate of the position near where to find the part to start "
|
||||||
|
"printing each layer."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
msgctxt "retraction_hop_enabled label"
|
msgctxt "retraction_hop_enabled label"
|
||||||
msgid "Z Hop when Retracted"
|
msgid "Z Hop When Retracted"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
|
@ -2156,6 +2399,19 @@ msgid ""
|
||||||
"maximum fan speed."
|
"maximum fan speed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "cool_fan_speed_0 label"
|
||||||
|
msgid "Initial Fan Speed"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "cool_fan_speed_0 description"
|
||||||
|
msgid ""
|
||||||
|
"The speed at which the fans spin at the start of the print. In subsequent "
|
||||||
|
"layers the fan speed is gradually increased up to the layer corresponding to "
|
||||||
|
"Regular Fan Speed at Height."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
msgctxt "cool_fan_full_at_height label"
|
msgctxt "cool_fan_full_at_height label"
|
||||||
msgid "Regular Fan Speed at Height"
|
msgid "Regular Fan Speed at Height"
|
||||||
|
@ -2165,7 +2421,8 @@ msgstr ""
|
||||||
msgctxt "cool_fan_full_at_height description"
|
msgctxt "cool_fan_full_at_height description"
|
||||||
msgid ""
|
msgid ""
|
||||||
"The height at which the fans spin on regular fan speed. At the layers below "
|
"The height at which the fans spin on regular fan speed. At the layers below "
|
||||||
"the fan speed gradually increases from zero to regular fan speed."
|
"the fan speed gradually increases from Initial Fan Speed to Regular Fan "
|
||||||
|
"Speed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
|
@ -2358,6 +2615,11 @@ msgctxt "support_pattern option concentric"
|
||||||
msgid "Concentric"
|
msgid "Concentric"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "support_pattern option concentric_3d"
|
||||||
|
msgid "Concentric 3D"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
msgctxt "support_pattern option zigzag"
|
msgctxt "support_pattern option zigzag"
|
||||||
msgid "Zig Zag"
|
msgid "Zig Zag"
|
||||||
|
@ -2635,6 +2897,11 @@ msgctxt "support_interface_pattern option concentric"
|
||||||
msgid "Concentric"
|
msgid "Concentric"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "support_interface_pattern option concentric_3d"
|
||||||
|
msgid "Concentric 3D"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
msgctxt "support_interface_pattern option zigzag"
|
msgctxt "support_interface_pattern option zigzag"
|
||||||
msgid "Zig Zag"
|
msgid "Zig Zag"
|
||||||
|
@ -2751,6 +3018,11 @@ msgctxt "adhesion_type option raft"
|
||||||
msgid "Raft"
|
msgid "Raft"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "adhesion_type option none"
|
||||||
|
msgid "None"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
msgctxt "adhesion_extruder_nr label"
|
msgctxt "adhesion_extruder_nr label"
|
||||||
msgid "Build Plate Adhesion Extruder"
|
msgid "Build Plate Adhesion Extruder"
|
||||||
|
@ -3198,6 +3470,30 @@ msgctxt "prime_tower_size description"
|
||||||
msgid "The width of the prime tower."
|
msgid "The width of the prime tower."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "prime_tower_min_volume label"
|
||||||
|
msgid "Prime Tower Minimum Volume"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "prime_tower_min_volume description"
|
||||||
|
msgid ""
|
||||||
|
"The minimum volume for each layer of the prime tower in order to purge "
|
||||||
|
"enough material."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "prime_tower_wall_thickness label"
|
||||||
|
msgid "Prime Tower Thickness"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "prime_tower_wall_thickness description"
|
||||||
|
msgid ""
|
||||||
|
"The thickness of the hollow prime tower. A thickness larger than half the "
|
||||||
|
"Prime Tower Minimum Volume will result in a dense prime tower."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
msgctxt "prime_tower_position_x label"
|
msgctxt "prime_tower_position_x label"
|
||||||
msgid "Prime Tower X Position"
|
msgid "Prime Tower X Position"
|
||||||
|
@ -3232,7 +3528,7 @@ msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
msgctxt "prime_tower_wipe_enabled label"
|
msgctxt "prime_tower_wipe_enabled label"
|
||||||
msgid "Wipe Nozzle on Prime Tower"
|
msgid "Wipe Inactive Nozzle on Prime Tower"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
|
@ -3243,15 +3539,16 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
msgctxt "multiple_mesh_overlap label"
|
msgctxt "dual_pre_wipe label"
|
||||||
msgid "Dual Extrusion Overlap"
|
msgid "Wipe Nozzle After Switch"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
msgctxt "multiple_mesh_overlap description"
|
msgctxt "dual_pre_wipe description"
|
||||||
msgid ""
|
msgid ""
|
||||||
"Make the models printed with different extruder trains overlap a bit. This "
|
"After switching extruder, wipe the oozed material off of the nozzle on the "
|
||||||
"makes the different materials bond together better."
|
"first thing printed. This performs a safe slow wipe move at a place where "
|
||||||
|
"the oozed material causes least harm to the surface quality of your print."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
|
@ -3308,8 +3605,9 @@ msgstr ""
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
msgctxt "meshfix_union_all description"
|
msgctxt "meshfix_union_all description"
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ignore the internal geometry arising from overlapping volumes and print the "
|
"Ignore the internal geometry arising from overlapping volumes within a mesh "
|
||||||
"volumes as one. This may cause internal cavities to disappear."
|
"and print the volumes as one. This may cause unintended internal cavities to "
|
||||||
|
"disappear."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
|
@ -3352,6 +3650,18 @@ msgid ""
|
||||||
"everything else fails to produce proper GCode."
|
"everything else fails to produce proper GCode."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "multiple_mesh_overlap label"
|
||||||
|
msgid "Merged Meshes Overlap"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "multiple_mesh_overlap description"
|
||||||
|
msgid ""
|
||||||
|
"Make meshes which are touching each other overlap a bit. This makes them "
|
||||||
|
"bond together better."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
msgctxt "carve_multiple_volumes label"
|
msgctxt "carve_multiple_volumes label"
|
||||||
msgid "Remove Mesh Intersection"
|
msgid "Remove Mesh Intersection"
|
||||||
|
@ -3360,8 +3670,22 @@ msgstr ""
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
msgctxt "carve_multiple_volumes description"
|
msgctxt "carve_multiple_volumes description"
|
||||||
msgid ""
|
msgid ""
|
||||||
"Remove areas where multiple objecs are overlapping with each other. This is "
|
"Remove areas where multiple meshes are overlapping with each other. This may "
|
||||||
"may be used if merged dual material objects overlap with each other."
|
"be used if merged dual material objects overlap with each other."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "alternate_carve_order label"
|
||||||
|
msgid "Alternate Mesh Removal"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "alternate_carve_order description"
|
||||||
|
msgid ""
|
||||||
|
"Switch to which mesh intersecting volumes will belong with every layer, so "
|
||||||
|
"that the overlapping meshes become interwoven. Turning this setting off will "
|
||||||
|
"cause one of the meshes to obtain all of the volume in the overlap, while it "
|
||||||
|
"is removed from the other meshes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
|
@ -3425,6 +3749,30 @@ msgid ""
|
||||||
"lower order and normal meshes."
|
"lower order and normal meshes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "support_mesh label"
|
||||||
|
msgid "Support Mesh"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "support_mesh description"
|
||||||
|
msgid ""
|
||||||
|
"Use this mesh to specify support areas. This can be used to generate support "
|
||||||
|
"structure."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "anti_overhang_mesh label"
|
||||||
|
msgid "Anti Overhang Mesh"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "anti_overhang_mesh description"
|
||||||
|
msgid ""
|
||||||
|
"Use this mesh to specify where no part of the model should be detected as "
|
||||||
|
"overhang. This can be used to remove unwanted support structure."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
msgctxt "magic_mesh_surface_mode label"
|
msgctxt "magic_mesh_surface_mode label"
|
||||||
msgid "Surface Mode"
|
msgid "Surface Mode"
|
||||||
|
@ -3677,6 +4025,17 @@ msgid ""
|
||||||
"Small widths can lead to unstable support structures."
|
"Small widths can lead to unstable support structures."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "infill_hollow label"
|
||||||
|
msgid "Hollow Out Objects"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "infill_hollow description"
|
||||||
|
msgid ""
|
||||||
|
"Remove all infill and make the inside of the object eligible for support."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: fdmprinter.def.json
|
#: fdmprinter.def.json
|
||||||
msgctxt "magic_fuzzy_skin_enabled label"
|
msgctxt "magic_fuzzy_skin_enabled label"
|
||||||
msgid "Fuzzy Skin"
|
msgid "Fuzzy Skin"
|
||||||
|
@ -4040,3 +4399,70 @@ msgid ""
|
||||||
"which in turn results in less upward connections with the next layer. Only "
|
"which in turn results in less upward connections with the next layer. Only "
|
||||||
"applies to Wire Printing."
|
"applies to Wire Printing."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "command_line_settings label"
|
||||||
|
msgid "Command Line Settings"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "command_line_settings description"
|
||||||
|
msgid ""
|
||||||
|
"Settings which are only used if CuraEngine isn't called from the Cura "
|
||||||
|
"frontend."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "center_object label"
|
||||||
|
msgid "Center object"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "center_object description"
|
||||||
|
msgid ""
|
||||||
|
"Whether to center the object on the middle of the build platform (0,0), "
|
||||||
|
"instead of using the coordinate system in which the object was saved."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "mesh_position_x label"
|
||||||
|
msgid "Mesh position x"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "mesh_position_x description"
|
||||||
|
msgid "Offset applied to the object in the x direction."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "mesh_position_y label"
|
||||||
|
msgid "Mesh position y"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "mesh_position_y description"
|
||||||
|
msgid "Offset applied to the object in the y direction."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "mesh_position_z label"
|
||||||
|
msgid "Mesh position z"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "mesh_position_z description"
|
||||||
|
msgid ""
|
||||||
|
"Offset applied to the object in the z direction. With this you can perform "
|
||||||
|
"what was used to be called 'Object Sink'."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "mesh_rotation_matrix label"
|
||||||
|
msgid "Mesh Rotation Matrix"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fdmprinter.def.json
|
||||||
|
msgctxt "mesh_rotation_matrix description"
|
||||||
|
msgid ""
|
||||||
|
"Transformation matrix to be applied to the model when loading it from file."
|
||||||
|
msgstr ""
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,182 +1,173 @@
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Uranium json setting files\n"
|
"Project-Id-Version: Uranium json setting files\n"
|
||||||
"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n"
|
"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n"
|
||||||
"POT-Creation-Date: 2016-09-20 17:35+0000\n"
|
"POT-Creation-Date: 2016-12-28 10:51+0000\n"
|
||||||
"PO-Revision-Date: 2016-09-29 13:02+0200\n"
|
"PO-Revision-Date: 2016-09-29 13:02+0200\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE\n"
|
"Language-Team: LANGUAGE\n"
|
||||||
"MIME-Version: 1.0\n"
|
"Language: \n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_settings label"
|
#: fdmextruder.def.json
|
||||||
msgid "Machine"
|
msgctxt "machine_settings label"
|
||||||
msgstr "Laite"
|
msgid "Machine"
|
||||||
|
msgstr "Laite"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_settings description"
|
#: fdmextruder.def.json
|
||||||
msgid "Machine specific settings"
|
msgctxt "machine_settings description"
|
||||||
msgstr "Laitekohtaiset asetukset"
|
msgid "Machine specific settings"
|
||||||
|
msgstr "Laitekohtaiset asetukset"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "extruder_nr label"
|
#: fdmextruder.def.json
|
||||||
msgid "Extruder"
|
msgctxt "extruder_nr label"
|
||||||
msgstr "Suulake"
|
msgid "Extruder"
|
||||||
|
msgstr "Suulake"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "extruder_nr description"
|
#: fdmextruder.def.json
|
||||||
msgid "The extruder train used for printing. This is used in multi-extrusion."
|
msgctxt "extruder_nr description"
|
||||||
msgstr "Tulostukseen käytettävä suulakeryhmä. Tätä käytetään monipursotuksessa."
|
msgid "The extruder train used for printing. This is used in multi-extrusion."
|
||||||
|
msgstr "Tulostukseen käytettävä suulakeryhmä. Tätä käytetään monipursotuksessa."
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_nozzle_offset_x label"
|
#: fdmextruder.def.json
|
||||||
msgid "Nozzle X Offset"
|
msgctxt "machine_nozzle_offset_x label"
|
||||||
msgstr "Suuttimen X-siirtymä"
|
msgid "Nozzle X Offset"
|
||||||
|
msgstr "Suuttimen X-siirtymä"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_nozzle_offset_x description"
|
#: fdmextruder.def.json
|
||||||
msgid "The x-coordinate of the offset of the nozzle."
|
msgctxt "machine_nozzle_offset_x description"
|
||||||
msgstr "Suuttimen siirtymän X-koordinaatti."
|
msgid "The x-coordinate of the offset of the nozzle."
|
||||||
|
msgstr "Suuttimen siirtymän X-koordinaatti."
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_nozzle_offset_y label"
|
#: fdmextruder.def.json
|
||||||
msgid "Nozzle Y Offset"
|
msgctxt "machine_nozzle_offset_y label"
|
||||||
msgstr "Suuttimen Y-siirtymä"
|
msgid "Nozzle Y Offset"
|
||||||
|
msgstr "Suuttimen Y-siirtymä"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_nozzle_offset_y description"
|
#: fdmextruder.def.json
|
||||||
msgid "The y-coordinate of the offset of the nozzle."
|
msgctxt "machine_nozzle_offset_y description"
|
||||||
msgstr "Suuttimen siirtymän Y-koordinaatti."
|
msgid "The y-coordinate of the offset of the nozzle."
|
||||||
|
msgstr "Suuttimen siirtymän Y-koordinaatti."
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_extruder_start_code label"
|
#: fdmextruder.def.json
|
||||||
msgid "Extruder Start G-Code"
|
msgctxt "machine_extruder_start_code label"
|
||||||
msgstr "Suulakkeen aloitus-GCode"
|
msgid "Extruder Start G-Code"
|
||||||
|
msgstr "Suulakkeen aloitus-GCode"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_extruder_start_code description"
|
#: fdmextruder.def.json
|
||||||
msgid "Start g-code to execute whenever turning the extruder on."
|
msgctxt "machine_extruder_start_code description"
|
||||||
msgstr "Aloitus-GCode, joka suoritetaan suulakkeen käynnistyksen yhteydessä."
|
msgid "Start g-code to execute whenever turning the extruder on."
|
||||||
|
msgstr "Aloitus-GCode, joka suoritetaan suulakkeen käynnistyksen yhteydessä."
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_extruder_start_pos_abs label"
|
#: fdmextruder.def.json
|
||||||
msgid "Extruder Start Position Absolute"
|
msgctxt "machine_extruder_start_pos_abs label"
|
||||||
msgstr "Suulakkeen aloitussijainti absoluuttinen"
|
msgid "Extruder Start Position Absolute"
|
||||||
|
msgstr "Suulakkeen aloitussijainti absoluuttinen"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_extruder_start_pos_abs description"
|
#: fdmextruder.def.json
|
||||||
msgid ""
|
msgctxt "machine_extruder_start_pos_abs description"
|
||||||
"Make the extruder starting position absolute rather than relative to the "
|
msgid "Make the extruder starting position absolute rather than relative to the last-known location of the head."
|
||||||
"last-known location of the head."
|
msgstr "Tekee suulakkeen aloitussijainnista absoluuttisen eikä suhteellisen viimeksi tunnettuun pään sijaintiin nähden."
|
||||||
msgstr "Tekee suulakkeen aloitussijainnista absoluuttisen eikä suhteellisen viimeksi tunnettuun pään sijaintiin nähden."
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_start_pos_x label"
|
||||||
msgctxt "machine_extruder_start_pos_x label"
|
msgid "Extruder Start Position X"
|
||||||
msgid "Extruder Start Position X"
|
msgstr "Suulakkeen aloitussijainti X"
|
||||||
msgstr "Suulakkeen aloitussijainti X"
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_start_pos_x description"
|
||||||
msgctxt "machine_extruder_start_pos_x description"
|
msgid "The x-coordinate of the starting position when turning the extruder on."
|
||||||
msgid "The x-coordinate of the starting position when turning the extruder on."
|
msgstr "Aloitussijainnin X-koordinaatti suulaketta käynnistettäessä."
|
||||||
msgstr "Aloitussijainnin X-koordinaatti suulaketta käynnistettäessä."
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_start_pos_y label"
|
||||||
msgctxt "machine_extruder_start_pos_y label"
|
msgid "Extruder Start Position Y"
|
||||||
msgid "Extruder Start Position Y"
|
msgstr "Suulakkeen aloitussijainti Y"
|
||||||
msgstr "Suulakkeen aloitussijainti Y"
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_start_pos_y description"
|
||||||
msgctxt "machine_extruder_start_pos_y description"
|
msgid "The y-coordinate of the starting position when turning the extruder on."
|
||||||
msgid "The y-coordinate of the starting position when turning the extruder on."
|
msgstr "Aloitussijainnin Y-koordinaatti suulaketta käynnistettäessä."
|
||||||
msgstr "Aloitussijainnin Y-koordinaatti suulaketta käynnistettäessä."
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_end_code label"
|
||||||
msgctxt "machine_extruder_end_code label"
|
msgid "Extruder End G-Code"
|
||||||
msgid "Extruder End G-Code"
|
msgstr "Suulakkeen lopetus-GCode"
|
||||||
msgstr "Suulakkeen lopetus-GCode"
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_end_code description"
|
||||||
msgctxt "machine_extruder_end_code description"
|
msgid "End g-code to execute whenever turning the extruder off."
|
||||||
msgid "End g-code to execute whenever turning the extruder off."
|
msgstr "Lopetus-GCode, joka suoritetaan, kun suulake poistetaan käytöstä."
|
||||||
msgstr "Lopetus-GCode, joka suoritetaan, kun suulake poistetaan käytöstä."
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_end_pos_abs label"
|
||||||
msgctxt "machine_extruder_end_pos_abs label"
|
msgid "Extruder End Position Absolute"
|
||||||
msgid "Extruder End Position Absolute"
|
msgstr "Suulakkeen lopetussijainti absoluuttinen"
|
||||||
msgstr "Suulakkeen lopetussijainti absoluuttinen"
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_end_pos_abs description"
|
||||||
msgctxt "machine_extruder_end_pos_abs description"
|
msgid "Make the extruder ending position absolute rather than relative to the last-known location of the head."
|
||||||
msgid ""
|
msgstr "Tekee suulakkeen lopetussijainnista absoluuttisen eikä suhteellisen viimeksi tunnettuun pään sijaintiin nähden."
|
||||||
"Make the extruder ending position absolute rather than relative to the last-"
|
|
||||||
"known location of the head."
|
#: fdmextruder.def.json
|
||||||
msgstr "Tekee suulakkeen lopetussijainnista absoluuttisen eikä suhteellisen viimeksi tunnettuun pään sijaintiin nähden."
|
msgctxt "machine_extruder_end_pos_x label"
|
||||||
|
msgid "Extruder End Position X"
|
||||||
#: fdmextruder.def.json
|
msgstr "Suulakkeen lopetussijainti X"
|
||||||
msgctxt "machine_extruder_end_pos_x label"
|
|
||||||
msgid "Extruder End Position X"
|
#: fdmextruder.def.json
|
||||||
msgstr "Suulakkeen lopetussijainti X"
|
msgctxt "machine_extruder_end_pos_x description"
|
||||||
|
msgid "The x-coordinate of the ending position when turning the extruder off."
|
||||||
#: fdmextruder.def.json
|
msgstr "Lopetussijainnin X-koordinaatti, kun suulake poistetaan käytöstä."
|
||||||
msgctxt "machine_extruder_end_pos_x description"
|
|
||||||
msgid "The x-coordinate of the ending position when turning the extruder off."
|
#: fdmextruder.def.json
|
||||||
msgstr "Lopetussijainnin X-koordinaatti, kun suulake poistetaan käytöstä."
|
msgctxt "machine_extruder_end_pos_y label"
|
||||||
|
msgid "Extruder End Position Y"
|
||||||
#: fdmextruder.def.json
|
msgstr "Suulakkeen lopetussijainti Y"
|
||||||
msgctxt "machine_extruder_end_pos_y label"
|
|
||||||
msgid "Extruder End Position Y"
|
#: fdmextruder.def.json
|
||||||
msgstr "Suulakkeen lopetussijainti Y"
|
msgctxt "machine_extruder_end_pos_y description"
|
||||||
|
msgid "The y-coordinate of the ending position when turning the extruder off."
|
||||||
#: fdmextruder.def.json
|
msgstr "Lopetussijainnin Y-koordinaatti, kun suulake poistetaan käytöstä."
|
||||||
msgctxt "machine_extruder_end_pos_y description"
|
|
||||||
msgid "The y-coordinate of the ending position when turning the extruder off."
|
#: fdmextruder.def.json
|
||||||
msgstr "Lopetussijainnin Y-koordinaatti, kun suulake poistetaan käytöstä."
|
msgctxt "extruder_prime_pos_z label"
|
||||||
|
msgid "Extruder Prime Z Position"
|
||||||
#: fdmextruder.def.json
|
msgstr "Suulakkeen esitäytön Z-sijainti"
|
||||||
msgctxt "extruder_prime_pos_z label"
|
|
||||||
msgid "Extruder Prime Z Position"
|
#: fdmextruder.def.json
|
||||||
msgstr "Suulakkeen esitäytön Z-sijainti"
|
msgctxt "extruder_prime_pos_z description"
|
||||||
|
msgid "The Z coordinate of the position where the nozzle primes at the start of printing."
|
||||||
#: fdmextruder.def.json
|
msgstr "Z-koordinaatti sijainnille, jossa suutin esitäytetään tulostusta aloitettaessa."
|
||||||
msgctxt "extruder_prime_pos_z description"
|
|
||||||
msgid ""
|
#: fdmextruder.def.json
|
||||||
"The Z coordinate of the position where the nozzle primes at the start of "
|
msgctxt "platform_adhesion label"
|
||||||
"printing."
|
msgid "Build Plate Adhesion"
|
||||||
msgstr "Z-koordinaatti sijainnille, jossa suutin esitäytetään tulostusta aloitettaessa."
|
msgstr "Alustan tarttuvuus"
|
||||||
|
|
||||||
#: fdmextruder.def.json
|
#: fdmextruder.def.json
|
||||||
msgctxt "platform_adhesion label"
|
msgctxt "platform_adhesion description"
|
||||||
msgid "Build Plate Adhesion"
|
msgid "Adhesion"
|
||||||
msgstr "Alustan tarttuvuus"
|
msgstr "Tarttuvuus"
|
||||||
|
|
||||||
#: fdmextruder.def.json
|
#: fdmextruder.def.json
|
||||||
msgctxt "platform_adhesion description"
|
msgctxt "extruder_prime_pos_x label"
|
||||||
msgid "Adhesion"
|
msgid "Extruder Prime X Position"
|
||||||
msgstr "Tarttuvuus"
|
msgstr "Suulakkeen esitäytön X-sijainti"
|
||||||
|
|
||||||
#: fdmextruder.def.json
|
#: fdmextruder.def.json
|
||||||
msgctxt "extruder_prime_pos_x label"
|
msgctxt "extruder_prime_pos_x description"
|
||||||
msgid "Extruder Prime X Position"
|
msgid "The X coordinate of the position where the nozzle primes at the start of printing."
|
||||||
msgstr "Suulakkeen esitäytön X-sijainti"
|
msgstr "X-koordinaatti sijainnille, jossa suutin esitäytetään tulostusta aloitettaessa."
|
||||||
|
|
||||||
#: fdmextruder.def.json
|
#: fdmextruder.def.json
|
||||||
msgctxt "extruder_prime_pos_x description"
|
msgctxt "extruder_prime_pos_y label"
|
||||||
msgid ""
|
msgid "Extruder Prime Y Position"
|
||||||
"The X coordinate of the position where the nozzle primes at the start of "
|
msgstr "Suulakkeen esitäytön Y-sijainti"
|
||||||
"printing."
|
|
||||||
msgstr "X-koordinaatti sijainnille, jossa suutin esitäytetään tulostusta aloitettaessa."
|
#: fdmextruder.def.json
|
||||||
|
msgctxt "extruder_prime_pos_y description"
|
||||||
#: fdmextruder.def.json
|
msgid "The Y coordinate of the position where the nozzle primes at the start of printing."
|
||||||
msgctxt "extruder_prime_pos_y label"
|
msgstr "Y-koordinaatti sijainnille, jossa suutin esitäytetään tulostusta aloitettaessa."
|
||||||
msgid "Extruder Prime Y Position"
|
|
||||||
msgstr "Suulakkeen esitäytön Y-sijainti"
|
|
||||||
|
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "extruder_prime_pos_y description"
|
|
||||||
msgid ""
|
|
||||||
"The Y coordinate of the position where the nozzle primes at the start of "
|
|
||||||
"printing."
|
|
||||||
msgstr "Y-koordinaatti sijainnille, jossa suutin esitäytetään tulostusta aloitettaessa."
|
|
||||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1,182 +1,173 @@
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Uranium json setting files\n"
|
"Project-Id-Version: Uranium json setting files\n"
|
||||||
"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n"
|
"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n"
|
||||||
"POT-Creation-Date: 2016-09-20 17:35+0000\n"
|
"POT-Creation-Date: 2016-12-28 10:51+0000\n"
|
||||||
"PO-Revision-Date: 2016-09-29 13:02+0200\n"
|
"PO-Revision-Date: 2016-09-29 13:02+0200\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE\n"
|
"Language-Team: LANGUAGE\n"
|
||||||
"MIME-Version: 1.0\n"
|
"Language: \n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_settings label"
|
#: fdmextruder.def.json
|
||||||
msgid "Machine"
|
msgctxt "machine_settings label"
|
||||||
msgstr "Machine"
|
msgid "Machine"
|
||||||
|
msgstr "Machine"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_settings description"
|
#: fdmextruder.def.json
|
||||||
msgid "Machine specific settings"
|
msgctxt "machine_settings description"
|
||||||
msgstr "Paramètres spécifiques de la machine"
|
msgid "Machine specific settings"
|
||||||
|
msgstr "Paramètres spécifiques de la machine"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "extruder_nr label"
|
#: fdmextruder.def.json
|
||||||
msgid "Extruder"
|
msgctxt "extruder_nr label"
|
||||||
msgstr "Extrudeuse"
|
msgid "Extruder"
|
||||||
|
msgstr "Extrudeuse"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "extruder_nr description"
|
#: fdmextruder.def.json
|
||||||
msgid "The extruder train used for printing. This is used in multi-extrusion."
|
msgctxt "extruder_nr description"
|
||||||
msgstr "Le train d'extrudeuse utilisé pour l'impression. Cela est utilisé en multi-extrusion."
|
msgid "The extruder train used for printing. This is used in multi-extrusion."
|
||||||
|
msgstr "Le train d'extrudeuse utilisé pour l'impression. Cela est utilisé en multi-extrusion."
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_nozzle_offset_x label"
|
#: fdmextruder.def.json
|
||||||
msgid "Nozzle X Offset"
|
msgctxt "machine_nozzle_offset_x label"
|
||||||
msgstr "Buse Décalage X"
|
msgid "Nozzle X Offset"
|
||||||
|
msgstr "Buse Décalage X"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_nozzle_offset_x description"
|
#: fdmextruder.def.json
|
||||||
msgid "The x-coordinate of the offset of the nozzle."
|
msgctxt "machine_nozzle_offset_x description"
|
||||||
msgstr "Les coordonnées X du décalage de la buse."
|
msgid "The x-coordinate of the offset of the nozzle."
|
||||||
|
msgstr "Les coordonnées X du décalage de la buse."
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_nozzle_offset_y label"
|
#: fdmextruder.def.json
|
||||||
msgid "Nozzle Y Offset"
|
msgctxt "machine_nozzle_offset_y label"
|
||||||
msgstr "Buse Décalage Y"
|
msgid "Nozzle Y Offset"
|
||||||
|
msgstr "Buse Décalage Y"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_nozzle_offset_y description"
|
#: fdmextruder.def.json
|
||||||
msgid "The y-coordinate of the offset of the nozzle."
|
msgctxt "machine_nozzle_offset_y description"
|
||||||
msgstr "Les coordonnées Y du décalage de la buse."
|
msgid "The y-coordinate of the offset of the nozzle."
|
||||||
|
msgstr "Les coordonnées Y du décalage de la buse."
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_extruder_start_code label"
|
#: fdmextruder.def.json
|
||||||
msgid "Extruder Start G-Code"
|
msgctxt "machine_extruder_start_code label"
|
||||||
msgstr "Extrudeuse G-Code de démarrage"
|
msgid "Extruder Start G-Code"
|
||||||
|
msgstr "Extrudeuse G-Code de démarrage"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_extruder_start_code description"
|
#: fdmextruder.def.json
|
||||||
msgid "Start g-code to execute whenever turning the extruder on."
|
msgctxt "machine_extruder_start_code description"
|
||||||
msgstr "G-Code de démarrage à exécuter à chaque mise en marche de l'extrudeuse."
|
msgid "Start g-code to execute whenever turning the extruder on."
|
||||||
|
msgstr "G-Code de démarrage à exécuter à chaque mise en marche de l'extrudeuse."
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_extruder_start_pos_abs label"
|
#: fdmextruder.def.json
|
||||||
msgid "Extruder Start Position Absolute"
|
msgctxt "machine_extruder_start_pos_abs label"
|
||||||
msgstr "Extrudeuse Position de départ absolue"
|
msgid "Extruder Start Position Absolute"
|
||||||
|
msgstr "Extrudeuse Position de départ absolue"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_extruder_start_pos_abs description"
|
#: fdmextruder.def.json
|
||||||
msgid ""
|
msgctxt "machine_extruder_start_pos_abs description"
|
||||||
"Make the extruder starting position absolute rather than relative to the "
|
msgid "Make the extruder starting position absolute rather than relative to the last-known location of the head."
|
||||||
"last-known location of the head."
|
msgstr "Rendre la position de départ de l'extrudeuse absolue plutôt que relative à la dernière position connue de la tête."
|
||||||
msgstr "Rendre la position de départ de l'extrudeuse absolue plutôt que relative à la dernière position connue de la tête."
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_start_pos_x label"
|
||||||
msgctxt "machine_extruder_start_pos_x label"
|
msgid "Extruder Start Position X"
|
||||||
msgid "Extruder Start Position X"
|
msgstr "Extrudeuse Position de départ X"
|
||||||
msgstr "Extrudeuse Position de départ X"
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_start_pos_x description"
|
||||||
msgctxt "machine_extruder_start_pos_x description"
|
msgid "The x-coordinate of the starting position when turning the extruder on."
|
||||||
msgid "The x-coordinate of the starting position when turning the extruder on."
|
msgstr "Les coordonnées X de la position de départ lors de la mise en marche de l'extrudeuse."
|
||||||
msgstr "Les coordonnées X de la position de départ lors de la mise en marche de l'extrudeuse."
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_start_pos_y label"
|
||||||
msgctxt "machine_extruder_start_pos_y label"
|
msgid "Extruder Start Position Y"
|
||||||
msgid "Extruder Start Position Y"
|
msgstr "Extrudeuse Position de départ Y"
|
||||||
msgstr "Extrudeuse Position de départ Y"
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_start_pos_y description"
|
||||||
msgctxt "machine_extruder_start_pos_y description"
|
msgid "The y-coordinate of the starting position when turning the extruder on."
|
||||||
msgid "The y-coordinate of the starting position when turning the extruder on."
|
msgstr "Les coordonnées Y de la position de départ lors de la mise en marche de l'extrudeuse."
|
||||||
msgstr "Les coordonnées Y de la position de départ lors de la mise en marche de l'extrudeuse."
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_end_code label"
|
||||||
msgctxt "machine_extruder_end_code label"
|
msgid "Extruder End G-Code"
|
||||||
msgid "Extruder End G-Code"
|
msgstr "Extrudeuse G-Code de fin"
|
||||||
msgstr "Extrudeuse G-Code de fin"
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_end_code description"
|
||||||
msgctxt "machine_extruder_end_code description"
|
msgid "End g-code to execute whenever turning the extruder off."
|
||||||
msgid "End g-code to execute whenever turning the extruder off."
|
msgstr "G-Code de fin à exécuter à chaque arrêt de l'extrudeuse."
|
||||||
msgstr "G-Code de fin à exécuter à chaque arrêt de l'extrudeuse."
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_end_pos_abs label"
|
||||||
msgctxt "machine_extruder_end_pos_abs label"
|
msgid "Extruder End Position Absolute"
|
||||||
msgid "Extruder End Position Absolute"
|
msgstr "Extrudeuse Position de fin absolue"
|
||||||
msgstr "Extrudeuse Position de fin absolue"
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_end_pos_abs description"
|
||||||
msgctxt "machine_extruder_end_pos_abs description"
|
msgid "Make the extruder ending position absolute rather than relative to the last-known location of the head."
|
||||||
msgid ""
|
msgstr "Rendre la position de fin de l'extrudeuse absolue plutôt que relative à la dernière position connue de la tête."
|
||||||
"Make the extruder ending position absolute rather than relative to the last-"
|
|
||||||
"known location of the head."
|
#: fdmextruder.def.json
|
||||||
msgstr "Rendre la position de fin de l'extrudeuse absolue plutôt que relative à la dernière position connue de la tête."
|
msgctxt "machine_extruder_end_pos_x label"
|
||||||
|
msgid "Extruder End Position X"
|
||||||
#: fdmextruder.def.json
|
msgstr "Extrudeuse Position de fin X"
|
||||||
msgctxt "machine_extruder_end_pos_x label"
|
|
||||||
msgid "Extruder End Position X"
|
#: fdmextruder.def.json
|
||||||
msgstr "Extrudeuse Position de fin X"
|
msgctxt "machine_extruder_end_pos_x description"
|
||||||
|
msgid "The x-coordinate of the ending position when turning the extruder off."
|
||||||
#: fdmextruder.def.json
|
msgstr "Les coordonnées X de la position de fin lors de l'arrêt de l'extrudeuse."
|
||||||
msgctxt "machine_extruder_end_pos_x description"
|
|
||||||
msgid "The x-coordinate of the ending position when turning the extruder off."
|
#: fdmextruder.def.json
|
||||||
msgstr "Les coordonnées X de la position de fin lors de l'arrêt de l'extrudeuse."
|
msgctxt "machine_extruder_end_pos_y label"
|
||||||
|
msgid "Extruder End Position Y"
|
||||||
#: fdmextruder.def.json
|
msgstr "Extrudeuse Position de fin Y"
|
||||||
msgctxt "machine_extruder_end_pos_y label"
|
|
||||||
msgid "Extruder End Position Y"
|
#: fdmextruder.def.json
|
||||||
msgstr "Extrudeuse Position de fin Y"
|
msgctxt "machine_extruder_end_pos_y description"
|
||||||
|
msgid "The y-coordinate of the ending position when turning the extruder off."
|
||||||
#: fdmextruder.def.json
|
msgstr "Les coordonnées Y de la position de fin lors de l'arrêt de l'extrudeuse."
|
||||||
msgctxt "machine_extruder_end_pos_y description"
|
|
||||||
msgid "The y-coordinate of the ending position when turning the extruder off."
|
#: fdmextruder.def.json
|
||||||
msgstr "Les coordonnées Y de la position de fin lors de l'arrêt de l'extrudeuse."
|
msgctxt "extruder_prime_pos_z label"
|
||||||
|
msgid "Extruder Prime Z Position"
|
||||||
#: fdmextruder.def.json
|
msgstr "Extrudeuse Position d'amorçage Z"
|
||||||
msgctxt "extruder_prime_pos_z label"
|
|
||||||
msgid "Extruder Prime Z Position"
|
#: fdmextruder.def.json
|
||||||
msgstr "Extrudeuse Position d'amorçage Z"
|
msgctxt "extruder_prime_pos_z description"
|
||||||
|
msgid "The Z coordinate of the position where the nozzle primes at the start of printing."
|
||||||
#: fdmextruder.def.json
|
msgstr "Les coordonnées Z de la position à laquelle la buse s'amorce au début de l'impression."
|
||||||
msgctxt "extruder_prime_pos_z description"
|
|
||||||
msgid ""
|
#: fdmextruder.def.json
|
||||||
"The Z coordinate of the position where the nozzle primes at the start of "
|
msgctxt "platform_adhesion label"
|
||||||
"printing."
|
msgid "Build Plate Adhesion"
|
||||||
msgstr "Les coordonnées Z de la position à laquelle la buse s'amorce au début de l'impression."
|
msgstr "Adhérence du plateau"
|
||||||
|
|
||||||
#: fdmextruder.def.json
|
#: fdmextruder.def.json
|
||||||
msgctxt "platform_adhesion label"
|
msgctxt "platform_adhesion description"
|
||||||
msgid "Build Plate Adhesion"
|
msgid "Adhesion"
|
||||||
msgstr "Adhérence du plateau"
|
msgstr "Adhérence"
|
||||||
|
|
||||||
#: fdmextruder.def.json
|
#: fdmextruder.def.json
|
||||||
msgctxt "platform_adhesion description"
|
msgctxt "extruder_prime_pos_x label"
|
||||||
msgid "Adhesion"
|
msgid "Extruder Prime X Position"
|
||||||
msgstr "Adhérence"
|
msgstr "Extrudeuse Position d'amorçage X"
|
||||||
|
|
||||||
#: fdmextruder.def.json
|
#: fdmextruder.def.json
|
||||||
msgctxt "extruder_prime_pos_x label"
|
msgctxt "extruder_prime_pos_x description"
|
||||||
msgid "Extruder Prime X Position"
|
msgid "The X coordinate of the position where the nozzle primes at the start of printing."
|
||||||
msgstr "Extrudeuse Position d'amorçage X"
|
msgstr "Les coordonnées X de la position à laquelle la buse s'amorce au début de l'impression."
|
||||||
|
|
||||||
#: fdmextruder.def.json
|
#: fdmextruder.def.json
|
||||||
msgctxt "extruder_prime_pos_x description"
|
msgctxt "extruder_prime_pos_y label"
|
||||||
msgid ""
|
msgid "Extruder Prime Y Position"
|
||||||
"The X coordinate of the position where the nozzle primes at the start of "
|
msgstr "Extrudeuse Position d'amorçage Y"
|
||||||
"printing."
|
|
||||||
msgstr "Les coordonnées X de la position à laquelle la buse s'amorce au début de l'impression."
|
#: fdmextruder.def.json
|
||||||
|
msgctxt "extruder_prime_pos_y description"
|
||||||
#: fdmextruder.def.json
|
msgid "The Y coordinate of the position where the nozzle primes at the start of printing."
|
||||||
msgctxt "extruder_prime_pos_y label"
|
msgstr "Les coordonnées Y de la position à laquelle la buse s'amorce au début de l'impression."
|
||||||
msgid "Extruder Prime Y Position"
|
|
||||||
msgstr "Extrudeuse Position d'amorçage Y"
|
|
||||||
|
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "extruder_prime_pos_y description"
|
|
||||||
msgid ""
|
|
||||||
"The Y coordinate of the position where the nozzle primes at the start of "
|
|
||||||
"printing."
|
|
||||||
msgstr "Les coordonnées Y de la position à laquelle la buse s'amorce au début de l'impression."
|
|
||||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1,182 +1,173 @@
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Uranium json setting files\n"
|
"Project-Id-Version: Uranium json setting files\n"
|
||||||
"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n"
|
"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n"
|
||||||
"POT-Creation-Date: 2016-09-20 17:35+0000\n"
|
"POT-Creation-Date: 2016-12-28 10:51+0000\n"
|
||||||
"PO-Revision-Date: 2016-09-29 13:02+0200\n"
|
"PO-Revision-Date: 2016-09-29 13:02+0200\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE\n"
|
"Language-Team: LANGUAGE\n"
|
||||||
"MIME-Version: 1.0\n"
|
"Language: \n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_settings label"
|
#: fdmextruder.def.json
|
||||||
msgid "Machine"
|
msgctxt "machine_settings label"
|
||||||
msgstr "Macchina"
|
msgid "Machine"
|
||||||
|
msgstr "Macchina"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_settings description"
|
#: fdmextruder.def.json
|
||||||
msgid "Machine specific settings"
|
msgctxt "machine_settings description"
|
||||||
msgstr "Impostazioni macchina specifiche"
|
msgid "Machine specific settings"
|
||||||
|
msgstr "Impostazioni macchina specifiche"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "extruder_nr label"
|
#: fdmextruder.def.json
|
||||||
msgid "Extruder"
|
msgctxt "extruder_nr label"
|
||||||
msgstr "Estrusore"
|
msgid "Extruder"
|
||||||
|
msgstr "Estrusore"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "extruder_nr description"
|
#: fdmextruder.def.json
|
||||||
msgid "The extruder train used for printing. This is used in multi-extrusion."
|
msgctxt "extruder_nr description"
|
||||||
msgstr "Treno estrusore utilizzato per la stampa. Utilizzato nell’estrusione multipla."
|
msgid "The extruder train used for printing. This is used in multi-extrusion."
|
||||||
|
msgstr "Treno estrusore utilizzato per la stampa. Utilizzato nell’estrusione multipla."
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_nozzle_offset_x label"
|
#: fdmextruder.def.json
|
||||||
msgid "Nozzle X Offset"
|
msgctxt "machine_nozzle_offset_x label"
|
||||||
msgstr "Offset X ugello"
|
msgid "Nozzle X Offset"
|
||||||
|
msgstr "Offset X ugello"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_nozzle_offset_x description"
|
#: fdmextruder.def.json
|
||||||
msgid "The x-coordinate of the offset of the nozzle."
|
msgctxt "machine_nozzle_offset_x description"
|
||||||
msgstr "La coordinata y dell’offset dell’ugello."
|
msgid "The x-coordinate of the offset of the nozzle."
|
||||||
|
msgstr "La coordinata y dell’offset dell’ugello."
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_nozzle_offset_y label"
|
#: fdmextruder.def.json
|
||||||
msgid "Nozzle Y Offset"
|
msgctxt "machine_nozzle_offset_y label"
|
||||||
msgstr "Offset Y ugello"
|
msgid "Nozzle Y Offset"
|
||||||
|
msgstr "Offset Y ugello"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_nozzle_offset_y description"
|
#: fdmextruder.def.json
|
||||||
msgid "The y-coordinate of the offset of the nozzle."
|
msgctxt "machine_nozzle_offset_y description"
|
||||||
msgstr "La coordinata y dell’offset dell’ugello."
|
msgid "The y-coordinate of the offset of the nozzle."
|
||||||
|
msgstr "La coordinata y dell’offset dell’ugello."
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_extruder_start_code label"
|
#: fdmextruder.def.json
|
||||||
msgid "Extruder Start G-Code"
|
msgctxt "machine_extruder_start_code label"
|
||||||
msgstr "Codice G avvio estrusore"
|
msgid "Extruder Start G-Code"
|
||||||
|
msgstr "Codice G avvio estrusore"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_extruder_start_code description"
|
#: fdmextruder.def.json
|
||||||
msgid "Start g-code to execute whenever turning the extruder on."
|
msgctxt "machine_extruder_start_code description"
|
||||||
msgstr "Codice G di avvio da eseguire ogniqualvolta si accende l’estrusore."
|
msgid "Start g-code to execute whenever turning the extruder on."
|
||||||
|
msgstr "Codice G di avvio da eseguire ogniqualvolta si accende l’estrusore."
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_extruder_start_pos_abs label"
|
#: fdmextruder.def.json
|
||||||
msgid "Extruder Start Position Absolute"
|
msgctxt "machine_extruder_start_pos_abs label"
|
||||||
msgstr "Assoluto posizione avvio estrusore"
|
msgid "Extruder Start Position Absolute"
|
||||||
|
msgstr "Assoluto posizione avvio estrusore"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_extruder_start_pos_abs description"
|
#: fdmextruder.def.json
|
||||||
msgid ""
|
msgctxt "machine_extruder_start_pos_abs description"
|
||||||
"Make the extruder starting position absolute rather than relative to the "
|
msgid "Make the extruder starting position absolute rather than relative to the last-known location of the head."
|
||||||
"last-known location of the head."
|
msgstr "Rende la posizione di partenza estrusore assoluta anziché relativa rispetto all’ultima posizione nota della testina."
|
||||||
msgstr "Rende la posizione di partenza estrusore assoluta anziché relativa rispetto all’ultima posizione nota della testina."
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_start_pos_x label"
|
||||||
msgctxt "machine_extruder_start_pos_x label"
|
msgid "Extruder Start Position X"
|
||||||
msgid "Extruder Start Position X"
|
msgstr "X posizione avvio estrusore"
|
||||||
msgstr "X posizione avvio estrusore"
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_start_pos_x description"
|
||||||
msgctxt "machine_extruder_start_pos_x description"
|
msgid "The x-coordinate of the starting position when turning the extruder on."
|
||||||
msgid "The x-coordinate of the starting position when turning the extruder on."
|
msgstr "La coordinata x della posizione di partenza all’accensione dell’estrusore."
|
||||||
msgstr "La coordinata x della posizione di partenza all’accensione dell’estrusore."
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_start_pos_y label"
|
||||||
msgctxt "machine_extruder_start_pos_y label"
|
msgid "Extruder Start Position Y"
|
||||||
msgid "Extruder Start Position Y"
|
msgstr "Y posizione avvio estrusore"
|
||||||
msgstr "Y posizione avvio estrusore"
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_start_pos_y description"
|
||||||
msgctxt "machine_extruder_start_pos_y description"
|
msgid "The y-coordinate of the starting position when turning the extruder on."
|
||||||
msgid "The y-coordinate of the starting position when turning the extruder on."
|
msgstr "La coordinata y della posizione di partenza all’accensione dell’estrusore."
|
||||||
msgstr "La coordinata y della posizione di partenza all’accensione dell’estrusore."
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_end_code label"
|
||||||
msgctxt "machine_extruder_end_code label"
|
msgid "Extruder End G-Code"
|
||||||
msgid "Extruder End G-Code"
|
msgstr "Codice G fine estrusore"
|
||||||
msgstr "Codice G fine estrusore"
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_end_code description"
|
||||||
msgctxt "machine_extruder_end_code description"
|
msgid "End g-code to execute whenever turning the extruder off."
|
||||||
msgid "End g-code to execute whenever turning the extruder off."
|
msgstr "Codice G di fine da eseguire ogniqualvolta si spegne l’estrusore."
|
||||||
msgstr "Codice G di fine da eseguire ogniqualvolta si spegne l’estrusore."
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_end_pos_abs label"
|
||||||
msgctxt "machine_extruder_end_pos_abs label"
|
msgid "Extruder End Position Absolute"
|
||||||
msgid "Extruder End Position Absolute"
|
msgstr "Assoluto posizione fine estrusore"
|
||||||
msgstr "Assoluto posizione fine estrusore"
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_end_pos_abs description"
|
||||||
msgctxt "machine_extruder_end_pos_abs description"
|
msgid "Make the extruder ending position absolute rather than relative to the last-known location of the head."
|
||||||
msgid ""
|
msgstr "Rende la posizione di fine estrusore assoluta anziché relativa rispetto all’ultima posizione nota della testina."
|
||||||
"Make the extruder ending position absolute rather than relative to the last-"
|
|
||||||
"known location of the head."
|
#: fdmextruder.def.json
|
||||||
msgstr "Rende la posizione di fine estrusore assoluta anziché relativa rispetto all’ultima posizione nota della testina."
|
msgctxt "machine_extruder_end_pos_x label"
|
||||||
|
msgid "Extruder End Position X"
|
||||||
#: fdmextruder.def.json
|
msgstr "Posizione X fine estrusore"
|
||||||
msgctxt "machine_extruder_end_pos_x label"
|
|
||||||
msgid "Extruder End Position X"
|
#: fdmextruder.def.json
|
||||||
msgstr "Posizione X fine estrusore"
|
msgctxt "machine_extruder_end_pos_x description"
|
||||||
|
msgid "The x-coordinate of the ending position when turning the extruder off."
|
||||||
#: fdmextruder.def.json
|
msgstr "La coordinata x della posizione di fine allo spegnimento dell’estrusore."
|
||||||
msgctxt "machine_extruder_end_pos_x description"
|
|
||||||
msgid "The x-coordinate of the ending position when turning the extruder off."
|
#: fdmextruder.def.json
|
||||||
msgstr "La coordinata x della posizione di fine allo spegnimento dell’estrusore."
|
msgctxt "machine_extruder_end_pos_y label"
|
||||||
|
msgid "Extruder End Position Y"
|
||||||
#: fdmextruder.def.json
|
msgstr "Posizione Y fine estrusore"
|
||||||
msgctxt "machine_extruder_end_pos_y label"
|
|
||||||
msgid "Extruder End Position Y"
|
#: fdmextruder.def.json
|
||||||
msgstr "Posizione Y fine estrusore"
|
msgctxt "machine_extruder_end_pos_y description"
|
||||||
|
msgid "The y-coordinate of the ending position when turning the extruder off."
|
||||||
#: fdmextruder.def.json
|
msgstr "La coordinata y della posizione di fine allo spegnimento dell’estrusore."
|
||||||
msgctxt "machine_extruder_end_pos_y description"
|
|
||||||
msgid "The y-coordinate of the ending position when turning the extruder off."
|
#: fdmextruder.def.json
|
||||||
msgstr "La coordinata y della posizione di fine allo spegnimento dell’estrusore."
|
msgctxt "extruder_prime_pos_z label"
|
||||||
|
msgid "Extruder Prime Z Position"
|
||||||
#: fdmextruder.def.json
|
msgstr "Posizione Z innesco estrusore"
|
||||||
msgctxt "extruder_prime_pos_z label"
|
|
||||||
msgid "Extruder Prime Z Position"
|
#: fdmextruder.def.json
|
||||||
msgstr "Posizione Z innesco estrusore"
|
msgctxt "extruder_prime_pos_z description"
|
||||||
|
msgid "The Z coordinate of the position where the nozzle primes at the start of printing."
|
||||||
#: fdmextruder.def.json
|
msgstr "Indica la coordinata Z della posizione in cui l’ugello si innesca all’avvio della stampa."
|
||||||
msgctxt "extruder_prime_pos_z description"
|
|
||||||
msgid ""
|
#: fdmextruder.def.json
|
||||||
"The Z coordinate of the position where the nozzle primes at the start of "
|
msgctxt "platform_adhesion label"
|
||||||
"printing."
|
msgid "Build Plate Adhesion"
|
||||||
msgstr "Indica la coordinata Z della posizione in cui l’ugello si innesca all’avvio della stampa."
|
msgstr "Adesione piano di stampa"
|
||||||
|
|
||||||
#: fdmextruder.def.json
|
#: fdmextruder.def.json
|
||||||
msgctxt "platform_adhesion label"
|
msgctxt "platform_adhesion description"
|
||||||
msgid "Build Plate Adhesion"
|
msgid "Adhesion"
|
||||||
msgstr "Adesione piano di stampa"
|
msgstr "Adesione"
|
||||||
|
|
||||||
#: fdmextruder.def.json
|
#: fdmextruder.def.json
|
||||||
msgctxt "platform_adhesion description"
|
msgctxt "extruder_prime_pos_x label"
|
||||||
msgid "Adhesion"
|
msgid "Extruder Prime X Position"
|
||||||
msgstr "Adesione"
|
msgstr "Posizione X innesco estrusore"
|
||||||
|
|
||||||
#: fdmextruder.def.json
|
#: fdmextruder.def.json
|
||||||
msgctxt "extruder_prime_pos_x label"
|
msgctxt "extruder_prime_pos_x description"
|
||||||
msgid "Extruder Prime X Position"
|
msgid "The X coordinate of the position where the nozzle primes at the start of printing."
|
||||||
msgstr "Posizione X innesco estrusore"
|
msgstr "La coordinata X della posizione in cui l’ugello si innesca all’avvio della stampa."
|
||||||
|
|
||||||
#: fdmextruder.def.json
|
#: fdmextruder.def.json
|
||||||
msgctxt "extruder_prime_pos_x description"
|
msgctxt "extruder_prime_pos_y label"
|
||||||
msgid ""
|
msgid "Extruder Prime Y Position"
|
||||||
"The X coordinate of the position where the nozzle primes at the start of "
|
msgstr "Posizione Y innesco estrusore"
|
||||||
"printing."
|
|
||||||
msgstr "La coordinata X della posizione in cui l’ugello si innesca all’avvio della stampa."
|
#: fdmextruder.def.json
|
||||||
|
msgctxt "extruder_prime_pos_y description"
|
||||||
#: fdmextruder.def.json
|
msgid "The Y coordinate of the position where the nozzle primes at the start of printing."
|
||||||
msgctxt "extruder_prime_pos_y label"
|
msgstr "La coordinata Y della posizione in cui l’ugello si innesca all’avvio della stampa."
|
||||||
msgid "Extruder Prime Y Position"
|
|
||||||
msgstr "Posizione Y innesco estrusore"
|
|
||||||
|
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "extruder_prime_pos_y description"
|
|
||||||
msgid ""
|
|
||||||
"The Y coordinate of the position where the nozzle primes at the start of "
|
|
||||||
"printing."
|
|
||||||
msgstr "La coordinata Y della posizione in cui l’ugello si innesca all’avvio della stampa."
|
|
||||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1,182 +1,173 @@
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Uranium json setting files\n"
|
"Project-Id-Version: Uranium json setting files\n"
|
||||||
"Report-Msgid-Bugs-To: http://github.com/Ultimaker/Cura\n"
|
"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n"
|
||||||
"POT-Creation-Date: 2016-09-20 17:35+0000\n"
|
"POT-Creation-Date: 2016-12-28 10:51+0000\n"
|
||||||
"PO-Revision-Date: 2016-10-11 16:05+0200\n"
|
"PO-Revision-Date: 2016-10-11 16:05+0200\n"
|
||||||
"Last-Translator: Ruben Dulek <r.dulek@ultimaker.com>\n"
|
"Last-Translator: Ruben Dulek <r.dulek@ultimaker.com>\n"
|
||||||
"Language-Team: Ultimaker\n"
|
"Language-Team: Ultimaker\n"
|
||||||
"MIME-Version: 1.0\n"
|
"Language: \n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_settings label"
|
#: fdmextruder.def.json
|
||||||
msgid "Machine"
|
msgctxt "machine_settings label"
|
||||||
msgstr "Machine"
|
msgid "Machine"
|
||||||
|
msgstr "Machine"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_settings description"
|
#: fdmextruder.def.json
|
||||||
msgid "Machine specific settings"
|
msgctxt "machine_settings description"
|
||||||
msgstr "Instellingen van de machine"
|
msgid "Machine specific settings"
|
||||||
|
msgstr "Instellingen van de machine"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "extruder_nr label"
|
#: fdmextruder.def.json
|
||||||
msgid "Extruder"
|
msgctxt "extruder_nr label"
|
||||||
msgstr "Extruder"
|
msgid "Extruder"
|
||||||
|
msgstr "Extruder"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "extruder_nr description"
|
#: fdmextruder.def.json
|
||||||
msgid "The extruder train used for printing. This is used in multi-extrusion."
|
msgctxt "extruder_nr description"
|
||||||
msgstr "De extruder train die voor het printen wordt gebruikt. Deze wordt gebruikt in meervoudige doorvoer."
|
msgid "The extruder train used for printing. This is used in multi-extrusion."
|
||||||
|
msgstr "De extruder train die voor het printen wordt gebruikt. Deze wordt gebruikt in meervoudige doorvoer."
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_nozzle_offset_x label"
|
#: fdmextruder.def.json
|
||||||
msgid "Nozzle X Offset"
|
msgctxt "machine_nozzle_offset_x label"
|
||||||
msgstr "X-Offset Nozzle"
|
msgid "Nozzle X Offset"
|
||||||
|
msgstr "X-Offset Nozzle"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_nozzle_offset_x description"
|
#: fdmextruder.def.json
|
||||||
msgid "The x-coordinate of the offset of the nozzle."
|
msgctxt "machine_nozzle_offset_x description"
|
||||||
msgstr "De X-coördinaat van de offset van de nozzle."
|
msgid "The x-coordinate of the offset of the nozzle."
|
||||||
|
msgstr "De X-coördinaat van de offset van de nozzle."
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_nozzle_offset_y label"
|
#: fdmextruder.def.json
|
||||||
msgid "Nozzle Y Offset"
|
msgctxt "machine_nozzle_offset_y label"
|
||||||
msgstr "Y-Offset Nozzle"
|
msgid "Nozzle Y Offset"
|
||||||
|
msgstr "Y-Offset Nozzle"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_nozzle_offset_y description"
|
#: fdmextruder.def.json
|
||||||
msgid "The y-coordinate of the offset of the nozzle."
|
msgctxt "machine_nozzle_offset_y description"
|
||||||
msgstr "De Y-coördinaat van de offset van de nozzle."
|
msgid "The y-coordinate of the offset of the nozzle."
|
||||||
|
msgstr "De Y-coördinaat van de offset van de nozzle."
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_extruder_start_code label"
|
#: fdmextruder.def.json
|
||||||
msgid "Extruder Start G-Code"
|
msgctxt "machine_extruder_start_code label"
|
||||||
msgstr "Start G-code van Extruder"
|
msgid "Extruder Start G-Code"
|
||||||
|
msgstr "Start G-code van Extruder"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_extruder_start_code description"
|
#: fdmextruder.def.json
|
||||||
msgid "Start g-code to execute whenever turning the extruder on."
|
msgctxt "machine_extruder_start_code description"
|
||||||
msgstr "Start-g-code die wordt uitgevoerd wanneer de extruder wordt ingeschakeld."
|
msgid "Start g-code to execute whenever turning the extruder on."
|
||||||
|
msgstr "Start-g-code die wordt uitgevoerd wanneer de extruder wordt ingeschakeld."
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_extruder_start_pos_abs label"
|
#: fdmextruder.def.json
|
||||||
msgid "Extruder Start Position Absolute"
|
msgctxt "machine_extruder_start_pos_abs label"
|
||||||
msgstr "Absolute Startpositie Extruder"
|
msgid "Extruder Start Position Absolute"
|
||||||
|
msgstr "Absolute Startpositie Extruder"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_extruder_start_pos_abs description"
|
#: fdmextruder.def.json
|
||||||
msgid ""
|
msgctxt "machine_extruder_start_pos_abs description"
|
||||||
"Make the extruder starting position absolute rather than relative to the "
|
msgid "Make the extruder starting position absolute rather than relative to the last-known location of the head."
|
||||||
"last-known location of the head."
|
msgstr "Maak van de startpositie van de extruder de absolute startpositie, in plaats van de relatieve startpositie ten opzichte van de laatst bekende locatie van de printkop."
|
||||||
msgstr "Maak van de startpositie van de extruder de absolute startpositie, in plaats van de relatieve startpositie ten opzichte van de laatst bekende locatie van de printkop."
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_start_pos_x label"
|
||||||
msgctxt "machine_extruder_start_pos_x label"
|
msgid "Extruder Start Position X"
|
||||||
msgid "Extruder Start Position X"
|
msgstr "X-startpositie Extruder"
|
||||||
msgstr "X-startpositie Extruder"
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_start_pos_x description"
|
||||||
msgctxt "machine_extruder_start_pos_x description"
|
msgid "The x-coordinate of the starting position when turning the extruder on."
|
||||||
msgid "The x-coordinate of the starting position when turning the extruder on."
|
msgstr "De X-coördinaat van de startpositie wanneer de extruder wordt ingeschakeld."
|
||||||
msgstr "De X-coördinaat van de startpositie wanneer de extruder wordt ingeschakeld."
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_start_pos_y label"
|
||||||
msgctxt "machine_extruder_start_pos_y label"
|
msgid "Extruder Start Position Y"
|
||||||
msgid "Extruder Start Position Y"
|
msgstr "Y-startpositie Extruder"
|
||||||
msgstr "Y-startpositie Extruder"
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_start_pos_y description"
|
||||||
msgctxt "machine_extruder_start_pos_y description"
|
msgid "The y-coordinate of the starting position when turning the extruder on."
|
||||||
msgid "The y-coordinate of the starting position when turning the extruder on."
|
msgstr "De Y-coördinaat van de startpositie wanneer de extruder wordt ingeschakeld."
|
||||||
msgstr "De Y-coördinaat van de startpositie wanneer de extruder wordt ingeschakeld."
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_end_code label"
|
||||||
msgctxt "machine_extruder_end_code label"
|
msgid "Extruder End G-Code"
|
||||||
msgid "Extruder End G-Code"
|
msgstr "Eind-g-code van Extruder"
|
||||||
msgstr "Eind-g-code van Extruder"
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_end_code description"
|
||||||
msgctxt "machine_extruder_end_code description"
|
msgid "End g-code to execute whenever turning the extruder off."
|
||||||
msgid "End g-code to execute whenever turning the extruder off."
|
msgstr "Eind-g-code die wordt uitgevoerd wanneer de extruder wordt uitgeschakeld."
|
||||||
msgstr "Eind-g-code die wordt uitgevoerd wanneer de extruder wordt uitgeschakeld."
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_end_pos_abs label"
|
||||||
msgctxt "machine_extruder_end_pos_abs label"
|
msgid "Extruder End Position Absolute"
|
||||||
msgid "Extruder End Position Absolute"
|
msgstr "Absolute Eindpositie Extruder"
|
||||||
msgstr "Absolute Eindpositie Extruder"
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_end_pos_abs description"
|
||||||
msgctxt "machine_extruder_end_pos_abs description"
|
msgid "Make the extruder ending position absolute rather than relative to the last-known location of the head."
|
||||||
msgid ""
|
msgstr "Maak van de eindpositie van de extruder de absolute eindpositie, in plaats van de relatieve eindpositie ten opzichte van de laatst bekende locatie van de printkop."
|
||||||
"Make the extruder ending position absolute rather than relative to the last-"
|
|
||||||
"known location of the head."
|
#: fdmextruder.def.json
|
||||||
msgstr "Maak van de eindpositie van de extruder de absolute eindpositie, in plaats van de relatieve eindpositie ten opzichte van de laatst bekende locatie van de printkop."
|
msgctxt "machine_extruder_end_pos_x label"
|
||||||
|
msgid "Extruder End Position X"
|
||||||
#: fdmextruder.def.json
|
msgstr "X-eindpositie Extruder"
|
||||||
msgctxt "machine_extruder_end_pos_x label"
|
|
||||||
msgid "Extruder End Position X"
|
#: fdmextruder.def.json
|
||||||
msgstr "X-eindpositie Extruder"
|
msgctxt "machine_extruder_end_pos_x description"
|
||||||
|
msgid "The x-coordinate of the ending position when turning the extruder off."
|
||||||
#: fdmextruder.def.json
|
msgstr "De X-coördinaat van de eindpositie wanneer de extruder wordt uitgeschakeld."
|
||||||
msgctxt "machine_extruder_end_pos_x description"
|
|
||||||
msgid "The x-coordinate of the ending position when turning the extruder off."
|
#: fdmextruder.def.json
|
||||||
msgstr "De X-coördinaat van de eindpositie wanneer de extruder wordt uitgeschakeld."
|
msgctxt "machine_extruder_end_pos_y label"
|
||||||
|
msgid "Extruder End Position Y"
|
||||||
#: fdmextruder.def.json
|
msgstr "Y-eindpositie Extruder"
|
||||||
msgctxt "machine_extruder_end_pos_y label"
|
|
||||||
msgid "Extruder End Position Y"
|
#: fdmextruder.def.json
|
||||||
msgstr "Y-eindpositie Extruder"
|
msgctxt "machine_extruder_end_pos_y description"
|
||||||
|
msgid "The y-coordinate of the ending position when turning the extruder off."
|
||||||
#: fdmextruder.def.json
|
msgstr "De Y-coördinaat van de eindpositie wanneer de extruder wordt uitgeschakeld."
|
||||||
msgctxt "machine_extruder_end_pos_y description"
|
|
||||||
msgid "The y-coordinate of the ending position when turning the extruder off."
|
#: fdmextruder.def.json
|
||||||
msgstr "De Y-coördinaat van de eindpositie wanneer de extruder wordt uitgeschakeld."
|
msgctxt "extruder_prime_pos_z label"
|
||||||
|
msgid "Extruder Prime Z Position"
|
||||||
#: fdmextruder.def.json
|
msgstr "Z-positie voor Primen Extruder"
|
||||||
msgctxt "extruder_prime_pos_z label"
|
|
||||||
msgid "Extruder Prime Z Position"
|
#: fdmextruder.def.json
|
||||||
msgstr "Z-positie voor Primen Extruder"
|
msgctxt "extruder_prime_pos_z description"
|
||||||
|
msgid "The Z coordinate of the position where the nozzle primes at the start of printing."
|
||||||
#: fdmextruder.def.json
|
msgstr "De Z-coördinaat van de positie waar filament in de nozzle wordt geprimet aan het begin van het printen."
|
||||||
msgctxt "extruder_prime_pos_z description"
|
|
||||||
msgid ""
|
#: fdmextruder.def.json
|
||||||
"The Z coordinate of the position where the nozzle primes at the start of "
|
msgctxt "platform_adhesion label"
|
||||||
"printing."
|
msgid "Build Plate Adhesion"
|
||||||
msgstr "De Z-coördinaat van de positie waar filament in de nozzle wordt geprimet aan het begin van het printen."
|
msgstr "Hechting aan Platform"
|
||||||
|
|
||||||
#: fdmextruder.def.json
|
#: fdmextruder.def.json
|
||||||
msgctxt "platform_adhesion label"
|
msgctxt "platform_adhesion description"
|
||||||
msgid "Build Plate Adhesion"
|
msgid "Adhesion"
|
||||||
msgstr "Hechting aan Platform"
|
msgstr "Hechting"
|
||||||
|
|
||||||
#: fdmextruder.def.json
|
#: fdmextruder.def.json
|
||||||
msgctxt "platform_adhesion description"
|
msgctxt "extruder_prime_pos_x label"
|
||||||
msgid "Adhesion"
|
msgid "Extruder Prime X Position"
|
||||||
msgstr "Hechting"
|
msgstr "X-positie voor Primen Extruder"
|
||||||
|
|
||||||
#: fdmextruder.def.json
|
#: fdmextruder.def.json
|
||||||
msgctxt "extruder_prime_pos_x label"
|
msgctxt "extruder_prime_pos_x description"
|
||||||
msgid "Extruder Prime X Position"
|
msgid "The X coordinate of the position where the nozzle primes at the start of printing."
|
||||||
msgstr "X-positie voor Primen Extruder"
|
msgstr "De X-coördinaat van de positie waar filament in de nozzle wordt geprimet aan het begin van het printen."
|
||||||
|
|
||||||
#: fdmextruder.def.json
|
#: fdmextruder.def.json
|
||||||
msgctxt "extruder_prime_pos_x description"
|
msgctxt "extruder_prime_pos_y label"
|
||||||
msgid ""
|
msgid "Extruder Prime Y Position"
|
||||||
"The X coordinate of the position where the nozzle primes at the start of "
|
msgstr "Y-positie voor Primen Extruder"
|
||||||
"printing."
|
|
||||||
msgstr "De X-coördinaat van de positie waar filament in de nozzle wordt geprimet aan het begin van het printen."
|
#: fdmextruder.def.json
|
||||||
|
msgctxt "extruder_prime_pos_y description"
|
||||||
#: fdmextruder.def.json
|
msgid "The Y coordinate of the position where the nozzle primes at the start of printing."
|
||||||
msgctxt "extruder_prime_pos_y label"
|
msgstr "De Y-coördinaat van de positie waar filament in de nozzle wordt geprimet aan het begin van het printen."
|
||||||
msgid "Extruder Prime Y Position"
|
|
||||||
msgstr "Y-positie voor Primen Extruder"
|
|
||||||
|
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "extruder_prime_pos_y description"
|
|
||||||
msgid ""
|
|
||||||
"The Y coordinate of the position where the nozzle primes at the start of "
|
|
||||||
"printing."
|
|
||||||
msgstr "De Y-coördinaat van de positie waar filament in de nozzle wordt geprimet aan het begin van het printen."
|
|
||||||
|
|
File diff suppressed because it is too large
Load diff
3544
resources/i18n/ru/cura.po
Normal file
3544
resources/i18n/ru/cura.po
Normal file
File diff suppressed because it is too large
Load diff
2417
resources/i18n/ru/fdmextruder.def.json.po
Normal file
2417
resources/i18n/ru/fdmextruder.def.json.po
Normal file
File diff suppressed because it is too large
Load diff
5394
resources/i18n/ru/fdmprinter.def.json.po
Normal file
5394
resources/i18n/ru/fdmprinter.def.json.po
Normal file
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1,182 +1,173 @@
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Uranium json setting files\n"
|
"Project-Id-Version: Uranium json setting files\n"
|
||||||
"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n"
|
"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n"
|
||||||
"POT-Creation-Date: 2016-09-20 17:35+0000\n"
|
"POT-Creation-Date: 2016-12-28 10:51+0000\n"
|
||||||
"PO-Revision-Date: 2016-09-29 13:02+0200\n"
|
"PO-Revision-Date: 2016-09-29 13:02+0200\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE\n"
|
"Language-Team: LANGUAGE\n"
|
||||||
"MIME-Version: 1.0\n"
|
"Language: \n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_settings label"
|
#: fdmextruder.def.json
|
||||||
msgid "Machine"
|
msgctxt "machine_settings label"
|
||||||
msgstr "Makine"
|
msgid "Machine"
|
||||||
|
msgstr "Makine"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_settings description"
|
#: fdmextruder.def.json
|
||||||
msgid "Machine specific settings"
|
msgctxt "machine_settings description"
|
||||||
msgstr "Makine özel ayarları"
|
msgid "Machine specific settings"
|
||||||
|
msgstr "Makine özel ayarları"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "extruder_nr label"
|
#: fdmextruder.def.json
|
||||||
msgid "Extruder"
|
msgctxt "extruder_nr label"
|
||||||
msgstr "Ekstruder"
|
msgid "Extruder"
|
||||||
|
msgstr "Ekstruder"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "extruder_nr description"
|
#: fdmextruder.def.json
|
||||||
msgid "The extruder train used for printing. This is used in multi-extrusion."
|
msgctxt "extruder_nr description"
|
||||||
msgstr "Yazdırma için kullanılan ekstruder dişli çark. Çoklu ekstrüzyon işlemi için kullanılır."
|
msgid "The extruder train used for printing. This is used in multi-extrusion."
|
||||||
|
msgstr "Yazdırma için kullanılan ekstruder dişli çark. Çoklu ekstrüzyon işlemi için kullanılır."
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_nozzle_offset_x label"
|
#: fdmextruder.def.json
|
||||||
msgid "Nozzle X Offset"
|
msgctxt "machine_nozzle_offset_x label"
|
||||||
msgstr "Nozül NX Ofseti"
|
msgid "Nozzle X Offset"
|
||||||
|
msgstr "Nozül NX Ofseti"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_nozzle_offset_x description"
|
#: fdmextruder.def.json
|
||||||
msgid "The x-coordinate of the offset of the nozzle."
|
msgctxt "machine_nozzle_offset_x description"
|
||||||
msgstr "Nozül ofsetinin x koordinatı."
|
msgid "The x-coordinate of the offset of the nozzle."
|
||||||
|
msgstr "Nozül ofsetinin x koordinatı."
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_nozzle_offset_y label"
|
#: fdmextruder.def.json
|
||||||
msgid "Nozzle Y Offset"
|
msgctxt "machine_nozzle_offset_y label"
|
||||||
msgstr "Nozül Y Ofseti"
|
msgid "Nozzle Y Offset"
|
||||||
|
msgstr "Nozül Y Ofseti"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_nozzle_offset_y description"
|
#: fdmextruder.def.json
|
||||||
msgid "The y-coordinate of the offset of the nozzle."
|
msgctxt "machine_nozzle_offset_y description"
|
||||||
msgstr "Nozül ofsetinin y koordinatı."
|
msgid "The y-coordinate of the offset of the nozzle."
|
||||||
|
msgstr "Nozül ofsetinin y koordinatı."
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_extruder_start_code label"
|
#: fdmextruder.def.json
|
||||||
msgid "Extruder Start G-Code"
|
msgctxt "machine_extruder_start_code label"
|
||||||
msgstr "Ekstruder G-Code'u başlatma"
|
msgid "Extruder Start G-Code"
|
||||||
|
msgstr "Ekstruder G-Code'u başlatma"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_extruder_start_code description"
|
#: fdmextruder.def.json
|
||||||
msgid "Start g-code to execute whenever turning the extruder on."
|
msgctxt "machine_extruder_start_code description"
|
||||||
msgstr "Ekstruderi her açtığınızda g-code'u başlatın."
|
msgid "Start g-code to execute whenever turning the extruder on."
|
||||||
|
msgstr "Ekstruderi her açtığınızda g-code'u başlatın."
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_extruder_start_pos_abs label"
|
#: fdmextruder.def.json
|
||||||
msgid "Extruder Start Position Absolute"
|
msgctxt "machine_extruder_start_pos_abs label"
|
||||||
msgstr "Ekstruderin Mutlak Başlangıç Konumu"
|
msgid "Extruder Start Position Absolute"
|
||||||
|
msgstr "Ekstruderin Mutlak Başlangıç Konumu"
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "machine_extruder_start_pos_abs description"
|
#: fdmextruder.def.json
|
||||||
msgid ""
|
msgctxt "machine_extruder_start_pos_abs description"
|
||||||
"Make the extruder starting position absolute rather than relative to the "
|
msgid "Make the extruder starting position absolute rather than relative to the last-known location of the head."
|
||||||
"last-known location of the head."
|
msgstr "Ekstruder başlama konumunu, yazıcı başlığının son konumuna göre ayarlamak yerine mutlak olarak ayarlayın."
|
||||||
msgstr "Ekstruder başlama konumunu, yazıcı başlığının son konumuna göre ayarlamak yerine mutlak olarak ayarlayın."
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_start_pos_x label"
|
||||||
msgctxt "machine_extruder_start_pos_x label"
|
msgid "Extruder Start Position X"
|
||||||
msgid "Extruder Start Position X"
|
msgstr "Ekstruder X Başlangıç Konumu"
|
||||||
msgstr "Ekstruder X Başlangıç Konumu"
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_start_pos_x description"
|
||||||
msgctxt "machine_extruder_start_pos_x description"
|
msgid "The x-coordinate of the starting position when turning the extruder on."
|
||||||
msgid "The x-coordinate of the starting position when turning the extruder on."
|
msgstr "Ekstruder açılırken başlangıç konumunun x koordinatı."
|
||||||
msgstr "Ekstruder açılırken başlangıç konumunun x koordinatı."
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_start_pos_y label"
|
||||||
msgctxt "machine_extruder_start_pos_y label"
|
msgid "Extruder Start Position Y"
|
||||||
msgid "Extruder Start Position Y"
|
msgstr "Ekstruder Y Başlangıç Konumu"
|
||||||
msgstr "Ekstruder Y Başlangıç Konumu"
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_start_pos_y description"
|
||||||
msgctxt "machine_extruder_start_pos_y description"
|
msgid "The y-coordinate of the starting position when turning the extruder on."
|
||||||
msgid "The y-coordinate of the starting position when turning the extruder on."
|
msgstr "Ekstruder açılırken başlangıç konumunun Y koordinatı."
|
||||||
msgstr "Ekstruder açılırken başlangıç konumunun Y koordinatı."
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_end_code label"
|
||||||
msgctxt "machine_extruder_end_code label"
|
msgid "Extruder End G-Code"
|
||||||
msgid "Extruder End G-Code"
|
msgstr "Ekstruder G-Code'u Sonlandırma"
|
||||||
msgstr "Ekstruder G-Code'u Sonlandırma"
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_end_code description"
|
||||||
msgctxt "machine_extruder_end_code description"
|
msgid "End g-code to execute whenever turning the extruder off."
|
||||||
msgid "End g-code to execute whenever turning the extruder off."
|
msgstr "Ekstruderi her kapattığınızda g-code'u sonlandırın."
|
||||||
msgstr "Ekstruderi her kapattığınızda g-code'u sonlandırın."
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_end_pos_abs label"
|
||||||
msgctxt "machine_extruder_end_pos_abs label"
|
msgid "Extruder End Position Absolute"
|
||||||
msgid "Extruder End Position Absolute"
|
msgstr "Ekstruderin Mutlak Bitiş Konumu"
|
||||||
msgstr "Ekstruderin Mutlak Bitiş Konumu"
|
|
||||||
|
#: fdmextruder.def.json
|
||||||
#: fdmextruder.def.json
|
msgctxt "machine_extruder_end_pos_abs description"
|
||||||
msgctxt "machine_extruder_end_pos_abs description"
|
msgid "Make the extruder ending position absolute rather than relative to the last-known location of the head."
|
||||||
msgid ""
|
msgstr "Ekstruder bitiş konumunu, yazıcı başlığının son konumuna göre ayarlamak yerine mutlak olarak ayarlayın."
|
||||||
"Make the extruder ending position absolute rather than relative to the last-"
|
|
||||||
"known location of the head."
|
#: fdmextruder.def.json
|
||||||
msgstr "Ekstruder bitiş konumunu, yazıcı başlığının son konumuna göre ayarlamak yerine mutlak olarak ayarlayın."
|
msgctxt "machine_extruder_end_pos_x label"
|
||||||
|
msgid "Extruder End Position X"
|
||||||
#: fdmextruder.def.json
|
msgstr "Ekstruderin X Bitiş Konumu"
|
||||||
msgctxt "machine_extruder_end_pos_x label"
|
|
||||||
msgid "Extruder End Position X"
|
#: fdmextruder.def.json
|
||||||
msgstr "Ekstruderin X Bitiş Konumu"
|
msgctxt "machine_extruder_end_pos_x description"
|
||||||
|
msgid "The x-coordinate of the ending position when turning the extruder off."
|
||||||
#: fdmextruder.def.json
|
msgstr "Ekstruder kapatılırken bitiş konumunun x koordinatı."
|
||||||
msgctxt "machine_extruder_end_pos_x description"
|
|
||||||
msgid "The x-coordinate of the ending position when turning the extruder off."
|
#: fdmextruder.def.json
|
||||||
msgstr "Ekstruder kapatılırken bitiş konumunun x koordinatı."
|
msgctxt "machine_extruder_end_pos_y label"
|
||||||
|
msgid "Extruder End Position Y"
|
||||||
#: fdmextruder.def.json
|
msgstr "Ekstruderin Y Bitiş Konumu"
|
||||||
msgctxt "machine_extruder_end_pos_y label"
|
|
||||||
msgid "Extruder End Position Y"
|
#: fdmextruder.def.json
|
||||||
msgstr "Ekstruderin Y Bitiş Konumu"
|
msgctxt "machine_extruder_end_pos_y description"
|
||||||
|
msgid "The y-coordinate of the ending position when turning the extruder off."
|
||||||
#: fdmextruder.def.json
|
msgstr "Ekstruder kapatılırken bitiş konumunun Y koordinatı."
|
||||||
msgctxt "machine_extruder_end_pos_y description"
|
|
||||||
msgid "The y-coordinate of the ending position when turning the extruder off."
|
#: fdmextruder.def.json
|
||||||
msgstr "Ekstruder kapatılırken bitiş konumunun Y koordinatı."
|
msgctxt "extruder_prime_pos_z label"
|
||||||
|
msgid "Extruder Prime Z Position"
|
||||||
#: fdmextruder.def.json
|
msgstr "Ekstruder İlk Z konumu"
|
||||||
msgctxt "extruder_prime_pos_z label"
|
|
||||||
msgid "Extruder Prime Z Position"
|
#: fdmextruder.def.json
|
||||||
msgstr "Ekstruder İlk Z konumu"
|
msgctxt "extruder_prime_pos_z description"
|
||||||
|
msgid "The Z coordinate of the position where the nozzle primes at the start of printing."
|
||||||
#: fdmextruder.def.json
|
msgstr "Nozül yazdırma işlemini başlatmaya hazırlandığında konumun Z koordinatı."
|
||||||
msgctxt "extruder_prime_pos_z description"
|
|
||||||
msgid ""
|
#: fdmextruder.def.json
|
||||||
"The Z coordinate of the position where the nozzle primes at the start of "
|
msgctxt "platform_adhesion label"
|
||||||
"printing."
|
msgid "Build Plate Adhesion"
|
||||||
msgstr "Nozül yazdırma işlemini başlatmaya hazırlandığında konumun Z koordinatı."
|
msgstr "Yapı Levhası Yapıştırması"
|
||||||
|
|
||||||
#: fdmextruder.def.json
|
#: fdmextruder.def.json
|
||||||
msgctxt "platform_adhesion label"
|
msgctxt "platform_adhesion description"
|
||||||
msgid "Build Plate Adhesion"
|
msgid "Adhesion"
|
||||||
msgstr "Yapı Levhası Yapıştırması"
|
msgstr "Yapıştırma"
|
||||||
|
|
||||||
#: fdmextruder.def.json
|
#: fdmextruder.def.json
|
||||||
msgctxt "platform_adhesion description"
|
msgctxt "extruder_prime_pos_x label"
|
||||||
msgid "Adhesion"
|
msgid "Extruder Prime X Position"
|
||||||
msgstr "Yapıştırma"
|
msgstr "Extruder İlk X konumu"
|
||||||
|
|
||||||
#: fdmextruder.def.json
|
#: fdmextruder.def.json
|
||||||
msgctxt "extruder_prime_pos_x label"
|
msgctxt "extruder_prime_pos_x description"
|
||||||
msgid "Extruder Prime X Position"
|
msgid "The X coordinate of the position where the nozzle primes at the start of printing."
|
||||||
msgstr "Extruder İlk X konumu"
|
msgstr "Nozül yazdırma işlemini başlatmaya hazırlandığında konumun X koordinatı."
|
||||||
|
|
||||||
#: fdmextruder.def.json
|
#: fdmextruder.def.json
|
||||||
msgctxt "extruder_prime_pos_x description"
|
msgctxt "extruder_prime_pos_y label"
|
||||||
msgid ""
|
msgid "Extruder Prime Y Position"
|
||||||
"The X coordinate of the position where the nozzle primes at the start of "
|
msgstr "Extruder İlk Y konumu"
|
||||||
"printing."
|
|
||||||
msgstr "Nozül yazdırma işlemini başlatmaya hazırlandığında konumun X koordinatı."
|
#: fdmextruder.def.json
|
||||||
|
msgctxt "extruder_prime_pos_y description"
|
||||||
#: fdmextruder.def.json
|
msgid "The Y coordinate of the position where the nozzle primes at the start of printing."
|
||||||
msgctxt "extruder_prime_pos_y label"
|
msgstr "Nozül yazdırma işlemini başlatmaya hazırlandığında konumun Y koordinatı."
|
||||||
msgid "Extruder Prime Y Position"
|
|
||||||
msgstr "Extruder İlk Y konumu"
|
|
||||||
|
|
||||||
#: fdmextruder.def.json
|
|
||||||
msgctxt "extruder_prime_pos_y description"
|
|
||||||
msgid ""
|
|
||||||
"The Y coordinate of the position where the nozzle primes at the start of "
|
|
||||||
"printing."
|
|
||||||
msgstr "Nozül yazdırma işlemini başlatmaya hazırlandığında konumun Y koordinatı."
|
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -14,25 +14,25 @@ UM.Dialog
|
||||||
//: About dialog title
|
//: About dialog title
|
||||||
title: catalog.i18nc("@title:window","About Cura")
|
title: catalog.i18nc("@title:window","About Cura")
|
||||||
|
|
||||||
minimumWidth: 400 * Screen.devicePixelRatio
|
minimumWidth: 450 * Screen.devicePixelRatio
|
||||||
minimumHeight: 300 * Screen.devicePixelRatio
|
minimumHeight: 550 * Screen.devicePixelRatio
|
||||||
width: minimumWidth
|
width: minimumWidth
|
||||||
height: minimumHeight
|
height: minimumHeight
|
||||||
//UM.I18nCatalog { id: catalog; }
|
|
||||||
|
|
||||||
|
|
||||||
Image
|
Image
|
||||||
{
|
{
|
||||||
id: logo
|
id: logo
|
||||||
width: parent.width * 0.75
|
width: base.minimumWidth * 0.85
|
||||||
height: width * (1/4.25)
|
height: width * (1/4.25)
|
||||||
|
|
||||||
source: UM.Theme.getImage("logo")
|
source: UM.Theme.getImage("logo")
|
||||||
|
|
||||||
sourceSize.width: width
|
sourceSize.width: width
|
||||||
sourceSize.height: height
|
sourceSize.height: height
|
||||||
anchors.centerIn: parent
|
anchors.top: parent.top
|
||||||
anchors.verticalCenterOffset : -(height * 0.5)
|
anchors.topMargin: (base.minimumWidth - width) / 2
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
|
||||||
UM.I18nCatalog{id: catalog; name:"cura"}
|
UM.I18nCatalog{id: catalog; name:"cura"}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,10 +42,9 @@ UM.Dialog
|
||||||
|
|
||||||
text: "Cura %1".arg(UM.Application.version)
|
text: "Cura %1".arg(UM.Application.version)
|
||||||
font: UM.Theme.getFont("large")
|
font: UM.Theme.getFont("large")
|
||||||
anchors.horizontalCenter : logo.horizontalCenter
|
anchors.right : logo.right
|
||||||
anchors.horizontalCenterOffset : (logo.width * 0.25)
|
|
||||||
anchors.top: logo.bottom
|
anchors.top: logo.bottom
|
||||||
anchors.topMargin : 5
|
anchors.topMargin: UM.Theme.getSize("default_margin").height / 2
|
||||||
}
|
}
|
||||||
|
|
||||||
Label
|
Label
|
||||||
|
@ -55,20 +54,82 @@ UM.Dialog
|
||||||
|
|
||||||
//: About dialog application description
|
//: About dialog application description
|
||||||
text: catalog.i18nc("@label","End-to-end solution for fused filament 3D printing.")
|
text: catalog.i18nc("@label","End-to-end solution for fused filament 3D printing.")
|
||||||
|
font: UM.Theme.getFont("system")
|
||||||
wrapMode: Text.WordWrap
|
wrapMode: Text.WordWrap
|
||||||
anchors.top: version.bottom
|
anchors.top: version.bottom
|
||||||
anchors.topMargin : 10
|
anchors.topMargin: UM.Theme.getSize("default_margin").height
|
||||||
}
|
}
|
||||||
|
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
id: author_note
|
id: creditsNotes
|
||||||
width: parent.width
|
width: parent.width
|
||||||
|
|
||||||
//: About dialog application author note
|
//: About dialog application author note
|
||||||
text: catalog.i18nc("@info:credit","Cura has been developed by Ultimaker B.V. in cooperation with the community.")
|
text: catalog.i18nc("@info:credit","Cura is developed by Ultimaker B.V. in cooperation with the community.\nCura proudly uses the following open source projects:")
|
||||||
|
font: UM.Theme.getFont("system")
|
||||||
wrapMode: Text.WordWrap
|
wrapMode: Text.WordWrap
|
||||||
anchors.top: description.bottom
|
anchors.top: description.bottom
|
||||||
|
anchors.topMargin: UM.Theme.getSize("default_margin").height
|
||||||
|
}
|
||||||
|
|
||||||
|
ListView
|
||||||
|
{
|
||||||
|
id: projectsList
|
||||||
|
|
||||||
|
anchors.top: creditsNotes.bottom
|
||||||
|
anchors.topMargin: 10
|
||||||
|
|
||||||
|
width: parent.width
|
||||||
|
height: childrenRect.height
|
||||||
|
|
||||||
|
delegate: Row
|
||||||
|
{
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: "<a href='%1' title='%2'>%2</a>".arg(model.url).arg(model.name)
|
||||||
|
width: projectsList.width * 0.25
|
||||||
|
elide: Text.ElideRight
|
||||||
|
onLinkActivated: Qt.openUrlExternally(link)
|
||||||
|
}
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: model.description
|
||||||
|
elide: Text.ElideRight
|
||||||
|
width: projectsList.width * 0.6
|
||||||
|
}
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: model.license
|
||||||
|
elide: Text.ElideRight
|
||||||
|
width: projectsList.width * 0.15
|
||||||
|
}
|
||||||
|
}
|
||||||
|
model: ListModel
|
||||||
|
{
|
||||||
|
id: projectsModel
|
||||||
|
}
|
||||||
|
Component.onCompleted:
|
||||||
|
{
|
||||||
|
projectsModel.append({ name:"Cura", description: catalog.i18nc("@label", "Graphical user interface"), license: "AGPLv3", url: "https://github.com/Ultimaker/Cura" });
|
||||||
|
projectsModel.append({ name:"Uranium", description: catalog.i18nc("@label", "Application framework"), license: "AGPLv3", url: "https://github.com/Ultimaker/Uranium" });
|
||||||
|
projectsModel.append({ name:"CuraEngine", description: catalog.i18nc("@label", "GCode generator"), license: "AGPLv3", url: "https://github.com/Ultimaker/CuraEngine" });
|
||||||
|
projectsModel.append({ name:"libArcus", description: catalog.i18nc("@label", "Interprocess communication library"), license: "AGPLv3", url: "https://github.com/Ultimaker/libArcus" });
|
||||||
|
|
||||||
|
projectsModel.append({ name:"Python", description: catalog.i18nc("@label", "Programming language"), license: "Python", url: "http://python.org/" });
|
||||||
|
projectsModel.append({ name:"Qt5", description: catalog.i18nc("@label", "GUI framework"), license: "LGPLv3", url: "https://www.qt.io/" });
|
||||||
|
projectsModel.append({ name:"PyQt", description: catalog.i18nc("@label", "GUI framework bindings"), license: "GPL", url: "https://riverbankcomputing.com/software/pyqt" });
|
||||||
|
projectsModel.append({ name:"SIP", description: catalog.i18nc("@label", "C/C++ Binding library"), license: "GPL", url: "https://riverbankcomputing.com/software/sip" });
|
||||||
|
projectsModel.append({ name:"Protobuf", description: catalog.i18nc("@label", "Data interchange format"), license: "BSD", url: "https://developers.google.com/protocol-buffers" });
|
||||||
|
projectsModel.append({ name:"SciPy", description: catalog.i18nc("@label", "Support library for scientific computing "), license: "BSD-new", url: "https://www.scipy.org/" });
|
||||||
|
projectsModel.append({ name:"NumPy", description: catalog.i18nc("@label", "Support library for faster math"), license: "BSD", url: "http://www.numpy.org/" });
|
||||||
|
projectsModel.append({ name:"NumPy-STL", description: catalog.i18nc("@label", "Support library for handling STL files"), license: "BSD", url: "https://github.com/WoLpH/numpy-stl" });
|
||||||
|
projectsModel.append({ name:"PySerial", description: catalog.i18nc("@label", "Serial communication library"), license: "Python", url: "http://pyserial.sourceforge.net/" });
|
||||||
|
projectsModel.append({ name:"python-zeroconf", description: catalog.i18nc("@label", "ZeroConf discovery library"), license: "LGPL", url: "https://github.com/jstasiak/python-zeroconf" });
|
||||||
|
projectsModel.append({ name:"Clipper", description: catalog.i18nc("@label", "Polygon clipping library"), license: "Boost", url: "http://www.angusj.com/delphi/clipper.php" });
|
||||||
|
projectsModel.append({ name:"Open Sans", description: catalog.i18nc("@label", "Font"), license: "Apache 2.0", url: "https://fonts.google.com/specimen/Open+Sans" });
|
||||||
|
projectsModel.append({ name:"Font-Awesome-SVG-PNG", description: catalog.i18nc("@label", "SVG icons"), license: "SIL OFL 1.1", url: "https://github.com/encharm/Font-Awesome-SVG-PNG" });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rightButtons: Button
|
rightButtons: Button
|
||||||
|
|
|
@ -20,6 +20,11 @@ UM.Dialog
|
||||||
property string preferredCategory: "Ultimaker"
|
property string preferredCategory: "Ultimaker"
|
||||||
property string activeCategory: preferredCategory
|
property string activeCategory: preferredCategory
|
||||||
|
|
||||||
|
minimumWidth: UM.Theme.getSize("modal_window_minimum").width
|
||||||
|
minimumHeight: UM.Theme.getSize("modal_window_minimum").height
|
||||||
|
width: minimumWidth
|
||||||
|
height: minimumHeight
|
||||||
|
|
||||||
onVisibilityChanged:
|
onVisibilityChanged:
|
||||||
{
|
{
|
||||||
// Reset selection and machine name
|
// Reset selection and machine name
|
||||||
|
@ -46,7 +51,8 @@ UM.Dialog
|
||||||
left: parent.left;
|
left: parent.left;
|
||||||
top: parent.top;
|
top: parent.top;
|
||||||
right: parent.right;
|
right: parent.right;
|
||||||
bottom: parent.bottom;
|
bottom: machineNameRow.top;
|
||||||
|
bottomMargin: UM.Theme.getSize("default_margin").height
|
||||||
}
|
}
|
||||||
|
|
||||||
ListView
|
ListView
|
||||||
|
@ -65,6 +71,7 @@ UM.Dialog
|
||||||
section.delegate: Button
|
section.delegate: Button
|
||||||
{
|
{
|
||||||
text: section
|
text: section
|
||||||
|
width: machineList.width
|
||||||
style: ButtonStyle
|
style: ButtonStyle
|
||||||
{
|
{
|
||||||
background: Rectangle
|
background: Rectangle
|
||||||
|
@ -102,8 +109,8 @@ UM.Dialog
|
||||||
base.activeCategory = section;
|
base.activeCategory = section;
|
||||||
if (machineList.model.getItem(machineList.currentIndex).section != section) {
|
if (machineList.model.getItem(machineList.currentIndex).section != section) {
|
||||||
// Find the first machine from this section
|
// Find the first machine from this section
|
||||||
for(var i = 0; i < sortedMachineDefinitionsModel.count; i++) {
|
for(var i = 0; i < machineList.model.rowCount(); i++) {
|
||||||
var item = sortedMachineDefinitionsModel.getItem(i);
|
var item = machineList.model.getItem(i);
|
||||||
if (item.section == section) {
|
if (item.section == section) {
|
||||||
machineList.currentIndex = i;
|
machineList.currentIndex = i;
|
||||||
break;
|
break;
|
||||||
|
@ -169,21 +176,33 @@ UM.Dialog
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TextField
|
Row
|
||||||
{
|
{
|
||||||
id: machineName;
|
id: machineNameRow
|
||||||
text: getMachineName()
|
|
||||||
implicitWidth: UM.Theme.getSize("standard_list_input").width
|
|
||||||
maximumLength: 40
|
|
||||||
//validator: Cura.MachineNameValidator { } //TODO: Gives a segfault in PyQt5.6. For now, we must use a signal on text changed.
|
|
||||||
validator: RegExpValidator
|
|
||||||
{
|
|
||||||
regExp: {
|
|
||||||
machineName.machine_name_validator.machineNameRegex
|
|
||||||
}
|
|
||||||
}
|
|
||||||
property var machine_name_validator: Cura.MachineNameValidator { }
|
|
||||||
anchors.bottom:parent.bottom
|
anchors.bottom:parent.bottom
|
||||||
|
spacing: UM.Theme.getSize("default_margin").width
|
||||||
|
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: catalog.i18nc("@label", "Printer Name:")
|
||||||
|
anchors.verticalCenter: machineName.verticalCenter
|
||||||
|
}
|
||||||
|
|
||||||
|
TextField
|
||||||
|
{
|
||||||
|
id: machineName
|
||||||
|
text: getMachineName()
|
||||||
|
implicitWidth: UM.Theme.getSize("standard_list_input").width
|
||||||
|
maximumLength: 40
|
||||||
|
//validator: Cura.MachineNameValidator { } //TODO: Gives a segfault in PyQt5.6. For now, we must use a signal on text changed.
|
||||||
|
validator: RegExpValidator
|
||||||
|
{
|
||||||
|
regExp: {
|
||||||
|
machineName.machine_name_validator.machineNameRegex
|
||||||
|
}
|
||||||
|
}
|
||||||
|
property var machine_name_validator: Cura.MachineNameValidator { }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Button
|
Button
|
||||||
|
|
|
@ -269,16 +269,16 @@ UM.MainWindow
|
||||||
if(drop.urls.length > 0)
|
if(drop.urls.length > 0)
|
||||||
{
|
{
|
||||||
// Import models
|
// Import models
|
||||||
|
var imported_model = -1;
|
||||||
for(var i in drop.urls)
|
for(var i in drop.urls)
|
||||||
{
|
{
|
||||||
// There is no endsWith in this version of JS...
|
// There is no endsWith in this version of JS...
|
||||||
if ((drop.urls[i].length <= 12) || (drop.urls[i].substring(drop.urls[i].length-12) !== ".curaprofile")) {
|
if ((drop.urls[i].length <= 12) || (drop.urls[i].substring(drop.urls[i].length-12) !== ".curaprofile")) {
|
||||||
// Drop an object
|
// Drop an object
|
||||||
UM.MeshFileHandler.readLocalFile(drop.urls[i]);
|
Printer.readLocalFile(drop.urls[i]);
|
||||||
if (i == drop.urls.length - 1)
|
if (imported_model == -1)
|
||||||
{
|
{
|
||||||
var meshName = backgroundItem.getMeshName(drop.urls[i].toString());
|
imported_model = i;
|
||||||
backgroundItem.hasMesh(decodeURIComponent(meshName));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -297,6 +297,11 @@ UM.MainWindow
|
||||||
}
|
}
|
||||||
messageDialog.open()
|
messageDialog.open()
|
||||||
}
|
}
|
||||||
|
if (imported_model != -1)
|
||||||
|
{
|
||||||
|
var meshName = backgroundItem.getMeshName(drop.urls[imported_model].toString())
|
||||||
|
backgroundItem.hasMesh(decodeURIComponent(meshName))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -406,7 +411,8 @@ UM.MainWindow
|
||||||
iconSource: UM.Theme.getIcon("viewmode");
|
iconSource: UM.Theme.getIcon("viewmode");
|
||||||
|
|
||||||
style: UM.Theme.styles.tool_button;
|
style: UM.Theme.styles.tool_button;
|
||||||
tooltip: '';
|
tooltip: "";
|
||||||
|
enabled: !PrintInformation.preSliced
|
||||||
menu: ViewMenu { }
|
menu: ViewMenu { }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -533,9 +539,9 @@ UM.MainWindow
|
||||||
target: Cura.Actions.addProfile
|
target: Cura.Actions.addProfile
|
||||||
onTriggered:
|
onTriggered:
|
||||||
{
|
{
|
||||||
preferences.setPage(4);
|
|
||||||
preferences.show();
|
|
||||||
|
|
||||||
|
preferences.show();
|
||||||
|
preferences.setPage(4);
|
||||||
// Create a new profile after a very short delay so the preference page has time to initiate
|
// Create a new profile after a very short delay so the preference page has time to initiate
|
||||||
createProfileTimer.start();
|
createProfileTimer.start();
|
||||||
}
|
}
|
||||||
|
@ -731,14 +737,11 @@ UM.MainWindow
|
||||||
|
|
||||||
for(var i in fileUrls)
|
for(var i in fileUrls)
|
||||||
{
|
{
|
||||||
UM.MeshFileHandler.readLocalFile(fileUrls[i])
|
Printer.readLocalFile(fileUrls[i])
|
||||||
|
|
||||||
if (i == fileUrls.length - 1)
|
|
||||||
{
|
|
||||||
var meshName = backgroundItem.getMeshName(fileUrls.toString())
|
|
||||||
backgroundItem.hasMesh(decodeURIComponent(meshName))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var meshName = backgroundItem.getMeshName(fileUrls[0].toString())
|
||||||
|
backgroundItem.hasMesh(decodeURIComponent(meshName))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ Menu
|
||||||
if(printerConnected && Cura.MachineManager.printerOutputDevices[0].materialNames.length > extruderIndex)
|
if(printerConnected && Cura.MachineManager.printerOutputDevices[0].materialNames.length > extruderIndex)
|
||||||
{
|
{
|
||||||
var materialName = Cura.MachineManager.printerOutputDevices[0].materialNames[extruderIndex];
|
var materialName = Cura.MachineManager.printerOutputDevices[0].materialNames[extruderIndex];
|
||||||
return catalog.i18nc("@title:menuitem %1 is the value from the printer", "Automatic: %1").arg(materialName);
|
return catalog.i18nc("@title:menuitem %1 is the automatically selected material", "Automatic: %1").arg(materialName);
|
||||||
}
|
}
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@ Menu
|
||||||
return (index + 1) + ". " + path.slice(path.lastIndexOf("/") + 1);
|
return (index + 1) + ". " + path.slice(path.lastIndexOf("/") + 1);
|
||||||
}
|
}
|
||||||
onTriggered: {
|
onTriggered: {
|
||||||
UM.MeshFileHandler.readLocalFile(modelData);
|
Printer.readLocalFile(modelData);
|
||||||
var meshName = backgroundItem.getMeshName(modelData.toString())
|
var meshName = backgroundItem.getMeshName(modelData.toString())
|
||||||
backgroundItem.hasMesh(decodeURIComponent(meshName))
|
backgroundItem.hasMesh(decodeURIComponent(meshName))
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@ Menu
|
||||||
{
|
{
|
||||||
title: catalog.i18nc("@title:menu menubar:toplevel", "&View");
|
title: catalog.i18nc("@title:menu menubar:toplevel", "&View");
|
||||||
id: menu
|
id: menu
|
||||||
|
enabled: !PrintInformation.preSliced
|
||||||
Instantiator
|
Instantiator
|
||||||
{
|
{
|
||||||
model: UM.ViewModel { }
|
model: UM.ViewModel { }
|
||||||
|
|
|
@ -97,6 +97,7 @@ UM.PreferencesPage
|
||||||
append({ text: "Français", code: "fr" })
|
append({ text: "Français", code: "fr" })
|
||||||
append({ text: "Italiano", code: "it" })
|
append({ text: "Italiano", code: "it" })
|
||||||
append({ text: "Nederlands", code: "nl" })
|
append({ text: "Nederlands", code: "nl" })
|
||||||
|
append({ text: "Русский", code: "ru" })
|
||||||
append({ text: "Türkçe", code: "tr" })
|
append({ text: "Türkçe", code: "tr" })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -278,6 +278,7 @@ UM.ManagementPage
|
||||||
{
|
{
|
||||||
messageDialog.icon = StandardIcon.Information
|
messageDialog.icon = StandardIcon.Information
|
||||||
messageDialog.text = catalog.i18nc("@info:status", "Successfully imported material <filename>%1</filename>").arg(fileUrl)
|
messageDialog.text = catalog.i18nc("@info:status", "Successfully imported material <filename>%1</filename>").arg(fileUrl)
|
||||||
|
currentItem = base.model.getItem(base.objectList.currentIndex)
|
||||||
}
|
}
|
||||||
else if(result.status == "duplicate")
|
else if(result.status == "duplicate")
|
||||||
{
|
{
|
||||||
|
|
|
@ -34,6 +34,8 @@ Rectangle {
|
||||||
return catalog.i18nc("@label:PrintjobStatus %1 is target operation","Ready to %1").arg(UM.OutputDeviceManager.activeDeviceShortDescription);
|
return catalog.i18nc("@label:PrintjobStatus %1 is target operation","Ready to %1").arg(UM.OutputDeviceManager.activeDeviceShortDescription);
|
||||||
case 4:
|
case 4:
|
||||||
return catalog.i18nc("@label:PrintjobStatus", "Unable to Slice");
|
return catalog.i18nc("@label:PrintjobStatus", "Unable to Slice");
|
||||||
|
case 5:
|
||||||
|
return catalog.i18nc("@label:PrintjobStatus", "Slicing unavailable");
|
||||||
default:
|
default:
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
@ -104,7 +106,7 @@ Rectangle {
|
||||||
id: saveToButton
|
id: saveToButton
|
||||||
|
|
||||||
tooltip: UM.OutputDeviceManager.activeDeviceDescription;
|
tooltip: UM.OutputDeviceManager.activeDeviceDescription;
|
||||||
enabled: base.backendState == 3 && base.activity == true
|
enabled: (base.backendState == 3 || base.backendState == 5) && base.activity == true
|
||||||
height: UM.Theme.getSize("save_button_save_to_button").height
|
height: UM.Theme.getSize("save_button_save_to_button").height
|
||||||
|
|
||||||
anchors.top: parent.top
|
anchors.top: parent.top
|
||||||
|
@ -179,7 +181,7 @@ Rectangle {
|
||||||
anchors.rightMargin: UM.Theme.getSize("default_margin").width
|
anchors.rightMargin: UM.Theme.getSize("default_margin").width
|
||||||
width: UM.Theme.getSize("save_button_save_to_button").height
|
width: UM.Theme.getSize("save_button_save_to_button").height
|
||||||
height: UM.Theme.getSize("save_button_save_to_button").height
|
height: UM.Theme.getSize("save_button_save_to_button").height
|
||||||
enabled: base.backendState == 3 && base.activity == true
|
enabled: (base.backendState == 3 || base.backendState == 5) && base.activity == true
|
||||||
visible: devicesModel.deviceCount > 1
|
visible: devicesModel.deviceCount > 1
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -230,6 +230,10 @@ Item {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Setting does have a limit_to_extruder property, so use that one instead.
|
// Setting does have a limit_to_extruder property, so use that one instead.
|
||||||
|
if (definition.key === undefined) {
|
||||||
|
// Observed when loading workspace, probably when SettingItems are removed.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return Cura.SettingInheritanceManager.getOverridesForExtruder(definition.key, globalPropertyProvider.properties.limit_to_extruder).indexOf(definition.key) >= 0;
|
return Cura.SettingInheritanceManager.getOverridesForExtruder(definition.key, globalPropertyProvider.properties.limit_to_extruder).indexOf(definition.key) >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -100,7 +100,7 @@ SettingItem
|
||||||
|
|
||||||
maximumLength: 10;
|
maximumLength: 10;
|
||||||
|
|
||||||
validator: RegExpValidator { regExp: (definition.type == "int") ? /^-?[0-9]{0,10}/ : /^-?[0-9.,]{0,10}/ } // definition.type property from parent loader used to disallow fractional number entry
|
validator: RegExpValidator { regExp: (definition.type == "int") ? /^-?[0-9]{0,10}$/ : /^-?[0-9]{0,9}[.,]?[0-9]{0,10}$/ } // definition.type property from parent loader used to disallow fractional number entry
|
||||||
|
|
||||||
Binding
|
Binding
|
||||||
{
|
{
|
||||||
|
@ -113,7 +113,8 @@ SettingItem
|
||||||
// 2: quality
|
// 2: quality
|
||||||
// 3: material -> user changed material in materialspage
|
// 3: material -> user changed material in materialspage
|
||||||
// 4: variant
|
// 4: variant
|
||||||
// 5: machine
|
// 5: machine_changes
|
||||||
|
// 6: machine
|
||||||
if ((base.resolve != "None" && base.resolve) && (stackLevel != 0) && (stackLevel != 1)) {
|
if ((base.resolve != "None" && base.resolve) && (stackLevel != 0) && (stackLevel != 1)) {
|
||||||
// We have a resolve function. Indicates that the setting is not settable per extruder and that
|
// We have a resolve function. Indicates that the setting is not settable per extruder and that
|
||||||
// we have to choose between the resolved value (default) and the global value
|
// we have to choose between the resolved value (default) and the global value
|
||||||
|
|
|
@ -167,7 +167,7 @@ Item
|
||||||
id: definitionsModel;
|
id: definitionsModel;
|
||||||
containerId: Cura.MachineManager.activeDefinitionId
|
containerId: Cura.MachineManager.activeDefinitionId
|
||||||
visibilityHandler: UM.SettingPreferenceVisibilityHandler { }
|
visibilityHandler: UM.SettingPreferenceVisibilityHandler { }
|
||||||
exclude: ["machine_settings", "command_line_settings", "infill_mesh", "infill_mesh_order"] // TODO: infill_mesh settigns are excluded hardcoded, but should be based on the fact that settable_globally, settable_per_meshgroup and settable_per_extruder are false.
|
exclude: ["machine_settings", "command_line_settings", "infill_mesh", "infill_mesh_order", "support_mesh", "anti_overhang_mesh"] // TODO: infill_mesh settigns are excluded hardcoded, but should be based on the fact that settable_globally, settable_per_meshgroup and settable_per_extruder are false.
|
||||||
expanded: Printer.expandedCategories
|
expanded: Printer.expandedCategories
|
||||||
onExpandedChanged:
|
onExpandedChanged:
|
||||||
{
|
{
|
||||||
|
|
|
@ -16,6 +16,7 @@ Rectangle
|
||||||
|
|
||||||
property int currentModeIndex;
|
property int currentModeIndex;
|
||||||
property bool monitoringPrint: false
|
property bool monitoringPrint: false
|
||||||
|
property bool hideSettings: PrintInformation.preSliced
|
||||||
Connections
|
Connections
|
||||||
{
|
{
|
||||||
target: Printer
|
target: Printer
|
||||||
|
@ -114,10 +115,28 @@ Rectangle
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
style: ButtonStyle {
|
style: ButtonStyle {
|
||||||
background: Rectangle {
|
background: Rectangle {
|
||||||
color: control.hovered ? UM.Theme.getColor("button_hover") :
|
color: {
|
||||||
control.pressed ? UM.Theme.getColor("button_hover") : UM.Theme.getColor("sidebar_header_bar")
|
if(control.pressed) {
|
||||||
|
return UM.Theme.getColor("sidebar_header_active");
|
||||||
|
} else if(control.hovered) {
|
||||||
|
return UM.Theme.getColor("sidebar_header_hover");
|
||||||
|
} else {
|
||||||
|
return UM.Theme.getColor("sidebar_header_bar");
|
||||||
|
}
|
||||||
|
}
|
||||||
Behavior on color { ColorAnimation { duration: 50; } }
|
Behavior on color { ColorAnimation { duration: 50; } }
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
id: underline;
|
||||||
|
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
height: UM.Theme.getSize("sidebar_header_highlight").height
|
||||||
|
color: UM.Theme.getColor("sidebar_header_highlight_hover")
|
||||||
|
visible: control.hovered || control.pressed
|
||||||
|
}
|
||||||
|
|
||||||
UM.RecolorImage {
|
UM.RecolorImage {
|
||||||
id: downArrow
|
id: downArrow
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
@ -252,7 +271,7 @@ Rectangle
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: headerSeparator
|
id: headerSeparator
|
||||||
width: parent.width
|
width: parent.width
|
||||||
visible: !monitoringPrint
|
visible: !monitoringPrint && !hideSettings
|
||||||
height: visible ? UM.Theme.getSize("sidebar_lining").height : 0
|
height: visible ? UM.Theme.getSize("sidebar_lining").height : 0
|
||||||
color: UM.Theme.getColor("sidebar_lining")
|
color: UM.Theme.getColor("sidebar_lining")
|
||||||
anchors.top: header.bottom
|
anchors.top: header.bottom
|
||||||
|
@ -270,7 +289,7 @@ Rectangle
|
||||||
|
|
||||||
Label {
|
Label {
|
||||||
id: settingsModeLabel
|
id: settingsModeLabel
|
||||||
text: catalog.i18nc("@label:listbox", "Print Setup");
|
text: !hideSettings ? catalog.i18nc("@label:listbox", "Print Setup") : catalog.i18nc("@label:listbox","Print Setup disabled\nG-code files cannot be modified");
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
anchors.leftMargin: UM.Theme.getSize("default_margin").width;
|
anchors.leftMargin: UM.Theme.getSize("default_margin").width;
|
||||||
anchors.top: headerSeparator.bottom
|
anchors.top: headerSeparator.bottom
|
||||||
|
@ -290,7 +309,7 @@ Rectangle
|
||||||
anchors.rightMargin: UM.Theme.getSize("default_margin").width
|
anchors.rightMargin: UM.Theme.getSize("default_margin").width
|
||||||
anchors.top: headerSeparator.bottom
|
anchors.top: headerSeparator.bottom
|
||||||
anchors.topMargin: UM.Theme.getSize("default_margin").height
|
anchors.topMargin: UM.Theme.getSize("default_margin").height
|
||||||
visible: !monitoringPrint
|
visible: !monitoringPrint && !hideSettings
|
||||||
Component{
|
Component{
|
||||||
id: wizardDelegate
|
id: wizardDelegate
|
||||||
Button {
|
Button {
|
||||||
|
@ -366,7 +385,7 @@ Rectangle
|
||||||
height: settingsModeSelection.height
|
height: settingsModeSelection.height
|
||||||
width: visible ? height : 0
|
width: visible ? height : 0
|
||||||
|
|
||||||
visible: !monitoringPrint && modesListModel.get(base.currentModeIndex) != undefined && modesListModel.get(base.currentModeIndex).showFilterButton
|
visible: !monitoringPrint && !hideSettings && modesListModel.get(base.currentModeIndex) != undefined && modesListModel.get(base.currentModeIndex).showFilterButton
|
||||||
opacity: visible ? 1 : 0
|
opacity: visible ? 1 : 0
|
||||||
|
|
||||||
onClicked: sidebarContents.currentItem.toggleFilterField()
|
onClicked: sidebarContents.currentItem.toggleFilterField()
|
||||||
|
@ -414,7 +433,7 @@ Rectangle
|
||||||
anchors.topMargin: UM.Theme.getSize("default_margin").height
|
anchors.topMargin: UM.Theme.getSize("default_margin").height
|
||||||
anchors.left: base.left
|
anchors.left: base.left
|
||||||
anchors.right: base.right
|
anchors.right: base.right
|
||||||
visible: !monitoringPrint
|
visible: !monitoringPrint && !hideSettings
|
||||||
|
|
||||||
delegate: StackViewDelegate
|
delegate: StackViewDelegate
|
||||||
{
|
{
|
||||||
|
|
|
@ -164,7 +164,7 @@ Column
|
||||||
id: variantRow
|
id: variantRow
|
||||||
|
|
||||||
height: UM.Theme.getSize("sidebar_setup").height
|
height: UM.Theme.getSize("sidebar_setup").height
|
||||||
visible: (Cura.MachineManager.hasVariants || Cura.MachineManager.hasMaterials) && !sidebar.monitoringPrint
|
visible: (Cura.MachineManager.hasVariants || Cura.MachineManager.hasMaterials) && !sidebar.monitoringPrint && !sidebar.hideSettings
|
||||||
|
|
||||||
anchors
|
anchors
|
||||||
{
|
{
|
||||||
|
@ -261,7 +261,7 @@ Column
|
||||||
{
|
{
|
||||||
id: globalProfileRow
|
id: globalProfileRow
|
||||||
height: UM.Theme.getSize("sidebar_setup").height
|
height: UM.Theme.getSize("sidebar_setup").height
|
||||||
visible: !sidebar.monitoringPrint
|
visible: !sidebar.monitoringPrint && !sidebar.hideSettings
|
||||||
|
|
||||||
anchors
|
anchors
|
||||||
{
|
{
|
||||||
|
|
|
@ -29,7 +29,6 @@ UM.Dialog
|
||||||
|
|
||||||
onClosing:
|
onClosing:
|
||||||
{
|
{
|
||||||
UM.Preferences.setValue("cura/asked_dialog_on_project_save", true)
|
|
||||||
UM.Preferences.setValue("cura/dialog_on_project_save", !dontShowAgainCheckbox.checked)
|
UM.Preferences.setValue("cura/dialog_on_project_save", !dontShowAgainCheckbox.checked)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,16 +36,22 @@ UM.Dialog
|
||||||
{
|
{
|
||||||
if(visible)
|
if(visible)
|
||||||
{
|
{
|
||||||
if (UM.Preferences.getValue("cura/asked_dialog_on_project_save"))
|
dontShowAgain = !UM.Preferences.getValue("cura/dialog_on_project_save")
|
||||||
{
|
|
||||||
dontShowAgain = true
|
|
||||||
} else { dontShowAgain = UM.Preferences.setValue("cura/dialog_on_project_save")}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Item
|
Item
|
||||||
{
|
{
|
||||||
anchors.fill: parent
|
anchors.top: parent.top
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.right: parent.right
|
||||||
|
|
||||||
|
anchors.topMargin: 20
|
||||||
|
anchors.bottomMargin: 20
|
||||||
|
anchors.leftMargin:20
|
||||||
|
anchors.rightMargin: 20
|
||||||
|
|
||||||
UM.SettingDefinitionsModel
|
UM.SettingDefinitionsModel
|
||||||
{
|
{
|
||||||
id: definitionsModel
|
id: definitionsModel
|
||||||
|
@ -91,7 +96,21 @@ UM.Dialog
|
||||||
text: catalog.i18nc("@action:label", "Printer settings")
|
text: catalog.i18nc("@action:label", "Printer settings")
|
||||||
font.bold: true
|
font.bold: true
|
||||||
}
|
}
|
||||||
|
Row
|
||||||
|
{
|
||||||
|
width: parent.width
|
||||||
|
height: childrenRect.height
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: catalog.i18nc("@action:label", "Type")
|
||||||
|
width: parent.width / 3
|
||||||
|
}
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: Cura.MachineManager.activeDefinitionName
|
||||||
|
width: parent.width / 3
|
||||||
|
}
|
||||||
|
}
|
||||||
Row
|
Row
|
||||||
{
|
{
|
||||||
width: parent.width
|
width: parent.width
|
||||||
|
@ -106,8 +125,42 @@ UM.Dialog
|
||||||
text: Cura.MachineManager.activeMachineName
|
text: Cura.MachineManager.activeMachineName
|
||||||
width: parent.width / 3
|
width: parent.width / 3
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Repeater
|
||||||
|
{
|
||||||
|
model: Cura.MachineManager.activeMaterialNames
|
||||||
|
delegate: Column
|
||||||
|
{
|
||||||
|
Item // Spacer
|
||||||
|
{
|
||||||
|
height: spacerHeight
|
||||||
|
width: height
|
||||||
|
}
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: catalog.i18nc("@action:label", "Extruder %1").arg(index+1)
|
||||||
|
}
|
||||||
|
height: childrenRect.height
|
||||||
|
width: parent.width
|
||||||
|
Row
|
||||||
|
{
|
||||||
|
width: parent.width
|
||||||
|
height: childrenRect.height
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: catalog.i18nc("@action:label", "%1 & material").arg(Cura.MachineManager.activeDefinitionVariantsName)
|
||||||
|
width: parent.width / 3
|
||||||
|
}
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: Cura.MachineManager.activeVariantNames[index] + ", " + modelData
|
||||||
|
width: parent.width / 3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Item // Spacer
|
Item // Spacer
|
||||||
{
|
{
|
||||||
height: spacerHeight
|
height: spacerHeight
|
||||||
|
@ -119,7 +172,21 @@ UM.Dialog
|
||||||
text: catalog.i18nc("@action:label", "Profile settings")
|
text: catalog.i18nc("@action:label", "Profile settings")
|
||||||
font.bold: true
|
font.bold: true
|
||||||
}
|
}
|
||||||
|
Row
|
||||||
|
{
|
||||||
|
width: parent.width
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: catalog.i18nc("@action:label", "Not in profile")
|
||||||
|
width: parent.width / 3
|
||||||
|
}
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: catalog.i18ncp("@action:label", "%1 override", "%1 overrides", Cura.MachineManager.numUserSettings).arg(Cura.MachineManager.numUserSettings)
|
||||||
|
width: parent.width / 3
|
||||||
|
}
|
||||||
|
visible: Cura.MachineManager.numUserSettings
|
||||||
|
}
|
||||||
Row
|
Row
|
||||||
{
|
{
|
||||||
width: parent.width
|
width: parent.width
|
||||||
|
@ -136,38 +203,6 @@ UM.Dialog
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Item // Spacer
|
|
||||||
{
|
|
||||||
height: spacerHeight
|
|
||||||
width: height
|
|
||||||
}
|
|
||||||
|
|
||||||
Label
|
|
||||||
{
|
|
||||||
text: catalog.i18nc("@action:label", "Material settings")
|
|
||||||
font.bold: true
|
|
||||||
}
|
|
||||||
|
|
||||||
Repeater
|
|
||||||
{
|
|
||||||
model: Cura.MachineManager.activeMaterialNames
|
|
||||||
delegate: Row
|
|
||||||
{
|
|
||||||
width: parent.width
|
|
||||||
height: childrenRect.height
|
|
||||||
Label
|
|
||||||
{
|
|
||||||
text: catalog.i18nc("@action:label", "Name")
|
|
||||||
width: parent.width / 3
|
|
||||||
}
|
|
||||||
Label
|
|
||||||
{
|
|
||||||
text: modelData
|
|
||||||
width: parent.width / 3
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Item // Spacer
|
Item // Spacer
|
||||||
{
|
{
|
||||||
|
@ -202,22 +237,34 @@ UM.Dialog
|
||||||
checked: dontShowAgain
|
checked: dontShowAgain
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
rightButtons: [
|
|
||||||
Button
|
|
||||||
{
|
|
||||||
id: cancel_button
|
|
||||||
text: catalog.i18nc("@action:button","Cancel");
|
|
||||||
enabled: true
|
|
||||||
onClicked: close()
|
|
||||||
},
|
|
||||||
Button
|
Button
|
||||||
{
|
{
|
||||||
id: ok_button
|
id: ok_button
|
||||||
text: catalog.i18nc("@action:button","Save");
|
text: catalog.i18nc("@action:button","Save");
|
||||||
enabled: true
|
enabled: true
|
||||||
onClicked: {
|
onClicked: {
|
||||||
close(); yes() }
|
close()
|
||||||
|
yes()
|
||||||
|
}
|
||||||
|
anchors.bottomMargin: - 0.5 * height
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
anchors.right: parent.right
|
||||||
}
|
}
|
||||||
]
|
|
||||||
|
Button
|
||||||
|
{
|
||||||
|
id: cancel_button
|
||||||
|
text: catalog.i18nc("@action:button","Cancel");
|
||||||
|
enabled: true
|
||||||
|
onClicked: close()
|
||||||
|
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
anchors.right: ok_button.left
|
||||||
|
anchors.bottomMargin: - 0.5 * height
|
||||||
|
anchors.rightMargin:2
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -17,7 +17,7 @@ infill_sparse_density = 22
|
||||||
speed_print = 30
|
speed_print = 30
|
||||||
speed_layer_0 = =round(speed_print * 30 / 30)
|
speed_layer_0 = =round(speed_print * 30 / 30)
|
||||||
cool_min_layer_time = 3
|
cool_min_layer_time = 3
|
||||||
cool_fan_speed_min = 20
|
cool_fan_speed_min = =cool_fan_speed * 0.2
|
||||||
cool_min_speed = 10
|
cool_min_speed = 10
|
||||||
cool_min_layer_time_fan_speed_max = 15
|
cool_min_layer_time_fan_speed_max = 15
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@ speed_wall = 40
|
||||||
speed_topbottom = 30
|
speed_topbottom = 30
|
||||||
speed_travel = 150
|
speed_travel = 150
|
||||||
cool_min_layer_time = 3
|
cool_min_layer_time = 3
|
||||||
cool_fan_speed_min = 20
|
cool_fan_speed_min = =cool_fan_speed * 0.2
|
||||||
cool_min_speed = 10
|
cool_min_speed = 10
|
||||||
cool_min_layer_time_fan_speed_max = 15
|
cool_min_layer_time_fan_speed_max = 15
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ speed_print = 45
|
||||||
speed_layer_0 = =round(speed_print * 30 / 45)
|
speed_layer_0 = =round(speed_print * 30 / 45)
|
||||||
speed_wall = 30
|
speed_wall = 30
|
||||||
cool_min_layer_time = 3
|
cool_min_layer_time = 3
|
||||||
cool_fan_speed_min = 20
|
cool_fan_speed_min = =cool_fan_speed * 0.2
|
||||||
cool_min_speed = 10
|
cool_min_speed = 10
|
||||||
cool_min_layer_time_fan_speed_max = 15
|
cool_min_layer_time_fan_speed_max = 15
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,6 @@ speed_print = 45
|
||||||
speed_layer_0 = =round(speed_print * 30 / 45)
|
speed_layer_0 = =round(speed_print * 30 / 45)
|
||||||
speed_wall = 30
|
speed_wall = 30
|
||||||
cool_min_layer_time = 3
|
cool_min_layer_time = 3
|
||||||
cool_fan_speed_min = 20
|
cool_fan_speed_min = =cool_fan_speed * 0.2
|
||||||
cool_min_speed = 10
|
cool_min_speed = 10
|
||||||
cool_min_layer_time_fan_speed_max = 15
|
cool_min_layer_time_fan_speed_max = 15
|
||||||
|
|
|
@ -18,7 +18,7 @@ speed_print = 40
|
||||||
speed_layer_0 = =round(speed_print * 30 / 40)
|
speed_layer_0 = =round(speed_print * 30 / 40)
|
||||||
speed_infill = 55
|
speed_infill = 55
|
||||||
cool_min_layer_time = 3
|
cool_min_layer_time = 3
|
||||||
cool_fan_speed_min = 50
|
cool_fan_speed_min = =cool_fan_speed * 0.5
|
||||||
cool_min_speed = 20
|
cool_min_speed = 20
|
||||||
cool_min_layer_time_fan_speed_max = 20
|
cool_min_layer_time_fan_speed_max = 20
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ infill_sparse_density = 20
|
||||||
speed_print = 40
|
speed_print = 40
|
||||||
speed_layer_0 = =round(speed_print * 30 / 40)
|
speed_layer_0 = =round(speed_print * 30 / 40)
|
||||||
cool_min_layer_time = 3
|
cool_min_layer_time = 3
|
||||||
cool_fan_speed_min = 50
|
cool_fan_speed_min = =cool_fan_speed * 0.5
|
||||||
cool_min_speed = 15
|
cool_min_speed = 15
|
||||||
cool_min_layer_time_fan_speed_max = 25
|
cool_min_layer_time_fan_speed_max = 25
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ infill_sparse_density = 22
|
||||||
speed_print = 30
|
speed_print = 30
|
||||||
speed_layer_0 = =round(speed_print * 30 / 30)
|
speed_layer_0 = =round(speed_print * 30 / 30)
|
||||||
cool_min_layer_time = 2
|
cool_min_layer_time = 2
|
||||||
cool_fan_speed_min = 20
|
cool_fan_speed_min = =cool_fan_speed * 0.2
|
||||||
cool_min_speed = 15
|
cool_min_speed = 15
|
||||||
cool_min_layer_time_fan_speed_max = 15
|
cool_min_layer_time_fan_speed_max = 15
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue