mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-06 22:47:29 -06:00
Merge branch 'master' into feature_config_dir_lock
This commit is contained in:
commit
aa718fc013
190 changed files with 46974 additions and 3032 deletions
8
.gitignore
vendored
8
.gitignore
vendored
|
@ -8,6 +8,7 @@ docs/html
|
|||
resources/i18n/en
|
||||
resources/i18n/x-test
|
||||
resources/firmware
|
||||
resources/materials
|
||||
LC_MESSAGES
|
||||
|
||||
# Editors and IDEs.
|
||||
|
@ -25,3 +26,10 @@ LC_MESSAGES
|
|||
|
||||
# Debian packaging
|
||||
debian*
|
||||
|
||||
#Externally located plug-ins.
|
||||
plugins/Doodle3D-cura-plugin
|
||||
plugins/GodMode
|
||||
plugins/PostProcessingPlugin
|
||||
plugins/UM3NetworkPrinting
|
||||
plugins/X3GWriter
|
|
@ -25,7 +25,7 @@ if(NOT ${URANIUM_SCRIPTS_DIR} STREQUAL "")
|
|||
CREATE_TRANSLATION_TARGETS()
|
||||
endif()
|
||||
|
||||
find_package(PythonInterp 3.4.0 REQUIRED)
|
||||
find_package(PythonInterp 3.5.0 REQUIRED)
|
||||
|
||||
install(DIRECTORY resources
|
||||
DESTINATION ${CMAKE_INSTALL_DATADIR}/cura)
|
||||
|
|
|
@ -5,6 +5,7 @@ Name[de]=Cura
|
|||
GenericName=3D Printing Software
|
||||
GenericName[de]=3D-Druck-Software
|
||||
Comment=Cura converts 3D models into paths for a 3D printer. It prepares your print for maximum accuracy, minimum printing time and good reliability with many extra features that make your print come out great.
|
||||
Comment[de]=Cura wandelt 3D-Modelle in Pfade für einen 3D-Drucker um. Es bereitet Ihren Druck für maximale Genauigkeit, minimale Druckzeit und guter Zuverlässigkeit mit vielen zusätzlichen Funktionen vor, damit Ihr Druck großartig wird.
|
||||
Exec=@CMAKE_INSTALL_FULL_BINDIR@/cura %F
|
||||
TryExec=@CMAKE_INSTALL_FULL_BINDIR@/cura
|
||||
Icon=@CMAKE_INSTALL_FULL_DATADIR@/cura/resources/images/cura-icon.png
|
||||
|
|
|
@ -27,12 +27,15 @@ import UM.Settings.ContainerRegistry
|
|||
|
||||
|
||||
# Setting for clearance around the prime
|
||||
PRIME_CLEARANCE = 1.5
|
||||
PRIME_CLEARANCE = 6.5
|
||||
|
||||
|
||||
## Build volume is a special kind of node that is responsible for rendering the printable area & disallowed areas.
|
||||
class BuildVolume(SceneNode):
|
||||
VolumeOutlineColor = Color(12, 169, 227, 255)
|
||||
XAxisColor = Color(255, 0, 0, 255)
|
||||
YAxisColor = Color(0, 0, 255, 255)
|
||||
ZAxisColor = Color(0, 255, 0, 255)
|
||||
|
||||
raftThicknessChanged = Signal()
|
||||
|
||||
|
@ -45,6 +48,10 @@ class BuildVolume(SceneNode):
|
|||
|
||||
self._shader = None
|
||||
|
||||
self._origin_mesh = None
|
||||
self._origin_line_length = 20
|
||||
self._origin_line_width = 0.5
|
||||
|
||||
self._grid_mesh = None
|
||||
self._grid_shader = None
|
||||
|
||||
|
@ -68,8 +75,8 @@ class BuildVolume(SceneNode):
|
|||
self._has_errors = False
|
||||
Application.getInstance().getController().getScene().sceneChanged.connect(self._onSceneChanged)
|
||||
|
||||
# Number of objects loaded at the moment.
|
||||
self._number_of_objects = 0
|
||||
#Objects loaded at the moment. We are connected to the property changed events of these objects.
|
||||
self._scene_objects = set()
|
||||
|
||||
self._change_timer = QTimer()
|
||||
self._change_timer.setInterval(100)
|
||||
|
@ -95,15 +102,34 @@ class BuildVolume(SceneNode):
|
|||
|
||||
def _onChangeTimerFinished(self):
|
||||
root = Application.getInstance().getController().getScene().getRoot()
|
||||
new_number_of_objects = len([node for node in BreadthFirstIterator(root) if node.getMeshData() and type(node) is SceneNode])
|
||||
if new_number_of_objects != self._number_of_objects:
|
||||
recalculate = False
|
||||
if self._global_container_stack.getProperty("print_sequence", "value") == "one_at_a_time":
|
||||
recalculate = (new_number_of_objects < 2 and self._number_of_objects > 1) or (new_number_of_objects > 1 and self._number_of_objects < 2)
|
||||
self._number_of_objects = new_number_of_objects
|
||||
if recalculate:
|
||||
new_scene_objects = set(node for node in BreadthFirstIterator(root) if node.getMeshData() and type(node) is SceneNode)
|
||||
if new_scene_objects != self._scene_objects:
|
||||
for node in new_scene_objects - self._scene_objects: #Nodes that were added to the scene.
|
||||
node.decoratorsChanged.connect(self._onNodeDecoratorChanged)
|
||||
for node in self._scene_objects - new_scene_objects: #Nodes that were removed from the scene.
|
||||
per_mesh_stack = node.callDecoration("getStack")
|
||||
if per_mesh_stack:
|
||||
per_mesh_stack.propertyChanged.disconnect(self._onSettingPropertyChanged)
|
||||
active_extruder_changed = node.callDecoration("getActiveExtruderChangedSignal")
|
||||
if active_extruder_changed is not None:
|
||||
node.callDecoration("getActiveExtruderChangedSignal").disconnect(self._updateDisallowedAreasAndRebuild)
|
||||
node.decoratorsChanged.disconnect(self._onNodeDecoratorChanged)
|
||||
|
||||
self._scene_objects = new_scene_objects
|
||||
self._onSettingPropertyChanged("print_sequence", "value") # Create fake event, so right settings are triggered.
|
||||
|
||||
## Updates the listeners that listen for changes in per-mesh stacks.
|
||||
#
|
||||
# \param node The node for which the decorators changed.
|
||||
def _onNodeDecoratorChanged(self, node):
|
||||
per_mesh_stack = node.callDecoration("getStack")
|
||||
if per_mesh_stack:
|
||||
per_mesh_stack.propertyChanged.connect(self._onSettingPropertyChanged)
|
||||
active_extruder_changed = node.callDecoration("getActiveExtruderChangedSignal")
|
||||
if active_extruder_changed is not None:
|
||||
active_extruder_changed.connect(self._updateDisallowedAreasAndRebuild)
|
||||
self._updateDisallowedAreasAndRebuild()
|
||||
|
||||
def setWidth(self, width):
|
||||
if width: self._width = width
|
||||
|
||||
|
@ -128,6 +154,7 @@ class BuildVolume(SceneNode):
|
|||
self._grid_shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "grid.shader"))
|
||||
|
||||
renderer.queueNode(self, mode = RenderBatch.RenderMode.Lines)
|
||||
renderer.queueNode(self, mesh = self._origin_mesh)
|
||||
renderer.queueNode(self, mesh = self._grid_mesh, shader = self._grid_shader, backface_cull = True)
|
||||
if self._disallowed_area_mesh:
|
||||
renderer.queueNode(self, mesh = self._disallowed_area_mesh, shader = self._shader, transparent = True, backface_cull = True, sort = -9)
|
||||
|
@ -170,6 +197,37 @@ class BuildVolume(SceneNode):
|
|||
|
||||
self.setMeshData(mb.build())
|
||||
|
||||
mb = MeshBuilder()
|
||||
|
||||
# Indication of the machine origin
|
||||
if self._global_container_stack.getProperty("machine_center_is_zero", "value"):
|
||||
origin = (Vector(min_w, min_h, min_d) + Vector(max_w, min_h, max_d)) / 2
|
||||
else:
|
||||
origin = Vector(min_w, min_h, max_d)
|
||||
|
||||
mb.addCube(
|
||||
width = self._origin_line_length,
|
||||
height = self._origin_line_width,
|
||||
depth = self._origin_line_width,
|
||||
center = origin + Vector(self._origin_line_length / 2, 0, 0),
|
||||
color = self.XAxisColor
|
||||
)
|
||||
mb.addCube(
|
||||
width = self._origin_line_width,
|
||||
height = self._origin_line_length,
|
||||
depth = self._origin_line_width,
|
||||
center = origin + Vector(0, self._origin_line_length / 2, 0),
|
||||
color = self.YAxisColor
|
||||
)
|
||||
mb.addCube(
|
||||
width = self._origin_line_width,
|
||||
height = self._origin_line_width,
|
||||
depth = self._origin_line_length,
|
||||
center = origin - Vector(0, 0, self._origin_line_length / 2),
|
||||
color = self.ZAxisColor
|
||||
)
|
||||
self._origin_mesh = mb.build()
|
||||
|
||||
mb = MeshBuilder()
|
||||
mb.addQuad(
|
||||
Vector(min_w, min_h - 0.2, min_d),
|
||||
|
@ -285,7 +343,7 @@ class BuildVolume(SceneNode):
|
|||
|
||||
self._width = self._global_container_stack.getProperty("machine_width", "value")
|
||||
machine_height = self._global_container_stack.getProperty("machine_height", "value")
|
||||
if self._global_container_stack.getProperty("print_sequence", "value") == "one_at_a_time" and self._number_of_objects > 1:
|
||||
if self._global_container_stack.getProperty("print_sequence", "value") == "one_at_a_time" and len(self._scene_objects) > 1:
|
||||
self._height = min(self._global_container_stack.getProperty("gantry_height", "value"), machine_height)
|
||||
if self._height < machine_height:
|
||||
self._build_volume_message.show()
|
||||
|
@ -308,7 +366,7 @@ class BuildVolume(SceneNode):
|
|||
rebuild_me = False
|
||||
if setting_key == "print_sequence":
|
||||
machine_height = self._global_container_stack.getProperty("machine_height", "value")
|
||||
if Application.getInstance().getGlobalContainerStack().getProperty("print_sequence", "value") == "one_at_a_time" and self._number_of_objects > 1:
|
||||
if Application.getInstance().getGlobalContainerStack().getProperty("print_sequence", "value") == "one_at_a_time" and len(self._scene_objects) > 1:
|
||||
self._height = min(self._global_container_stack.getProperty("gantry_height", "value"), machine_height)
|
||||
if self._height < machine_height:
|
||||
self._build_volume_message.show()
|
||||
|
@ -319,7 +377,7 @@ class BuildVolume(SceneNode):
|
|||
self._build_volume_message.hide()
|
||||
rebuild_me = True
|
||||
|
||||
if setting_key in self._skirt_settings or setting_key in self._prime_settings or setting_key in self._tower_settings or setting_key == "print_sequence" or setting_key in self._ooze_shield_settings or setting_key in self._distance_settings:
|
||||
if setting_key in self._skirt_settings or setting_key in self._prime_settings or setting_key in self._tower_settings or setting_key == "print_sequence" or setting_key in self._ooze_shield_settings or setting_key in self._distance_settings or setting_key in self._extruder_settings:
|
||||
self._updateDisallowedAreas()
|
||||
rebuild_me = True
|
||||
|
||||
|
@ -333,24 +391,109 @@ class BuildVolume(SceneNode):
|
|||
def hasErrors(self):
|
||||
return self._has_errors
|
||||
|
||||
## Calls _updateDisallowedAreas and makes sure the changes appear in the
|
||||
# scene.
|
||||
#
|
||||
# This is required for a signal to trigger the update in one go. The
|
||||
# ``_updateDisallowedAreas`` method itself shouldn't call ``rebuild``,
|
||||
# since there may be other changes before it needs to be rebuilt, which
|
||||
# would hit performance.
|
||||
def _updateDisallowedAreasAndRebuild(self):
|
||||
self._updateDisallowedAreas()
|
||||
self.rebuild()
|
||||
|
||||
def _updateDisallowedAreas(self):
|
||||
if not self._global_container_stack:
|
||||
return
|
||||
|
||||
self._has_errors = False # Reset.
|
||||
self._error_areas = []
|
||||
disallowed_areas = copy.deepcopy(
|
||||
self._global_container_stack.getProperty("machine_disallowed_areas", "value"))
|
||||
areas = []
|
||||
|
||||
machine_width = self._global_container_stack.getProperty("machine_width", "value")
|
||||
machine_depth = self._global_container_stack.getProperty("machine_depth", "value")
|
||||
prime_tower_area = None
|
||||
extruder_manager = ExtruderManager.getInstance()
|
||||
used_extruders = extruder_manager.getUsedExtruderStacks()
|
||||
disallowed_border_size = self._getEdgeDisallowedSize()
|
||||
|
||||
result_areas = self._computeDisallowedAreasStatic(disallowed_border_size, used_extruders) #Normal machine disallowed areas can always be added.
|
||||
prime_areas = self._computeDisallowedAreasPrime(disallowed_border_size, used_extruders)
|
||||
prime_disallowed_areas = self._computeDisallowedAreasStatic(0, used_extruders) #Where the priming is not allowed to happen. This is not added to the result, just for collision checking.
|
||||
|
||||
#Check if prime positions intersect with disallowed areas.
|
||||
for extruder in used_extruders:
|
||||
extruder_id = extruder.getId()
|
||||
|
||||
collision = False
|
||||
for prime_polygon in prime_areas[extruder_id]:
|
||||
for disallowed_polygon in prime_disallowed_areas[extruder_id]:
|
||||
if prime_polygon.intersectsPolygon(disallowed_polygon) is not None:
|
||||
collision = True
|
||||
break
|
||||
if collision:
|
||||
break
|
||||
|
||||
#Also check other prime positions (without additional offset).
|
||||
for other_extruder_id in prime_areas:
|
||||
if extruder_id == other_extruder_id: #It is allowed to collide with itself.
|
||||
continue
|
||||
for other_prime_polygon in prime_areas[other_extruder_id]:
|
||||
if prime_polygon.intersectsPolygon(other_prime_polygon):
|
||||
collision = True
|
||||
break
|
||||
if collision:
|
||||
break
|
||||
if collision:
|
||||
break
|
||||
|
||||
|
||||
if not collision:
|
||||
#Prime areas are valid. Add as normal.
|
||||
result_areas[extruder_id].extend(prime_areas[extruder_id])
|
||||
|
||||
nozzle_disallowed_areas = extruder.getProperty("nozzle_disallowed_areas", "value")
|
||||
for area in nozzle_disallowed_areas:
|
||||
polygon = Polygon(numpy.array(area, numpy.float32))
|
||||
polygon = polygon.getMinkowskiHull(Polygon.approximatedCircle(disallowed_border_size))
|
||||
result_areas[extruder_id].append(polygon) #Don't perform the offset on these.
|
||||
|
||||
# Add prime tower location as disallowed area.
|
||||
prime_tower_collision = False
|
||||
prime_tower_areas = self._computeDisallowedAreasPrinted(used_extruders)
|
||||
for extruder_id in prime_tower_areas:
|
||||
for prime_tower_area in prime_tower_areas[extruder_id]:
|
||||
for area in result_areas[extruder_id]:
|
||||
if prime_tower_area.intersectsPolygon(area) is not None:
|
||||
prime_tower_collision = True
|
||||
break
|
||||
if prime_tower_collision: #Already found a collision.
|
||||
break
|
||||
if not prime_tower_collision:
|
||||
result_areas[extruder_id].extend(prime_tower_areas[extruder_id])
|
||||
else:
|
||||
self._error_areas.extend(prime_tower_areas[extruder_id])
|
||||
|
||||
self._has_errors = len(self._error_areas) > 0
|
||||
|
||||
self._disallowed_areas = []
|
||||
for extruder_id in result_areas:
|
||||
self._disallowed_areas.extend(result_areas[extruder_id])
|
||||
|
||||
## Computes the disallowed areas for objects that are printed with print
|
||||
# features.
|
||||
#
|
||||
# This means that the brim, travel avoidance and such will be applied to
|
||||
# these features.
|
||||
#
|
||||
# \return A dictionary with for each used extruder ID the disallowed areas
|
||||
# where that extruder may not print.
|
||||
def _computeDisallowedAreasPrinted(self, used_extruders):
|
||||
result = {}
|
||||
for extruder in used_extruders:
|
||||
result[extruder.getId()] = []
|
||||
|
||||
#Currently, the only normally printed object is the prime tower.
|
||||
if ExtruderManager.getInstance().getResolveOrValue("prime_tower_enable") == True:
|
||||
prime_tower_size = self._global_container_stack.getProperty("prime_tower_size", "value")
|
||||
prime_tower_x = self._global_container_stack.getProperty("prime_tower_position_x", "value") - machine_width / 2
|
||||
machine_width = self._global_container_stack.getProperty("machine_width", "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_y = - self._global_container_stack.getProperty("prime_tower_position_y", "value") + machine_depth / 2
|
||||
|
||||
prime_tower_area = Polygon([
|
||||
|
@ -359,118 +502,118 @@ class BuildVolume(SceneNode):
|
|||
[prime_tower_x, prime_tower_y],
|
||||
[prime_tower_x - prime_tower_size, prime_tower_y],
|
||||
])
|
||||
disallowed_polygons = []
|
||||
prime_tower_area = prime_tower_area.getMinkowskiHull(Polygon.approximatedCircle(0))
|
||||
for extruder in used_extruders:
|
||||
result[extruder.getId()].append(prime_tower_area) #The prime tower location is the same for each extruder, regardless of offset.
|
||||
|
||||
# Check if prime positions intersect with disallowed areas
|
||||
prime_collision = False
|
||||
if disallowed_areas:
|
||||
for area in disallowed_areas:
|
||||
poly = Polygon(numpy.array(area, numpy.float32))
|
||||
return result
|
||||
|
||||
# Minkowski with zero, to ensure that the polygon is correct & watertight.
|
||||
poly = poly.getMinkowskiHull(Polygon.approximatedCircle(0))
|
||||
disallowed_polygons.append(poly)
|
||||
## Computes the disallowed areas for the prime locations.
|
||||
#
|
||||
# These are special because they are not subject to things like brim or
|
||||
# travel avoidance. They do get a dilute with the border size though
|
||||
# because they may not intersect with brims and such of other objects.
|
||||
#
|
||||
# \param border_size The size with which to offset the disallowed areas
|
||||
# due to skirt, brim, travel avoid distance, etc.
|
||||
# \param used_extruders The extruder stacks to generate disallowed areas
|
||||
# for.
|
||||
# \return A dictionary with for each used extruder ID the prime areas.
|
||||
def _computeDisallowedAreasPrime(self, border_size, used_extruders):
|
||||
result = {}
|
||||
|
||||
extruder_manager = ExtruderManager.getInstance()
|
||||
extruders = extruder_manager.getMachineExtruders(self._global_container_stack.getId())
|
||||
prime_polygons = []
|
||||
# Each extruder has it's own prime location
|
||||
for extruder in extruders:
|
||||
prime_x = extruder.getProperty("extruder_prime_pos_x", "value") - machine_width / 2
|
||||
machine_width = self._global_container_stack.getProperty("machine_width", "value")
|
||||
machine_depth = self._global_container_stack.getProperty("machine_depth", "value")
|
||||
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_y = machine_depth / 2 - extruder.getProperty("extruder_prime_pos_y", "value")
|
||||
|
||||
prime_polygon = Polygon([
|
||||
[prime_x - PRIME_CLEARANCE, prime_y - PRIME_CLEARANCE],
|
||||
[prime_x + PRIME_CLEARANCE, prime_y - PRIME_CLEARANCE],
|
||||
[prime_x + PRIME_CLEARANCE, prime_y + PRIME_CLEARANCE],
|
||||
[prime_x - PRIME_CLEARANCE, prime_y + PRIME_CLEARANCE],
|
||||
])
|
||||
prime_polygon = prime_polygon.getMinkowskiHull(Polygon.approximatedCircle(0))
|
||||
collision = False
|
||||
prime_polygon = Polygon.approximatedCircle(PRIME_CLEARANCE)
|
||||
prime_polygon = prime_polygon.translate(prime_x, prime_y)
|
||||
prime_polygon = prime_polygon.getMinkowskiHull(Polygon.approximatedCircle(border_size))
|
||||
result[extruder.getId()] = [prime_polygon]
|
||||
|
||||
# Check if prime polygon is intersecting with any of the other disallowed areas.
|
||||
# Note that we check the prime area without bed adhesion.
|
||||
for poly in disallowed_polygons:
|
||||
if prime_polygon.intersectsPolygon(poly) is not None:
|
||||
collision = True
|
||||
break
|
||||
return result
|
||||
|
||||
# Also collide with other prime positions
|
||||
for poly in prime_polygons:
|
||||
if prime_polygon.intersectsPolygon(poly) is not None:
|
||||
collision = True
|
||||
break
|
||||
## Computes the disallowed areas that are statically placed in the machine.
|
||||
#
|
||||
# It computes different disallowed areas depending on the offset of the
|
||||
# extruder. The resulting dictionary will therefore have an entry for each
|
||||
# extruder that is used.
|
||||
#
|
||||
# \param border_size The size with which to offset the disallowed areas
|
||||
# due to skirt, brim, travel avoid distance, etc.
|
||||
# \param used_extruders The extruder stacks to generate disallowed areas
|
||||
# for.
|
||||
# \return A dictionary with for each used extruder ID the disallowed areas
|
||||
# where that extruder may not print.
|
||||
def _computeDisallowedAreasStatic(self, border_size, used_extruders):
|
||||
#Convert disallowed areas to polygons and dilate them.
|
||||
machine_disallowed_polygons = []
|
||||
for area in self._global_container_stack.getProperty("machine_disallowed_areas", "value"):
|
||||
polygon = Polygon(numpy.array(area, numpy.float32))
|
||||
polygon = polygon.getMinkowskiHull(Polygon.approximatedCircle(border_size))
|
||||
machine_disallowed_polygons.append(polygon)
|
||||
|
||||
if not collision:
|
||||
# Prime area is valid. Add as normal.
|
||||
# Once it's added like this, it will recieve a bed adhesion offset, just like the others.
|
||||
prime_polygons.append(prime_polygon)
|
||||
else:
|
||||
self._error_areas.append(prime_polygon)
|
||||
prime_collision = collision or prime_collision
|
||||
result = {}
|
||||
for extruder in used_extruders:
|
||||
extruder_id = extruder.getId()
|
||||
offset_x = extruder.getProperty("machine_nozzle_offset_x", "value")
|
||||
if offset_x is None:
|
||||
offset_x = 0
|
||||
offset_y = extruder.getProperty("machine_nozzle_offset_y", "value")
|
||||
if offset_y is None:
|
||||
offset_y = 0
|
||||
result[extruder_id] = []
|
||||
|
||||
disallowed_polygons.extend(prime_polygons)
|
||||
for polygon in machine_disallowed_polygons:
|
||||
result[extruder_id].append(polygon.translate(offset_x, offset_y)) #Compensate for the nozzle offset of this extruder.
|
||||
|
||||
disallowed_border_size = self._getEdgeDisallowedSize()
|
||||
|
||||
# Extend every area already in the disallowed_areas with the skirt size.
|
||||
if disallowed_areas:
|
||||
for poly in disallowed_polygons:
|
||||
poly = poly.getMinkowskiHull(Polygon.approximatedCircle(disallowed_border_size))
|
||||
areas.append(poly)
|
||||
|
||||
# Add the skirt areas around the borders of the build plate.
|
||||
if disallowed_border_size > 0:
|
||||
#Add the border around the edge of the build volume.
|
||||
left_unreachable_border = 0
|
||||
right_unreachable_border = 0
|
||||
top_unreachable_border = 0
|
||||
bottom_unreachable_border = 0
|
||||
#The build volume is defined as the union of the area that all extruders can reach, so we need to know the relative offset to all extruders.
|
||||
for other_extruder in ExtruderManager.getInstance().getActiveExtruderStacks():
|
||||
other_offset_x = other_extruder.getProperty("machine_nozzle_offset_x", "value")
|
||||
other_offset_y = other_extruder.getProperty("machine_nozzle_offset_y", "value")
|
||||
left_unreachable_border = min(left_unreachable_border, other_offset_x - offset_x)
|
||||
right_unreachable_border = max(right_unreachable_border, other_offset_x - offset_x)
|
||||
top_unreachable_border = min(top_unreachable_border, other_offset_y - offset_y)
|
||||
bottom_unreachable_border = max(bottom_unreachable_border, other_offset_y - offset_y)
|
||||
half_machine_width = self._global_container_stack.getProperty("machine_width", "value") / 2
|
||||
half_machine_depth = self._global_container_stack.getProperty("machine_depth", "value") / 2
|
||||
|
||||
areas.append(Polygon(numpy.array([
|
||||
if border_size - left_unreachable_border > 0:
|
||||
result[extruder_id].append(Polygon(numpy.array([
|
||||
[-half_machine_width, -half_machine_depth],
|
||||
[-half_machine_width, half_machine_depth],
|
||||
[-half_machine_width + disallowed_border_size, half_machine_depth - disallowed_border_size],
|
||||
[-half_machine_width + disallowed_border_size, -half_machine_depth + disallowed_border_size]
|
||||
[-half_machine_width + border_size - left_unreachable_border, half_machine_depth - border_size - bottom_unreachable_border],
|
||||
[-half_machine_width + border_size - left_unreachable_border, -half_machine_depth + border_size - top_unreachable_border]
|
||||
], numpy.float32)))
|
||||
|
||||
areas.append(Polygon(numpy.array([
|
||||
if border_size + right_unreachable_border > 0:
|
||||
result[extruder_id].append(Polygon(numpy.array([
|
||||
[half_machine_width, half_machine_depth],
|
||||
[half_machine_width, -half_machine_depth],
|
||||
[half_machine_width - disallowed_border_size, -half_machine_depth + disallowed_border_size],
|
||||
[half_machine_width - disallowed_border_size, half_machine_depth - disallowed_border_size]
|
||||
[half_machine_width - border_size - right_unreachable_border, -half_machine_depth + border_size - top_unreachable_border],
|
||||
[half_machine_width - border_size - right_unreachable_border, half_machine_depth - border_size - bottom_unreachable_border]
|
||||
], numpy.float32)))
|
||||
|
||||
areas.append(Polygon(numpy.array([
|
||||
if border_size + bottom_unreachable_border > 0:
|
||||
result[extruder_id].append(Polygon(numpy.array([
|
||||
[-half_machine_width, half_machine_depth],
|
||||
[half_machine_width, half_machine_depth],
|
||||
[half_machine_width - disallowed_border_size, half_machine_depth - disallowed_border_size],
|
||||
[-half_machine_width + disallowed_border_size, half_machine_depth - disallowed_border_size]
|
||||
[half_machine_width - border_size - right_unreachable_border, half_machine_depth - border_size - bottom_unreachable_border],
|
||||
[-half_machine_width + border_size - left_unreachable_border, half_machine_depth - border_size - bottom_unreachable_border]
|
||||
], numpy.float32)))
|
||||
|
||||
areas.append(Polygon(numpy.array([
|
||||
if border_size - top_unreachable_border > 0:
|
||||
result[extruder_id].append(Polygon(numpy.array([
|
||||
[half_machine_width, -half_machine_depth],
|
||||
[-half_machine_width, -half_machine_depth],
|
||||
[-half_machine_width + disallowed_border_size, -half_machine_depth + disallowed_border_size],
|
||||
[half_machine_width - disallowed_border_size, -half_machine_depth + disallowed_border_size]
|
||||
[-half_machine_width + border_size - left_unreachable_border, -half_machine_depth + border_size - top_unreachable_border],
|
||||
[half_machine_width - border_size - right_unreachable_border, -half_machine_depth + border_size - top_unreachable_border]
|
||||
], numpy.float32)))
|
||||
|
||||
# Check if the prime tower area intersects with any of the other areas.
|
||||
# If this is the case, add it to the error area's so it can be drawn in red.
|
||||
# If not, add it back to disallowed area's, so it's rendered as normal.
|
||||
prime_tower_collision = False
|
||||
if prime_tower_area:
|
||||
# Using Minkowski of 0 fixes the prime tower area so it's rendered correctly
|
||||
prime_tower_area = prime_tower_area.getMinkowskiHull(Polygon.approximatedCircle(0))
|
||||
for area in areas:
|
||||
if prime_tower_area.intersectsPolygon(area) is not None:
|
||||
prime_tower_collision = True
|
||||
break
|
||||
|
||||
if not prime_tower_collision:
|
||||
areas.append(prime_tower_area)
|
||||
else:
|
||||
self._error_areas.append(prime_tower_area)
|
||||
# The buildplate has errors if either prime tower or prime has a colission.
|
||||
self._has_errors = prime_tower_collision or prime_collision
|
||||
self._disallowed_areas = areas
|
||||
return result
|
||||
|
||||
## Private convenience function to get a setting from the adhesion
|
||||
# extruder.
|
||||
|
@ -481,6 +624,15 @@ class BuildVolume(SceneNode):
|
|||
def _getSettingFromAdhesionExtruder(self, setting_key, property = "value"):
|
||||
return self._getSettingFromExtruder(setting_key, "adhesion_extruder_nr", property)
|
||||
|
||||
## Private convenience function to get a setting from every extruder.
|
||||
#
|
||||
# For single extrusion machines, this gets the setting from the global
|
||||
# stack.
|
||||
#
|
||||
# \return A sequence of setting values, one for each extruder.
|
||||
def _getSettingFromAllExtruders(self, setting_key, property = "value"):
|
||||
return ExtruderManager.getInstance().getAllExtruderSettings(setting_key, property)
|
||||
|
||||
## Private convenience function to get a setting from the support infill
|
||||
# extruder.
|
||||
#
|
||||
|
@ -549,11 +701,13 @@ class BuildVolume(SceneNode):
|
|||
bed_adhesion_size += value
|
||||
elif adhesion_type == "raft":
|
||||
bed_adhesion_size = self._getSettingFromAdhesionExtruder("raft_margin")
|
||||
elif adhesion_type == "none":
|
||||
bed_adhesion_size = 0
|
||||
else:
|
||||
raise Exception("Unknown bed adhesion type. Did you forget to update the build volume calculations for your new bed adhesion type?")
|
||||
|
||||
support_expansion = 0
|
||||
if self._getSettingFromSupportInfillExtruder("support_offset"):
|
||||
if self._getSettingFromSupportInfillExtruder("support_offset") and self._global_container_stack.getProperty("support_enable", "value"):
|
||||
support_expansion += self._getSettingFromSupportInfillExtruder("support_offset")
|
||||
|
||||
farthest_shield_distance = 0
|
||||
|
@ -563,10 +717,12 @@ class BuildVolume(SceneNode):
|
|||
farthest_shield_distance = max(farthest_shield_distance, container_stack.getProperty("ooze_shield_dist", "value"))
|
||||
|
||||
move_from_wall_radius = 0 # Moves that start from outer wall.
|
||||
if self._getSettingFromAdhesionExtruder("infill_wipe_dist"):
|
||||
move_from_wall_radius = max(move_from_wall_radius, self._getSettingFromAdhesionExtruder("infill_wipe_dist"))
|
||||
if self._getSettingFromAdhesionExtruder("travel_avoid_distance"):
|
||||
move_from_wall_radius = max(move_from_wall_radius, self._getSettingFromAdhesionExtruder("travel_avoid_distance"))
|
||||
move_from_wall_radius = max(move_from_wall_radius, max(self._getSettingFromAllExtruders("infill_wipe_dist")))
|
||||
avoid_enabled_per_extruder = self._getSettingFromAllExtruders(("travel_avoid_other_parts"))
|
||||
avoid_distance_per_extruder = self._getSettingFromAllExtruders("travel_avoid_distance")
|
||||
for index, avoid_other_parts_enabled in enumerate(avoid_enabled_per_extruder): #For each extruder (or just global).
|
||||
if avoid_other_parts_enabled:
|
||||
move_from_wall_radius = max(move_from_wall_radius, avoid_distance_per_extruder[index]) #Index of the same extruder.
|
||||
|
||||
#Now combine our different pieces of data to get the final border size.
|
||||
#Support expansion is added to the bed adhesion, since the bed adhesion goes around support.
|
||||
|
@ -582,4 +738,5 @@ class BuildVolume(SceneNode):
|
|||
_prime_settings = ["extruder_prime_pos_x", "extruder_prime_pos_y", "extruder_prime_pos_z"]
|
||||
_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"]
|
||||
_distance_settings = ["infill_wipe_dist", "travel_avoid_distance", "support_offset"]
|
||||
_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.
|
|
@ -200,6 +200,8 @@ class ConvexHullDecorator(SceneNodeDecorator):
|
|||
if len(vertex_data) >= 4:
|
||||
convex_hull = hull.getConvexHull()
|
||||
offset_hull = self._offsetHull(convex_hull)
|
||||
else:
|
||||
return Polygon([]) # Node has no mesh data, so just return an empty Polygon.
|
||||
|
||||
# Store the result in the cache
|
||||
self._2d_convex_hull_mesh = mesh
|
||||
|
@ -234,6 +236,8 @@ class ConvexHullDecorator(SceneNodeDecorator):
|
|||
extra_margin = max(0, self._getSettingProperty("raft_margin", "value"))
|
||||
elif adhesion_type == "brim":
|
||||
extra_margin = max(0, self._getSettingProperty("brim_line_count", "value") * self._getSettingProperty("skirt_brim_line_width", "value"))
|
||||
elif adhesion_type == "none":
|
||||
extra_margin = 0
|
||||
elif adhesion_type == "skirt":
|
||||
extra_margin = max(
|
||||
0, self._getSettingProperty("skirt_gap", "value") +
|
||||
|
|
|
@ -7,6 +7,7 @@ from UM.Scene.Camera import Camera
|
|||
from UM.Math.Vector import Vector
|
||||
from UM.Math.Quaternion import Quaternion
|
||||
from UM.Math.AxisAlignedBox import AxisAlignedBox
|
||||
from UM.Math.Matrix import Matrix
|
||||
from UM.Resources import Resources
|
||||
from UM.Scene.ToolHandle import ToolHandle
|
||||
from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
|
||||
|
@ -250,17 +251,17 @@ class CuraApplication(QtApplication):
|
|||
cool_fan_enabled
|
||||
support
|
||||
support_enable
|
||||
support_extruder_nr
|
||||
support_type
|
||||
support_interface_density
|
||||
platform_adhesion
|
||||
adhesion_type
|
||||
adhesion_extruder_nr
|
||||
brim_width
|
||||
raft_airgap
|
||||
layer_0_z_overlap
|
||||
raft_surface_layers
|
||||
dual
|
||||
adhesion_extruder_nr
|
||||
support_extruder_nr
|
||||
prime_tower_enable
|
||||
prime_tower_size
|
||||
prime_tower_position_x
|
||||
|
@ -340,7 +341,7 @@ class CuraApplication(QtApplication):
|
|||
|
||||
if path:
|
||||
instance.setPath(path)
|
||||
with SaveFile(path, "wt", -1, "utf-8") as f:
|
||||
with SaveFile(path, "wt") as f:
|
||||
f.write(data)
|
||||
|
||||
for stack in ContainerRegistry.getInstance().findContainerStacks():
|
||||
|
@ -367,7 +368,7 @@ class CuraApplication(QtApplication):
|
|||
path = Resources.getStoragePath(self.ResourceTypes.ExtruderStack, file_name)
|
||||
if path:
|
||||
stack.setPath(path)
|
||||
with SaveFile(path, "wt", -1, "utf-8") as f:
|
||||
with SaveFile(path, "wt") as f:
|
||||
f.write(data)
|
||||
|
||||
|
||||
|
@ -507,15 +508,18 @@ class CuraApplication(QtApplication):
|
|||
qmlRegisterType(cura.Settings.ExtrudersModel, "Cura", 1, 0, "ExtrudersModel")
|
||||
|
||||
qmlRegisterType(cura.Settings.ContainerSettingsModel, "Cura", 1, 0, "ContainerSettingsModel")
|
||||
qmlRegisterType(cura.Settings.ProfilesModel, "Cura", 1, 0, "ProfilesModel")
|
||||
qmlRegisterSingletonType(cura.Settings.ProfilesModel, "Cura", 1, 0, "ProfilesModel", cura.Settings.ProfilesModel.createProfilesModel)
|
||||
qmlRegisterType(cura.Settings.QualityAndUserProfilesModel, "Cura", 1, 0, "QualityAndUserProfilesModel")
|
||||
qmlRegisterType(cura.Settings.UserProfilesModel, "Cura", 1, 0, "UserProfilesModel")
|
||||
qmlRegisterType(cura.Settings.MaterialSettingsVisibilityHandler, "Cura", 1, 0, "MaterialSettingsVisibilityHandler")
|
||||
qmlRegisterType(cura.Settings.QualitySettingsModel, "Cura", 1, 0, "QualitySettingsModel")
|
||||
qmlRegisterType(cura.Settings.MachineNameValidator, "Cura", 1, 0, "MachineNameValidator")
|
||||
|
||||
qmlRegisterSingletonType(cura.Settings.ContainerManager, "Cura", 1, 0, "ContainerManager", cura.Settings.ContainerManager.createContainerManager)
|
||||
|
||||
qmlRegisterSingletonType(QUrl.fromLocalFile(Resources.getPath(CuraApplication.ResourceTypes.QmlFiles, "Actions.qml")), "Cura", 1, 0, "Actions")
|
||||
# As of Qt5.7, it is necessary to get rid of any ".." in the path for the singleton to work.
|
||||
actions_url = QUrl.fromLocalFile(os.path.abspath(Resources.getPath(CuraApplication.ResourceTypes.QmlFiles, "Actions.qml")))
|
||||
qmlRegisterSingletonType(actions_url, "Cura", 1, 0, "Actions")
|
||||
|
||||
engine.rootContext().setContextProperty("ExtruderManager", cura.Settings.ExtruderManager.getInstance())
|
||||
|
||||
|
@ -528,11 +532,19 @@ class CuraApplication(QtApplication):
|
|||
|
||||
def onSelectionChanged(self):
|
||||
if Selection.hasSelection():
|
||||
if not self.getController().getActiveTool():
|
||||
if self.getController().getActiveTool():
|
||||
# If the tool has been disabled by the new selection
|
||||
if not self.getController().getActiveTool().getEnabled():
|
||||
# Default
|
||||
self.getController().setActiveTool("TranslateTool")
|
||||
else:
|
||||
if self._previous_active_tool:
|
||||
self.getController().setActiveTool(self._previous_active_tool)
|
||||
if not self.getController().getActiveTool().getEnabled():
|
||||
self.getController().setActiveTool("TranslateTool")
|
||||
self._previous_active_tool = None
|
||||
else:
|
||||
# Default
|
||||
self.getController().setActiveTool("TranslateTool")
|
||||
if Preferences.getInstance().getValue("view/center_on_select"):
|
||||
self._center_after_select = True
|
||||
|
@ -643,10 +655,9 @@ class CuraApplication(QtApplication):
|
|||
while current_node.getParent() and current_node.getParent().callDecoration("isGroup"):
|
||||
current_node = current_node.getParent()
|
||||
|
||||
new_node = copy.deepcopy(current_node)
|
||||
|
||||
op = GroupedOperation()
|
||||
for _ in range(count):
|
||||
new_node = copy.deepcopy(current_node)
|
||||
op.addOperation(AddSceneNodeOperation(new_node, current_node.getParent()))
|
||||
op.push()
|
||||
|
||||
|
@ -727,7 +738,11 @@ class CuraApplication(QtApplication):
|
|||
for node in nodes:
|
||||
# Ensure that the object is above the build platform
|
||||
node.removeDecorator(ZOffsetDecorator.ZOffsetDecorator)
|
||||
op.addOperation(SetTransformOperation(node, Vector(0, node.getWorldPosition().y - node.getBoundingBox().bottom, 0)))
|
||||
if node.getBoundingBox():
|
||||
center_y = node.getWorldPosition().y - node.getBoundingBox().bottom
|
||||
else:
|
||||
center_y = 0
|
||||
op.addOperation(SetTransformOperation(node, Vector(0, center_y, 0)))
|
||||
op.push()
|
||||
|
||||
## Reset all transformations on nodes with mesh data.
|
||||
|
@ -749,11 +764,10 @@ class CuraApplication(QtApplication):
|
|||
for node in nodes:
|
||||
# Ensure that the object is above the build platform
|
||||
node.removeDecorator(ZOffsetDecorator.ZOffsetDecorator)
|
||||
center_y = 0
|
||||
if node.callDecoration("isGroup"):
|
||||
if node.getBoundingBox():
|
||||
center_y = node.getWorldPosition().y - node.getBoundingBox().bottom
|
||||
else:
|
||||
center_y = node.getMeshData().getCenterPosition().y
|
||||
center_y = 0
|
||||
op.addOperation(SetTransformOperation(node, Vector(0, center_y, 0), Quaternion(), Vector(1, 1, 1)))
|
||||
op.push()
|
||||
|
||||
|
@ -822,8 +836,18 @@ class CuraApplication(QtApplication):
|
|||
Logger.log("d", "mergeSelected: Exception:", e)
|
||||
return
|
||||
|
||||
# Compute the center of the objects when their origins are aligned.
|
||||
object_centers = [node.getMeshData().getCenterPosition().scale(node.getScale()) for node in group_node.getChildren() if node.getMeshData()]
|
||||
meshes = [node.getMeshData() for node in group_node.getAllChildren() if node.getMeshData()]
|
||||
|
||||
# Compute the center of the objects
|
||||
object_centers = []
|
||||
# Forget about the translation that the original objects have
|
||||
zero_translation = Matrix(data=numpy.zeros(3))
|
||||
for mesh, node in zip(meshes, group_node.getChildren()):
|
||||
transformation = node.getLocalTransformation()
|
||||
transformation.setTranslation(zero_translation)
|
||||
transformed_mesh = mesh.getTransformed(transformation)
|
||||
center = transformed_mesh.getCenterPosition()
|
||||
object_centers.append(center)
|
||||
if object_centers and len(object_centers) > 0:
|
||||
middle_x = sum([v.x for v in object_centers]) / len(object_centers)
|
||||
middle_y = sum([v.y for v in object_centers]) / len(object_centers)
|
||||
|
@ -833,9 +857,14 @@ class CuraApplication(QtApplication):
|
|||
offset = Vector(0, 0, 0)
|
||||
|
||||
# Move each node to the same position.
|
||||
for center, node in zip(object_centers, group_node.getChildren()):
|
||||
# Align the object and also apply the offset to center it inside the group.
|
||||
node.setPosition(center - offset)
|
||||
for mesh, node in zip(meshes, group_node.getChildren()):
|
||||
transformation = node.getLocalTransformation()
|
||||
transformation.setTranslation(zero_translation)
|
||||
transformed_mesh = mesh.getTransformed(transformation)
|
||||
|
||||
# Align the object around its zero position
|
||||
# and also apply the offset to center it inside the group.
|
||||
node.setPosition(-transformed_mesh.getZeroPosition() - offset)
|
||||
|
||||
# Use the previously found center of the group bounding box as the new location of the group
|
||||
group_node.setPosition(group_node.getBoundingBox().center)
|
||||
|
@ -889,8 +918,9 @@ class CuraApplication(QtApplication):
|
|||
fileLoaded = pyqtSignal(str)
|
||||
|
||||
def _onFileLoaded(self, job):
|
||||
node = job.getResult()
|
||||
if node != None:
|
||||
nodes = job.getResult()
|
||||
for node in nodes:
|
||||
if node is not None:
|
||||
self.fileLoaded.emit(job.getFileName())
|
||||
node.setSelectable(True)
|
||||
node.setName(os.path.basename(job.getFileName()))
|
||||
|
|
|
@ -82,7 +82,7 @@ class PlatformPhysics:
|
|||
|
||||
# Move it downwards if bottom is above platform
|
||||
move_vector = Vector()
|
||||
if Preferences.getInstance().getValue("physics/automatic_drop_down") and not (node.getParent() and node.getParent().callDecoration("isGroup")): #If an object is grouped, don't move it down
|
||||
if Preferences.getInstance().getValue("physics/automatic_drop_down") and not (node.getParent() and node.getParent().callDecoration("isGroup")) and node.isEnabled(): #If an object is grouped, don't move it down
|
||||
z_offset = node.callDecoration("getZOffset") if node.getDecorator(ZOffsetDecorator.ZOffsetDecorator) else 0
|
||||
move_vector = move_vector.set(y=-bbox.bottom + z_offset)
|
||||
|
||||
|
|
|
@ -3,21 +3,22 @@
|
|||
|
||||
from UM.Operations.Operation import Operation
|
||||
from UM.Operations.GroupedOperation import GroupedOperation
|
||||
from UM.Scene.SceneNode import SceneNode
|
||||
|
||||
## A specialised operation designed specifically to modify the previous operation.
|
||||
class PlatformPhysicsOperation(Operation):
|
||||
def __init__(self, node, translation):
|
||||
super().__init__()
|
||||
self._node = node
|
||||
self._old_position = node.getPosition()
|
||||
self._new_position = node.getPosition() + translation
|
||||
self._old_transformation = node.getLocalTransformation()
|
||||
self._translation = translation
|
||||
self._always_merge = True
|
||||
|
||||
def undo(self):
|
||||
self._node.setPosition(self._old_position)
|
||||
self._node.setTransformation(self._old_transformation)
|
||||
|
||||
def redo(self):
|
||||
self._node.setPosition(self._new_position)
|
||||
self._node.translate(self._translation, SceneNode.TransformSpace.World)
|
||||
|
||||
def mergeWith(self, other):
|
||||
group = GroupedOperation()
|
||||
|
@ -28,4 +29,4 @@ class PlatformPhysicsOperation(Operation):
|
|||
return group
|
||||
|
||||
def __repr__(self):
|
||||
return "PlatformPhysicsOperation(new_position = {0})".format(self._new_position)
|
||||
return "PlatformPhysicsOperation(translation = {0})".format(self._translation)
|
||||
|
|
|
@ -134,6 +134,20 @@ class PrinterOutputDevice(QObject, OutputDevice):
|
|||
def _setJobState(self, job_state):
|
||||
Logger.log("w", "_setJobState is not implemented by this output device")
|
||||
|
||||
@pyqtSlot()
|
||||
def startCamera(self):
|
||||
self._startCamera()
|
||||
|
||||
def _startCamera(self):
|
||||
Logger.log("w", "_startCamera is not implemented by this output device")
|
||||
|
||||
@pyqtSlot()
|
||||
def stopCamera(self):
|
||||
self._stopCamera()
|
||||
|
||||
def _stopCamera(self):
|
||||
Logger.log("w", "_stopCamera is not implemented by this output device")
|
||||
|
||||
@pyqtProperty(str, notify = jobNameChanged)
|
||||
def jobName(self):
|
||||
return self._job_name
|
||||
|
|
|
@ -27,10 +27,17 @@ class QualityManager:
|
|||
# specified then the currently selected machine definition is used.
|
||||
# \param material_containers (Optional) \type{List[ContainerInstance]} If nothing is specified then
|
||||
# the current set of selected materials is used.
|
||||
# \return the matching quality containers \type{List[ContainerInstance]}
|
||||
# \return the matching quality container \type{ContainerInstance}
|
||||
def findQualityByName(self, quality_name, machine_definition=None, material_containers=None):
|
||||
criteria = {"type": "quality", "name": quality_name}
|
||||
return self._getFilteredContainersForStack(machine_definition, material_containers, **criteria)
|
||||
result = self._getFilteredContainersForStack(machine_definition, material_containers, **criteria)
|
||||
|
||||
# Fall back to using generic materials and qualities if nothing could be found.
|
||||
if not result and material_containers and len(material_containers) == 1:
|
||||
basic_materials = self._getBasicMaterials(material_containers[0])
|
||||
result = self._getFilteredContainersForStack(machine_definition, basic_materials, **criteria)
|
||||
|
||||
return result[0] if result else None
|
||||
|
||||
## Find a quality changes container by name.
|
||||
#
|
||||
|
@ -82,8 +89,9 @@ class QualityManager:
|
|||
# \param material_containers (Optional) \type{List[ContainerInstance]} If nothing is specified then
|
||||
# the current set of selected materials is used.
|
||||
# \return the matching quality container \type{ContainerInstance}
|
||||
def findQualityByQualityType(self, quality_type, machine_definition=None, material_containers=None):
|
||||
criteria = {"type": "quality"}
|
||||
def findQualityByQualityType(self, quality_type, machine_definition=None, material_containers=None, **kwargs):
|
||||
criteria = kwargs
|
||||
criteria["type"] = "quality"
|
||||
if quality_type:
|
||||
criteria["quality_type"] = quality_type
|
||||
result = self._getFilteredContainersForStack(machine_definition, material_containers, **criteria)
|
||||
|
@ -160,7 +168,8 @@ class QualityManager:
|
|||
# \return \type{List[InstanceContainer]} a list of the basic materials or an empty list if one could not be found.
|
||||
def _getBasicMaterials(self, material_container):
|
||||
base_material = material_container.getMetaDataEntry("material")
|
||||
if material_container.getDefinition().getMetaDataEntry("has_machine_quality"):
|
||||
material_container_definition = material_container.getDefinition()
|
||||
if material_container_definition and material_container_definition.getMetaDataEntry("has_machine_quality"):
|
||||
definition_id = material_container.getDefinition().getMetaDataEntry("quality_definition", material_container.getDefinition().getId())
|
||||
else:
|
||||
definition_id = "fdmprinter"
|
||||
|
@ -218,7 +227,7 @@ class QualityManager:
|
|||
result = []
|
||||
for container in containers:
|
||||
# If the machine specifies we should filter by material, exclude containers that do not match any active material.
|
||||
if filter_by_material and container.getMetaDataEntry("material") not in material_ids:
|
||||
if filter_by_material and container.getMetaDataEntry("material") not in material_ids and not "global_quality" in kwargs:
|
||||
continue
|
||||
result.append(container)
|
||||
return result
|
||||
|
|
|
@ -32,14 +32,27 @@ class SetParentOperation(Operation.Operation):
|
|||
# \param new_parent The new parent. Note: this argument can be None, which would hide the node from the scene.
|
||||
def _set_parent(self, new_parent):
|
||||
if new_parent:
|
||||
self._node.setPosition(self._node.getWorldPosition() - new_parent.getWorldPosition())
|
||||
current_parent = self._node.getParent()
|
||||
if current_parent:
|
||||
self._node.scale(current_parent.getScale() / new_parent.getScale())
|
||||
self._node.rotate(current_parent.getOrientation())
|
||||
# Special casing for groups that have been removed.
|
||||
# In that case we want to put them back where they belong before checking the depth difference.
|
||||
# If we don't, we always get 0.
|
||||
old_parent = new_parent.callDecoration("getOldParent")
|
||||
if old_parent:
|
||||
new_parent.callDecoration("getNode").setParent(old_parent)
|
||||
|
||||
# Based on the depth difference, we need to do something different.
|
||||
depth_difference = current_parent.getDepth() - new_parent.getDepth()
|
||||
child_transformation = self._node.getLocalTransformation()
|
||||
if depth_difference > 0:
|
||||
parent_transformation = current_parent.getLocalTransformation()
|
||||
# A node in the chain was removed, so we need to squash the parent info into all the nodes, so positions remain the same.
|
||||
self._node.setTransformation(parent_transformation.multiply(child_transformation))
|
||||
else:
|
||||
self._node.scale(Vector(1, 1, 1) / new_parent.getScale())
|
||||
self._node.rotate(new_parent.getOrientation().getInverse())
|
||||
# A node is inserted into the chain, so use the inverse of the parent to set the transformation of it's children.
|
||||
parent_transformation = new_parent.getLocalTransformation()
|
||||
result = parent_transformation.getInverse().multiply(child_transformation, copy = True)
|
||||
self._node.setTransformation(result)
|
||||
|
||||
self._node.setParent(new_parent)
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
import os.path
|
||||
import urllib
|
||||
|
||||
from PyQt5.QtCore import QObject, pyqtSlot, pyqtProperty, pyqtSignal, QUrl
|
||||
from PyQt5.QtCore import QObject, pyqtSlot, pyqtProperty, pyqtSignal, QUrl, QVariant
|
||||
from PyQt5.QtWidgets import QMessageBox
|
||||
|
||||
import UM.PluginRegistry
|
||||
|
@ -261,8 +261,9 @@ class ContainerManager(QObject):
|
|||
|
||||
@pyqtSlot(str, result = bool)
|
||||
def isContainerUsed(self, container_id):
|
||||
UM.Logger.log("d", "Checking if container %s is currently used in the active stacks", container_id)
|
||||
for stack in cura.Settings.ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks():
|
||||
UM.Logger.log("d", "Checking if container %s is currently used", container_id)
|
||||
containers = self._container_registry.findContainerStacks()
|
||||
for stack in containers:
|
||||
if container_id in [child.getId() for child in stack.getContainers()]:
|
||||
UM.Logger.log("d", "The container is in use by %s", stack.getId())
|
||||
return True
|
||||
|
@ -611,13 +612,12 @@ class ContainerManager(QObject):
|
|||
|
||||
if base_name is None:
|
||||
base_name = quality_name
|
||||
|
||||
# Try to find a Quality with the name.
|
||||
containers = QualityManager.getInstance().findQualityByName(quality_name, machine_definition, material_instances)
|
||||
if containers:
|
||||
container = containers[0]
|
||||
container = QualityManager.getInstance().findQualityByName(quality_name, machine_definition, material_instances)
|
||||
if container:
|
||||
UM.Logger.log("d", "We found a quality to duplicate.")
|
||||
return self._duplicateQualityForMachineType(container, base_name, machine_definition)
|
||||
|
||||
UM.Logger.log("d", "We found a quality_changes to duplicate.")
|
||||
# Assume it is a quality changes.
|
||||
return self._duplicateQualityChangesForMachineType(quality_name, base_name, machine_definition)
|
||||
|
||||
|
@ -650,7 +650,10 @@ class ContainerManager(QObject):
|
|||
new_change_instances = []
|
||||
for container in QualityManager.getInstance().findQualityChangesByName(quality_changes_name,
|
||||
machine_definition):
|
||||
new_unique_id = self._createUniqueId(container.getId(), base_name)
|
||||
base_id = container.getMetaDataEntry("extruder")
|
||||
if not base_id:
|
||||
base_id = container.getDefinition().getId()
|
||||
new_unique_id = self._createUniqueId(base_id, base_name)
|
||||
new_container = container.duplicate(new_unique_id, base_name)
|
||||
new_change_instances.append(new_container)
|
||||
self._container_registry.addContainer(new_container)
|
||||
|
@ -802,3 +805,50 @@ class ContainerManager(QObject):
|
|||
else:
|
||||
quality_changes.setDefinition(QualityManager.getInstance().getParentMachineDefinition(machine_definition))
|
||||
return quality_changes
|
||||
|
||||
|
||||
## Import profiles from a list of file_urls.
|
||||
# Each QUrl item must end with .curaprofile, or it will not be imported.
|
||||
#
|
||||
# \param QVariant<QUrl>, essentially a list with QUrl objects.
|
||||
# \return Dict with keys status, text
|
||||
@pyqtSlot(QVariant, result="QVariantMap")
|
||||
def importProfiles(self, file_urls):
|
||||
status = "ok"
|
||||
results = {"ok": [], "error": []}
|
||||
for file_url in file_urls:
|
||||
if not file_url.isValid():
|
||||
continue
|
||||
path = file_url.toLocalFile()
|
||||
if not path:
|
||||
continue
|
||||
if not path.endswith(".curaprofile"):
|
||||
continue
|
||||
|
||||
single_result = UM.Settings.ContainerRegistry.getInstance().importProfile(path)
|
||||
if single_result["status"] == "error":
|
||||
status = "error"
|
||||
results[single_result["status"]].append(single_result["message"])
|
||||
|
||||
return {
|
||||
"status": status,
|
||||
"message": "\n".join(results["ok"] + results["error"])}
|
||||
|
||||
## Import single profile, file_url does not have to end with curaprofile
|
||||
@pyqtSlot(QUrl, result="QVariantMap")
|
||||
def importProfile(self, file_url):
|
||||
if not file_url.isValid():
|
||||
return
|
||||
path = file_url.toLocalFile()
|
||||
if not path:
|
||||
return
|
||||
return UM.Settings.ContainerRegistry.getInstance().importProfile(path)
|
||||
|
||||
@pyqtSlot("QVariantList", QUrl, str)
|
||||
def exportProfile(self, instance_id, file_url, file_type):
|
||||
if not file_url.isValid():
|
||||
return
|
||||
path = file_url.toLocalFile()
|
||||
if not path:
|
||||
return
|
||||
UM.Settings.ContainerRegistry.getInstance().exportProfile(instance_id, path, file_type)
|
||||
|
|
|
@ -165,20 +165,19 @@ class CuraContainerRegistry(ContainerRegistry):
|
|||
profile_or_list = profile_reader.read(file_name) # Try to open the file with the profile reader.
|
||||
except Exception as e:
|
||||
# Note that this will fail quickly. That is, if any profile reader throws an exception, it will stop reading. It will only continue reading if the reader returned None.
|
||||
Logger.log("e", "Failed to import profile from %s: %s while using profile reader", file_name, str(e), profile_reader.getPluginId())
|
||||
Logger.log("e", "Failed to import profile from %s: %s while using profile reader. Got exception %s", file_name,profile_reader.getPluginId(), str(e))
|
||||
return { "status": "error", "message": catalog.i18nc("@info:status", "Failed to import profile from <filename>{0}</filename>: <message>{1}</message>", file_name, str(e))}
|
||||
if profile_or_list: # Success!
|
||||
name_seed = os.path.splitext(os.path.basename(file_name))[0]
|
||||
new_name = self.uniqueName(name_seed)
|
||||
if type(profile_or_list) is not list:
|
||||
profile = profile_or_list
|
||||
self._configureProfile(profile, name_seed)
|
||||
self._configureProfile(profile, name_seed, new_name)
|
||||
return { "status": "ok", "message": catalog.i18nc("@info:status", "Successfully imported profile {0}", profile.getName()) }
|
||||
else:
|
||||
profile_index = -1
|
||||
global_profile = None
|
||||
|
||||
new_name = self.uniqueName(name_seed)
|
||||
|
||||
for profile in profile_or_list:
|
||||
if profile_index >= 0:
|
||||
if len(machine_extruders) > profile_index:
|
||||
|
@ -211,7 +210,7 @@ class CuraContainerRegistry(ContainerRegistry):
|
|||
return {"status": "ok", "message": catalog.i18nc("@info:status", "Successfully imported profile {0}", profile_or_list[0].getName())}
|
||||
|
||||
# If it hasn't returned by now, none of the plugins loaded the profile successfully.
|
||||
return {"status": "error", "message": catalog.i18nc("@info:status", "Profile {0} has an unknown file type.", file_name)}
|
||||
return {"status": "error", "message": catalog.i18nc("@info:status", "Profile {0} has an unknown file type or is corrupted.", file_name)}
|
||||
|
||||
def _configureProfile(self, profile, id_seed, new_name):
|
||||
profile.setReadOnly(False)
|
||||
|
|
|
@ -5,6 +5,8 @@ from PyQt5.QtCore import pyqtSignal, pyqtProperty, pyqtSlot, QObject, QVariant #
|
|||
|
||||
import UM.Application #To get the global container stack to find the current machine.
|
||||
import UM.Logger
|
||||
from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator #To find which extruders are used in the scene.
|
||||
from UM.Scene.SceneNode import SceneNode #To find which extruders are used in the scene.
|
||||
import UM.Settings.ContainerRegistry #Finding containers by ID.
|
||||
import UM.Settings.SettingFunction
|
||||
|
||||
|
@ -51,7 +53,10 @@ class ExtruderManager(QObject):
|
|||
def extruderCount(self):
|
||||
if not UM.Application.getInstance().getGlobalContainerStack():
|
||||
return 0 # No active machine, so no extruders.
|
||||
try:
|
||||
return len(self._extruder_trains[UM.Application.getInstance().getGlobalContainerStack().getId()])
|
||||
except KeyError:
|
||||
return 0
|
||||
|
||||
@pyqtProperty("QVariantMap", notify=extrudersChanged)
|
||||
def extruderIds(self):
|
||||
|
@ -265,18 +270,78 @@ class ExtruderManager(QObject):
|
|||
container_registry.addContainer(container_stack)
|
||||
|
||||
def getAllExtruderValues(self, setting_key):
|
||||
return self.getAllExtruderSettings(setting_key, "value")
|
||||
|
||||
## Gets a property of a setting for all extruders.
|
||||
#
|
||||
# \param setting_key \type{str} The setting to get the property of.
|
||||
# \param property \type{str} The property to get.
|
||||
# \return \type{List} the list of results
|
||||
def getAllExtruderSettings(self, setting_key, property):
|
||||
global_container_stack = UM.Application.getInstance().getGlobalContainerStack()
|
||||
multi_extrusion = global_container_stack.getProperty("machine_extruder_count", "value") > 1
|
||||
if not multi_extrusion:
|
||||
return [global_container_stack.getProperty(setting_key, "value")]
|
||||
if global_container_stack.getProperty("machine_extruder_count", "value") <= 1:
|
||||
return [global_container_stack.getProperty(setting_key, property)]
|
||||
|
||||
result = []
|
||||
for index in self.extruderIds:
|
||||
extruder_stack_id = self.extruderIds[str(index)]
|
||||
stack = UM.Settings.ContainerRegistry.getInstance().findContainerStacks(id=extruder_stack_id)[0]
|
||||
result.append(stack.getProperty(setting_key, "value"))
|
||||
stack = UM.Settings.ContainerRegistry.getInstance().findContainerStacks(id = extruder_stack_id)[0]
|
||||
result.append(stack.getProperty(setting_key, property))
|
||||
return result
|
||||
|
||||
## Gets the extruder stacks that are actually being used at the moment.
|
||||
#
|
||||
# An extruder stack is being used if it is the extruder to print any mesh
|
||||
# with, or if it is the support infill extruder, the support interface
|
||||
# extruder, or the bed adhesion extruder.
|
||||
#
|
||||
# If there are no extruders, this returns the global stack as a singleton
|
||||
# list.
|
||||
#
|
||||
# \return A list of extruder stacks.
|
||||
def getUsedExtruderStacks(self):
|
||||
global_stack = UM.Application.getInstance().getGlobalContainerStack()
|
||||
container_registry = UM.Settings.ContainerRegistry.getInstance()
|
||||
|
||||
if global_stack.getProperty("machine_extruder_count", "value") <= 1: #For single extrusion.
|
||||
return [global_stack]
|
||||
|
||||
used_extruder_stack_ids = set()
|
||||
|
||||
#Get the extruders of all meshes in the scene.
|
||||
support_enabled = False
|
||||
support_interface_enabled = False
|
||||
scene_root = UM.Application.getInstance().getController().getScene().getRoot()
|
||||
meshes = [node for node in DepthFirstIterator(scene_root) if type(node) is SceneNode and node.isSelectable()] #Only use the nodes that will be printed.
|
||||
for mesh in meshes:
|
||||
extruder_stack_id = mesh.callDecoration("getActiveExtruder")
|
||||
if not extruder_stack_id: #No per-object settings for this node.
|
||||
extruder_stack_id = self.extruderIds["0"]
|
||||
used_extruder_stack_ids.add(extruder_stack_id)
|
||||
|
||||
#Get whether any of them use support.
|
||||
per_mesh_stack = mesh.callDecoration("getStack")
|
||||
if per_mesh_stack:
|
||||
support_enabled |= per_mesh_stack.getProperty("support_enable", "value")
|
||||
support_interface_enabled |= per_mesh_stack.getProperty("support_interface_enable", "value")
|
||||
else: #Take the setting from the build extruder stack.
|
||||
extruder_stack = container_registry.findContainerStacks(id = extruder_stack_id)[0]
|
||||
support_enabled |= extruder_stack.getProperty("support_enable", "value")
|
||||
support_interface_enabled |= extruder_stack.getProperty("support_enable", "value")
|
||||
|
||||
#The support extruders.
|
||||
if support_enabled:
|
||||
used_extruder_stack_ids.add(self.extruderIds[str(global_stack.getProperty("support_infill_extruder_nr", "value"))])
|
||||
used_extruder_stack_ids.add(self.extruderIds[str(global_stack.getProperty("support_extruder_nr_layer_0", "value"))])
|
||||
if support_interface_enabled:
|
||||
used_extruder_stack_ids.add(self.extruderIds[str(global_stack.getProperty("support_interface_extruder_nr", "value"))])
|
||||
|
||||
#The platform adhesion extruder. Not used if using none.
|
||||
if global_stack.getProperty("adhesion_type", "value") != "none":
|
||||
used_extruder_stack_ids.add(self.extruderIds[str(global_stack.getProperty("adhesion_extruder_nr", "value"))])
|
||||
|
||||
return [container_registry.findContainerStacks(id = stack_id)[0] for stack_id in used_extruder_stack_ids]
|
||||
|
||||
## Removes the container stack and user profile for the extruders for a specific machine.
|
||||
#
|
||||
# \param machine_id The machine to remove the extruders for.
|
||||
|
|
|
@ -34,7 +34,7 @@ class MachineManager(QObject):
|
|||
self.globalContainerChanged.connect(self.activeVariantChanged)
|
||||
self.globalContainerChanged.connect(self.activeQualityChanged)
|
||||
|
||||
self._active_stack_valid = None
|
||||
self._stacks_have_errors = None
|
||||
self._onGlobalContainerChanged()
|
||||
|
||||
ExtruderManager.getInstance().activeExtruderChanged.connect(self._onActiveExtruderStackChanged)
|
||||
|
@ -85,6 +85,7 @@ class MachineManager(QObject):
|
|||
globalValueChanged = pyqtSignal() # Emitted whenever a value inside global container is changed.
|
||||
activeStackValueChanged = pyqtSignal() # Emitted whenever a value inside the active stack is changed.
|
||||
activeStackValidationChanged = pyqtSignal() # Emitted whenever a validation inside active container is changed
|
||||
stacksValidationChanged = pyqtSignal() # Emitted whenever a validation is changed
|
||||
|
||||
blurSettings = pyqtSignal() # Emitted to force fields in the advanced sidebar to un-focus, so they update properly
|
||||
|
||||
|
@ -225,15 +226,36 @@ class MachineManager(QObject):
|
|||
self._global_container_stack.nameChanged.connect(self._onMachineNameChanged)
|
||||
self._global_container_stack.containersChanged.connect(self._onInstanceContainersChanged)
|
||||
self._global_container_stack.propertyChanged.connect(self._onPropertyChanged)
|
||||
|
||||
if self._global_container_stack.getProperty("machine_extruder_count", "value") > 1:
|
||||
# For multi-extrusion machines, we do not want variant or material profiles in the stack,
|
||||
# because these are extruder specific and may cause wrong values to be used for extruders
|
||||
# that did not specify a value in the extruder.
|
||||
global_variant = self._global_container_stack.findContainer(type = "variant")
|
||||
if global_variant != self._empty_variant_container:
|
||||
self._global_container_stack.replaceContainer(self._global_container_stack.getContainerIndex(global_variant), self._empty_variant_container)
|
||||
|
||||
global_material = self._global_container_stack.findContainer(type = "material")
|
||||
if global_material != self._empty_material_container:
|
||||
self._global_container_stack.replaceContainer(self._global_container_stack.getContainerIndex(global_material), self._empty_material_container)
|
||||
|
||||
else:
|
||||
material = self._global_container_stack.findContainer({"type": "material"})
|
||||
material.nameChanged.connect(self._onMaterialNameChanged)
|
||||
|
||||
quality = self._global_container_stack.findContainer({"type": "quality"})
|
||||
quality.nameChanged.connect(self._onQualityNameChanged)
|
||||
|
||||
|
||||
## Update self._stacks_valid according to _checkStacksForErrors and emit if change.
|
||||
def _updateStacksHaveErrors(self):
|
||||
old_stacks_have_errors = self._stacks_have_errors
|
||||
self._stacks_have_errors = self._checkStacksHaveErrors()
|
||||
if old_stacks_have_errors != self._stacks_have_errors:
|
||||
self.stacksValidationChanged.emit()
|
||||
|
||||
def _onActiveExtruderStackChanged(self):
|
||||
self.blurSettings.emit() # Ensure no-one has focus.
|
||||
|
||||
old_active_container_stack = self._active_container_stack
|
||||
|
||||
if self._active_container_stack and self._active_container_stack != self._global_container_stack:
|
||||
|
@ -246,10 +268,7 @@ class MachineManager(QObject):
|
|||
else:
|
||||
self._active_container_stack = self._global_container_stack
|
||||
|
||||
old_active_stack_valid = self._active_stack_valid
|
||||
self._active_stack_valid = not self._checkStackForErrors(self._active_container_stack)
|
||||
if old_active_stack_valid != self._active_stack_valid:
|
||||
self.activeStackValidationChanged.emit()
|
||||
self._updateStacksHaveErrors()
|
||||
|
||||
if old_active_container_stack != self._active_container_stack:
|
||||
# Many methods and properties related to the active quality actually depend
|
||||
|
@ -272,18 +291,18 @@ class MachineManager(QObject):
|
|||
self.activeStackValueChanged.emit()
|
||||
|
||||
if property_name == "validationState":
|
||||
if self._active_stack_valid:
|
||||
if not self._stacks_have_errors:
|
||||
# fast update, we only have to look at the current changed property
|
||||
if self._active_container_stack.getProperty(key, "settable_per_extruder"):
|
||||
changed_validation_state = self._active_container_stack.getProperty(key, property_name)
|
||||
else:
|
||||
changed_validation_state = self._global_container_stack.getProperty(key, property_name)
|
||||
if changed_validation_state in (UM.Settings.ValidatorState.Exception, UM.Settings.ValidatorState.MaximumError, UM.Settings.ValidatorState.MinimumError):
|
||||
self._active_stack_valid = False
|
||||
self.activeStackValidationChanged.emit()
|
||||
self._stacks_have_errors = True
|
||||
self.stacksValidationChanged.emit()
|
||||
else:
|
||||
if not self._checkStackForErrors(self._active_container_stack) and not self._checkStackForErrors(self._global_container_stack):
|
||||
self._active_stack_valid = True
|
||||
self.activeStackValidationChanged.emit()
|
||||
# Normal check
|
||||
self._updateStacksHaveErrors()
|
||||
|
||||
@pyqtSlot(str)
|
||||
def setActiveMachine(self, stack_id):
|
||||
|
@ -337,15 +356,17 @@ class MachineManager(QObject):
|
|||
def _createUniqueName(self, container_type, current_name, new_name, fallback_name):
|
||||
return UM.Settings.ContainerRegistry.getInstance().createUniqueName(container_type, current_name, new_name, fallback_name)
|
||||
|
||||
## Convenience function to check if a stack has errors.
|
||||
def _checkStackForErrors(self, stack):
|
||||
if stack is None:
|
||||
return False
|
||||
|
||||
for key in stack.getAllKeys():
|
||||
validation_state = stack.getProperty(key, "validationState")
|
||||
if validation_state in (UM.Settings.ValidatorState.Exception, UM.Settings.ValidatorState.MaximumError, UM.Settings.ValidatorState.MinimumError):
|
||||
def _checkStacksHaveErrors(self):
|
||||
if self._global_container_stack is not None and self._global_container_stack.hasErrors():
|
||||
return True
|
||||
|
||||
if self._global_container_stack is None:
|
||||
return False
|
||||
stacks = list(ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId()))
|
||||
for stack in stacks:
|
||||
if stack.hasErrors():
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
## Remove all instances from the top instanceContainer (effectively removing all user-changed settings)
|
||||
|
@ -405,12 +426,12 @@ class MachineManager(QObject):
|
|||
for container in send_emits_containers:
|
||||
container.sendPostponedEmits()
|
||||
|
||||
## Check if the global profile does not contain error states
|
||||
# Note that the _active_stack_valid is cached due to performance issues
|
||||
# Calling _checkStackForErrors on every change is simply too expensive
|
||||
@pyqtProperty(bool, notify = activeStackValidationChanged)
|
||||
def isActiveStackValid(self):
|
||||
return bool(self._active_stack_valid)
|
||||
## Check if none of the stacks contain error states
|
||||
# Note that the _stacks_have_errors is cached due to performance issues
|
||||
# Calling _checkStack(s)ForErrors on every change is simply too expensive
|
||||
@pyqtProperty(bool, notify = stacksValidationChanged)
|
||||
def stacksHaveErrors(self):
|
||||
return bool(self._stacks_have_errors)
|
||||
|
||||
@pyqtProperty(str, notify = activeStackChanged)
|
||||
def activeUserProfileId(self):
|
||||
|
@ -474,6 +495,32 @@ class MachineManager(QObject):
|
|||
|
||||
return result
|
||||
|
||||
## Gets the layer height of the currently active quality profile.
|
||||
#
|
||||
# This is indicated together with the name of the active quality profile.
|
||||
#
|
||||
# \return The layer height of the currently active quality profile. If
|
||||
# there is no quality profile, this returns 0.
|
||||
@pyqtProperty(float, notify=activeQualityChanged)
|
||||
def activeQualityLayerHeight(self):
|
||||
if not self._global_container_stack:
|
||||
return 0
|
||||
|
||||
quality_changes = self._global_container_stack.findContainer({"type": "quality_changes"})
|
||||
if quality_changes:
|
||||
value = self._global_container_stack.getRawProperty("layer_height", "value", skip_until_container = quality_changes.getId())
|
||||
if isinstance(value, UM.Settings.SettingFunction):
|
||||
value = value(self._global_container_stack)
|
||||
return value
|
||||
quality = self._global_container_stack.findContainer({"type": "quality"})
|
||||
if quality:
|
||||
value = self._global_container_stack.getRawProperty("layer_height", "value", skip_until_container = quality.getId())
|
||||
if isinstance(value, UM.Settings.SettingFunction):
|
||||
value = value(self._global_container_stack)
|
||||
return value
|
||||
|
||||
return 0 #No quality profile.
|
||||
|
||||
## Get the Material ID associated with the currently active material
|
||||
# \returns MaterialID (string) if found, empty string otherwise
|
||||
@pyqtProperty(str, notify=activeQualityChanged)
|
||||
|
@ -540,7 +587,7 @@ class MachineManager(QObject):
|
|||
quality = self._active_container_stack.findContainer(type = "quality")
|
||||
if quality:
|
||||
return Util.parseBool(quality.getMetaDataEntry("supported", True))
|
||||
return ""
|
||||
return False
|
||||
|
||||
## Get the Quality ID associated with the currently active extruder
|
||||
# Note that this only returns the "quality", not the "quality_changes"
|
||||
|
@ -687,7 +734,7 @@ class MachineManager(QObject):
|
|||
|
||||
# Get quality container and optionally the quality_changes container.
|
||||
if container_type == "quality":
|
||||
new_quality_settings_list = self._determineQualityAndQualityChangesForQualityType(quality_type)
|
||||
new_quality_settings_list = self.determineQualityAndQualityChangesForQualityType(quality_type)
|
||||
elif container_type == "quality_changes":
|
||||
new_quality_settings_list = self._determineQualityAndQualityChangesForQualityChanges(quality_name)
|
||||
else:
|
||||
|
@ -723,11 +770,13 @@ class MachineManager(QObject):
|
|||
#
|
||||
# \param quality_name \type{str} the name of the quality.
|
||||
# \return \type{List[Dict]} with keys "stack", "quality" and "quality_changes".
|
||||
def _determineQualityAndQualityChangesForQualityType(self, quality_type):
|
||||
def determineQualityAndQualityChangesForQualityType(self, quality_type):
|
||||
quality_manager = QualityManager.getInstance()
|
||||
result = []
|
||||
empty_quality_changes = self._empty_quality_changes_container
|
||||
global_container_stack = self._global_container_stack
|
||||
if not global_container_stack:
|
||||
return []
|
||||
global_machine_definition = quality_manager.getParentMachineDefinition(global_container_stack.getBottom())
|
||||
|
||||
extruder_stacks = ExtruderManager.getInstance().getActiveExtruderStacks()
|
||||
|
@ -743,8 +792,13 @@ class MachineManager(QObject):
|
|||
|
||||
if extruder_stacks:
|
||||
# Add an extra entry for the global stack.
|
||||
result.append({"stack": global_container_stack, "quality": result[0]["quality"],
|
||||
"quality_changes": empty_quality_changes})
|
||||
global_quality = quality_manager.findQualityByQualityType(quality_type, global_machine_definition, [], global_quality = "True")
|
||||
|
||||
if not global_quality:
|
||||
global_quality = self._empty_quality_container
|
||||
|
||||
result.append({"stack": global_container_stack, "quality": global_quality, "quality_changes": empty_quality_changes})
|
||||
|
||||
return result
|
||||
|
||||
## Determine the quality and quality changes settings for the current machine for a quality changes name.
|
||||
|
@ -767,6 +821,9 @@ class MachineManager(QObject):
|
|||
# For the global stack, find a quality which matches the quality_type in
|
||||
# the quality changes profile and also satisfies any material constraints.
|
||||
quality_type = global_quality_changes.getMetaDataEntry("quality_type")
|
||||
if global_container_stack.getProperty("machine_extruder_count", "value") > 1:
|
||||
global_quality = quality_manager.findQualityByQualityType(quality_type, global_machine_definition, [], global_quality = True)
|
||||
else:
|
||||
global_quality = quality_manager.findQualityByQualityType(quality_type, global_machine_definition, [material])
|
||||
|
||||
# Find the values for each extruder.
|
||||
|
@ -788,9 +845,10 @@ class MachineManager(QObject):
|
|||
result.append({"stack": stack, "quality": quality, "quality_changes": quality_changes})
|
||||
|
||||
if extruder_stacks:
|
||||
# Duplicate the quality from the 1st extruder into the global stack. If anyone
|
||||
# then looks in the global stack, they should get a reasonable view.
|
||||
result.append({"stack": global_container_stack, "quality": result[0]["quality"], "quality_changes": global_quality_changes})
|
||||
global_quality = quality_manager.findQualityByQualityType(quality_type, global_machine_definition, [material], global_quality = "True")
|
||||
if not global_quality:
|
||||
global_quality = self._empty_quality_container
|
||||
result.append({"stack": global_container_stack, "quality": global_quality, "quality_changes": global_quality_changes})
|
||||
else:
|
||||
result.append({"stack": global_container_stack, "quality": global_quality, "quality_changes": global_quality_changes})
|
||||
|
||||
|
|
66
cura/Settings/MachineNameValidator.py
Normal file
66
cura/Settings/MachineNameValidator.py
Normal file
|
@ -0,0 +1,66 @@
|
|||
# Copyright (c) 2016 Ultimaker B.V.
|
||||
# Cura is released under the terms of the AGPLv3 or higher.
|
||||
|
||||
from PyQt5.QtCore import pyqtSlot, pyqtProperty, QObject, pyqtSignal, QRegExp
|
||||
from PyQt5.QtGui import QValidator
|
||||
import os #For statvfs.
|
||||
import urllib #To escape machine names for how they're saved to file.
|
||||
|
||||
import UM.Resources
|
||||
import UM.Settings.ContainerRegistry
|
||||
import UM.Settings.InstanceContainer
|
||||
|
||||
## Are machine names valid?
|
||||
#
|
||||
# Performs checks based on the length of the name.
|
||||
class MachineNameValidator(QObject):
|
||||
def __init__(self, parent = None):
|
||||
super().__init__(parent)
|
||||
|
||||
#Compute the validation regex for printer names. This is limited by the maximum file name length.
|
||||
try:
|
||||
filename_max_length = os.statvfs(UM.Resources.getDataStoragePath()).f_namemax
|
||||
except AttributeError: #Doesn't support statvfs. Probably because it's not a Unix system.
|
||||
filename_max_length = 255 #Assume it's Windows on NTFS.
|
||||
machine_name_max_length = filename_max_length - len("_current_settings.") - len(UM.Settings.ContainerRegistry.getMimeTypeForContainer(UM.Settings.InstanceContainer).preferredSuffix)
|
||||
# Characters that urllib.parse.quote_plus escapes count for 12! So now
|
||||
# we must devise a regex that allows only 12 normal characters or 1
|
||||
# special character, and that up to [machine_name_max_length / 12] times.
|
||||
maximum_special_characters = int(machine_name_max_length / 12)
|
||||
unescaped = r"[a-zA-Z0-9_\-\.\/]"
|
||||
self.machine_name_regex = r"^((" + unescaped + "){0,12}|.){0," + str(maximum_special_characters) + r"}$"
|
||||
|
||||
validationChanged = pyqtSignal()
|
||||
|
||||
## Check if a specified machine name is allowed.
|
||||
#
|
||||
# \param name The machine name to check.
|
||||
# \param position The current position of the cursor in the text box.
|
||||
# \return ``QValidator.Invalid`` if it's disallowed, or
|
||||
# ``QValidator.Acceptable`` if it's allowed.
|
||||
def validate(self, name, position):
|
||||
#Check for file name length of the current settings container (which is the longest file we're saving with the name).
|
||||
try:
|
||||
filename_max_length = os.statvfs(UM.Resources.getDataStoragePath()).f_namemax
|
||||
except AttributeError: #Doesn't support statvfs. Probably because it's not a Unix system.
|
||||
filename_max_length = 255 #Assume it's Windows on NTFS.
|
||||
escaped_name = urllib.parse.quote_plus(name)
|
||||
current_settings_filename = escaped_name + "_current_settings." + UM.Settings.ContainerRegistry.getMimeTypeForContainer(UM.Settings.InstanceContainer).preferredSuffix
|
||||
if len(current_settings_filename) > filename_max_length:
|
||||
return QValidator.Invalid
|
||||
|
||||
return QValidator.Acceptable #All checks succeeded.
|
||||
|
||||
## Updates the validation state of a machine name text field.
|
||||
@pyqtSlot(str)
|
||||
def updateValidation(self, new_name):
|
||||
is_valid = self.validate(new_name, 0)
|
||||
if is_valid == QValidator.Acceptable:
|
||||
self.validation_regex = "^.*$" #Matches anything.
|
||||
else:
|
||||
self.validation_regex = "a^" #Never matches (unless you manage to get "a" before the start of the string... good luck).
|
||||
self.validationChanged.emit()
|
||||
|
||||
@pyqtProperty("QRegExp", notify=validationChanged)
|
||||
def machineNameRegex(self):
|
||||
return QRegExp(self.machine_name_regex)
|
|
@ -1,18 +1,23 @@
|
|||
# Copyright (c) 2016 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.
|
||||
|
||||
from PyQt5.QtCore import Qt
|
||||
|
||||
from UM.Application import Application
|
||||
from UM.Settings.ContainerRegistry import ContainerRegistry
|
||||
from UM.Settings.Models.InstanceContainersModel import InstanceContainersModel
|
||||
|
||||
from cura.QualityManager import QualityManager
|
||||
from cura.Settings.ExtruderManager import ExtruderManager
|
||||
from cura.Settings.MachineManager import MachineManager
|
||||
|
||||
## QML Model for listing the current list of valid quality profiles.
|
||||
#
|
||||
class ProfilesModel(InstanceContainersModel):
|
||||
LayerHeightRole = Qt.UserRole + 1001
|
||||
|
||||
def __init__(self, parent = None):
|
||||
super().__init__(parent)
|
||||
self.addRoleName(self.LayerHeightRole, "layer_height")
|
||||
|
||||
Application.getInstance().globalContainerStackChanged.connect(self._update)
|
||||
|
||||
|
@ -20,6 +25,21 @@ class ProfilesModel(InstanceContainersModel):
|
|||
Application.getInstance().getMachineManager().activeStackChanged.connect(self._update)
|
||||
Application.getInstance().getMachineManager().activeMaterialChanged.connect(self._update)
|
||||
|
||||
# Factory function, used by QML
|
||||
@staticmethod
|
||||
def createProfilesModel(engine, js_engine):
|
||||
return ProfilesModel.getInstance()
|
||||
|
||||
## Get the singleton instance for this class.
|
||||
@classmethod
|
||||
def getInstance(cls):
|
||||
# Note: Explicit use of class name to prevent issues with inheritance.
|
||||
if ProfilesModel.__instance is None:
|
||||
ProfilesModel.__instance = cls()
|
||||
return ProfilesModel.__instance
|
||||
|
||||
__instance = None
|
||||
|
||||
## Fetch the list of containers to display.
|
||||
#
|
||||
# See UM.Settings.Models.InstanceContainersModel._fetchInstanceContainers().
|
||||
|
@ -40,3 +60,57 @@ class ProfilesModel(InstanceContainersModel):
|
|||
# The actual list of quality profiles come from the first extruder in the extruder list.
|
||||
return QualityManager.getInstance().findAllUsableQualitiesForMachineAndExtruders(global_container_stack,
|
||||
extruder_stacks)
|
||||
|
||||
## Re-computes the items in this model, and adds the layer height role.
|
||||
def _recomputeItems(self):
|
||||
#Some globals that we can re-use.
|
||||
global_container_stack = Application.getInstance().getGlobalContainerStack()
|
||||
if global_container_stack is None:
|
||||
return
|
||||
container_registry = ContainerRegistry.getInstance()
|
||||
machine_manager = Application.getInstance().getMachineManager()
|
||||
|
||||
unit = global_container_stack.getBottom().getProperty("layer_height", "unit")
|
||||
if not unit:
|
||||
unit = ""
|
||||
|
||||
for item in super()._recomputeItems():
|
||||
profile = container_registry.findContainers(id = item["id"])
|
||||
if not profile:
|
||||
item["layer_height"] = "" #Can't update a profile that is unknown.
|
||||
yield item
|
||||
continue
|
||||
|
||||
#Easy case: This profile defines its own layer height.
|
||||
profile = profile[0]
|
||||
if profile.hasProperty("layer_height", "value"):
|
||||
item["layer_height"] = str(profile.getProperty("layer_height", "value")) + unit
|
||||
yield item
|
||||
continue
|
||||
|
||||
#Quality-changes profile that has no value for layer height. Get the corresponding quality profile and ask that profile.
|
||||
quality_type = profile.getMetaDataEntry("quality_type", None)
|
||||
if quality_type:
|
||||
quality_results = machine_manager.determineQualityAndQualityChangesForQualityType(quality_type)
|
||||
for quality_result in quality_results:
|
||||
if quality_result["stack"] is global_container_stack:
|
||||
quality = quality_result["quality"]
|
||||
break
|
||||
else: #No global container stack in the results:
|
||||
if quality_results:
|
||||
quality = quality_results[0]["quality"] #Take any of the extruders.
|
||||
else:
|
||||
quality = None
|
||||
if quality and quality.hasProperty("layer_height", "value"):
|
||||
item["layer_height"] = str(quality.getProperty("layer_height", "value")) + unit
|
||||
yield item
|
||||
continue
|
||||
|
||||
#Quality has no value for layer height either. Get the layer height from somewhere lower in the stack.
|
||||
skip_until_container = global_container_stack.findContainer({"type": "material"})
|
||||
if not skip_until_container: #No material in stack.
|
||||
skip_until_container = global_container_stack.findContainer({"type": "variant"})
|
||||
if not skip_until_container: #No variant in stack.
|
||||
skip_until_container = global_container_stack.getBottom()
|
||||
item["layer_height"] = str(global_container_stack.getRawProperty("layer_height", "value", skip_until_container = skip_until_container.getId())) + unit #Fall through to the currently loaded material.
|
||||
yield item
|
|
@ -5,6 +5,7 @@ from PyQt5.QtCore import QObject, pyqtSlot, pyqtProperty, pyqtSignal
|
|||
import UM.Settings
|
||||
from UM.Application import Application
|
||||
import cura.Settings
|
||||
from UM.Logger import Logger
|
||||
|
||||
|
||||
## The settingInheritance manager is responsible for checking each setting in order to see if one of the "deeper"
|
||||
|
@ -38,6 +39,26 @@ class SettingInheritanceManager(QObject):
|
|||
result.append(key)
|
||||
return result
|
||||
|
||||
@pyqtSlot(str, str, result = "QStringList")
|
||||
def getOverridesForExtruder(self, key, extruder_index):
|
||||
multi_extrusion = self._global_container_stack.getProperty("machine_extruder_count", "value") > 1
|
||||
if not multi_extrusion:
|
||||
return self._settings_with_inheritance_warning
|
||||
extruder = cura.Settings.ExtruderManager.getInstance().getExtruderStack(extruder_index)
|
||||
if not extruder:
|
||||
Logger.log("w", "Unable to find extruder for current machine with index %s", extruder_index)
|
||||
return []
|
||||
|
||||
definitions = self._global_container_stack.getBottom().findDefinitions(key=key)
|
||||
if not definitions:
|
||||
return
|
||||
result = []
|
||||
for key in definitions[0].getAllKeys():
|
||||
if self._settingIsOverwritingInheritance(key, extruder):
|
||||
result.append(key)
|
||||
|
||||
return result
|
||||
|
||||
@pyqtSlot(str)
|
||||
def manualRemoveOverride(self, key):
|
||||
if key in self._settings_with_inheritance_warning:
|
||||
|
@ -56,9 +77,11 @@ class SettingInheritanceManager(QObject):
|
|||
if new_active_stack != self._active_container_stack: # Check if changed
|
||||
if self._active_container_stack: # Disconnect signal from old container (if any)
|
||||
self._active_container_stack.propertyChanged.disconnect(self._onPropertyChanged)
|
||||
self._active_container_stack.containersChanged.disconnect(self._onContainersChanged)
|
||||
|
||||
self._active_container_stack = new_active_stack
|
||||
self._active_container_stack.propertyChanged.connect(self._onPropertyChanged)
|
||||
self._active_container_stack.containersChanged.connect(self._onContainersChanged)
|
||||
self._update() # Ensure that the settings_with_inheritance_warning list is populated.
|
||||
|
||||
def _onPropertyChanged(self, key, property_name):
|
||||
|
@ -113,22 +136,23 @@ class SettingInheritanceManager(QObject):
|
|||
return self._settings_with_inheritance_warning
|
||||
|
||||
## Check if a setting has an inheritance function that is overwritten
|
||||
def _settingIsOverwritingInheritance(self, key):
|
||||
def _settingIsOverwritingInheritance(self, key, stack = None):
|
||||
has_setting_function = False
|
||||
if not stack:
|
||||
stack = self._active_container_stack
|
||||
containers = []
|
||||
|
||||
## Check if the setting has a user state. If not, it is never overwritten.
|
||||
has_user_state = self._active_container_stack.getProperty(key, "state") == UM.Settings.InstanceState.User
|
||||
has_user_state = stack.getProperty(key, "state") == UM.Settings.InstanceState.User
|
||||
if not has_user_state:
|
||||
return False
|
||||
|
||||
## If a setting is not enabled, don't label it as overwritten (It's never visible anyway).
|
||||
if not self._active_container_stack.getProperty(key, "enabled"):
|
||||
if not stack.getProperty(key, "enabled"):
|
||||
return False
|
||||
|
||||
## Also check if the top container is not a setting function (this happens if the inheritance is restored).
|
||||
if isinstance(self._active_container_stack.getTop().getProperty(key, "value"), UM.Settings.SettingFunction):
|
||||
if isinstance(stack.getTop().getProperty(key, "value"), UM.Settings.SettingFunction):
|
||||
return False
|
||||
|
||||
## Mash all containers for all the stacks together.
|
||||
|
@ -139,13 +163,15 @@ class SettingInheritanceManager(QObject):
|
|||
for container in containers:
|
||||
try:
|
||||
value = container.getProperty(key, "value")
|
||||
except AttributeError:
|
||||
continue
|
||||
if value is not None:
|
||||
has_setting_function = isinstance(value, UM.Settings.SettingFunction)
|
||||
# If a setting doesn't use any keys, it won't change it's value, so treat it as if it's a fixed value
|
||||
has_setting_function = isinstance(value, UM.Settings.SettingFunction) and len(value.getUsedSettingKeys()) > 0
|
||||
if has_setting_function is False:
|
||||
has_non_function_value = True
|
||||
continue
|
||||
except AttributeError:
|
||||
continue
|
||||
|
||||
if has_setting_function:
|
||||
break # There is a setting function somewhere, stop looking deeper.
|
||||
return has_setting_function and has_non_function_value
|
||||
|
@ -170,11 +196,18 @@ class SettingInheritanceManager(QObject):
|
|||
def _onGlobalContainerChanged(self):
|
||||
if self._global_container_stack:
|
||||
self._global_container_stack.propertyChanged.disconnect(self._onPropertyChanged)
|
||||
self._global_container_stack.containersChanged.disconnect(self._onContainersChanged)
|
||||
self._global_container_stack = Application.getInstance().getGlobalContainerStack()
|
||||
if self._global_container_stack:
|
||||
self._global_container_stack.containersChanged.connect(self._onContainersChanged)
|
||||
self._global_container_stack.propertyChanged.connect(self._onPropertyChanged)
|
||||
self._onActiveExtruderChanged()
|
||||
|
||||
def _onContainersChanged(self, container):
|
||||
# TODO: Multiple container changes in sequence now cause quite a few recalculations.
|
||||
# This isn't that big of an issue, but it could be in the future.
|
||||
self._update()
|
||||
|
||||
@staticmethod
|
||||
def createSettingInheritanceManager(engine=None, script_engine=None):
|
||||
return SettingInheritanceManager()
|
|
@ -61,6 +61,12 @@ class SettingOverrideDecorator(SceneNodeDecorator):
|
|||
def getActiveExtruder(self):
|
||||
return self._extruder_stack
|
||||
|
||||
## Gets the signal that emits if the active extruder changed.
|
||||
#
|
||||
# This can then be accessed via a decorator.
|
||||
def getActiveExtruderChangedSignal(self):
|
||||
return self.activeExtruderChanged
|
||||
|
||||
## Gets the currently active extruders position
|
||||
#
|
||||
# \return An extruder's position, or None if no position info is available.
|
||||
|
|
|
@ -8,6 +8,7 @@ from .CuraContainerRegistry import CuraContainerRegistry
|
|||
from .ExtruderManager import ExtruderManager
|
||||
from .ExtrudersModel import ExtrudersModel
|
||||
from .MachineManager import MachineManager
|
||||
from .MachineNameValidator import MachineNameValidator
|
||||
from .MaterialSettingsVisibilityHandler import MaterialSettingsVisibilityHandler
|
||||
from .SettingOverrideDecorator import SettingOverrideDecorator
|
||||
from .QualitySettingsModel import QualitySettingsModel
|
||||
|
|
BIN
docs/Cura_Data_Model.odg
Normal file
BIN
docs/Cura_Data_Model.odg
Normal file
Binary file not shown.
|
@ -10,15 +10,18 @@ from UM.Scene.SceneNode import SceneNode
|
|||
from UM.Scene.GroupDecorator import GroupDecorator
|
||||
import UM.Application
|
||||
from UM.Job import Job
|
||||
from cura.Settings.SettingOverrideDecorator import SettingOverrideDecorator
|
||||
from UM.Application import Application
|
||||
from cura.Settings.ExtruderManager import ExtruderManager
|
||||
from cura.QualityManager import QualityManager
|
||||
|
||||
from UM.Math.Quaternion import Quaternion
|
||||
|
||||
import math
|
||||
import os.path
|
||||
import zipfile
|
||||
|
||||
try:
|
||||
import xml.etree.cElementTree as ET
|
||||
except ImportError:
|
||||
Logger.log("w", "Unable to load cElementTree, switching to slower version")
|
||||
import xml.etree.ElementTree as ET
|
||||
|
||||
## Base implementation for reading 3MF files. Has no support for textures. Only loads meshes!
|
||||
|
@ -31,9 +34,12 @@ class ThreeMFReader(MeshReader):
|
|||
"3mf": "http://schemas.microsoft.com/3dmanufacturing/core/2015/02",
|
||||
"cura": "http://software.ultimaker.com/xml/cura/3mf/2015/10"
|
||||
}
|
||||
self._base_name = ""
|
||||
self._unit = None
|
||||
|
||||
def _createNodeFromObject(self, object, name = ""):
|
||||
node = SceneNode()
|
||||
node.setName(name)
|
||||
mesh_builder = MeshBuilder()
|
||||
vertex_list = []
|
||||
|
||||
|
@ -42,8 +48,7 @@ class ThreeMFReader(MeshReader):
|
|||
for component in components:
|
||||
id = component.get("objectid")
|
||||
new_object = self._root.find("./3mf:resources/3mf:object[@id='{0}']".format(id), self._namespaces)
|
||||
|
||||
new_node = self._createNodeFromObject(new_object)
|
||||
new_node = self._createNodeFromObject(new_object, self._base_name + "_" + str(id))
|
||||
node.addChild(new_node)
|
||||
transform = component.get("transform")
|
||||
if transform is not None:
|
||||
|
@ -54,9 +59,45 @@ class ThreeMFReader(MeshReader):
|
|||
vertex_list.append([vertex.get("x"), vertex.get("y"), vertex.get("z")])
|
||||
Job.yieldThread()
|
||||
|
||||
# If this object has no vertices and just one child, just return the child.
|
||||
if len(vertex_list) == 0 and len(node.getChildren()) == 1:
|
||||
return node.getChildren()[0]
|
||||
xml_settings = list(object.findall(".//cura:setting", self._namespaces))
|
||||
|
||||
# Add the setting override decorator, so we can add settings to this node.
|
||||
if xml_settings:
|
||||
node.addDecorator(SettingOverrideDecorator())
|
||||
|
||||
global_container_stack = Application.getInstance().getGlobalContainerStack()
|
||||
# Ensure the correct next container for the SettingOverride decorator is set.
|
||||
if global_container_stack:
|
||||
multi_extrusion = global_container_stack.getProperty("machine_extruder_count", "value") > 1
|
||||
# Ensure that all extruder data is reset
|
||||
if not multi_extrusion:
|
||||
default_stack_id = global_container_stack.getId()
|
||||
else:
|
||||
default_stack = ExtruderManager.getInstance().getExtruderStack(0)
|
||||
if default_stack:
|
||||
default_stack_id = default_stack.getId()
|
||||
else:
|
||||
default_stack_id = global_container_stack.getId()
|
||||
node.callDecoration("setActiveExtruder", default_stack_id)
|
||||
|
||||
# Get the definition & set it
|
||||
definition = QualityManager.getInstance().getParentMachineDefinition(global_container_stack.getBottom())
|
||||
node.callDecoration("getStack").getTop().setDefinition(definition)
|
||||
|
||||
setting_container = node.callDecoration("getStack").getTop()
|
||||
for setting in xml_settings:
|
||||
setting_key = setting.get("key")
|
||||
setting_value = setting.text
|
||||
|
||||
# Extruder_nr is a special case.
|
||||
if setting_key == "extruder_nr":
|
||||
extruder_stack = ExtruderManager.getInstance().getExtruderStack(int(setting_value))
|
||||
if extruder_stack:
|
||||
node.callDecoration("setActiveExtruder", extruder_stack.getId())
|
||||
else:
|
||||
Logger.log("w", "Unable to find extruder in position %s", setting_value)
|
||||
continue
|
||||
setting_container.setProperty(setting_key,"value", setting_value)
|
||||
|
||||
if len(node.getChildren()) > 0:
|
||||
group_decorator = GroupDecorator()
|
||||
|
@ -76,20 +117,10 @@ class ThreeMFReader(MeshReader):
|
|||
|
||||
Job.yieldThread()
|
||||
|
||||
# Rotate the model; We use a different coordinate frame.
|
||||
rotation = Matrix()
|
||||
rotation.setByRotationAxis(-0.5 * math.pi, Vector(1, 0, 0))
|
||||
flip_matrix = Matrix()
|
||||
|
||||
flip_matrix._data[1, 1] = 0
|
||||
flip_matrix._data[1, 2] = 1
|
||||
flip_matrix._data[2, 1] = 1
|
||||
flip_matrix._data[2, 2] = 0
|
||||
|
||||
# TODO: We currently do not check for normals and simply recalculate them.
|
||||
mesh_builder.calculateNormals()
|
||||
mesh_builder.setFileName(name)
|
||||
mesh_data = mesh_builder.build().getTransformed(flip_matrix)
|
||||
mesh_data = mesh_builder.build()
|
||||
|
||||
if len(mesh_data.getVertices()):
|
||||
node.setMeshData(mesh_data)
|
||||
|
@ -122,45 +153,101 @@ class ThreeMFReader(MeshReader):
|
|||
temp_mat._data[1, 3] = splitted_transformation[10]
|
||||
temp_mat._data[2, 3] = splitted_transformation[11]
|
||||
|
||||
flip_matrix = Matrix()
|
||||
flip_matrix._data[1, 1] = 0
|
||||
flip_matrix._data[1, 2] = 1
|
||||
flip_matrix._data[2, 1] = 1
|
||||
flip_matrix._data[2, 2] = 0
|
||||
temp_mat.multiply(flip_matrix)
|
||||
|
||||
return temp_mat
|
||||
|
||||
def read(self, file_name):
|
||||
result = SceneNode()
|
||||
result = []
|
||||
# The base object of 3mf is a zipped archive.
|
||||
archive = zipfile.ZipFile(file_name, "r")
|
||||
self._base_name = os.path.basename(file_name)
|
||||
try:
|
||||
self._root = ET.parse(archive.open("3D/3dmodel.model"))
|
||||
self._unit = self._root.getroot().get("unit")
|
||||
|
||||
build_items = self._root.findall("./3mf:build/3mf:item", self._namespaces)
|
||||
|
||||
for build_item in build_items:
|
||||
id = build_item.get("objectid")
|
||||
object = self._root.find("./3mf:resources/3mf:object[@id='{0}']".format(id), self._namespaces)
|
||||
build_item_node = self._createNodeFromObject(object)
|
||||
if "type" in object.attrib:
|
||||
if object.attrib["type"] == "support" or object.attrib["type"] == "other":
|
||||
# Ignore support objects, as cura does not support these.
|
||||
# We can't guarantee that they wont be made solid.
|
||||
# We also ignore "other", as I have no idea what to do with them.
|
||||
Logger.log("w", "3MF file contained an object of type %s which is not supported by Cura", object.attrib["type"])
|
||||
continue
|
||||
elif object.attrib["type"] == "solidsupport" or object.attrib["type"] == "model":
|
||||
pass # Load these as normal
|
||||
else:
|
||||
# We should technically fail at this point because it's an invalid 3MF, but try to continue anyway.
|
||||
Logger.log("e", "3MF file contained an object of type %s which is not supported by the 3mf spec",
|
||||
object.attrib["type"])
|
||||
continue
|
||||
|
||||
build_item_node = self._createNodeFromObject(object, self._base_name + "_" + str(id))
|
||||
transform = build_item.get("transform")
|
||||
if transform is not None:
|
||||
build_item_node.setTransformation(self._createMatrixFromTransformationString(transform))
|
||||
result.addChild(build_item_node)
|
||||
|
||||
except Exception as e:
|
||||
Logger.log("e", "exception occured in 3mf reader: %s", e)
|
||||
try: # Selftest - There might be more functions that should fail
|
||||
bounding_box = result.getBoundingBox()
|
||||
bounding_box.isValid()
|
||||
except:
|
||||
return None
|
||||
|
||||
global_container_stack = UM.Application.getInstance().getGlobalContainerStack()
|
||||
|
||||
# Create a transformation Matrix to convert from 3mf worldspace into ours.
|
||||
# First step: flip the y and z axis.
|
||||
transformation_matrix = Matrix()
|
||||
transformation_matrix._data[1, 1] = 0
|
||||
transformation_matrix._data[1, 2] = 1
|
||||
transformation_matrix._data[2, 1] = -1
|
||||
transformation_matrix._data[2, 2] = 0
|
||||
|
||||
# Second step: 3MF defines the left corner of the machine as center, whereas cura uses the center of the
|
||||
# build volume.
|
||||
if global_container_stack:
|
||||
translation = Vector(x=-global_container_stack.getProperty("machine_width", "value") / 2, y=0,
|
||||
z=global_container_stack.getProperty("machine_depth", "value") / 2)
|
||||
result.translate(translation, SceneNode.TransformSpace.World)
|
||||
translation_vector = Vector(x = -global_container_stack.getProperty("machine_width", "value") / 2,
|
||||
y = -global_container_stack.getProperty("machine_depth", "value") / 2,
|
||||
z = 0)
|
||||
translation_matrix = Matrix()
|
||||
translation_matrix.setByTranslation(translation_vector)
|
||||
transformation_matrix.multiply(translation_matrix)
|
||||
|
||||
# Third step: 3MF also defines a unit, wheras Cura always assumes mm.
|
||||
scale_matrix = Matrix()
|
||||
scale_matrix.setByScaleVector(self._getScaleFromUnit(self._unit))
|
||||
transformation_matrix.multiply(scale_matrix)
|
||||
|
||||
# Pre multiply the transformation with the loaded transformation, so the data is handled correctly.
|
||||
build_item_node.setTransformation(build_item_node.getLocalTransformation().preMultiply(transformation_matrix))
|
||||
|
||||
result.append(build_item_node)
|
||||
|
||||
except Exception as e:
|
||||
Logger.log("e", "An exception occurred in 3mf reader: %s", e)
|
||||
|
||||
return result
|
||||
|
||||
## Create a scale vector based on a unit string.
|
||||
# The core spec defines the following:
|
||||
# * micron
|
||||
# * millimeter (default)
|
||||
# * centimeter
|
||||
# * inch
|
||||
# * foot
|
||||
# * meter
|
||||
def _getScaleFromUnit(self, unit):
|
||||
if unit is None:
|
||||
unit = "millimeter"
|
||||
if unit == "micron":
|
||||
scale = 0.001
|
||||
elif unit == "millimeter":
|
||||
scale = 1
|
||||
elif unit == "centimeter":
|
||||
scale = 10
|
||||
elif unit == "inch":
|
||||
scale = 25.4
|
||||
elif unit == "foot":
|
||||
scale = 304.8
|
||||
elif unit == "meter":
|
||||
scale = 1000
|
||||
else:
|
||||
Logger.log("w", "Unrecognised unit %s used. Assuming mm instead", unit)
|
||||
scale = 1
|
||||
|
||||
return Vector(scale, scale, scale)
|
|
@ -1,17 +1,37 @@
|
|||
[2.3.1]
|
||||
*Layer Height in Profile Selection
|
||||
Added the layer height to the profile selection menu.
|
||||
|
||||
*Bug fixes
|
||||
Fixed the option to import g-code from related machines as a profile
|
||||
Fixed a bug where editing material settings has no effect on 3D prints
|
||||
Fixed an issue with automatic profile importing on Cura 2.1 on Mac OSX
|
||||
Fixed an inheritance issue for dual extrusion
|
||||
Fixed an issue with "i" symbol updates
|
||||
Fixed a freeze that can occur while printing via Wi-Fi
|
||||
|
||||
[2.3.0]
|
||||
*Multi Extrusion Support
|
||||
Machines with multiple extruders are now supported. Ultimaker 3 printers and Ultimaker Original printers with dual extrusion upgrade kit are currently supported.
|
||||
|
||||
*Network Printing for Ultimaker 3
|
||||
Sending a print to an Ultimaker 3 remotely via the network is now possible. Requires Wi-Fi or LAN to connect to the printer.
|
||||
|
||||
*Print Monitoring for Ultimaker 3
|
||||
You can monitor your print on an Ultimaker 3 with a live camera feed. Requires Wi-Fi or LAN to connect to the printer.
|
||||
|
||||
*Material and Print Core Synchronization
|
||||
Connecting to an Ultimaker 3 now gives you the option to synchronize the materials in Cura with what is loaded in the printer.
|
||||
|
||||
*Speed improvements
|
||||
The first thing you will notice is the speed. STL loading is now 10 to 20 times faster, layerview is significantly faster and slicing speed is slightly improved.
|
||||
|
||||
*Multi Extrusion Support
|
||||
Machines with multiple extruders are now supported. If you’ve got the Ultimaker Original with the dual extrusion upgrade kit, we’ve got you covered.
|
||||
|
||||
*Custom Machine Support
|
||||
It’s now much easier to use Cura with custom machines. You can edit the machine settings when you load a new custom machine.
|
||||
The first thing you will notice is the speed. STL loading is now 10 to 20 times faster, layer view is significantly faster and slicing speed is slightly improved.
|
||||
|
||||
*Improved Position Tool
|
||||
Place objects precisely where you want them by manually entering the values for the position.
|
||||
|
||||
*Custom Machine Support
|
||||
It’s now much easier to use Cura with custom machines. You can edit the machine settings when you load a new custom machine.
|
||||
|
||||
*Improved Grouping
|
||||
It's now possible to transform objects that are already grouped.
|
||||
Select an individual item in a group or merged object and edit as usual. Just Ctrl + Click and edit away.
|
||||
|
@ -20,7 +40,7 @@ Select an individual item in a group or merged object and edit as usual. Just Ct
|
|||
Profile management is improved. You can now easily see and track changes made to your profiles.
|
||||
|
||||
*Improved Setting Visibility
|
||||
Make multiple settings visible at once. The Visibility Overview setting indicates why a setting is not shown in the sidebar even if it is enabled.
|
||||
Make multiple settings visible at the same time with a checkbox. The Visibility Overview setting indicates why a setting is not shown in the sidebar even if it is enabled.
|
||||
|
||||
*Improved time estimation
|
||||
Time estimations are more accurate. Based on our test time estimations should be within 5% accuracy for Ultimaker printers.
|
||||
|
@ -36,10 +56,10 @@ Configurations from older installations of Cura 2.1 are automatically imported i
|
|||
|
||||
*Slicing features
|
||||
*Infill Types
|
||||
We've introduced two new infill types: Tetrahedral and Cubic. They change along with the Z-axis for more uniform strength in all directions. There are now 7 infill types to choose from.
|
||||
Two new infill types are now introduced: Tetrahedral and Cubic. They change along with the Z-axis for more uniform strength in all directions. There are now seven infill types to choose from.
|
||||
|
||||
*Gradual Infill
|
||||
Now you can change the density of the infill based on the distance from the top layers. Your objects print faster, use less material, while top surfaces have the same quality.
|
||||
Gradual infill lets users adjust infill density, based on the distance from the top layers. This offers faster printing and reduced material requirements, whilst maintaining surface quality.
|
||||
|
||||
*Set Acceleration and Jerk by Feature
|
||||
You can now set Jerk and Acceleration by feature-type (infill, walls, top/bottom, etc), for more precision.
|
||||
|
@ -56,7 +76,7 @@ Can’t avoid previously printed parts by horizontal moves? The Z Hop Only Over
|
|||
*Skin and Wall Overlap
|
||||
The Skin Overlap setting allows you to overlap the skin lines with the walls for better adhesion.
|
||||
|
||||
*Control Initial Layer Travel Speed
|
||||
*Adjust Initial Layer Travel Speed
|
||||
Set the travel speed of the initial layer(s) to reduce risk of extruder pulling the print from the bed.
|
||||
|
||||
*Support Interface
|
||||
|
@ -66,39 +86,39 @@ It is now possible to print a support bottom as well as a support roof. Support
|
|||
Deleting grouped objects
|
||||
Duplicating groups
|
||||
Bridging
|
||||
Drag and drop on the first run on Windows
|
||||
Drag and drop (first Windows run)
|
||||
Unretraction speeds
|
||||
Bottom layer in Spiralize mode
|
||||
Overlap Compensation
|
||||
Retractions on Raft
|
||||
Retractions now occur after each object printed in one-at-a-time mode.
|
||||
Rafts are no longer printed outside of build area.
|
||||
Spiralize no longer only spiralizes the first printed segment only.
|
||||
Line distance is now the actual line distance.
|
||||
Enabling raft doesn’t influence at which height the model is sliced any more.
|
||||
Brim is now always printed just once.
|
||||
Support roofs now only occur just below overhang.
|
||||
Raft retractions
|
||||
Retractions now occur after each object printed in one-at-a-time mode
|
||||
Rafts are no longer printed outside of build area
|
||||
Spiralize no longer limited to the first printed segment only
|
||||
Line distance is now the actual line distance
|
||||
Enabling raft doesn’t influence at which height the model is sliced any more
|
||||
Brim is now always printed just once
|
||||
Support roofs now only occur just below overhang
|
||||
|
||||
*Minor changes
|
||||
Messages are now displayed 30 seconds instead of 10, making it less likely that certain messages are missed.
|
||||
You are now notified if you try to save to a locked SD card.
|
||||
Engine log is now included in the application log.
|
||||
Undo and Redo now work correctly with multiple operations.
|
||||
The last used folder is now remembered (instead of defaulting to home folder).
|
||||
Import X3D files.
|
||||
Made it possible to add multiple Per Model Settings at once.
|
||||
Bed Level and Checkup procedures for UMO+ can now be done without re-adding machine.
|
||||
Combing is applied in more cases and results in better paths.
|
||||
Infill thickness now supports Grid infill also for even multiples of the layer height.
|
||||
Support is no longer removed by unprintable thin parts of the model.
|
||||
Support is now generated on each layer it’s supposed to.
|
||||
Support doesn't go outside overhang areas any more.
|
||||
Support doesn't remove brim around the object any more.
|
||||
Brim is now also generated under the support.
|
||||
Draft shield and Ooze shield get their own brim or raft.
|
||||
Settings shared between skirt and brim now also activate when brim is selected.
|
||||
Compensate overlapping wall parts now also works for inner walls.
|
||||
You can now adjust the speed at which the bed is lowered each layer.
|
||||
Message display time increased to 30 seconds
|
||||
Notification if you try to save to a locked SD card
|
||||
Engine log now included in the application log
|
||||
Undo and Redo now function with multiple operations
|
||||
The last used folder is now remembered rather than defaulting to home folder
|
||||
Import X3D files
|
||||
Made it possible to add multiple Per Model Settings at once
|
||||
Bed Level and Checkup procedures for UMO+ can be performed without re-adding machine
|
||||
Combing applied in more cases and results in better paths
|
||||
Infill thickness now supports Grid infill also for even multiples of the layer height
|
||||
Support is no longer removed by unprintable thin parts of the model
|
||||
Support generated on each appropriate layer
|
||||
Support no longer goes outside overhang areas
|
||||
Support no longer removes brim around the object
|
||||
Brim is now also generated under the support
|
||||
Draft and Ooze shield get their own brim or raft
|
||||
Settings shared between skirt and brim now also activate when brim is selected
|
||||
Compensate overlapping wall parts now also works for inner walls
|
||||
Bed lowering speed can be adjusted for each layer
|
||||
|
||||
[2.1.3]
|
||||
|
||||
|
|
|
@ -220,6 +220,9 @@ class CuraEngineBackend(Backend):
|
|||
#
|
||||
# \param job The start slice job that was just finished.
|
||||
def _onStartSliceCompleted(self, job):
|
||||
if self._error_message:
|
||||
self._error_message.hide()
|
||||
|
||||
# Note that cancelled slice jobs can still call this method.
|
||||
if self._start_slice_job is job:
|
||||
self._start_slice_job = None
|
||||
|
@ -239,13 +242,33 @@ class CuraEngineBackend(Backend):
|
|||
|
||||
if job.getResult() == StartSliceJob.StartJobResult.SettingError:
|
||||
if Application.getInstance().getPlatformActivity:
|
||||
self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice with the current settings. Please check your settings for errors."))
|
||||
extruders = list(ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId()))
|
||||
error_keys = []
|
||||
for extruder in extruders:
|
||||
error_keys.extend(extruder.getErrorKeys())
|
||||
if not extruders:
|
||||
error_keys = self._global_container_stack.getErrorKeys()
|
||||
error_labels = set()
|
||||
definition_container = self._global_container_stack.getBottom()
|
||||
for key in error_keys:
|
||||
error_labels.add(definition_container.findDefinitions(key = key)[0].label)
|
||||
|
||||
error_labels = ", ".join(error_labels)
|
||||
self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice with the current settings. The following settings have errors: {0}".format(error_labels)))
|
||||
self._error_message.show()
|
||||
self.backendStateChange.emit(BackendState.Error)
|
||||
else:
|
||||
self.backendStateChange.emit(BackendState.NotStarted)
|
||||
return
|
||||
|
||||
if job.getResult() == StartSliceJob.StartJobResult.BuildPlateError:
|
||||
if Application.getInstance().getPlatformActivity:
|
||||
self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice because the prime tower or prime position(s) are invalid."))
|
||||
self._error_message.show()
|
||||
self.backendStateChange.emit(BackendState.Error)
|
||||
else:
|
||||
self.backendStateChange.emit(BackendState.NotStarted)
|
||||
|
||||
if job.getResult() == StartSliceJob.StartJobResult.NothingToSlice:
|
||||
if Application.getInstance().getPlatformActivity:
|
||||
self._error_message = Message(catalog.i18nc("@info:status", "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit."))
|
||||
|
@ -296,7 +319,7 @@ class CuraEngineBackend(Backend):
|
|||
self._terminate()
|
||||
|
||||
if error.getErrorCode() not in [Arcus.ErrorCode.BindFailedError, Arcus.ErrorCode.ConnectionResetError, Arcus.ErrorCode.Debug]:
|
||||
Logger.log("e", "A socket error caused the connection to be reset")
|
||||
Logger.log("w", "A socket error caused the connection to be reset")
|
||||
|
||||
## A setting has changed, so check if we must reslice.
|
||||
#
|
||||
|
|
|
@ -25,6 +25,7 @@ class StartJobResult(IntEnum):
|
|||
SettingError = 3
|
||||
NothingToSlice = 4
|
||||
MaterialIncompatible = 5
|
||||
BuildPlateError = 6
|
||||
|
||||
|
||||
## Formatter class that handles token expansion in start/end gcod
|
||||
|
@ -75,12 +76,12 @@ class StartSliceJob(Job):
|
|||
return
|
||||
|
||||
# Don't slice if there is a setting with an error value.
|
||||
if not Application.getInstance().getMachineManager().isActiveStackValid:
|
||||
if Application.getInstance().getMachineManager().stacksHaveErrors:
|
||||
self.setResult(StartJobResult.SettingError)
|
||||
return
|
||||
|
||||
if Application.getInstance().getBuildVolume().hasErrors():
|
||||
self.setResult(StartJobResult.SettingError)
|
||||
self.setResult(StartJobResult.BuildPlateError)
|
||||
return
|
||||
|
||||
for extruder_stack in cura.Settings.ExtruderManager.getInstance().getMachineExtruders(stack.getId()):
|
||||
|
@ -164,7 +165,12 @@ class StartSliceJob(Job):
|
|||
indices = mesh_data.getIndices()
|
||||
if indices is not None:
|
||||
#TODO: This is a very slow way of doing it! It also locks up the GUI.
|
||||
verts = numpy.array([verts[vert_index] for face in indices for vert_index in face])
|
||||
flat_vert_list = []
|
||||
for face in indices:
|
||||
for vert_index in face:
|
||||
flat_vert_list.append(verts[vert_index])
|
||||
Job.yieldThread()
|
||||
verts = numpy.array(flat_vert_list)
|
||||
else:
|
||||
verts = numpy.array(verts)
|
||||
|
||||
|
@ -238,6 +244,7 @@ class StartSliceJob(Job):
|
|||
else:
|
||||
# Normal case
|
||||
settings[key] = stack.getProperty(key, "value")
|
||||
Job.yieldThread()
|
||||
|
||||
start_gcode = settings["machine_start_gcode"]
|
||||
settings["material_bed_temp_prepend"] = "{material_bed_temperature}" not in start_gcode #Pre-compute material material_bed_temp_prepend and material_print_temp_prepend
|
||||
|
@ -250,6 +257,7 @@ class StartSliceJob(Job):
|
|||
setting_message.value = self._expandGcodeTokens(key, value, settings)
|
||||
else:
|
||||
setting_message.value = str(value).encode("utf-8")
|
||||
Job.yieldThread()
|
||||
|
||||
## Sends for some settings which extruder they should fallback to if not
|
||||
# set.
|
||||
|
@ -266,6 +274,7 @@ class StartSliceJob(Job):
|
|||
setting_extruder = self._slice_message.addRepeatedMessage("limit_to_extruder")
|
||||
setting_extruder.name = key
|
||||
setting_extruder.extruder = extruder
|
||||
Job.yieldThread()
|
||||
|
||||
## Check if a node has per object settings and ensure that they are set correctly in the message
|
||||
# \param node \type{SceneNode} Node to check.
|
||||
|
|
|
@ -99,4 +99,6 @@ class CuraProfileReader(ProfileReader):
|
|||
return []
|
||||
|
||||
filenames, outputs = profile_convert_funcs[0](serialized, profile_id)
|
||||
if filenames is None and outputs is None:
|
||||
return []
|
||||
return list(zip(outputs, filenames))
|
||||
|
|
|
@ -70,10 +70,19 @@ class GCodeProfileReader(ProfileReader):
|
|||
|
||||
json_data = json.loads(serialized)
|
||||
|
||||
profile_strings = [json_data["global_quality"]]
|
||||
profile_strings.extend(json_data.get("extruder_quality", []))
|
||||
profiles = []
|
||||
global_profile = readQualityProfileFromString(json_data["global_quality"])
|
||||
|
||||
return [readQualityProfileFromString(profile_string) for profile_string in profile_strings]
|
||||
# This is a fix for profiles created with 2.3.0 For some reason it added the "extruder" property to the
|
||||
# global profile.
|
||||
# The fix is simple and safe, as a global profile should never have the extruder entry.
|
||||
if global_profile.getMetaDataEntry("extruder", None) is not None:
|
||||
global_profile.setMetaDataEntry("extruder", None)
|
||||
profiles.append(global_profile)
|
||||
|
||||
for profile_string in json_data.get("extruder_quality", []):
|
||||
profiles.append(readQualityProfileFromString(profile_string))
|
||||
return profiles
|
||||
|
||||
## Unescape a string which has been escaped for use in a gcode comment.
|
||||
#
|
||||
|
|
|
@ -13,6 +13,7 @@ from UM.Settings.InstanceContainer import InstanceContainer
|
|||
|
||||
import re #For escaping characters in the settings.
|
||||
import json
|
||||
import copy
|
||||
|
||||
## Writes g-code to a file.
|
||||
#
|
||||
|
@ -80,7 +81,7 @@ class GCodeWriter(MeshWriter):
|
|||
flat_container.setDefinition(instance_container1.getDefinition())
|
||||
else:
|
||||
flat_container.setDefinition(instance_container2.getDefinition())
|
||||
flat_container.setMetaData(instance_container2.getMetaData())
|
||||
flat_container.setMetaData(copy.deepcopy(instance_container2.getMetaData()))
|
||||
|
||||
for key in instance_container2.getAllKeys():
|
||||
flat_container.setProperty(key, "value", instance_container2.getProperty(key, "value"))
|
||||
|
|
|
@ -66,8 +66,11 @@ class LegacyProfileReader(ProfileReader):
|
|||
def read(self, file_name):
|
||||
if file_name.split(".")[-1] != "ini":
|
||||
return None
|
||||
global_container_stack = Application.getInstance().getGlobalContainerStack()
|
||||
if not global_container_stack:
|
||||
return None
|
||||
|
||||
multi_extrusion = Application.getInstance().getGlobalContainerStack().getProperty("machine_extruder_count", "value") > 1
|
||||
multi_extrusion = global_container_stack.getProperty("machine_extruder_count", "value") > 1
|
||||
if multi_extrusion:
|
||||
Logger.log("e", "Unable to import legacy profile %s. Multi extrusion is not supported", file_name)
|
||||
raise Exception("Unable to import legacy profile. Multi extrusion is not supported")
|
||||
|
@ -117,7 +120,7 @@ class LegacyProfileReader(ProfileReader):
|
|||
if "translation" not in dict_of_doom:
|
||||
Logger.log("e", "Dictionary of Doom has no translation. Is it the correct JSON file?")
|
||||
return None
|
||||
current_printer_definition = Application.getInstance().getGlobalContainerStack().getBottom()
|
||||
current_printer_definition = global_container_stack.getBottom()
|
||||
profile.setDefinition(current_printer_definition)
|
||||
for new_setting in dict_of_doom["translation"]: #Evaluate all new settings that would get a value from the translations.
|
||||
old_setting_expression = dict_of_doom["translation"][new_setting]
|
||||
|
@ -137,5 +140,5 @@ class LegacyProfileReader(ProfileReader):
|
|||
Logger.log("i", "A legacy profile was imported but everything evaluates to the defaults, creating an empty profile.")
|
||||
profile.setDirty(True)
|
||||
profile.addMetaDataEntry("type", "quality_changes")
|
||||
profile.addMetaDataEntry("quality", "normal")
|
||||
profile.addMetaDataEntry("quality_type", "normal")
|
||||
return profile
|
|
@ -401,7 +401,7 @@ Item {
|
|||
}
|
||||
visibilityHandler: UM.SettingPreferenceVisibilityHandler {}
|
||||
expanded: [ "*" ]
|
||||
exclude: [ "machine_settings" ]
|
||||
exclude: [ "machine_settings", "command_line_settings" ]
|
||||
}
|
||||
delegate:Loader
|
||||
{
|
||||
|
|
|
@ -22,6 +22,7 @@ class PerObjectSettingsTool(Tool):
|
|||
|
||||
self._advanced_mode = False
|
||||
self._multi_extrusion = False
|
||||
self._single_model_selected = False
|
||||
|
||||
Selection.selectionChanged.connect(self.propertyChanged)
|
||||
|
||||
|
@ -30,6 +31,8 @@ class PerObjectSettingsTool(Tool):
|
|||
|
||||
Application.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerChanged)
|
||||
self._onGlobalContainerChanged()
|
||||
Selection.selectionChanged.connect(self._updateEnabled)
|
||||
|
||||
|
||||
def event(self, event):
|
||||
super().event(event)
|
||||
|
@ -102,4 +105,11 @@ class PerObjectSettingsTool(Tool):
|
|||
self._updateEnabled()
|
||||
|
||||
def _updateEnabled(self):
|
||||
Application.getInstance().getController().toolEnabledChanged.emit(self._plugin_id, self._advanced_mode or self._multi_extrusion)
|
||||
selected_objects = Selection.getAllSelectedObjects()
|
||||
if len(selected_objects)> 1:
|
||||
self._single_model_selected = False
|
||||
elif len(selected_objects) == 1 and selected_objects[0].callDecoration("isGroup"):
|
||||
self._single_model_selected = False # Group is selected, so tool needs to be disabled
|
||||
else:
|
||||
self._single_model_selected = True
|
||||
Application.getInstance().getController().toolEnabledChanged.emit(self._plugin_id, (self._advanced_mode or self._multi_extrusion) and self._single_model_selected)
|
|
@ -20,7 +20,7 @@ class RemovableDriveOutputDevice(OutputDevice):
|
|||
super().__init__(device_id)
|
||||
|
||||
self.setName(device_name)
|
||||
self.setShortDescription(catalog.i18nc("@action:button", "Save to Removable Drive"))
|
||||
self.setShortDescription(catalog.i18nc("@action:button Preceded by 'Ready to'.", "Save to Removable Drive"))
|
||||
self.setDescription(catalog.i18nc("@item:inlistbox", "Save to Removable Drive {0}").format(device_name))
|
||||
self.setIconName("save_sd")
|
||||
self.setPriority(1)
|
||||
|
@ -71,7 +71,7 @@ class RemovableDriveOutputDevice(OutputDevice):
|
|||
try:
|
||||
Logger.log("d", "Writing to %s", file_name)
|
||||
# Using buffering greatly reduces the write time for many lines of gcode
|
||||
self._stream = open(file_name, "wt", buffering = 1)
|
||||
self._stream = open(file_name, "wt", buffering = 1, encoding = "utf-8")
|
||||
job = WriteMeshJob(writer, self._stream, nodes, MeshWriter.OutputMode.TextMode)
|
||||
job.setFileName(file_name)
|
||||
job.progress.connect(self._onProgress)
|
||||
|
|
|
@ -19,13 +19,12 @@ from PyQt5.QtCore import QUrl, pyqtSlot, pyqtSignal, pyqtProperty
|
|||
from UM.i18n import i18nCatalog
|
||||
catalog = i18nCatalog("cura")
|
||||
|
||||
|
||||
class USBPrinterOutputDevice(PrinterOutputDevice):
|
||||
|
||||
def __init__(self, serial_port):
|
||||
super().__init__(serial_port)
|
||||
self.setName(catalog.i18nc("@item:inmenu", "USB printing"))
|
||||
self.setShortDescription(catalog.i18nc("@action:button", "Print via USB"))
|
||||
self.setShortDescription(catalog.i18nc("@action:button Preceded by 'Ready to'.", "Print via USB"))
|
||||
self.setDescription(catalog.i18nc("@info:tooltip", "Print via USB"))
|
||||
self.setIconName("print")
|
||||
self.setConnectionText(catalog.i18nc("@info:status", "Connected via USB"))
|
||||
|
|
|
@ -5,6 +5,7 @@ See: http://en.wikipedia.org/wiki/Intel_HEX
|
|||
This is a python 3 conversion of the code created by David Braam for the Cura project.
|
||||
"""
|
||||
import io
|
||||
from UM.Logger import Logger
|
||||
|
||||
def readHex(filename):
|
||||
"""
|
||||
|
@ -41,6 +42,6 @@ def readHex(filename):
|
|||
elif rec_type == 2: #Extended Segment Address Record
|
||||
extra_addr = int(line[9:13], 16) * 16
|
||||
else:
|
||||
print(rec_type, rec_len, addr, check_sum, line)
|
||||
Logger.log("d", "%s, %s, %s, %s, %s", rec_type, rec_len, addr, check_sum, line)
|
||||
f.close()
|
||||
return data
|
||||
|
|
|
@ -8,6 +8,7 @@ The ISP AVR programmer can load firmware into AVR chips. Which are commonly used
|
|||
"""
|
||||
|
||||
from . import chipDB
|
||||
from UM.Logger import Logger
|
||||
|
||||
class IspBase():
|
||||
"""
|
||||
|
@ -22,11 +23,11 @@ class IspBase():
|
|||
raise IspError("Chip with signature: " + str(self.getSignature()) + "not found")
|
||||
self.chipErase()
|
||||
|
||||
print("Flashing %i bytes" % len(flash_data))
|
||||
Logger.log("d", "Flashing %i bytes", len(flash_data))
|
||||
self.writeFlash(flash_data)
|
||||
print("Verifying %i bytes" % len(flash_data))
|
||||
Logger.log("d", "Verifying %i bytes", len(flash_data))
|
||||
self.verifyFlash(flash_data)
|
||||
print("Completed")
|
||||
Logger.log("d", "Completed")
|
||||
|
||||
def getSignature(self):
|
||||
"""
|
||||
|
|
|
@ -3,7 +3,6 @@ STK500v2 protocol implementation for programming AVR chips.
|
|||
The STK500v2 protocol is used by the ArduinoMega2560 and a few other Arduino platforms to load firmware.
|
||||
This is a python 3 conversion of the code created by David Braam for the Cura project.
|
||||
"""
|
||||
import os
|
||||
import struct
|
||||
import sys
|
||||
import time
|
||||
|
@ -11,6 +10,7 @@ import time
|
|||
from serial import Serial
|
||||
from serial import SerialException
|
||||
from serial import SerialTimeoutException
|
||||
from UM.Logger import Logger
|
||||
|
||||
from . import ispBase, intelHex
|
||||
|
||||
|
@ -27,7 +27,7 @@ class Stk500v2(ispBase.IspBase):
|
|||
self.close()
|
||||
try:
|
||||
self.serial = Serial(str(port), speed, timeout=1, writeTimeout=10000)
|
||||
except SerialException as e:
|
||||
except SerialException:
|
||||
raise ispBase.IspError("Failed to open serial port")
|
||||
except:
|
||||
raise ispBase.IspError("Unexpected error while connecting to serial port:" + port + ":" + str(sys.exc_info()[0]))
|
||||
|
@ -84,14 +84,14 @@ class Stk500v2(ispBase.IspBase):
|
|||
#Set load addr to 0, in case we have more then 64k flash we need to enable the address extension
|
||||
page_size = self.chip["pageSize"] * 2
|
||||
flash_size = page_size * self.chip["pageCount"]
|
||||
print("Writing flash")
|
||||
Logger.log("d", "Writing flash")
|
||||
if flash_size > 0xFFFF:
|
||||
self.sendMessage([0x06, 0x80, 0x00, 0x00, 0x00])
|
||||
else:
|
||||
self.sendMessage([0x06, 0x00, 0x00, 0x00, 0x00])
|
||||
load_count = (len(flash_data) + page_size - 1) / page_size
|
||||
for i in range(0, int(load_count)):
|
||||
recv = self.sendMessage([0x13, page_size >> 8, page_size & 0xFF, 0xc1, 0x0a, 0x40, 0x4c, 0x20, 0x00, 0x00] + flash_data[(i * page_size):(i * page_size + page_size)])
|
||||
self.sendMessage([0x13, page_size >> 8, page_size & 0xFF, 0xc1, 0x0a, 0x40, 0x4c, 0x20, 0x00, 0x00] + flash_data[(i * page_size):(i * page_size + page_size)])
|
||||
if self.progress_callback is not None:
|
||||
if self._has_checksum:
|
||||
self.progress_callback(i + 1, load_count)
|
||||
|
@ -151,7 +151,6 @@ class Stk500v2(ispBase.IspBase):
|
|||
raise ispBase.IspError("Timeout")
|
||||
b = struct.unpack(">B", s)[0]
|
||||
checksum ^= b
|
||||
#print(hex(b))
|
||||
if state == "Start":
|
||||
if b == 0x1B:
|
||||
state = "GetSeq"
|
||||
|
@ -183,11 +182,11 @@ class Stk500v2(ispBase.IspBase):
|
|||
def portList():
|
||||
ret = []
|
||||
import _winreg
|
||||
key=_winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,"HARDWARE\\DEVICEMAP\\SERIALCOMM")
|
||||
key=_winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,"HARDWARE\\DEVICEMAP\\SERIALCOMM") #@UndefinedVariable
|
||||
i=0
|
||||
while True:
|
||||
try:
|
||||
values = _winreg.EnumValue(key, i)
|
||||
values = _winreg.EnumValue(key, i) #@UndefinedVariable
|
||||
except:
|
||||
return ret
|
||||
if "USBSER" in values[0]:
|
||||
|
@ -206,7 +205,7 @@ def main():
|
|||
""" Entry point to call the stk500v2 programmer from the commandline. """
|
||||
import threading
|
||||
if sys.argv[1] == "AUTO":
|
||||
print(portList())
|
||||
Logger.log("d", "portList(): ", repr(portList()))
|
||||
for port in portList():
|
||||
threading.Thread(target=runProgrammer, args=(port,sys.argv[2])).start()
|
||||
time.sleep(5)
|
||||
|
|
|
@ -111,7 +111,7 @@ class MachineInstance:
|
|||
user_profile_file = os.path.join(user_storage, urllib.parse.quote_plus(self._name) + "_current_settings.inst.cfg")
|
||||
if not os.path.exists(user_storage):
|
||||
os.makedirs(user_storage)
|
||||
with open(user_profile_file, "w") as file_handle:
|
||||
with open(user_profile_file, "w", encoding = "utf-8") as file_handle:
|
||||
user_profile.write(file_handle)
|
||||
version_upgrade_manager.upgradeExtraFile(user_storage, urllib.parse.quote_plus(self._name), "user")
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ import configparser #To read config files.
|
|||
import io #To write config files to strings as if they were files.
|
||||
|
||||
import UM.VersionUpgrade
|
||||
from UM.Logger import Logger
|
||||
|
||||
## Creates a new profile instance by parsing a serialised profile in version 1
|
||||
# of the file format.
|
||||
|
|
|
@ -23,6 +23,10 @@ fragment =
|
|||
uniform vec4 u_outline_color;
|
||||
uniform vec4 u_error_color;
|
||||
|
||||
const vec3 x_axis = vec3(1.0, 0.0, 0.0);
|
||||
const vec3 y_axis = vec3(0.0, 1.0, 0.0);
|
||||
const vec3 z_axis = vec3(0.0, 0.0, 1.0);
|
||||
|
||||
varying vec2 v_uvs;
|
||||
|
||||
float kernel[9];
|
||||
|
@ -51,8 +55,16 @@ fragment =
|
|||
sum += color * (kernel[i] / u_outline_strength);
|
||||
}
|
||||
|
||||
vec4 layer1 = texture2D(u_layer1, v_uvs);
|
||||
if((layer1.rgb == x_axis || layer1.rgb == y_axis || layer1.rgb == z_axis))
|
||||
{
|
||||
gl_FragColor = result;
|
||||
}
|
||||
else
|
||||
{
|
||||
gl_FragColor = mix(result, vec4(abs(sum.a)) * u_outline_color, abs(sum.a));
|
||||
}
|
||||
}
|
||||
|
||||
[defaults]
|
||||
u_layer0 = 0
|
||||
|
|
|
@ -165,7 +165,7 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer):
|
|||
machine_container_map = {}
|
||||
machine_nozzle_map = {}
|
||||
|
||||
all_containers = registry.findInstanceContainers(GUID = self.getMetaDataEntry("GUID"))
|
||||
all_containers = registry.findInstanceContainers(GUID = self.getMetaDataEntry("GUID"), base_file = self._id)
|
||||
for container in all_containers:
|
||||
definition_id = container.getDefinition().id
|
||||
if definition_id == "fdmprinter":
|
||||
|
@ -209,7 +209,17 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer):
|
|||
if not variant_containers:
|
||||
continue
|
||||
|
||||
builder.start("hotend", { "id": variant_containers[0].getName() })
|
||||
builder.start("hotend", {"id": variant_containers[0].getName()})
|
||||
|
||||
# Compatible is a special case, as it's added as a meta data entry (instead of an instance).
|
||||
compatible = hotend.getMetaDataEntry("compatible")
|
||||
if compatible is not None:
|
||||
builder.start("setting", {"key": "hardware compatible"})
|
||||
if compatible:
|
||||
builder.data("yes")
|
||||
else:
|
||||
builder.data("no")
|
||||
builder.end("setting")
|
||||
|
||||
for instance in hotend.findInstances():
|
||||
if container.getInstance(instance.definition.key) and container.getProperty(instance.definition.key, "value") == instance.value:
|
||||
|
@ -411,6 +421,8 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer):
|
|||
else:
|
||||
Logger.log("d", "Unsupported material setting %s", key)
|
||||
|
||||
self.addMetaDataEntry("compatible", global_compatibility)
|
||||
|
||||
self._dirty = False
|
||||
|
||||
machines = data.iterfind("./um:settings/um:machine", self.__namespaces)
|
||||
|
@ -447,6 +459,8 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer):
|
|||
new_material.setName(self.getName())
|
||||
new_material.setMetaData(copy.deepcopy(self.getMetaData()))
|
||||
new_material.setDefinition(definition)
|
||||
# Don't use setMetadata, as that overrides it for all materials with same base file
|
||||
new_material.getMetaData()["compatible"] = machine_compatibility
|
||||
|
||||
for key, value in global_setting_values.items():
|
||||
new_material.setProperty(key, "value", value, definition)
|
||||
|
@ -492,7 +506,8 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer):
|
|||
new_hotend_material.setMetaData(copy.deepcopy(self.getMetaData()))
|
||||
new_hotend_material.setDefinition(definition)
|
||||
new_hotend_material.addMetaDataEntry("variant", variant_containers[0].id)
|
||||
new_hotend_material.addMetaDataEntry("compatible", hotend_compatibility)
|
||||
# Don't use setMetadata, as that overrides it for all materials with same base file
|
||||
new_hotend_material.getMetaData()["compatible"] = hotend_compatibility
|
||||
|
||||
for key, value in global_setting_values.items():
|
||||
new_hotend_material.setProperty(key, "value", value, definition)
|
||||
|
@ -506,14 +521,6 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer):
|
|||
new_hotend_material._dirty = False
|
||||
UM.Settings.ContainerRegistry.getInstance().addContainer(new_hotend_material)
|
||||
|
||||
if not global_compatibility:
|
||||
# Change the type of this container so it is not shown as an option in menus.
|
||||
# This uses InstanceContainer.setMetaDataEntry because otherwise all containers that
|
||||
# share this basefile are also updated.
|
||||
dirty = self.isDirty()
|
||||
super().setMetaDataEntry("type", "incompatible_material")
|
||||
super().setDirty(dirty) # reset dirty flag after setMetaDataEntry
|
||||
|
||||
def _addSettingElement(self, builder, instance):
|
||||
try:
|
||||
key = UM.Dictionary.findKey(self.__material_property_setting_map, instance.definition.key)
|
||||
|
|
40
resources/definitions/bfb.def.json
Normal file
40
resources/definitions/bfb.def.json
Normal file
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"id": "bfb",
|
||||
"name": "BFB",
|
||||
"version": 2,
|
||||
"inherits": "fdmprinter",
|
||||
"metadata": {
|
||||
"visible": true,
|
||||
"author": "Ultimaker",
|
||||
"manufacturer": "BFB",
|
||||
"category": "Other",
|
||||
"file_formats": "text/x-gcode",
|
||||
"platform_offset": [ 0, 0, 0]
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"speed_topbottom": { "default_value": 40 },
|
||||
"speed_print": { "default_value": 40 },
|
||||
"machine_extruder_count": { "default_value": 1 },
|
||||
"prime_tower_size": { "default_value": 7.745966692414834 },
|
||||
"machine_name": { "default_value": "BFB_Test" },
|
||||
"machine_heated_bed": { "default_value": false },
|
||||
"machine_nozzle_size": { "default_value": 0.5 },
|
||||
"speed_layer_0": { "default_value": 25 },
|
||||
"machine_width": { "default_value": 275 },
|
||||
"machine_gcode_flavor": { "default_value": "BFB" },
|
||||
"machine_depth": { "default_value": 265 },
|
||||
"speed_infill": { "default_value": 30 },
|
||||
"material_diameter": { "default_value": 1.7 },
|
||||
"machine_center_is_zero": { "default_value": true },
|
||||
"machine_height": { "default_value": 240 },
|
||||
"layer_height": { "default_value": 0.25 },
|
||||
"material_print_temperature": { "default_value": 200 },
|
||||
"retraction_amount": { "default_value": 0.05 },
|
||||
"speed_wall_0": { "default_value": 25 },
|
||||
"speed_travel": { "default_value": 50 },
|
||||
"infill_sparse_density": { "default_value": 10 },
|
||||
"layer_height_0": { "default_value": 0.5 },
|
||||
"speed_wall_x": { "default_value": 20 }
|
||||
}
|
||||
}
|
35
resources/definitions/deltabot.def.json
Normal file
35
resources/definitions/deltabot.def.json
Normal file
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"id": "deltabot",
|
||||
"name": "DeltaBot",
|
||||
"version": 2,
|
||||
"inherits": "fdmprinter",
|
||||
"metadata": {
|
||||
"visible": true,
|
||||
"author": "Ultimaker",
|
||||
"manufacturer": "Danny Lu",
|
||||
"category": "Other",
|
||||
"file_formats": "text/x-gcode",
|
||||
"platform_offset": [ 0, 0, 0]
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"speed_travel": { "default_value": 150 },
|
||||
"prime_tower_size": { "default_value": 8.660254037844387 },
|
||||
"infill_sparse_density": { "default_value": 10 },
|
||||
"speed_wall_x": { "default_value": 30 },
|
||||
"speed_wall_0": { "default_value": 30 },
|
||||
"speed_topbottom": { "default_value": 30 },
|
||||
"layer_height": { "default_value": 0.2 },
|
||||
"machine_nozzle_size": { "default_value": 0.5 },
|
||||
"speed_print": { "default_value": 30 },
|
||||
"speed_infill": { "default_value": 30 },
|
||||
"machine_extruder_count": { "default_value": 1 },
|
||||
"machine_heated_bed": { "default_value": true },
|
||||
"machine_center_is_zero": { "default_value": true },
|
||||
"machine_height": { "default_value": 150 },
|
||||
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
|
||||
"machine_depth": { "default_value": 150 },
|
||||
"machine_width": { "default_value": 150 },
|
||||
"machine_name": { "default_value": "DeltaBot style" }
|
||||
}
|
||||
}
|
|
@ -169,7 +169,7 @@
|
|||
},
|
||||
"machine_extruder_count":
|
||||
{
|
||||
"label": "Number extruders",
|
||||
"label": "Number of Extruders",
|
||||
"description": "Number of extruder trains. An extruder train is the combination of a feeder, bowden tube, and nozzle.",
|
||||
"default_value": 1,
|
||||
"minimum_value": "1",
|
||||
|
@ -283,6 +283,18 @@
|
|||
"settable_per_extruder": false,
|
||||
"settable_per_meshgroup": false
|
||||
},
|
||||
"nozzle_disallowed_areas":
|
||||
{
|
||||
"label": "Nozzle Disallowed Areas",
|
||||
"description": "A list of polygons with areas the nozzle is not allowed to enter.",
|
||||
"type": "polygons",
|
||||
"default_value":
|
||||
[
|
||||
],
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false,
|
||||
"settable_per_meshgroup": false
|
||||
},
|
||||
"machine_head_polygon":
|
||||
{
|
||||
"label": "Machine head polygon",
|
||||
|
@ -756,6 +768,18 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"wall_0_wipe_dist":
|
||||
{
|
||||
"label": "Outer Wall Wipe Distance",
|
||||
"description": "Distance of a travel move inserted after the outer wall, to hide the Z seam better.",
|
||||
"unit": "mm",
|
||||
"type": "float",
|
||||
"default_value": 0.2,
|
||||
"value": "machine_nozzle_size / 2",
|
||||
"minimum_value": "0",
|
||||
"maximum_value_warning": "machine_nozzle_size",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"top_bottom_thickness":
|
||||
{
|
||||
"label": "Top/Bottom Thickness",
|
||||
|
@ -897,6 +921,17 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"fill_perimeter_gaps": {
|
||||
"label": "Fill Gaps Between Walls",
|
||||
"description": "Fills the gaps between walls where no walls fit.",
|
||||
"type": "enum",
|
||||
"options": {
|
||||
"nowhere": "Nowhere",
|
||||
"everywhere": "Everywhere"
|
||||
},
|
||||
"default_value": "everywhere",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"xy_offset":
|
||||
{
|
||||
"label": "Horizontal Expansion",
|
||||
|
@ -979,6 +1014,7 @@
|
|||
"cubic": "Cubic",
|
||||
"tetrahedral": "Tetrahedral",
|
||||
"concentric": "Concentric",
|
||||
"concentric_3d": "Concentric 3D",
|
||||
"zigzag": "Zig Zag"
|
||||
},
|
||||
"default_value": "grid",
|
||||
|
@ -1135,7 +1171,50 @@
|
|||
"minimum_value": "-273.15",
|
||||
"minimum_value_warning": "0",
|
||||
"maximum_value_warning": "260",
|
||||
"enabled": "not (material_flow_dependent_temperature)",
|
||||
"enabled": "not (material_flow_dependent_temperature) and machine_gcode_flavor != \"UltiGCode\"",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
},
|
||||
"material_print_temperature_layer_0":
|
||||
{
|
||||
"label": "Printing Temperature Initial Layer",
|
||||
"description": "The temperature used for printing the first layer. Set at 0 to disable special handling of the initial layer.",
|
||||
"unit": "°C",
|
||||
"type": "float",
|
||||
"default_value": 215,
|
||||
"value": "material_print_temperature + 5",
|
||||
"minimum_value": "-273.15",
|
||||
"minimum_value_warning": "0",
|
||||
"maximum_value_warning": "260",
|
||||
"enabled": "machine_gcode_flavor != \"UltiGCode\"",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
},
|
||||
"material_initial_print_temperature":
|
||||
{
|
||||
"label": "Initial Printing Temperature",
|
||||
"description": "The minimal temperature while heating up to the Printing Temperature at which printing can already start.",
|
||||
"unit": "°C",
|
||||
"type": "float",
|
||||
"default_value": 190,
|
||||
"minimum_value": "-273.15",
|
||||
"minimum_value_warning": "material_standby_temperature",
|
||||
"maximum_value_warning": "material_print_temperature",
|
||||
"enabled": "machine_gcode_flavor != \"UltiGCode\"",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
},
|
||||
"material_final_print_temperature":
|
||||
{
|
||||
"label": "Final Printing Temperature",
|
||||
"description": "The temperature to which to already start cooling down just before the end of printing.",
|
||||
"unit": "°C",
|
||||
"type": "float",
|
||||
"default_value": 180,
|
||||
"minimum_value": "-273.15",
|
||||
"minimum_value_warning": "material_standby_temperature",
|
||||
"maximum_value_warning": "material_print_temperature",
|
||||
"enabled": "machine_gcode_flavor != \"UltiGCode\"",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
},
|
||||
|
@ -1160,6 +1239,7 @@
|
|||
"default_value": 0.5,
|
||||
"minimum_value": "0",
|
||||
"maximum_value_warning": "10.0",
|
||||
"maximum_value": "machine_nozzle_heat_up_speed",
|
||||
"enabled": "False",
|
||||
"comments": "old enabled function: material_flow_dependent_temperature or machine_extruder_count > 1",
|
||||
"settable_per_mesh": false,
|
||||
|
@ -1176,7 +1256,23 @@
|
|||
"minimum_value": "-273.15",
|
||||
"minimum_value_warning": "0",
|
||||
"maximum_value_warning": "260",
|
||||
"enabled": "machine_heated_bed",
|
||||
"enabled": "machine_heated_bed and machine_gcode_flavor != \"UltiGCode\"",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false,
|
||||
"settable_per_meshgroup": false
|
||||
},
|
||||
"material_bed_temperature_layer_0":
|
||||
{
|
||||
"label": "Build Plate Temperature Initial Layer",
|
||||
"description": "The temperature used for the heated build plate at the first layer.",
|
||||
"unit": "°C",
|
||||
"type": "float",
|
||||
"resolve": "max(extruderValues('material_bed_temperature_layer_0'))",
|
||||
"default_value": 60,
|
||||
"minimum_value": "-273.15",
|
||||
"minimum_value_warning": "0",
|
||||
"maximum_value_warning": "260",
|
||||
"enabled": "machine_heated_bed and machine_gcode_flavor != \"UltiGCode\"",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false,
|
||||
"settable_per_meshgroup": false
|
||||
|
@ -1191,6 +1287,7 @@
|
|||
"minimum_value": "0.0001",
|
||||
"minimum_value_warning": "0.4",
|
||||
"maximum_value_warning": "3.5",
|
||||
"enabled": "machine_gcode_flavor != \"UltiGCode\"",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
},
|
||||
|
@ -1204,6 +1301,7 @@
|
|||
"minimum_value": "5",
|
||||
"minimum_value_warning": "50",
|
||||
"maximum_value_warning": "150",
|
||||
"enabled": "machine_gcode_flavor != \"UltiGCode\"",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"retraction_enable":
|
||||
|
@ -1215,6 +1313,14 @@
|
|||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
},
|
||||
"retract_at_layer_change":{
|
||||
"label": "Retract at Layer Change",
|
||||
"description": "Retract the filament when the nozzle is moving to the next layer.",
|
||||
"type": "bool",
|
||||
"default_value": false,
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
},
|
||||
"retraction_amount":
|
||||
{
|
||||
"label": "Retraction Distance",
|
||||
|
@ -1224,7 +1330,7 @@
|
|||
"default_value": 6.5,
|
||||
"minimum_value_warning": "-0.0001",
|
||||
"maximum_value_warning": "10.0",
|
||||
"enabled": "retraction_enable",
|
||||
"enabled": "retraction_enable and machine_gcode_flavor != \"UltiGCode\"",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
},
|
||||
|
@ -1239,7 +1345,7 @@
|
|||
"minimum_value_warning": "1",
|
||||
"maximum_value": "machine_max_feedrate_e",
|
||||
"maximum_value_warning": "70",
|
||||
"enabled": "retraction_enable",
|
||||
"enabled": "retraction_enable and machine_gcode_flavor != \"UltiGCode\"",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true,
|
||||
"children":
|
||||
|
@ -1255,7 +1361,7 @@
|
|||
"maximum_value": "machine_max_feedrate_e",
|
||||
"minimum_value_warning": "1",
|
||||
"maximum_value_warning": "70",
|
||||
"enabled": "retraction_enable",
|
||||
"enabled": "retraction_enable and machine_gcode_flavor != \"UltiGCode\"",
|
||||
"value": "retraction_speed",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
|
@ -1271,7 +1377,7 @@
|
|||
"maximum_value": "machine_max_feedrate_e",
|
||||
"minimum_value_warning": "1",
|
||||
"maximum_value_warning": "70",
|
||||
"enabled": "retraction_enable",
|
||||
"enabled": "retraction_enable and machine_gcode_flavor != \"UltiGCode\"",
|
||||
"value": "retraction_speed",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
|
@ -1331,39 +1437,6 @@
|
|||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
},
|
||||
"retraction_hop_enabled":
|
||||
{
|
||||
"label": "Z Hop when Retracted",
|
||||
"description": "Whenever a retraction is done, the build plate is lowered to create clearance between the nozzle and the print. It prevents the nozzle from hitting the print during travel moves, reducing the chance to knock the print from the build plate.",
|
||||
"type": "bool",
|
||||
"default_value": false,
|
||||
"enabled": "retraction_enable",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
},
|
||||
"retraction_hop_only_when_collides":
|
||||
{
|
||||
"label": "Z Hop Only Over Printed Parts",
|
||||
"description": "Only perform a Z Hop when moving over printed parts which cannot be avoided by horizontal motion by Avoid Printed Parts when Traveling.",
|
||||
"type": "bool",
|
||||
"default_value": false,
|
||||
"enabled": "retraction_enable and retraction_hop_enabled and travel_avoid_other_parts",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
},
|
||||
"retraction_hop":
|
||||
{
|
||||
"label": "Z Hop Height",
|
||||
"description": "The height difference when performing a Z Hop.",
|
||||
"unit": "mm",
|
||||
"type": "float",
|
||||
"default_value": 1,
|
||||
"minimum_value_warning": "0.75 * machine_nozzle_size",
|
||||
"maximum_value_warning": "10",
|
||||
"enabled": "retraction_enable and retraction_hop_enabled",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
},
|
||||
"material_standby_temperature":
|
||||
{
|
||||
"label": "Standby Temperature",
|
||||
|
@ -1374,6 +1447,7 @@
|
|||
"minimum_value": "-273.15",
|
||||
"minimum_value_warning": "0",
|
||||
"maximum_value_warning": "260",
|
||||
"enabled": "machine_extruder_count > 1 and machine_gcode_flavor != \"UltiGCode\"",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
},
|
||||
|
@ -1440,16 +1514,6 @@
|
|||
"settable_per_extruder": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"retraction_hop_after_extruder_switch":
|
||||
{
|
||||
"label": "Z Hop After Extruder Switch",
|
||||
"description": "After the machine switched from one extruder to the other, the build plate is lowered to create clearance between the nozzle and the print. This prevents the nozzle from leaving oozed material on the outside of a print.",
|
||||
"type": "bool",
|
||||
"default_value": true,
|
||||
"enabled": "retraction_hop_enabled",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -2222,7 +2286,7 @@
|
|||
"retraction_combing":
|
||||
{
|
||||
"label": "Combing Mode",
|
||||
"description": "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for 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 combing over top/bottom skin areas by combing within the infill only. It is also possible to avoid combing over top/bottom skin areas by combing within the infill only.",
|
||||
"description": "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for 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 combing over top/bottom skin areas by combing within the infill only.",
|
||||
"type": "enum",
|
||||
"options":
|
||||
{
|
||||
|
@ -2259,6 +2323,81 @@
|
|||
"enabled": "resolveOrValue('retraction_combing') != 'off' and travel_avoid_other_parts",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
},
|
||||
"start_layers_at_same_position":
|
||||
{
|
||||
"label": "Start Layers Near Same Point",
|
||||
"description": "Start printing the objects in each layer 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.",
|
||||
"type": "bool",
|
||||
"default_value": false,
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false,
|
||||
"settable_per_meshgroup": true
|
||||
},
|
||||
"layer_start_x":
|
||||
{
|
||||
"label": "Layer Start X",
|
||||
"description": "The X coordinate of the position near where to start printing objects each layer.",
|
||||
"unit": "mm",
|
||||
"type": "float",
|
||||
"default_value": 0.0,
|
||||
"minimum_value": "0",
|
||||
"enabled": "start_layers_at_same_position",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false,
|
||||
"settable_per_meshgroup": true
|
||||
},
|
||||
"layer_start_y":
|
||||
{
|
||||
"label": "Layer Start Y",
|
||||
"description": "The Y coordinate of the position near where to start printing objects each layer.",
|
||||
"unit": "mm",
|
||||
"type": "float",
|
||||
"default_value": 0.0,
|
||||
"minimum_value": "0",
|
||||
"enabled": "start_layers_at_same_position",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false,
|
||||
"settable_per_meshgroup": true
|
||||
},
|
||||
"retraction_hop_enabled": {
|
||||
"label": "Z Hop when Retracted",
|
||||
"description": "Whenever a retraction is done, the build plate is lowered to create clearance between the nozzle and the print. It prevents the nozzle from hitting the print during travel moves, reducing the chance to knock the print from the build plate.",
|
||||
"type": "bool",
|
||||
"default_value": false,
|
||||
"enabled": "retraction_enable",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
},
|
||||
"retraction_hop_only_when_collides": {
|
||||
"label": "Z Hop Only Over Printed Parts",
|
||||
"description": "Only perform a Z Hop when moving over printed parts which cannot be avoided by horizontal motion by Avoid Printed Parts when Traveling.",
|
||||
"type": "bool",
|
||||
"default_value": false,
|
||||
"enabled": "retraction_enable and retraction_hop_enabled and travel_avoid_other_parts",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
},
|
||||
"retraction_hop": {
|
||||
"label": "Z Hop Height",
|
||||
"description": "The height difference when performing a Z Hop.",
|
||||
"unit": "mm",
|
||||
"type": "float",
|
||||
"default_value": 1,
|
||||
"minimum_value_warning": "0.75 * machine_nozzle_size",
|
||||
"maximum_value_warning": "10",
|
||||
"enabled": "retraction_enable and retraction_hop_enabled",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
},
|
||||
"retraction_hop_after_extruder_switch": {
|
||||
"label": "Z Hop After Extruder Switch",
|
||||
"description": "After the machine switched from one extruder to the other, the build plate is lowered to create clearance between the nozzle and the print. This prevents the nozzle from leaving oozed material on the outside of a print.",
|
||||
"type": "bool",
|
||||
"default_value": true,
|
||||
"enabled": "retraction_hop_enabled and machine_extruder_count > 1",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -2294,6 +2433,20 @@
|
|||
"settable_per_extruder": true,
|
||||
"children":
|
||||
{
|
||||
"cool_fan_speed_0":
|
||||
{
|
||||
"label": "Initial Fan Speed",
|
||||
"description": "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.",
|
||||
"unit": "%",
|
||||
"type": "float",
|
||||
"minimum_value": "0",
|
||||
"maximum_value": "100",
|
||||
"value": "cool_fan_speed",
|
||||
"default_value": 100,
|
||||
"enabled": "cool_fan_enabled",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
},
|
||||
"cool_fan_speed_min":
|
||||
{
|
||||
"label": "Regular Fan Speed",
|
||||
|
@ -2339,7 +2492,7 @@
|
|||
"cool_fan_full_at_height":
|
||||
{
|
||||
"label": "Regular Fan Speed at Height",
|
||||
"description": "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.",
|
||||
"description": "The height at which the fans spin on regular fan speed. At the layers below the fan speed gradually increases from Initial Fan Speed to Regular Fan Speed.",
|
||||
"unit": "mm",
|
||||
"type": "float",
|
||||
"default_value": 0.5,
|
||||
|
@ -2367,7 +2520,7 @@
|
|||
"cool_min_layer_time":
|
||||
{
|
||||
"label": "Minimum Layer Time",
|
||||
"description": "The minimum time spent in a layer. This forces the printer to slow down, to at least spend the time set here in one layer. This allows the printed material to cool down properly before printing the next layer.",
|
||||
"description": "The minimum time spent in a layer. This forces the printer to slow down, to at least spend the time set here in one layer. This allows the printed material to cool down properly before printing the next layer. Layers may still take shorter than the minimal layer time if Lift Head is disabled and if the Minimum Speed would otherwise be violated.",
|
||||
"unit": "s",
|
||||
"type": "float",
|
||||
"default_value": 5,
|
||||
|
@ -2416,6 +2569,51 @@
|
|||
"settable_per_mesh": true,
|
||||
"settable_per_extruder": false
|
||||
},
|
||||
"support_extruder_nr":
|
||||
{
|
||||
"label": "Support Extruder",
|
||||
"description": "The extruder train to use for printing the support. This is used in multi-extrusion.",
|
||||
"type": "extruder",
|
||||
"default_value": "0",
|
||||
"enabled": "support_enable and machine_extruder_count > 1",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false,
|
||||
"children": {
|
||||
"support_infill_extruder_nr":
|
||||
{
|
||||
"label": "Support Infill Extruder",
|
||||
"description": "The extruder train to use for printing the infill of the support. This is used in multi-extrusion.",
|
||||
"type": "extruder",
|
||||
"default_value": "0",
|
||||
"value": "support_extruder_nr",
|
||||
"enabled": "support_enable and machine_extruder_count > 1",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
},
|
||||
"support_extruder_nr_layer_0":
|
||||
{
|
||||
"label": "First Layer Support Extruder",
|
||||
"description": "The extruder train to use for printing the first layer of support infill. This is used in multi-extrusion.",
|
||||
"type": "extruder",
|
||||
"default_value": "0",
|
||||
"value": "support_extruder_nr",
|
||||
"enabled": "support_enable and machine_extruder_count > 1",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
},
|
||||
"support_interface_extruder_nr":
|
||||
{
|
||||
"label": "Support Interface Extruder",
|
||||
"description": "The extruder train to use for printing the roofs and bottoms of the support. This is used in multi-extrusion.",
|
||||
"type": "extruder",
|
||||
"default_value": "0",
|
||||
"value": "support_extruder_nr",
|
||||
"enabled": "support_enable and machine_extruder_count > 1",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"support_type":
|
||||
{
|
||||
"label": "Support Placement",
|
||||
|
@ -2457,6 +2655,7 @@
|
|||
"grid": "Grid",
|
||||
"triangles": "Triangles",
|
||||
"concentric": "Concentric",
|
||||
"concentric_3d": "Concentric 3D",
|
||||
"zigzag": "Zig Zag"
|
||||
},
|
||||
"default_value": "zigzag",
|
||||
|
@ -2726,7 +2925,7 @@
|
|||
"type": "float",
|
||||
"default_value": 0.4,
|
||||
"minimum_value": "0",
|
||||
"minimum_value_warning": "support_interface_line_width",
|
||||
"minimum_value_warning": "support_interface_line_width - 0.0001",
|
||||
"value": "0 if support_interface_density == 0 else (support_interface_line_width * 100) / support_interface_density * (2 if support_interface_pattern == 'grid' else (3 if support_interface_pattern == 'triangles' else 1))",
|
||||
"limit_to_extruder": "support_interface_extruder_nr",
|
||||
"enabled": "extruderValue(support_interface_extruder_nr, 'support_interface_enable') and support_enable",
|
||||
|
@ -2746,6 +2945,7 @@
|
|||
"grid": "Grid",
|
||||
"triangles": "Triangles",
|
||||
"concentric": "Concentric",
|
||||
"concentric_3d": "Concentric 3D",
|
||||
"zigzag": "Zig Zag"
|
||||
},
|
||||
"default_value": "concentric",
|
||||
|
@ -2851,13 +3051,24 @@
|
|||
{
|
||||
"skirt": "Skirt",
|
||||
"brim": "Brim",
|
||||
"raft": "Raft"
|
||||
"raft": "Raft",
|
||||
"none": "None"
|
||||
},
|
||||
"default_value": "brim",
|
||||
"resolve": "'raft' if 'raft' in extruderValues('adhesion_type') else ('brim' if 'brim' in extruderValues('adhesion_type') else 'skirt')",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
},
|
||||
"adhesion_extruder_nr":
|
||||
{
|
||||
"label": "Build Plate Adhesion Extruder",
|
||||
"description": "The extruder train to use for printing the skirt/brim/raft. This is used in multi-extrusion.",
|
||||
"type": "extruder",
|
||||
"default_value": "0",
|
||||
"enabled": "machine_extruder_count > 1 and resolveOrValue('adhesion_type') != 'none'",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
},
|
||||
"skirt_line_count":
|
||||
{
|
||||
"label": "Skirt Line Count",
|
||||
|
@ -3407,62 +3618,6 @@
|
|||
"enabled": "machine_extruder_count > 1",
|
||||
"children":
|
||||
{
|
||||
"adhesion_extruder_nr":
|
||||
{
|
||||
"label": "Build Plate Adhesion Extruder",
|
||||
"description": "The extruder train to use for printing the skirt/brim/raft. This is used in multi-extrusion.",
|
||||
"type": "extruder",
|
||||
"default_value": "0",
|
||||
"enabled": "machine_extruder_count > 1",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
},
|
||||
"support_extruder_nr":
|
||||
{
|
||||
"label": "Support Extruder",
|
||||
"description": "The extruder train to use for printing the support. This is used in multi-extrusion.",
|
||||
"type": "extruder",
|
||||
"default_value": "0",
|
||||
"enabled": "support_enable and machine_extruder_count > 1",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false,
|
||||
"children":
|
||||
{
|
||||
"support_infill_extruder_nr":
|
||||
{
|
||||
"label": "Support Infill Extruder",
|
||||
"description": "The extruder train to use for printing the infill of the support. This is used in multi-extrusion.",
|
||||
"type": "extruder",
|
||||
"default_value": "0",
|
||||
"value": "support_extruder_nr",
|
||||
"enabled": "support_enable and machine_extruder_count > 1",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
},
|
||||
"support_extruder_nr_layer_0":
|
||||
{
|
||||
"label": "First Layer Support Extruder",
|
||||
"description": "The extruder train to use for printing the first layer of support infill. This is used in multi-extrusion.",
|
||||
"type": "extruder",
|
||||
"default_value": "0",
|
||||
"value": "support_extruder_nr",
|
||||
"enabled": "support_enable and machine_extruder_count > 1",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
},
|
||||
"support_interface_extruder_nr":
|
||||
{
|
||||
"label": "Support Interface Extruder",
|
||||
"description": "The extruder train to use for printing the roofs and bottoms of the support. This is used in multi-extrusion.",
|
||||
"type": "extruder",
|
||||
"default_value": "0",
|
||||
"value": "support_extruder_nr",
|
||||
"enabled": "support_enable and machine_extruder_count > 1",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"prime_tower_enable":
|
||||
{
|
||||
"label": "Enable Prime Tower",
|
||||
|
@ -3636,6 +3791,28 @@
|
|||
"type": "bool",
|
||||
"default_value": false,
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"carve_multiple_volumes":
|
||||
{
|
||||
"label": "Remove Mesh Intersection",
|
||||
"description": "Remove areas where multiple objects are overlapping with each other. This may be used if merged dual material objects overlap with each other.",
|
||||
"type": "bool",
|
||||
"default_value": true,
|
||||
"value": "machine_extruder_count > 1",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false,
|
||||
"settable_per_meshgroup": true
|
||||
},
|
||||
"alternate_carve_order":
|
||||
{
|
||||
"label": "Alternate Mesh Removal",
|
||||
"description": "With every layer switch to which model the intersecting volumes will belong, so that the overlapping volumes become interwoven.",
|
||||
"type": "bool",
|
||||
"default_value": true,
|
||||
"enabled": "carve_multiple_volumes",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false,
|
||||
"settable_per_meshgroup": true
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -3658,6 +3835,7 @@
|
|||
"one_at_a_time": "One at a Time"
|
||||
},
|
||||
"default_value": "all_at_once",
|
||||
"enabled": "machine_extruder_count == 1",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false,
|
||||
"settable_per_meshgroup": false
|
||||
|
@ -3896,6 +4074,14 @@
|
|||
"limit_to_extruder": "support_infill_extruder_nr",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"infill_hollow":
|
||||
{
|
||||
"label": "Hollow Out Objects",
|
||||
"description": "Remove all infill and make the inside of the object eligible for support.",
|
||||
"type": "bool",
|
||||
"default_value": false,
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"magic_fuzzy_skin_enabled":
|
||||
{
|
||||
"label": "Fuzzy Skin",
|
||||
|
@ -4303,6 +4489,49 @@
|
|||
"settable_per_meshgroup": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"command_line_settings": {
|
||||
"label": "Command Line Settings",
|
||||
"description": "Settings which are only used if CuraEngine isn't called from the Cura frontend.",
|
||||
"type": "category",
|
||||
"enabled": false,
|
||||
"children": {
|
||||
"center_object": {
|
||||
"description": "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.",
|
||||
"type": "bool",
|
||||
"label": "Center object",
|
||||
"default_value": false,
|
||||
"enabled": false
|
||||
},
|
||||
"mesh_position_x": {
|
||||
"description": "Offset applied to the object in the x direction.",
|
||||
"type": "float",
|
||||
"label": "Mesh position x",
|
||||
"default_value": 0,
|
||||
"enabled": false
|
||||
},
|
||||
"mesh_position_y": {
|
||||
"description": "Offset applied to the object in the y direction.",
|
||||
"type": "float",
|
||||
"label": "Mesh position y",
|
||||
"default_value": 0,
|
||||
"enabled": false
|
||||
},
|
||||
"mesh_position_z": {
|
||||
"description": "Offset applied to the object in the z direction. With this you can perform what was used to be called 'Object Sink'.",
|
||||
"type": "float",
|
||||
"label": "Mesh position z",
|
||||
"default_value": 0,
|
||||
"enabled": false
|
||||
},
|
||||
"mesh_rotation_matrix": {
|
||||
"label": "Mesh Rotation Matrix",
|
||||
"description": "Transformation matrix to be applied to the model when loading it from file.",
|
||||
"type": "str",
|
||||
"default_value": "[[1,0,0], [0,1,0], [0,0,1]]",
|
||||
"enabled": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -54,7 +54,7 @@
|
|||
"default_value": "RepRap (Marlin/Sprinter)"
|
||||
},
|
||||
"machine_start_gcode": {
|
||||
"default_value": "G28 ; Home extruder\nM107 ; Turn off fan\nG90 ; Absolute positioning\nM82 ; Extruder in absolute mode\n{IF_BED}M190 S{BED}\n{IF_EXT0}M104 T0 S{TEMP0}\n{IF_EXT0}M109 T0 S{TEMP0}\n{IF_EXT1}M104 T1 S{TEMP1}\n{IF_EXT1}M109 T1 S{TEMP1}\nG32 S3 ; auto level\nG92 E0 ; Reset extruder position"
|
||||
"default_value": "G28 ; Home extruder\nM107 ; Turn off fan\nG90 ; Absolute positioning\nM82 ; Extruder in absolute mode\nM190 S{material_bed_temperature}\nM104 T0 S{material_print_temperature}\nM109 T0 S{material_print_temperature}\nM104 T1 S{material_print_temperature}\nM109 T1 S{material_print_temperature}\nG32 S3 ; auto level\nG92 E0 ; Reset extruder position"
|
||||
},
|
||||
"machine_end_gcode": {
|
||||
"default_value": "M104 S0 ; turn off extruders\nM140 S0 ; heated bed heater off\nG91 ; relative positioning\nG1 E-2 F5000; retract 2mm\nG28 Z; move bed down\nG90 ; absolute positioning\nM84 ; disable motors"
|
||||
|
|
52
resources/definitions/julia.def.json
Normal file
52
resources/definitions/julia.def.json
Normal file
|
@ -0,0 +1,52 @@
|
|||
{
|
||||
"id": "julia",
|
||||
"name": "Julia",
|
||||
"version": 2,
|
||||
"inherits": "fdmprinter",
|
||||
"metadata": {
|
||||
"visible": true,
|
||||
"author": "Ultimaker",
|
||||
"manufacturer": "Fracktal",
|
||||
"category": "Other",
|
||||
"file_formats": "text/x-gcode",
|
||||
"platform_offset": [ 0, 0, 0]
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"machine_start_gcode": {
|
||||
"default_value": " ;Basic settings: Layer height: {layer_height} Walls: {wall_thickness} Fill: {infill_sparse_density}\n ;metric values\n M107\n G28\n G29\n G90 ;absolute positioning\n G92 E0; reset extruder distance\n G1 Z5 F300 ;move nozzle up 5mm for safe homing\n G1 X0 Y0 Z0 F5000; move nozzle to home\n M300 S600P200\n M300 S800 P200\n M190 S{material_bed_temperature} ;Uncomment to add your own bed temperature line\n M109 S{material_print_temperature} ;Uncomment to add your own temperature line\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G1 Z15.0 F{speed_travel} ;move the platform down 15mm\n G92 E0 ;zero the extruded length\n G1 F200 E3 ;extrude 3mm of feed stock\n G92 E0 ;zero the extruded length again\n G1 F{speed_travel}\n ;Put printing message on LCD screen\n M117 Printing...\n"
|
||||
},
|
||||
"machine_end_gcode": {
|
||||
"default_value": " M104 S0 ;extruder heater off\n M140 S0 ;heated bed heater off (if you have it)\n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{speed_travel} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning\n"
|
||||
},
|
||||
"material_bed_temperature": { "default_value": 100 },
|
||||
"layer_height": { "default_value": 0.2 },
|
||||
"support_angle": { "default_value": 30 },
|
||||
"infill_overlap": { "default_value": 30 },
|
||||
"layer_height_0": { "default_value": 0.2 },
|
||||
"speed_print": { "default_value": 80 },
|
||||
"speed_wall_0": { "default_value": 30 },
|
||||
"speed_travel": { "default_value": 150 },
|
||||
"brim_line_count": { "default_value": 15 },
|
||||
"skin_overlap": { "default_value": 30 },
|
||||
"prime_tower_size": { "default_value": 8.660254037844387 },
|
||||
"material_diameter": { "default_value": 1.75 },
|
||||
"bottom_thickness": { "default_value": 0.8 },
|
||||
"retraction_amount": { "default_value": 3 },
|
||||
"speed_topbottom": { "default_value": 80 },
|
||||
"material_print_temperature": { "default_value": 230 },
|
||||
"support_pattern": { "default_value": "grid" },
|
||||
"speed_infill": { "default_value": 80 },
|
||||
"infill_sparse_density": { "default_value": 10 },
|
||||
"top_thickness": { "default_value": 0.8 },
|
||||
"machine_extruder_count": { "default_value": 1 },
|
||||
"retraction_combing": { "default_value": "off" },
|
||||
"machine_heated_bed": { "default_value": true },
|
||||
"machine_center_is_zero": { "default_value": false },
|
||||
"machine_height": { "default_value": 260 },
|
||||
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
|
||||
"machine_depth": { "default_value": 250 },
|
||||
"machine_width": { "default_value": 210 },
|
||||
"machine_name": { "default_value": "Julia V2" }
|
||||
}
|
||||
}
|
38
resources/definitions/kupido.def.json
Normal file
38
resources/definitions/kupido.def.json
Normal file
|
@ -0,0 +1,38 @@
|
|||
{
|
||||
"id": "kupido",
|
||||
"name": "Kupido",
|
||||
"version": 2,
|
||||
"inherits": "fdmprinter",
|
||||
"metadata": {
|
||||
"visible": true,
|
||||
"author": "Ultimaker",
|
||||
"manufacturer": "Kupido",
|
||||
"category": "Other",
|
||||
"file_formats": "text/x-gcode",
|
||||
"platform_offset": [ 0, 0, 0]
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"machine_name": { "default_value": "Kupido" },
|
||||
"machine_start_gcode": {
|
||||
"default_value": " ;Basic settings: Layer height: {layer_height} Walls: {wall_thickness} Fill: {infill_sparse_density}\n ;M190 S{material_bed_temperature} ;Uncomment to add your own bed temperature line\n ;M109 S{material_print_temperature} ;Uncomment to add your own temperature line\n G21 ;metric values\n G90 ;absolute positioning\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G28 X0 Y0 ;move X Y to endstops\n G28 Z0 ;move Z to endstops\n G1 Z20.0 F40 ;move the platform down 20mm\n G1 Y0 X170 F{speed_travel}\n G92 E0 ;zero the extruded length\n G1 F200 E10 ;extrude 3mm of feed stock\n G92 E0 ;zero the extruded length again\n G4 P7000\n G1 F{speed_travel}\n ;Put printing message on LCD screen\n M117 Printing...\n"
|
||||
},
|
||||
"machine_end_gcode": {
|
||||
"default_value": " M104 S0 ;extruder heater off\n M140 S0 ;heated bed heater off (if you have it)\n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{speed_travel} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning\n"
|
||||
},
|
||||
"prime_tower_size": { "default_value": 8.660254037844387 },
|
||||
"retraction_speed": { "default_value": 60 },
|
||||
"material_bed_temperature": { "default_value": 60 },
|
||||
"speed_wall_x": { "default_value": 40 },
|
||||
"skirt_line_count": { "default_value": 2 },
|
||||
"retraction_min_travel": { "default_value": 2 },
|
||||
"speed_wall_0": { "default_value": 30 },
|
||||
"material_print_temperature": { "default_value": 220 },
|
||||
"brim_line_count": { "default_value": 15 },
|
||||
"retraction_amount": { "default_value": 3.6 },
|
||||
"speed_topbottom": { "default_value": 20 },
|
||||
"layer_height": { "default_value": 0.2 },
|
||||
"speed_print": { "default_value": 30 },
|
||||
"speed_infill": { "default_value": 30 }
|
||||
}
|
||||
}
|
31
resources/definitions/makerbotreplicator.def.json
Normal file
31
resources/definitions/makerbotreplicator.def.json
Normal file
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
"id": "makerbotreplicator",
|
||||
"name": "MakerBotReplicator",
|
||||
"version": 2,
|
||||
"inherits": "fdmprinter",
|
||||
"metadata": {
|
||||
"visible": true,
|
||||
"author": "Ultimaker",
|
||||
"manufacturer": "MakerBot",
|
||||
"category": "Other",
|
||||
"file_formats": "application/x3g",
|
||||
"platform_offset": [ 0, 0, 0]
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"prime_tower_size": { "default_value": 10.0 },
|
||||
"infill_sparse_density": { "default_value": 10 },
|
||||
"speed_travel": { "default_value": 150 },
|
||||
"material_diameter": { "default_value": 1.75 },
|
||||
"layer_height": { "default_value": 0.15 },
|
||||
"material_print_temperature": { "default_value": 220 },
|
||||
"machine_extruder_count": { "default_value": 1 },
|
||||
"machine_heated_bed": { "default_value": true },
|
||||
"machine_center_is_zero": { "default_value": false },
|
||||
"machine_height": { "default_value": 150 },
|
||||
"machine_gcode_flavor": { "default_value": "MakerBot" },
|
||||
"machine_depth": { "default_value": 145 },
|
||||
"machine_width": { "default_value": 225 },
|
||||
"machine_name": { "default_value": "MakerBot Replicator" }
|
||||
}
|
||||
}
|
41
resources/definitions/ord.def.json
Normal file
41
resources/definitions/ord.def.json
Normal file
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"id": "ord",
|
||||
"name": "RoVa3D",
|
||||
"version": 2,
|
||||
"inherits": "fdmprinter",
|
||||
"metadata": {
|
||||
"visible": true,
|
||||
"author": "Ultimaker",
|
||||
"manufacturer": "ORD Solutions",
|
||||
"category": "Other",
|
||||
"file_formats": "text/x-gcode",
|
||||
"machine_extruder_trains":
|
||||
{
|
||||
"0": "ord_extruder_0",
|
||||
"1": "ord_extruder_1",
|
||||
"2": "ord_extruder_2",
|
||||
"3": "ord_extruder_3",
|
||||
"4": "ord_extruder_4"
|
||||
},
|
||||
"platform_offset": [ 0, 0, 0]
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"material_bed_temperature": { "default_value": 60 },
|
||||
"prime_tower_size": { "default_value": 7.0710678118654755 },
|
||||
"infill_sparse_density": { "default_value": 15 },
|
||||
"speed_travel": { "default_value": 150 },
|
||||
"material_diameter": { "default_value": 1.75 },
|
||||
"layer_height": { "default_value": 0.3 },
|
||||
"machine_nozzle_size": { "default_value": 0.35 },
|
||||
"material_print_temperature": { "default_value": 240 },
|
||||
"machine_extruder_count": { "default_value": 5 },
|
||||
"machine_heated_bed": { "default_value": true },
|
||||
"machine_center_is_zero": { "default_value": false },
|
||||
"machine_height": { "default_value": 200 },
|
||||
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
|
||||
"machine_depth": { "default_value": 250 },
|
||||
"machine_width": { "default_value": 215 },
|
||||
"machine_name": { "default_value": "RoVa3D" }
|
||||
}
|
||||
}
|
51
resources/definitions/printrbot_play.def.json
Normal file
51
resources/definitions/printrbot_play.def.json
Normal file
|
@ -0,0 +1,51 @@
|
|||
{
|
||||
"id": "printrbot_play",
|
||||
"version": 2,
|
||||
"name": "Printrbot Play",
|
||||
"inherits": "fdmprinter",
|
||||
"metadata": {
|
||||
"visible": true,
|
||||
"author": "Chris Pearson",
|
||||
"manufacturer": "Printrbot",
|
||||
"category": "Other",
|
||||
"file_formats": "text/x-gcode",
|
||||
"platform": "printrbot_play.stl"
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"machine_name": { "default_value": "Printrbot Play" },
|
||||
"machine_heated_bed": { "default_value": false },
|
||||
"machine_width": { "default_value": 100 },
|
||||
"machine_depth": { "default_value": 100 },
|
||||
"machine_height": { "default_value": 130 },
|
||||
"machine_center_is_zero": { "default_value": false },
|
||||
"material_diameter": { "default_value": 1.75 },
|
||||
"machine_nozzle_size": { "default_value": 0.4 },
|
||||
"layer_height": { "default_value": 0.2 },
|
||||
"layer_height_0": { "default_value": 0.3 },
|
||||
"retraction_amount": { "default_value": 0.7 },
|
||||
"retraction_speed": { "default_value": 45},
|
||||
"adhesion_type": { "default_value": "skirt" },
|
||||
"machine_head_with_fans_polygon": { "default_value": [[-32,999],[37,999],[37,-32],[-32,-32]] },
|
||||
"gantry_height": { "default_value": 55 },
|
||||
"speed_print": { "default_value": 50 },
|
||||
"speed_travel": { "default_value": 55 },
|
||||
"machine_max_feedrate_x": {"default_value": 125},
|
||||
"machine_max_feedrate_y": {"default_value": 125},
|
||||
"machine_max_feedrate_z": { "default_value": 5 },
|
||||
"machine_max_acceleration_x": { "default_value": 2000 },
|
||||
"machine_max_acceleration_y": { "default_value": 2000 },
|
||||
"machine_max_acceleration_z": { "default_value": 30 },
|
||||
"machine_max_acceleration_e": { "default_value": 10000 },
|
||||
"machine_max_jerk_xy": { "default_value": 20 },
|
||||
"machine_max_jerk_z": { "default_value": 0.4 },
|
||||
"machine_max_jerk_e": { "default_value": 5.0 },
|
||||
"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\nM106 ;start with the fan on for filament cooling\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nG29 ;run auto bed leveling\nG1 Z15.0 F9000 ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 F200 E10 ;extrude 10mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 F9000\n;Put printing message on LCD screen\nM117 Printing..."
|
||||
},
|
||||
"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\nG1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning"
|
||||
}
|
||||
}
|
||||
}
|
20
resources/definitions/printrbot_play_heated.def.json
Normal file
20
resources/definitions/printrbot_play_heated.def.json
Normal file
|
@ -0,0 +1,20 @@
|
|||
{
|
||||
"id": "printrbot_play_heated",
|
||||
"version": 2,
|
||||
"name": "Printrbot Play (Heated Bed)",
|
||||
"inherits": "printrbot_play",
|
||||
"metadata": {
|
||||
"visible": true,
|
||||
"author": "Chris Pearson",
|
||||
"manufacturer": "Printrbot",
|
||||
"category": "Other",
|
||||
"file_formats": "text/x-gcode",
|
||||
"platform": ""
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"machine_name": { "default_value": "Printrbot Play (Heated Bed)" },
|
||||
"machine_heated_bed": { "default_value": true },
|
||||
"machine_depth": { "default_value": 203 }
|
||||
}
|
||||
}
|
|
@ -9,6 +9,7 @@
|
|||
"manufacturer": "PrintrBot",
|
||||
"category": "Other",
|
||||
"platform": "printrbot_simple_metal_platform.stl",
|
||||
"platform_offset": [0, -3.45, 0],
|
||||
"file_formats": "text/x-gcode"
|
||||
},
|
||||
|
||||
|
|
41
resources/definitions/punchtec_connect_xl.def.json
Normal file
41
resources/definitions/punchtec_connect_xl.def.json
Normal file
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"id": "punchtec_connect_xl",
|
||||
"name": "Punchtec Connect XL",
|
||||
"version": 2,
|
||||
"inherits": "fdmprinter",
|
||||
"metadata": {
|
||||
"visible": true,
|
||||
"author": "Ultimaker",
|
||||
"manufacturer": "Punchtec",
|
||||
"category": "Other",
|
||||
"file_formats": "text/x-gcode",
|
||||
"machine_extruder_trains":
|
||||
{
|
||||
"0": "punchtec_connect_xl_extruder_0",
|
||||
"1": "punchtec_connect_xl_extruder_1"
|
||||
},
|
||||
"platform_offset": [ 0, 0, 0]
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"machine_head_polygon": { "default_value": [[ 0, 0], [ 0, 0], [ 0, 0], [ 0, 0]] },
|
||||
"speed_travel": { "default_value": 150 },
|
||||
"prime_tower_size": { "default_value": 8.660254037844387 },
|
||||
"speed_wall_x": { "default_value": 40 },
|
||||
"speed_wall_0": { "default_value": 40 },
|
||||
"material_diameter": { "default_value": 1.75 },
|
||||
"speed_topbottom": { "default_value": 40 },
|
||||
"layer_height": { "default_value": 0.2 },
|
||||
"material_print_temperature": { "default_value": 195 },
|
||||
"speed_print": { "default_value": 40 },
|
||||
"speed_infill": { "default_value": 40 },
|
||||
"machine_extruder_count": { "default_value": 2 },
|
||||
"machine_heated_bed": { "default_value": true },
|
||||
"machine_center_is_zero": { "default_value": false },
|
||||
"machine_height": { "default_value": 200 },
|
||||
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
|
||||
"machine_depth": { "default_value": 304 },
|
||||
"machine_width": { "default_value": 304 },
|
||||
"machine_name": { "default_value": "Punchtec Connect XL" }
|
||||
}
|
||||
}
|
53
resources/definitions/rigid3d.def.json
Normal file
53
resources/definitions/rigid3d.def.json
Normal file
|
@ -0,0 +1,53 @@
|
|||
{
|
||||
"id": "rigid3d",
|
||||
"name": "Rigid3D",
|
||||
"version": 2,
|
||||
"inherits": "fdmprinter",
|
||||
"metadata": {
|
||||
"visible": true,
|
||||
"author": "Ultimaker",
|
||||
"manufacturer": "Rigid3D",
|
||||
"category": "Other",
|
||||
"file_formats": "text/x-gcode",
|
||||
"platform_offset": [ 0, 0, 0]
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"machine_start_gcode": {
|
||||
"default_value": " ; -- START GCODE --\n G21\n G28 ; Home extruder\n G29 ; Autolevel bed\n M107 ; Turn off fan\n G90 ; Absolute positioning\n M82 ; Extruder in absolute mode\n G92 E0 ; Reset extruder position\n ; -- end of START GCODE --\n\n"
|
||||
},
|
||||
"machine_end_gcode": {
|
||||
"default_value": " ; -- END GCODE --\n G1 X0 Y230 ; Get extruder out of way.\n M107 ; Turn off fan\n G91 ; Relative positioning\n G0 Z20 ; Lift extruder up\n T0\n G1 E-1 ; Reduce filament pressure\n M104 T0 S0 ; Turn ectruder heater off\n G90 ; Absolute positioning\n G92 E0 ; Reset extruder position\n M140 S0 ; Disable heated bed\n M84 ; Turn steppers off\n ; -- end of END GCODE --\n"
|
||||
},
|
||||
"machine_head_polygon": { "default_value": [[ 22, 67], [ 22, 51], [ 36, 51], [ 36, 67]] },
|
||||
"skirt_gap": { "default_value": 5.0 },
|
||||
"cool_min_layer_time": { "default_value": 10 },
|
||||
"prime_tower_size": { "default_value": 7.745966692414834 },
|
||||
"speed_wall_x": { "default_value": 40 },
|
||||
"speed_travel": { "default_value": 100 },
|
||||
"bottom_thickness": { "default_value": 0.75 },
|
||||
"material_diameter": { "default_value": 1.75 },
|
||||
"layer_height_0": { "default_value": 0.25 },
|
||||
"support_angle": { "default_value": 45 },
|
||||
"material_bed_temperature": { "default_value": 100 },
|
||||
"top_thickness": { "default_value": 0.75 },
|
||||
"material_print_temperature": { "default_value": 235 },
|
||||
"retraction_speed": { "default_value": 60.0 },
|
||||
"wall_thickness": { "default_value": 0.8 },
|
||||
"retraction_min_travel": { "default_value": 2 },
|
||||
"speed_wall_0": { "default_value": 30 },
|
||||
"retraction_amount": { "default_value": 1 },
|
||||
"speed_topbottom": { "default_value": 30 },
|
||||
"layer_height": { "default_value": 0.25 },
|
||||
"speed_print": { "default_value": 40 },
|
||||
"speed_infill": { "default_value": 40 },
|
||||
"machine_extruder_count": { "default_value": 1 },
|
||||
"machine_heated_bed": { "default_value": true },
|
||||
"machine_center_is_zero": { "default_value": false },
|
||||
"machine_height": { "default_value": 210 },
|
||||
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
|
||||
"machine_depth": { "default_value": 250 },
|
||||
"machine_width": { "default_value": 250 },
|
||||
"machine_name": { "default_value": "Rigid3D" }
|
||||
}
|
||||
}
|
50
resources/definitions/rigid3d_3rdgen.def.json
Normal file
50
resources/definitions/rigid3d_3rdgen.def.json
Normal file
|
@ -0,0 +1,50 @@
|
|||
{
|
||||
"id": "rigid3d_3rdgen",
|
||||
"name": "Rigid3D 3rdGen",
|
||||
"version": 2,
|
||||
"inherits": "fdmprinter",
|
||||
"metadata": {
|
||||
"visible": true,
|
||||
"author": "Ultimaker",
|
||||
"manufacturer": "Rigid3D",
|
||||
"category": "Other",
|
||||
"file_formats": "text/x-gcode",
|
||||
"platform_offset": [ 0, 0, 0]
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"machine_start_gcode": {
|
||||
"default_value": " ; -- START GCODE --\n G21\n G28 ; Home extruder\n G29 ; Autolevel bed\n M107 ; Turn off fan\n G90 ; Absolute positioning\n M82 ; Extruder in absolute mode\n G92 E0 ; Reset extruder position\n ; -- end of START GCODE --\n\n"
|
||||
},
|
||||
"machine_end_gcode": {
|
||||
"default_value": " ; -- END GCODE --\n G1 X0 Y230 ; Get extruder out of way.\n M107 ; Turn off fan\n G91 ; Relative positioning\n G0 Z20 ; Lift extruder up\n T0\n G1 E-1 ; Reduce filament pressure\n M104 T0 S0 ; Turn extruder heater off\n G90 ; Absolute positioning\n G92 E0 ; Reset extruder position\n M140 S0 ; Disable heated bed\n M84 ; Turn steppers off\n ; -- end of END GCODE --\n"
|
||||
},
|
||||
"machine_head_polygon": { "default_value": [[ 18, 0], [ 18, 65], [ 32, 65], [ 32, 0]] },
|
||||
"cool_min_layer_time": { "default_value": 10 },
|
||||
"prime_tower_size": { "default_value": 7.745966692414834 },
|
||||
"skirt_gap": { "default_value": 5.0 },
|
||||
"speed_travel": { "default_value": 120 },
|
||||
"bottom_thickness": { "default_value": 0.75 },
|
||||
"material_diameter": { "default_value": 1.75 },
|
||||
"layer_height_0": { "default_value": 0.25 },
|
||||
"support_angle": { "default_value": 45 },
|
||||
"material_bed_temperature": { "default_value": 100 },
|
||||
"retraction_min_travel": { "default_value": 2 },
|
||||
"speed_wall_0": { "default_value": 30 },
|
||||
"retraction_speed": { "default_value": 60.0 },
|
||||
"wall_thickness": { "default_value": 0.8 },
|
||||
"material_print_temperature": { "default_value": 235 },
|
||||
"retraction_amount": { "default_value": 1 },
|
||||
"speed_topbottom": { "default_value": 25 },
|
||||
"layer_height": { "default_value": 0.25 },
|
||||
"top_thickness": { "default_value": 0.75 },
|
||||
"machine_extruder_count": { "default_value": 1 },
|
||||
"machine_heated_bed": { "default_value": true },
|
||||
"machine_center_is_zero": { "default_value": false },
|
||||
"machine_height": { "default_value": 240 },
|
||||
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
|
||||
"machine_depth": { "default_value": 290 },
|
||||
"machine_width": { "default_value": 275 },
|
||||
"machine_name": { "default_value": "Rigid3D 3rd Geneartion" }
|
||||
}
|
||||
}
|
47
resources/definitions/rigid3d_hobby.def.json
Normal file
47
resources/definitions/rigid3d_hobby.def.json
Normal file
|
@ -0,0 +1,47 @@
|
|||
{
|
||||
"id": "rigid3d_hobby",
|
||||
"name": "Rigid3D Hobby",
|
||||
"version": 2,
|
||||
"inherits": "fdmprinter",
|
||||
"metadata": {
|
||||
"visible": true,
|
||||
"author": "Ultimaker",
|
||||
"manufacturer": "Rigid3D",
|
||||
"category": "Other",
|
||||
"file_formats": "text/x-gcode",
|
||||
"platform_offset": [ 0, 0, 0]
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"machine_head_polygon": { "default_value": [[ 16, 30], [ 16, 45], [ 16, 45], [ 16, 30]] },
|
||||
"prime_tower_size": { "default_value": 8.660254037844387 },
|
||||
"speed_travel": { "default_value": 40 },
|
||||
"skirt_gap": { "default_value": 5.0 },
|
||||
"cool_min_layer_time": { "default_value": 15 },
|
||||
"support_pattern": { "default_value": "grid" },
|
||||
"material_diameter": { "default_value": 1.75 },
|
||||
"layer_height_0": { "default_value": 0.25 },
|
||||
"speed_wall_x": { "default_value": 30 },
|
||||
"skirt_line_count": { "default_value": 2 },
|
||||
"support_angle": { "default_value": 45 },
|
||||
"speed_topbottom": { "default_value": 20 },
|
||||
"material_print_temperature": { "default_value": 205 },
|
||||
"retraction_speed": { "default_value": 80 },
|
||||
"wall_thickness": { "default_value": 0.8 },
|
||||
"retraction_min_travel": { "default_value": 2 },
|
||||
"speed_wall_0": { "default_value": 20 },
|
||||
"retraction_amount": { "default_value": 2 },
|
||||
"speed_layer_0": { "default_value": 15 },
|
||||
"layer_height": { "default_value": 0.2 },
|
||||
"speed_print": { "default_value": 30 },
|
||||
"speed_infill": { "default_value": 30 },
|
||||
"machine_extruder_count": { "default_value": 1 },
|
||||
"machine_heated_bed": { "default_value": false },
|
||||
"machine_center_is_zero": { "default_value": false },
|
||||
"machine_height": { "default_value": 150 },
|
||||
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
|
||||
"machine_depth": { "default_value": 150 },
|
||||
"machine_width": { "default_value": 150 },
|
||||
"machine_name": { "default_value": "Rigid3D Hobby" }
|
||||
}
|
||||
}
|
53
resources/definitions/rigid3d_zero.def.json
Normal file
53
resources/definitions/rigid3d_zero.def.json
Normal file
|
@ -0,0 +1,53 @@
|
|||
{
|
||||
"id": "rigid3d_zero",
|
||||
"name": "Rigid3D Zero",
|
||||
"version": 2,
|
||||
"inherits": "fdmprinter",
|
||||
"metadata": {
|
||||
"visible": true,
|
||||
"author": "Ultimaker",
|
||||
"manufacturer": "Rigid3D",
|
||||
"category": "Other",
|
||||
"file_formats": "text/x-gcode",
|
||||
"platform_offset": [ 0, 0, 0]
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"machine_start_gcode": {
|
||||
"default_value": " ; -- START GCODE --\n G21\n G28 ; Home extruder\n G29 ; Autolevel bed\n M107 ; Turn off fan\n G90 ; Absolute positioning\n M82 ; Extruder in absolute mode\n G92 E0 ; Reset extruder position\n ; -- end of START GCODE --\n\n"
|
||||
},
|
||||
"machine_end_gcode": {
|
||||
"default_value": " ; -- END GCODE --\n G1 X0 Y230 ; Get extruder out of way.\n M107 ; Turn off fan\n G91 ; Relative positioning\n G0 Z20 ; Lift extruder up\n T0\n G1 E-1 ; Reduce filament pressure\n M104 T0 S0 ; Turn ectruder heater off\n G90 ; Absolute positioning\n G92 E0 ; Reset extruder position\n M140 S0 ; Disable heated bed\n M84 ; Turn steppers off\n ; -- end of END GCODE --\n"
|
||||
},
|
||||
"machine_head_polygon": { "default_value": [[ 40, 15], [ 40, 60], [ 30, 60], [ 30, 15]] },
|
||||
"support_pattern": { "default_value": "grid" },
|
||||
"cool_min_layer_time": { "default_value": 10 },
|
||||
"speed_travel": { "default_value": 80 },
|
||||
"support_angle": { "default_value": 45 },
|
||||
"retraction_min_travel": { "default_value": 2 },
|
||||
"speed_wall_0": { "default_value": 20 },
|
||||
"speed_layer_0": { "default_value": 15 },
|
||||
"speed_infill": { "default_value": 30 },
|
||||
"speed_topbottom": { "default_value": 30 },
|
||||
"prime_tower_size": { "default_value": 7.745966692414834 },
|
||||
"skirt_line_count": { "default_value": 2 },
|
||||
"speed_wall_x": { "default_value": 30 },
|
||||
"material_diameter": { "default_value": 1.75 },
|
||||
"bottom_thickness": { "default_value": 0.75 },
|
||||
"layer_height_0": { "default_value": 0.25 },
|
||||
"top_thickness": { "default_value": 0.75 },
|
||||
"wall_thickness": { "default_value": 0.8 },
|
||||
"material_print_temperature": { "default_value": 195 },
|
||||
"retraction_amount": { "default_value": 1.5 },
|
||||
"skirt_gap": { "default_value": 5.0 },
|
||||
"layer_height": { "default_value": 0.25 },
|
||||
"speed_print": { "default_value": 30 },
|
||||
"machine_extruder_count": { "default_value": 1 },
|
||||
"machine_center_is_zero": { "default_value": false },
|
||||
"machine_height": { "default_value": 190 },
|
||||
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
|
||||
"machine_depth": { "default_value": 250 },
|
||||
"machine_width": { "default_value": 250 },
|
||||
"machine_name": { "default_value": "Rigid3D Zero" }
|
||||
}
|
||||
}
|
|
@ -39,10 +39,10 @@
|
|||
"default_value": "RepRap (Marlin/Sprinter)"
|
||||
},
|
||||
"machine_start_gcode": {
|
||||
"default_value": ";Sliced at: {day} {date} {time}\n;Basic settings: Layer height: {layer_height} Walls: {wall_thickness} Fill: {infill_sparse_density}\n;Print time: {print_time}\n;Filament used: {filament_amount}m {filament_weight}g\n;Filament cost: {filament_cost}\n;M190 S{print_bed_temperature} ;Uncomment to add your own bed temperature line\n;M109 S{print_temperature} ;Uncomment to add your own temperature line\nG21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nM205 X8 ;X/Y Jerk settings\nG1 Z15.0 F{travel_speed} ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 F200 E7 ;extrude 3mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 F{travel_speed}\n;Put printing message on LCD screen\nM117 Rigibot Printing..."
|
||||
"default_value": ";Basic settings: Layer height: {layer_height} Walls: {wall_thickness} Fill: {infill_sparse_density}\n;M190 S{material_bed_temperature} ;Uncomment to add your own bed temperature line\n;M109 S{material_print_temperature} ;Uncomment to add your own temperature line\nG21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nM205 X8 ;X/Y Jerk settings\nG1 Z15.0 F{travel_speed} ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 F200 E7 ;extrude 3mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 F{speed_travel}\n;Put printing message on LCD screen\nM117 Rigibot Printing..."
|
||||
},
|
||||
"machine_end_gcode": {
|
||||
"default_value": ";End GCode\nM104 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\nG1 Z+10 E-1 X-20 Y-20 F{travel_speed} ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nG1 Y230 F3000 ;move Y so the head is out of the way and Plate is moved forward\nM84 ;steppers off\nG90 ;absolute positioning\n;{profile_string}"
|
||||
"default_value": ";End GCode\nM104 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\nG1 Z+10 E-1 X-20 Y-20 F{speed_travel} ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nG1 Y230 F3000 ;move Y so the head is out of the way and Plate is moved forward\nM84 ;steppers off\nG90 ;absolute positioning"
|
||||
},
|
||||
"layer_height": {
|
||||
"default_value": 0.2
|
||||
|
|
|
@ -42,10 +42,10 @@
|
|||
"default_value": "RepRap (Marlin/Sprinter)"
|
||||
},
|
||||
"machine_start_gcode": {
|
||||
"default_value": ";Sliced at: {day} {date} {time}\n;Basic settings: Layer height: {layer_height} Walls: {wall_thickness} Fill: {infill_sparse_density}\n;Print time: {print_time}\n;Filament used: {filament_amount}m {filament_weight}g\n;Filament cost: {filament_cost}\n;M190 S{print_bed_temperature} ;Uncomment to add your own bed temperature line\n;M109 S{print_temperature} ;Uncomment to add your own temperature line\nG21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nM205 X8 ;X/Y Jerk settings\nG1 Z15.0 F{travel_speed} ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 F200 E7 ;extrude 3mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 F{travel_speed}\n;Put printing message on LCD screen\nM117 Rigibot Printing..."
|
||||
"default_value": ";Basic settings: Layer height: {layer_height} Walls: {wall_thickness} Fill: {infill_sparse_density}\n;Print time: {print_time}\n;M190 S{material_bed_temperature} ;Uncomment to add your own bed temperature line\n;M109 S{material_print_temperature} ;Uncomment to add your own temperature line\nG21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nM205 X8 ;X/Y Jerk settings\nG1 Z15.0 F{speed_travel} ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 F200 E7 ;extrude 3mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 F{speed_travel}\n;Put printing message on LCD screen\nM117 Rigibot Printing..."
|
||||
},
|
||||
"machine_end_gcode": {
|
||||
"default_value": ";End GCode\nM104 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\nG1 Z+10 E-1 X-20 Y-20 F{travel_speed} ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nG1 Y230 F3000 ;move Y so the head is out of the way and Plate is moved forward\nM84 ;steppers off\nG90 ;absolute positioning\n;{profile_string}"
|
||||
"default_value": ";End GCode\nM104 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\nG1 Z+10 E-1 X-20 Y-20 F{speed_travel} ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nG1 Y230 F3000 ;move Y so the head is out of the way and Plate is moved forward\nM84 ;steppers off\nG90 ;absolute positioning"
|
||||
},
|
||||
"layer_height": {
|
||||
"default_value": 0.2
|
||||
|
|
61
resources/definitions/robo_3d_r1.def.json
Normal file
61
resources/definitions/robo_3d_r1.def.json
Normal file
|
@ -0,0 +1,61 @@
|
|||
{
|
||||
"id": "robo_3d_r1",
|
||||
"name": "Robo 3D R1",
|
||||
"version": 2,
|
||||
"inherits": "fdmprinter",
|
||||
"metadata": {
|
||||
"visible": true,
|
||||
"author": "Ultimaker",
|
||||
"manufacturer": "Robo 3D",
|
||||
"category": "Other",
|
||||
"file_formats": "text/x-gcode",
|
||||
"platform_offset": [ 0, 0, 0]
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"machine_start_gcode": {
|
||||
"default_value": " G92 E0 ;\n M565 Z-1 ;\n G1 Z5 F5000 ;\n G29 ;\n"
|
||||
},
|
||||
"machine_end_gcode": {
|
||||
"default_value": " M104 S0 ;extruder heater off\n M140 S0 ;heated bed heater off (if you have it)\n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{speed_travel} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning\n"
|
||||
},
|
||||
"cool_min_layer_time": { "default_value": 7 },
|
||||
"speed_topbottom": { "default_value": 40 },
|
||||
"retraction_speed": { "default_value": 50 },
|
||||
"layer_0_z_overlap": { "default_value": 0.2 },
|
||||
"cool_min_speed": { "default_value": 19 },
|
||||
"material_bed_temperature": { "default_value": 60 },
|
||||
"support_angle": { "default_value": 50 },
|
||||
"speed_layer_0": { "default_value": 30 },
|
||||
"line_width": { "default_value": 0.4 },
|
||||
"speed_infill": { "default_value": 60 },
|
||||
"prime_tower_size": { "default_value": 8.660254037844387 },
|
||||
"support_enable": { "default_value": true },
|
||||
"cool_fan_full_at_height": { "default_value": 0.1 },
|
||||
"material_diameter": { "default_value": 1.75 },
|
||||
"bottom_thickness": { "default_value": 1.2 },
|
||||
"raft_airgap": { "default_value": 0.2 },
|
||||
"layer_height_0": { "default_value": 0.15 },
|
||||
"top_thickness": { "default_value": 1.2 },
|
||||
"speed_wall_0": { "default_value": 40 },
|
||||
"retraction_min_travel": { "default_value": 5 },
|
||||
"material_flow": { "default_value": 100 },
|
||||
"infill_sparse_density": { "default_value": 10 },
|
||||
"wall_thickness": { "default_value": 1.2 },
|
||||
"material_print_temperature": { "default_value": 190 },
|
||||
"retraction_amount": { "default_value": 3 },
|
||||
"layer_height": { "default_value": 0.2 },
|
||||
"speed_print": { "default_value": 40 },
|
||||
"machine_extruder_count": { "default_value": 1 },
|
||||
"retraction_combing": { "default_value": "off" },
|
||||
"machine_heated_bed": { "default_value": true },
|
||||
"machine_center_is_zero": { "default_value": false },
|
||||
"machine_height": { "default_value": 210 },
|
||||
"adhesion_type": { "default_value": "raft" },
|
||||
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
|
||||
"machine_depth": { "default_value": 245 },
|
||||
"machine_width": { "default_value": 225 },
|
||||
"support_z_distance": { "default_value": 0.22 },
|
||||
"machine_name": { "default_value": "ROBO 3D R1" }
|
||||
}
|
||||
}
|
|
@ -21,7 +21,7 @@
|
|||
"machine_name": { "default_value": "Ultimaker 2" },
|
||||
"machine_start_gcode" : {
|
||||
"default_value": "",
|
||||
"value": "\"\" if machine_gcode_flavor == \"UltiGCode\" else \"G21 ;metric values\\nG90 ;absolute positioning\\nM82 ;set extruder to absolute mode\\nM107 ;start with the fan off\\nG1 X10 Y0 F4000;move X/Y to min endstops\\nG28 Z0 ;move Z to bottom endstops\\nG1 Z15.0 F9000 ;move the platform to 15mm\\nG92 E0 ;zero the extruded length\\nG1 F200 E10 ;extrude 10 mm of feed stock\\nG92 E0 ;zero the extruded length again\\nG1 F9000\\n;Put printing message on LCD screen\\nM117 Printing...\""
|
||||
"value": "\"\" if machine_gcode_flavor == \"UltiGCode\" else \"G21 ;metric values\\nG90 ;absolute positioning\\nM82 ;set extruder to absolute mode\\nM107 ;start with the fan off\\nG28 Z0 ;move Z to bottom endstops\\nG28 X0 Y0 ;move X/Y to endstops\\nG1 X15 Y0 F4000 ;move X/Y to front of printer\\nG1 Z15.0 F9000 ;move the platform to 15mm\\nG92 E0 ;zero the extruded length\\nG1 F200 E10 ;extrude 10 mm of feed stock\\nG92 E0 ;zero the extruded length again\\nG1 F9000\\n;Put printing message on LCD screen\\nM117 Printing...\""
|
||||
},
|
||||
"machine_end_gcode" : {
|
||||
"default_value": "",
|
||||
|
@ -86,12 +86,6 @@
|
|||
"machine_nozzle_expansion_angle": {
|
||||
"default_value": 45
|
||||
},
|
||||
"material_print_temperature": {
|
||||
"enabled": "not (material_flow_dependent_temperature) and machine_gcode_flavor != \"UltiGCode\""
|
||||
},
|
||||
"material_bed_temperature": {
|
||||
"enabled": "machine_heated_bed and machine_gcode_flavor != \"UltiGCode\""
|
||||
},
|
||||
"machine_max_feedrate_x": {
|
||||
"default_value": 300
|
||||
},
|
||||
|
@ -106,24 +100,6 @@
|
|||
},
|
||||
"machine_acceleration": {
|
||||
"default_value": 3000
|
||||
},
|
||||
"material_diameter": {
|
||||
"enabled": "machine_gcode_flavor != \"UltiGCode\""
|
||||
},
|
||||
"material_flow": {
|
||||
"enabled": "machine_gcode_flavor != \"UltiGCode\""
|
||||
},
|
||||
"retraction_amount": {
|
||||
"enabled": "retraction_enable and machine_gcode_flavor != \"UltiGCode\""
|
||||
},
|
||||
"retraction_speed": {
|
||||
"enabled": "retraction_enable and machine_gcode_flavor != \"UltiGCode\""
|
||||
},
|
||||
"retraction_retract_speed": {
|
||||
"enabled": "retraction_enable and machine_gcode_flavor != \"UltiGCode\""
|
||||
},
|
||||
"retraction_prime_speed": {
|
||||
"enabled": "retraction_enable and machine_gcode_flavor != \"UltiGCode\""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
"value": "speed_wall_0"
|
||||
},
|
||||
"machine_height": {
|
||||
"default_value": 203
|
||||
"default_value": 205
|
||||
},
|
||||
"machine_show_variants": {
|
||||
"default_value": true
|
||||
|
|
154
resources/definitions/ultimaker3.def.json
Normal file
154
resources/definitions/ultimaker3.def.json
Normal file
|
@ -0,0 +1,154 @@
|
|||
{
|
||||
"id": "ultimaker3",
|
||||
"version": 2,
|
||||
"name": "Ultimaker 3",
|
||||
"inherits": "ultimaker",
|
||||
"metadata": {
|
||||
"author": "Ultimaker",
|
||||
"manufacturer": "Ultimaker",
|
||||
"category": "Ultimaker",
|
||||
"visible": true,
|
||||
"file_formats": "text/x-gcode",
|
||||
"platform": "ultimaker3_platform.obj",
|
||||
"platform_texture": "Ultimaker3backplate.png",
|
||||
"platform_offset": [0, 0, 0],
|
||||
"has_machine_quality": true,
|
||||
"has_materials": true,
|
||||
"has_machine_materials": true,
|
||||
"has_variant_materials": true,
|
||||
"has_variants": true,
|
||||
"preferred_variant": "*aa*",
|
||||
"preferred_quality": "*Normal*",
|
||||
"variants_name": "Print core",
|
||||
"machine_extruder_trains":
|
||||
{
|
||||
"0": "ultimaker3_extruder_left",
|
||||
"1": "ultimaker3_extruder_right"
|
||||
},
|
||||
"first_start_actions": [ "DiscoverUM3Action" ],
|
||||
"supported_actions": [ "DiscoverUM3Action" ],
|
||||
"supports_usb_connection": false
|
||||
},
|
||||
|
||||
|
||||
|
||||
"overrides": {
|
||||
"machine_name": { "default_value": "Ultimaker 3" },
|
||||
"machine_width": { "default_value": 233 },
|
||||
"machine_depth": { "default_value": 215 },
|
||||
"machine_height": { "default_value": 200 },
|
||||
"machine_heated_bed": { "default_value": true },
|
||||
"machine_nozzle_heat_up_speed": { "default_value": 1.4 },
|
||||
"machine_nozzle_cool_down_speed": { "default_value": 0.8 },
|
||||
"machine_head_with_fans_polygon":
|
||||
{
|
||||
"default_value":
|
||||
[
|
||||
[ -29, 6.1 ],
|
||||
[ -29, -33.9 ],
|
||||
[ 71, 6.1 ],
|
||||
[ 71, -33.9 ]
|
||||
]
|
||||
},
|
||||
"machine_gcode_flavor": { "default_value": "Griffin" },
|
||||
"machine_max_feedrate_x": { "default_value": 300 },
|
||||
"machine_max_feedrate_y": { "default_value": 300 },
|
||||
"machine_max_feedrate_z": { "default_value": 40 },
|
||||
"machine_acceleration": { "default_value": 3000 },
|
||||
"gantry_height": { "default_value": 60 },
|
||||
"machine_disallowed_areas": { "default_value": [
|
||||
[[92.8, -53.4], [92.8, -97.5], [116.5, -97.5], [116.5, -53.4]],
|
||||
[[73.8, 107.5], [73.8, 100.5], [116.5, 100.5], [116.5, 107.5]],
|
||||
[[74.6, 107.5], [74.6, 100.5], [116.5, 100.5], [116.5, 107.5]],
|
||||
[[74.9, -97.5], [74.9, -107.5], [116.5, -107.5], [116.5, -97.5]],
|
||||
[[-116.5, -103.5], [-116.5, -107.5], [-100.9, -107.5], [-100.9, -103.5]],
|
||||
[[-116.5, 105.8], [-96.9, 105.8], [-96.9, 107.5], [-116.5, 107.5]]
|
||||
]},
|
||||
"machine_extruder_count": { "default_value": 2 },
|
||||
"extruder_prime_pos_abs": { "default_value": true },
|
||||
"machine_start_gcode": { "default_value": "" },
|
||||
"machine_end_gcode": { "default_value": "" },
|
||||
"prime_tower_position_x": { "default_value": 175 },
|
||||
"prime_tower_position_y": { "default_value": 179 },
|
||||
|
||||
"acceleration_enabled": { "value": "True" },
|
||||
"acceleration_layer_0": { "value": "acceleration_topbottom" },
|
||||
"acceleration_prime_tower": { "value": "math.ceil(acceleration_print * 2000 / 4000)" },
|
||||
"acceleration_print": { "value": "4000" },
|
||||
"acceleration_support": { "value": "math.ceil(acceleration_print * 2000 / 4000)" },
|
||||
"acceleration_support_interface": { "value": "acceleration_topbottom" },
|
||||
"acceleration_topbottom": { "value": "math.ceil(acceleration_print * 500 / 4000)" },
|
||||
"acceleration_wall": { "value": "math.ceil(acceleration_print * 1000 / 4000)" },
|
||||
"acceleration_wall_0": { "value": "math.ceil(acceleration_wall * 500 / 1000)" },
|
||||
"brim_width": { "value": "3" },
|
||||
"cool_fan_full_at_height": { "value": "layer_height_0 + 4 * layer_height" },
|
||||
"cool_fan_speed": { "value": "50" },
|
||||
"cool_fan_speed_max": { "value": "100" },
|
||||
"cool_min_speed": { "value": "5" },
|
||||
"infill_line_width": { "value": "round(line_width * 0.5 / 0.35, 2)" },
|
||||
"infill_overlap": { "value": "0" },
|
||||
"infill_pattern": { "value": "'triangles'" },
|
||||
"infill_wipe_dist": { "value": "0" },
|
||||
"jerk_enabled": { "value": "True" },
|
||||
"jerk_layer_0": { "value": "jerk_topbottom" },
|
||||
"jerk_prime_tower": { "value": "math.ceil(jerk_print * 15 / 25)" },
|
||||
"jerk_print": { "value": "25" },
|
||||
"jerk_support": { "value": "math.ceil(jerk_print * 15 / 25)" },
|
||||
"jerk_support_interface": { "value": "jerk_topbottom" },
|
||||
"jerk_topbottom": { "value": "math.ceil(jerk_print * 5 / 25)" },
|
||||
"jerk_wall": { "value": "math.ceil(jerk_print * 10 / 25)" },
|
||||
"jerk_wall_0": { "value": "math.ceil(jerk_wall * 5 / 10)" },
|
||||
"layer_height_0": { "value": "round(machine_nozzle_size / 1.5, 2)" },
|
||||
"layer_start_x": { "value": "sum(extruderValues('machine_extruder_start_pos_x')) / len(extruderValues('machine_extruder_start_pos_x'))" },
|
||||
"layer_start_y": { "value": "sum(extruderValues('machine_extruder_start_pos_y')) / len(extruderValues('machine_extruder_start_pos_y'))" },
|
||||
"line_width": { "value": "machine_nozzle_size * 0.875" },
|
||||
"machine_min_cool_heat_time_window": { "value": "15" },
|
||||
"material_print_temperature": { "value": "200" },
|
||||
"material_standby_temperature": { "value": "100" },
|
||||
"multiple_mesh_overlap": { "value": "0" },
|
||||
"prime_tower_enable": { "value": "True" },
|
||||
"raft_airgap": { "value": "0" },
|
||||
"raft_base_speed": { "value": "20" },
|
||||
"raft_base_thickness": { "value": "0.3" },
|
||||
"raft_interface_line_spacing": { "value": "0.5" },
|
||||
"raft_interface_line_width": { "value": "0.5" },
|
||||
"raft_interface_speed": { "value": "20" },
|
||||
"raft_interface_thickness": { "value": "0.2" },
|
||||
"raft_jerk": { "value": "jerk_layer_0" },
|
||||
"raft_margin": { "value": "10" },
|
||||
"raft_speed": { "value": "25" },
|
||||
"raft_surface_layers": { "value": "1" },
|
||||
"retraction_amount": { "value": "2" },
|
||||
"retraction_count_max": { "value": "10" },
|
||||
"retraction_extrusion_window": { "value": "1" },
|
||||
"retraction_hop": { "value": "2" },
|
||||
"retraction_hop_enabled": { "value": "True" },
|
||||
"retraction_hop_only_when_collides": { "value": "True" },
|
||||
"retraction_min_travel": { "value": "5" },
|
||||
"retraction_prime_speed": { "value": "15" },
|
||||
"skin_overlap": { "value": "10" },
|
||||
"speed_layer_0": { "value": "20" },
|
||||
"speed_prime_tower": { "value": "speed_topbottom" },
|
||||
"speed_print": { "value": "35" },
|
||||
"speed_support": { "value": "speed_wall_0" },
|
||||
"speed_support_interface": { "value": "speed_topbottom" },
|
||||
"speed_topbottom": { "value": "math.ceil(speed_print * 20 / 35)" },
|
||||
"speed_travel": { "value": "250" },
|
||||
"speed_wall": { "value": "math.ceil(speed_print * 30 / 35)" },
|
||||
"speed_wall_0": { "value": "math.ceil(speed_wall * 20 / 30)" },
|
||||
"speed_wall_x": { "value": "speed_wall" },
|
||||
"support_angle": { "value": "45" },
|
||||
"support_pattern": { "value": "'triangles'" },
|
||||
"support_use_towers": { "value": "False" },
|
||||
"support_xy_distance": { "value": "wall_line_width_0 * 2.5" },
|
||||
"support_xy_distance_overhang": { "value": "wall_line_width_0" },
|
||||
"support_z_distance": { "value": "0" },
|
||||
"switch_extruder_prime_speed": { "value": "15" },
|
||||
"switch_extruder_retraction_amount": { "value": "8" },
|
||||
"top_bottom_thickness": { "value": "1" },
|
||||
"travel_avoid_distance": { "value": "3" },
|
||||
"wall_0_inset": { "value": "0" },
|
||||
"wall_line_width_x": { "value": "round(line_width * 0.3 / 0.35, 2)" },
|
||||
"wall_thickness": { "value": "1" }
|
||||
}
|
||||
}
|
36
resources/definitions/ultimaker3_extended.def.json
Normal file
36
resources/definitions/ultimaker3_extended.def.json
Normal file
|
@ -0,0 +1,36 @@
|
|||
{
|
||||
"id": "ultimaker3_extended",
|
||||
"version": 2,
|
||||
"name": "Ultimaker 3 Extended",
|
||||
"inherits": "ultimaker3",
|
||||
"metadata": {
|
||||
"author": "Ultimaker",
|
||||
"manufacturer": "Ultimaker",
|
||||
"category": "Ultimaker",
|
||||
"quality_definition": "ultimaker3",
|
||||
"visible": true,
|
||||
"file_formats": "text/x-gcode",
|
||||
"platform": "ultimaker3_platform.obj",
|
||||
"platform_texture": "Ultimaker3Extendedbackplate.png",
|
||||
"platform_offset": [0, 0, 0],
|
||||
"has_machine_quality": true,
|
||||
"has_machine_materials": true,
|
||||
"has_variant_materials": true,
|
||||
"has_materials": true,
|
||||
"has_variants": true,
|
||||
"preferred_variant": "*aa*",
|
||||
"variants_name": "Print core",
|
||||
"machine_extruder_trains":
|
||||
{
|
||||
"0": "ultimaker3_extended_extruder_left",
|
||||
"1": "ultimaker3_extended_extruder_right"
|
||||
},
|
||||
"first_start_actions": [ "DiscoverUM3Action" ],
|
||||
"supported_actions": [ "DiscoverUM3Action" ]
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"machine_name": { "default_value": "Ultimaker 3 Extended" },
|
||||
"machine_height": { "default_value": 300 }
|
||||
}
|
||||
}
|
|
@ -72,9 +72,6 @@
|
|||
"machine_extruder_count": {
|
||||
"default_value": 2
|
||||
},
|
||||
"print_sequence": {
|
||||
"enabled": false
|
||||
},
|
||||
"prime_tower_position_x": {
|
||||
"default_value": 185
|
||||
},
|
||||
|
|
30
resources/definitions/zone3d_printer.def.json
Normal file
30
resources/definitions/zone3d_printer.def.json
Normal file
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
"id": "zone3d_printer",
|
||||
"name": "Zone3d Printer",
|
||||
"version": 2,
|
||||
"inherits": "fdmprinter",
|
||||
"metadata": {
|
||||
"visible": true,
|
||||
"author": "Ultimaker",
|
||||
"manufacturer": "Unknown",
|
||||
"category": "Other",
|
||||
"file_formats": "text/x-gcode",
|
||||
"platform_offset": [ 0, 0, 0]
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"material_diameter": { "default_value": 1.75 },
|
||||
"prime_tower_size": { "default_value": 10.350983390135314 },
|
||||
"material_print_temperature": { "default_value": 260 },
|
||||
"layer_height": { "default_value": 0.14 },
|
||||
"speed_travel": { "default_value": 150 },
|
||||
"machine_extruder_count": { "default_value": 1 },
|
||||
"machine_heated_bed": { "default_value": true },
|
||||
"machine_center_is_zero": { "default_value": false },
|
||||
"machine_height": { "default_value": 210 },
|
||||
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
|
||||
"machine_depth": { "default_value": 220 },
|
||||
"machine_width": { "default_value": 240 },
|
||||
"machine_name": { "default_value": "Zone3D Printer" }
|
||||
}
|
||||
}
|
19
resources/extruders/ord_extruder_0.def.json
Normal file
19
resources/extruders/ord_extruder_0.def.json
Normal file
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"id": "ord_extruder_0",
|
||||
"version": 2,
|
||||
"name": "0",
|
||||
"inherits": "fdmextruder",
|
||||
"metadata": {
|
||||
"machine": "ord",
|
||||
"position": "0"
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"extruder_nr": {
|
||||
"default_value": 0,
|
||||
"maximum_value": "4"
|
||||
},
|
||||
"machine_nozzle_offset_x": { "default_value": 0.0 },
|
||||
"machine_nozzle_offset_y": { "default_value": 0.0 }
|
||||
}
|
||||
}
|
19
resources/extruders/ord_extruder_1.def.json
Normal file
19
resources/extruders/ord_extruder_1.def.json
Normal file
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"id": "ord_extruder_1",
|
||||
"version": 2,
|
||||
"name": "1",
|
||||
"inherits": "fdmextruder",
|
||||
"metadata": {
|
||||
"machine": "ord",
|
||||
"position": "1"
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"extruder_nr": {
|
||||
"default_value": 1,
|
||||
"maximum_value": "4"
|
||||
},
|
||||
"machine_nozzle_offset_x": { "default_value": 62.95 },
|
||||
"machine_nozzle_offset_y": { "default_value": 2.05 }
|
||||
}
|
||||
}
|
19
resources/extruders/ord_extruder_2.def.json
Normal file
19
resources/extruders/ord_extruder_2.def.json
Normal file
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"id": "ord_extruder_2",
|
||||
"version": 2,
|
||||
"name": "2",
|
||||
"inherits": "fdmextruder",
|
||||
"metadata": {
|
||||
"machine": "ord",
|
||||
"position": "2"
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"extruder_nr": {
|
||||
"default_value": 2,
|
||||
"maximum_value": "4"
|
||||
},
|
||||
"machine_nozzle_offset_x": { "default_value": 0.0 },
|
||||
"machine_nozzle_offset_y": { "default_value": 27.7 }
|
||||
}
|
||||
}
|
19
resources/extruders/ord_extruder_3.def.json
Normal file
19
resources/extruders/ord_extruder_3.def.json
Normal file
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"id": "ord_extruder_3",
|
||||
"version": 2,
|
||||
"name": "3",
|
||||
"inherits": "fdmextruder",
|
||||
"metadata": {
|
||||
"machine": "ord",
|
||||
"position": "3"
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"extruder_nr": {
|
||||
"default_value": 3,
|
||||
"maximum_value": "4"
|
||||
},
|
||||
"machine_nozzle_offset_x": { "default_value": 63.18 },
|
||||
"machine_nozzle_offset_y": { "default_value": 28.65 }
|
||||
}
|
||||
}
|
19
resources/extruders/ord_extruder_4.def.json
Normal file
19
resources/extruders/ord_extruder_4.def.json
Normal file
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"id": "ord_extruder_4",
|
||||
"version": 2,
|
||||
"name": "4",
|
||||
"inherits": "fdmextruder",
|
||||
"metadata": {
|
||||
"machine": "ord",
|
||||
"position": "4"
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"extruder_nr": {
|
||||
"default_value": 4,
|
||||
"maximum_value": "4"
|
||||
},
|
||||
"machine_nozzle_offset_x": { "default_value": 31.6 },
|
||||
"machine_nozzle_offset_y": { "default_value": 28.2 }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"id": "punchtec_connect_xl_extruder_0",
|
||||
"version": 2,
|
||||
"name": "0",
|
||||
"inherits": "fdmextruder",
|
||||
"metadata": {
|
||||
"machine": "punchtec_connect_xl",
|
||||
"position": "0"
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"extruder_nr": {
|
||||
"default_value": 0,
|
||||
"maximum_value": "1"
|
||||
},
|
||||
"machine_nozzle_offset_x": { "default_value": 0.0 },
|
||||
"machine_nozzle_offset_y": { "default_value": 0.0 }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"id": "punchtec_connect_xl_extruder_1",
|
||||
"version": 2,
|
||||
"name": "1",
|
||||
"inherits": "fdmextruder",
|
||||
"metadata": {
|
||||
"machine": "punchtec_connect_xl",
|
||||
"position": "1"
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"extruder_nr": {
|
||||
"default_value": 1,
|
||||
"maximum_value": "1"
|
||||
},
|
||||
"machine_nozzle_offset_x": { "default_value": 0.0 },
|
||||
"machine_nozzle_offset_y": { "default_value": 0.0 }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
"id": "ultimaker3_extended_extruder_left",
|
||||
"version": 2,
|
||||
"name": "Print core 1",
|
||||
"inherits": "fdmextruder",
|
||||
"metadata": {
|
||||
"machine": "ultimaker3_extended",
|
||||
"position": "0"
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"extruder_nr": {
|
||||
"default_value": 0,
|
||||
"maximum_value": "1"
|
||||
},
|
||||
"machine_nozzle_offset_x": { "default_value": 0 },
|
||||
"machine_nozzle_offset_y": { "default_value": 0 },
|
||||
|
||||
"machine_extruder_start_pos_abs": { "default_value": true },
|
||||
"machine_extruder_start_pos_x": { "default_value": 213 },
|
||||
"machine_extruder_start_pos_y": { "default_value": 207 },
|
||||
"machine_extruder_end_pos_abs": { "default_value": true },
|
||||
"machine_extruder_end_pos_x": { "default_value": 213 },
|
||||
"machine_extruder_end_pos_y": { "default_value": 207 },
|
||||
"machine_nozzle_head_distance": { "default_value": 2.7 },
|
||||
"extruder_prime_pos_x": { "default_value": 170 },
|
||||
"extruder_prime_pos_y": { "default_value": 6 },
|
||||
"extruder_prime_pos_z": { "default_value": 2 }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
"id": "ultimaker3_extended_extruder_right",
|
||||
"version": 2,
|
||||
"name": "Print core 2",
|
||||
"inherits": "fdmextruder",
|
||||
"metadata": {
|
||||
"machine": "ultimaker3_extended",
|
||||
"position": "1"
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"extruder_nr": {
|
||||
"default_value": 1,
|
||||
"maximum_value": "1"
|
||||
},
|
||||
"machine_nozzle_offset_x": { "default_value": 18 },
|
||||
"machine_nozzle_offset_y": { "default_value": 0 },
|
||||
|
||||
"machine_extruder_start_pos_abs": { "default_value": true },
|
||||
"machine_extruder_start_pos_x": { "default_value": 213 },
|
||||
"machine_extruder_start_pos_y": { "default_value": 189 },
|
||||
"machine_extruder_end_pos_abs": { "default_value": true },
|
||||
"machine_extruder_end_pos_x": { "default_value": 213 },
|
||||
"machine_extruder_end_pos_y": { "default_value": 189 },
|
||||
"machine_nozzle_head_distance": { "default_value": 4.2 },
|
||||
"extruder_prime_pos_x": { "default_value": 182 },
|
||||
"extruder_prime_pos_y": { "default_value": 6 },
|
||||
"extruder_prime_pos_z": { "default_value": 2 }
|
||||
}
|
||||
}
|
30
resources/extruders/ultimaker3_extruder_left.def.json
Normal file
30
resources/extruders/ultimaker3_extruder_left.def.json
Normal file
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
"id": "ultimaker3_extruder_left",
|
||||
"version": 2,
|
||||
"name": "Print core 1",
|
||||
"inherits": "fdmextruder",
|
||||
"metadata": {
|
||||
"machine": "ultimaker3",
|
||||
"position": "0"
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"extruder_nr": {
|
||||
"default_value": 0,
|
||||
"maximum_value": "1"
|
||||
},
|
||||
"machine_nozzle_offset_x": { "default_value": 0 },
|
||||
"machine_nozzle_offset_y": { "default_value": 0 },
|
||||
|
||||
"machine_extruder_start_pos_abs": { "default_value": true },
|
||||
"machine_extruder_start_pos_x": { "default_value": 213 },
|
||||
"machine_extruder_start_pos_y": { "default_value": 207 },
|
||||
"machine_extruder_end_pos_abs": { "default_value": true },
|
||||
"machine_extruder_end_pos_x": { "default_value": 213 },
|
||||
"machine_extruder_end_pos_y": { "default_value": 207 },
|
||||
"machine_nozzle_head_distance": { "default_value": 2.7 },
|
||||
"extruder_prime_pos_x": { "default_value": 170 },
|
||||
"extruder_prime_pos_y": { "default_value": 6 },
|
||||
"extruder_prime_pos_z": { "default_value": 2 }
|
||||
}
|
||||
}
|
30
resources/extruders/ultimaker3_extruder_right.def.json
Normal file
30
resources/extruders/ultimaker3_extruder_right.def.json
Normal file
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
"id": "ultimaker3_extruder_right",
|
||||
"version": 2,
|
||||
"name": "Print core 2",
|
||||
"inherits": "fdmextruder",
|
||||
"metadata": {
|
||||
"machine": "ultimaker3",
|
||||
"position": "1"
|
||||
},
|
||||
|
||||
"overrides": {
|
||||
"extruder_nr": {
|
||||
"default_value": 1,
|
||||
"maximum_value": "1"
|
||||
},
|
||||
"machine_nozzle_offset_x": { "default_value": 18 },
|
||||
"machine_nozzle_offset_y": { "default_value": 0 },
|
||||
|
||||
"machine_extruder_start_pos_abs": { "default_value": true },
|
||||
"machine_extruder_start_pos_x": { "default_value": 213 },
|
||||
"machine_extruder_start_pos_y": { "default_value": 189 },
|
||||
"machine_extruder_end_pos_abs": { "default_value": true },
|
||||
"machine_extruder_end_pos_x": { "default_value": 213 },
|
||||
"machine_extruder_end_pos_y": { "default_value": 189 },
|
||||
"machine_nozzle_head_distance": { "default_value": 4.2 },
|
||||
"extruder_prime_pos_x": { "default_value": 182 },
|
||||
"extruder_prime_pos_y": { "default_value": 6 },
|
||||
"extruder_prime_pos_z": { "default_value": 2 }
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load diff
|
@ -1831,13 +1831,13 @@ msgstr "Druckerbildschirm"
|
|||
|
||||
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:382
|
||||
msgctxt "@title:tab"
|
||||
msgid "Simple"
|
||||
msgstr "Einfach"
|
||||
msgid "Recommended"
|
||||
msgstr "Empfohlen"
|
||||
|
||||
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:383
|
||||
msgctxt "@title:tab"
|
||||
msgid "Advanced"
|
||||
msgstr "Erweitert"
|
||||
msgid "Custom"
|
||||
msgstr "Benutzerdefiniert"
|
||||
|
||||
#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:18
|
||||
#: /home/ruben/Projects/Cura/resources/qml/Menus/NozzleMenu.qml:18
|
||||
|
@ -2295,25 +2295,6 @@ msgid ""
|
|||
"Click to open the profile manager."
|
||||
msgstr "Einige Einstellungswerte unterscheiden sich von den im Profil gespeicherten Werten.\n\nKlicken Sie, um den Profilmanager zu öffnen."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:24
|
||||
msgid "Modify G-Code"
|
||||
msgstr "G-Code ändern"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/__init__.py:12
|
||||
msgctxt "@label"
|
||||
msgid "Post Processing"
|
||||
msgstr "Nachbearbeitung"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/__init__.py:16
|
||||
msgctxt "Description of plugin"
|
||||
msgid "Extension that allows for user created scripts for post processing"
|
||||
msgstr "Erweiterung, die eine Nachbearbeitung von Skripten ermöglicht, die von Benutzern erstellt wurden."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:18
|
||||
msgctxt "@title:window"
|
||||
msgid "Post Processing Plugin"
|
||||
msgstr "Plugin Nachbearbeitung"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:49
|
||||
msgctxt "@label"
|
||||
msgid "Post Processing Scripts"
|
||||
|
@ -2333,3 +2314,318 @@ msgstr "Einstellungen"
|
|||
msgctxt "@info:tooltip"
|
||||
msgid "Change active post-processing scripts"
|
||||
msgstr "Aktive Skripts Nachbearbeitung ändern"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/__init__.py:13
|
||||
msgctxt "@info:whatsthis"
|
||||
msgid "Manages network connections to Ultimaker 3 printers"
|
||||
msgstr "Verwaltet Netzwerkverbindungen zu Ultimaker 3 Druckern"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:100
|
||||
msgctxt "@action:button"
|
||||
msgid "Print over network"
|
||||
msgstr "Drücken über Netzwerk"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:101
|
||||
msgctxt "@properties:tooltip"
|
||||
msgid "Print over network"
|
||||
msgstr "Drücken über Netzwerk"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:143
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
"Access to the printer requested. Please approve the request on the printer"
|
||||
msgstr "Zugriff auf Drucker erforderlich. Bestätigen Sie den Zugriff auf den Drucker"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:144
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:145
|
||||
msgctxt "@action:button"
|
||||
msgid "Retry"
|
||||
msgstr "Erneut versuchen"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:145
|
||||
msgctxt "@info:tooltip"
|
||||
msgid "Re-send the access request"
|
||||
msgstr "Zugriffanforderung erneut senden"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:147
|
||||
msgctxt "@info:status"
|
||||
msgid "Access to the printer accepted"
|
||||
msgstr "Zugriff auf den Drucker genehmigt"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:148
|
||||
msgctxt "@info:status"
|
||||
msgid "No access to print with this printer. Unable to send print job."
|
||||
msgstr "Kein Zugriff auf das Drucken mit diesem Drucker. Druckauftrag kann nicht gesendet werden."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:149
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72
|
||||
msgctxt "@action:button"
|
||||
msgid "Request Access"
|
||||
msgstr "Zugriff anfordern"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:149
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:27
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:71
|
||||
msgctxt "@info:tooltip"
|
||||
msgid "Send access request to the printer"
|
||||
msgstr "Zugriffsanforderung für den Drucker senden"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:232
|
||||
#, python-brace-format
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
"Connected over the network to {0}. Please approve the access request on the "
|
||||
"printer."
|
||||
msgstr "Über Netzwerk verbunden mit {0}. Geben Sie die Zugriffsanforderung für den Drucker frei."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:239
|
||||
#, python-brace-format
|
||||
msgctxt "@info:status"
|
||||
msgid "Connected over the network to {0}."
|
||||
msgstr "Über Netzwerk verbunden mit {0}."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:252
|
||||
#, python-brace-format
|
||||
msgctxt "@info:status"
|
||||
msgid "Connected over the network to {0}. No access to control the printer."
|
||||
msgstr "Über Netzwerk verbunden mit {0}. Kein Zugriff auf die Druckerverwaltung."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:257
|
||||
msgctxt "@info:status"
|
||||
msgid "Access request was denied on the printer."
|
||||
msgstr "Zugriffsanforderung auf den Drucker wurde abgelehnt."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:260
|
||||
msgctxt "@info:status"
|
||||
msgid "Access request failed due to a timeout."
|
||||
msgstr "Zugriffsanforderungen aufgrund von Zeitüberschreitung fehlgeschlagen."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:323
|
||||
msgctxt "@info:status"
|
||||
msgid "The connection with the network was lost."
|
||||
msgstr "Die Verbindung zum Netzwerk ist verlorengegangen."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:354
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
"The connection with the printer was lost. Check your printer to see if it is "
|
||||
"connected."
|
||||
msgstr "Die Verbindung zum Drucker ist verlorengegangen. Überprüfen Sie Ihren Drucker, um festzustellen, ob er verbunden ist."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:466
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
"Unable to start a new print job because the printer is busy. Please check "
|
||||
"the printer."
|
||||
msgstr "Es kann kein neuer Druckauftrag gestartet werden, da der Drucker beschäftigt ist. Überprüfen Sie den Drucker."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:471
|
||||
#, python-format
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
"Unable to start a new print job, printer is busy. Current printer status is "
|
||||
"%s."
|
||||
msgstr "Es kann kein neuer Druckauftrag gestartet werden, da der Drucker beschäftigt ist. Der aktuelle Druckerstatus lautet %s."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:491
|
||||
#, python-brace-format
|
||||
msgctxt "@info:status"
|
||||
msgid "Unable to start a new print job. No PrinterCore loaded in slot {0}"
|
||||
msgstr "Es kann kein neuer Druckauftrag gestartet werden. Kein PrinterCore in Steckplatz {0} geladen."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:498
|
||||
#, python-brace-format
|
||||
msgctxt "@info:status"
|
||||
msgid "Unable to start a new print job. No material loaded in slot {0}"
|
||||
msgstr "Es kann kein neuer Druckauftrag gestartet werden. Kein Material in Steckplatz {0} geladen."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:509
|
||||
#, python-brace-format
|
||||
msgctxt "@label"
|
||||
msgid "Not enough material for spool {0}."
|
||||
msgstr "Material für Spule {0} unzureichend."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:519
|
||||
#, python-brace-format
|
||||
msgctxt "@label"
|
||||
msgid "Different PrintCore (Cura: {0}, Printer: {1}) selected for extruder {2}"
|
||||
msgstr "Abweichender PrintCore (Cura: {0}, Drucker: {1}) für Extruder {2} gewählt"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:533
|
||||
#, python-brace-format
|
||||
msgctxt "@label"
|
||||
msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}"
|
||||
msgstr "Abweichendes Material (Cura: {0}, Drucker: {1}) für Extruder {2} gewählt"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:536
|
||||
msgctxt "@label"
|
||||
msgid "Are you sure you wish to print with the selected configuration?"
|
||||
msgstr "Möchten Sie wirklich mit der gewählten Konfiguration drucken?"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:537
|
||||
msgctxt "@label"
|
||||
msgid ""
|
||||
"There is a mismatch between the configuration of the printer and Cura. For "
|
||||
"the best result, always slice for the PrintCores and materials that are "
|
||||
"inserted in your printer."
|
||||
msgstr "Anforderungen zwischen der Druckerkonfiguration und Cura stimmen nicht überein. Für optimale Ergebnisse schneiden Sie stets für die PrintCores und Materialien, die in Ihren Drucker eingelegt wurden."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:543
|
||||
msgctxt "@window:title"
|
||||
msgid "Mismatched configuration"
|
||||
msgstr "Konfiguration nicht übereinstimmend"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:633
|
||||
msgctxt "@info:status"
|
||||
msgid "Sending data to printer"
|
||||
msgstr "Daten werden zum Drucker gesendet"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:680
|
||||
msgctxt "@info:status"
|
||||
msgid "Unable to send data to printer. Is another job still active?"
|
||||
msgstr "Daten können nicht zum Drucker gesendet werden. Ist noch ein weiterer Auftrag in Bearbeitung?"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:804
|
||||
msgctxt "@label:MonitorStatus"
|
||||
msgid "Print aborted. Please check the printer"
|
||||
msgstr "Drucken wurde abgebrochen. Den Drucker überprüfen"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:810
|
||||
msgctxt "@label:MonitorStatus"
|
||||
msgid "Pausing print..."
|
||||
msgstr "Drucken wird pausiert..."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:812
|
||||
msgctxt "@label:MonitorStatus"
|
||||
msgid "Resuming print..."
|
||||
msgstr "Drucken wird fortgesetzt..."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:920
|
||||
msgctxt "@window:title"
|
||||
msgid "Changes on the Printer"
|
||||
msgstr "Änderungen auf dem Drucker"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:922
|
||||
msgctxt "@label"
|
||||
msgid ""
|
||||
"Do you want to change the PrintCores and materials in Cura to match your "
|
||||
"printer?"
|
||||
msgstr "Möchten Sie die PrintCores und Materialien in Cura passend für Ihren Drucker ändern?"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:924
|
||||
msgctxt "@label"
|
||||
msgid ""
|
||||
"The PrintCores and/or materials on your printer were changed. For the best "
|
||||
"result, always slice for the PrintCores and materials that are inserted in "
|
||||
"your printer."
|
||||
msgstr "Die PrintCores und/oder Materialien auf Ihrem Drucker wurden geändert. Für optimale Ergebnisse schneiden Sie stets für die PrintCores und Materialien, die in Ihren Drucker eingelegt wurden."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:19
|
||||
msgctxt "@action"
|
||||
msgid "Connect via Network"
|
||||
msgstr "Anschluss über Netzwerk"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57
|
||||
msgctxt "@title:window"
|
||||
msgid "Connect to Networked Printer"
|
||||
msgstr "Anschluss an vernetzten Drucker"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:67
|
||||
msgctxt "@label"
|
||||
msgid ""
|
||||
"To print directly to your printer over the network, please make sure your "
|
||||
"printer is connected to the network using a network cable or by connecting "
|
||||
"your printer to your WIFI network. If you don't connect Cura with your "
|
||||
"printer, you can still use a USB drive to transfer g-code files to your "
|
||||
"printer.\n"
|
||||
"\n"
|
||||
"Select your printer from the list below:"
|
||||
msgstr "Um über das Netzwerk direkt auf Ihrem Drucker zu drucken, stellen Sie bitte sicher, dass der Drucker mit dem Netzwerkkabel verbunden ist oder verbinden Sie Ihren Drucker mit Ihrem WLAN-Netzwerk. Wenn Sie Cura nicht mit Ihrem Drucker verbinden, können Sie dennoch ein USB-Laufwerk für die Übertragung von G-Code-Dateien auf Ihren Drucker verwenden.\n\nWählen Sie Ihren Drucker aus der folgenden Liste:"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106
|
||||
msgctxt "@action:button"
|
||||
msgid "Refresh"
|
||||
msgstr "Aktualisieren"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:198
|
||||
msgctxt "@label"
|
||||
msgid ""
|
||||
"If your printer is not listed, read the <a href='%1'>network-printing "
|
||||
"troubleshooting guide</a>"
|
||||
msgstr "Wenn Ihr Drucker nicht aufgeführt ist, lesen Sie die <a href=‘%1‘>Anleitung für Fehlerbehebung für Netzwerkdruck</a>"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:225
|
||||
msgctxt "@label"
|
||||
msgid "Type"
|
||||
msgstr "Typ"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:231
|
||||
msgctxt "@label"
|
||||
msgid "Ultimaker 3"
|
||||
msgstr "Ultimaker 3"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:231
|
||||
msgctxt "@label"
|
||||
msgid "Ultimaker 3 Extended"
|
||||
msgstr "Ultimaker 3 Extended"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:237
|
||||
msgctxt "@label"
|
||||
msgid "Firmware version"
|
||||
msgstr "Firmware-Version"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:249
|
||||
msgctxt "@label"
|
||||
msgid "Address"
|
||||
msgstr "Adresse"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:263
|
||||
msgctxt "@label"
|
||||
msgid "The printer at this address has not yet responded."
|
||||
msgstr "Der Drucker unter dieser Adresse hat nicht reagiert."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:268
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38
|
||||
msgctxt "@action:button"
|
||||
msgid "Connect"
|
||||
msgstr "Verbinden"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:280
|
||||
msgctxt "@label:"
|
||||
msgid "Print Again"
|
||||
msgstr "Erneut drucken"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:289
|
||||
msgctxt "@title:window"
|
||||
msgid "Printer Address"
|
||||
msgstr "Druckeradresse"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:319
|
||||
msgctxt "@alabel"
|
||||
msgid "Enter the IP address or hostname of your printer on the network."
|
||||
msgstr "Geben Sie die IP-Adresse oder den Hostnamen Ihres Druckers auf dem Netzwerk ein."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:346
|
||||
msgctxt "@action:button"
|
||||
msgid "Ok"
|
||||
msgstr "Ok"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:37
|
||||
msgctxt "@info:tooltip"
|
||||
msgid "Connect to a printer"
|
||||
msgstr "Mit einem Drucker verbinden"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:116
|
||||
msgctxt "@info:tooltip"
|
||||
msgid "Load the configuration of the printer into Cura"
|
||||
msgstr "Die Druckerkonfiguration in Cura laden"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117
|
||||
msgctxt "@action:button"
|
||||
msgid "Activate Configuration"
|
||||
msgstr "Konfiguration aktivieren"
|
||||
|
|
|
@ -535,7 +535,7 @@ msgid ""
|
|||
"The selected material is imcompatible with the selected machine or "
|
||||
"configuration."
|
||||
msgstr ""
|
||||
"The selected material is imcompatible with the selected machine or "
|
||||
"The selected material is incompatible with the selected machine or "
|
||||
"configuration."
|
||||
|
||||
#: /home/ruben/Projects/Cura/cura/Settings/MachineManager.py:666
|
||||
|
@ -1911,13 +1911,13 @@ msgstr "Printer Monitor"
|
|||
|
||||
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:382
|
||||
msgctxt "@title:tab"
|
||||
msgid "Simple"
|
||||
msgstr "Simple"
|
||||
msgid "Recommended"
|
||||
msgstr "Recommended"
|
||||
|
||||
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:383
|
||||
msgctxt "@title:tab"
|
||||
msgid "Advanced"
|
||||
msgstr "Advanced"
|
||||
msgid "Custom"
|
||||
msgstr "Custom"
|
||||
|
||||
#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:18
|
||||
#: /home/ruben/Projects/Cura/resources/qml/Menus/NozzleMenu.qml:18
|
||||
|
@ -2387,3 +2387,37 @@ msgstr ""
|
|||
"Some setting values are different from the values stored in the profile.\n"
|
||||
"\n"
|
||||
"Click to open the profile manager."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:519
|
||||
#, python-brace-format
|
||||
msgctxt "@label"
|
||||
msgid "Different PrintCore (Cura: {0}, Printer: {1}) selected for extruder {2}"
|
||||
msgstr "Different print core (Cura: {0}, Printer: {1}) selected for extruder {2}"
|
||||
|
||||
#, python-brace-format
|
||||
msgctxt "@info:status"
|
||||
msgid "Unable to start a new print job. No PrinterCore loaded in slot {0}"
|
||||
msgstr "Unable to start a new print job. No print core loaded in slot {0}"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:537
|
||||
msgctxt "@label"
|
||||
msgid ""
|
||||
"There is a mismatch between the configuration of the printer and Cura. For "
|
||||
"the best result, always slice for the PrintCores and materials that are "
|
||||
"inserted in your printer."
|
||||
msgstr "There is a mismatch between the configuration of the printer and Cura. For the best result, always slice for the print cores and materials that are inserted in your printer."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:922
|
||||
msgctxt "@label"
|
||||
msgid ""
|
||||
"Do you want to change the PrintCores and materials in Cura to match your "
|
||||
"printer?"
|
||||
msgstr "Would you like to update your current printer configuration into Cura?"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:924
|
||||
msgctxt "@label"
|
||||
msgid ""
|
||||
"The PrintCores and/or materials on your printer were changed. For the best "
|
||||
"result, always slice for the PrintCores and materials that are inserted in "
|
||||
"your printer."
|
||||
msgstr "The print cores and/or materials on your printer were changed. For the best result, always slice for the print cores and materials that are inserted in your printer."
|
|
@ -1831,13 +1831,13 @@ msgstr "Monitor de la impresora"
|
|||
|
||||
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:382
|
||||
msgctxt "@title:tab"
|
||||
msgid "Simple"
|
||||
msgstr "Básica"
|
||||
msgid "Recommended"
|
||||
msgstr "Recomendado"
|
||||
|
||||
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:383
|
||||
msgctxt "@title:tab"
|
||||
msgid "Advanced"
|
||||
msgstr "Avanzada"
|
||||
msgid "Custom"
|
||||
msgstr "Personalizado"
|
||||
|
||||
#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:18
|
||||
#: /home/ruben/Projects/Cura/resources/qml/Menus/NozzleMenu.qml:18
|
||||
|
@ -2295,25 +2295,6 @@ msgid ""
|
|||
"Click to open the profile manager."
|
||||
msgstr "Algunos valores son distintos de los valores almacenados en el perfil.\n\nHaga clic para abrir el administrador de perfiles."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:24
|
||||
msgid "Modify G-Code"
|
||||
msgstr "Modificar GCode"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/__init__.py:12
|
||||
msgctxt "@label"
|
||||
msgid "Post Processing"
|
||||
msgstr "Posprocesamiento"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/__init__.py:16
|
||||
msgctxt "Description of plugin"
|
||||
msgid "Extension that allows for user created scripts for post processing"
|
||||
msgstr "Extensión que permite el posprocesamiento de las secuencias de comandos creadas por los usuarios."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:18
|
||||
msgctxt "@title:window"
|
||||
msgid "Post Processing Plugin"
|
||||
msgstr "Complemento de posprocesamiento"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:49
|
||||
msgctxt "@label"
|
||||
msgid "Post Processing Scripts"
|
||||
|
@ -2333,3 +2314,318 @@ msgstr "Ajustes"
|
|||
msgctxt "@info:tooltip"
|
||||
msgid "Change active post-processing scripts"
|
||||
msgstr "Cambia las secuencias de comandos de posprocesamiento."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/__init__.py:13
|
||||
msgctxt "@info:whatsthis"
|
||||
msgid "Manages network connections to Ultimaker 3 printers"
|
||||
msgstr "Gestiona las conexiones de red a las impresoras Ultimaker 3."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:100
|
||||
msgctxt "@action:button"
|
||||
msgid "Print over network"
|
||||
msgstr "Imprimir a través de la red"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:101
|
||||
msgctxt "@properties:tooltip"
|
||||
msgid "Print over network"
|
||||
msgstr "Imprime a través de la red."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:143
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
"Access to the printer requested. Please approve the request on the printer"
|
||||
msgstr "Acceso a la impresora solicitado. Apruebe la solicitud en la impresora."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:144
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:145
|
||||
msgctxt "@action:button"
|
||||
msgid "Retry"
|
||||
msgstr "Volver a intentar"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:145
|
||||
msgctxt "@info:tooltip"
|
||||
msgid "Re-send the access request"
|
||||
msgstr "Reenvía la solicitud de acceso."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:147
|
||||
msgctxt "@info:status"
|
||||
msgid "Access to the printer accepted"
|
||||
msgstr "Acceso a la impresora aceptado"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:148
|
||||
msgctxt "@info:status"
|
||||
msgid "No access to print with this printer. Unable to send print job."
|
||||
msgstr "No hay acceso para imprimir con esta impresora. No se puede enviar el trabajo de impresión."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:149
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72
|
||||
msgctxt "@action:button"
|
||||
msgid "Request Access"
|
||||
msgstr "Solicitar acceso"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:149
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:27
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:71
|
||||
msgctxt "@info:tooltip"
|
||||
msgid "Send access request to the printer"
|
||||
msgstr "Envía la solicitud de acceso a la impresora."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:232
|
||||
#, python-brace-format
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
"Connected over the network to {0}. Please approve the access request on the "
|
||||
"printer."
|
||||
msgstr "Conectado a través de la red a {0}. Apruebe la solicitud de acceso en la impresora."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:239
|
||||
#, python-brace-format
|
||||
msgctxt "@info:status"
|
||||
msgid "Connected over the network to {0}."
|
||||
msgstr "Conectado a través de la red a {0}."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:252
|
||||
#, python-brace-format
|
||||
msgctxt "@info:status"
|
||||
msgid "Connected over the network to {0}. No access to control the printer."
|
||||
msgstr "Conectado a través de la red a {0}. No hay acceso para controlar la impresora."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:257
|
||||
msgctxt "@info:status"
|
||||
msgid "Access request was denied on the printer."
|
||||
msgstr "Solicitud de acceso denegada en la impresora."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:260
|
||||
msgctxt "@info:status"
|
||||
msgid "Access request failed due to a timeout."
|
||||
msgstr "Se ha producido un error al solicitar acceso porque se ha agotado el tiempo de espera."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:323
|
||||
msgctxt "@info:status"
|
||||
msgid "The connection with the network was lost."
|
||||
msgstr "Se ha perdido la conexión de red."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:354
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
"The connection with the printer was lost. Check your printer to see if it is "
|
||||
"connected."
|
||||
msgstr "Se ha perdido la conexión con la impresora. Compruebe que la impresora está conectada."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:466
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
"Unable to start a new print job because the printer is busy. Please check "
|
||||
"the printer."
|
||||
msgstr "No se puede iniciar un trabajo nuevo de impresión porque la impresora está ocupada. Compruebe la impresora."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:471
|
||||
#, python-format
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
"Unable to start a new print job, printer is busy. Current printer status is "
|
||||
"%s."
|
||||
msgstr "No se puede iniciar un trabajo nuevo de impresión, la impresora está ocupada. El estado actual de la impresora es %s."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:491
|
||||
#, python-brace-format
|
||||
msgctxt "@info:status"
|
||||
msgid "Unable to start a new print job. No PrinterCore loaded in slot {0}"
|
||||
msgstr "No se puede iniciar un trabajo nuevo de impresión. No se ha cargado ningún PrintCore en la ranura {0}."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:498
|
||||
#, python-brace-format
|
||||
msgctxt "@info:status"
|
||||
msgid "Unable to start a new print job. No material loaded in slot {0}"
|
||||
msgstr "No se puede iniciar un trabajo nuevo de impresión. No se ha cargado material en la ranura {0}."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:509
|
||||
#, python-brace-format
|
||||
msgctxt "@label"
|
||||
msgid "Not enough material for spool {0}."
|
||||
msgstr "No hay suficiente material para la bobina {0}."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:519
|
||||
#, python-brace-format
|
||||
msgctxt "@label"
|
||||
msgid "Different PrintCore (Cura: {0}, Printer: {1}) selected for extruder {2}"
|
||||
msgstr "PrintCore distinto (Cura: {0}, impresora: {1}) seleccionado para extrusor {2}"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:533
|
||||
#, python-brace-format
|
||||
msgctxt "@label"
|
||||
msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}"
|
||||
msgstr "Material distinto (Cura: {0}, impresora: {1}) seleccionado para extrusor {2}"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:536
|
||||
msgctxt "@label"
|
||||
msgid "Are you sure you wish to print with the selected configuration?"
|
||||
msgstr "¿Seguro que desea imprimir con la configuración seleccionada?"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:537
|
||||
msgctxt "@label"
|
||||
msgid ""
|
||||
"There is a mismatch between the configuration of the printer and Cura. For "
|
||||
"the best result, always slice for the PrintCores and materials that are "
|
||||
"inserted in your printer."
|
||||
msgstr "La configuración de la impresora y de Cura no coinciden. Para obtener el mejor resultado, segmente siempre los PrintCores y materiales que se insertan en la impresora."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:543
|
||||
msgctxt "@window:title"
|
||||
msgid "Mismatched configuration"
|
||||
msgstr "Configuración desajustada"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:633
|
||||
msgctxt "@info:status"
|
||||
msgid "Sending data to printer"
|
||||
msgstr "Enviando datos a la impresora"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:680
|
||||
msgctxt "@info:status"
|
||||
msgid "Unable to send data to printer. Is another job still active?"
|
||||
msgstr "No se puede enviar datos a la impresora. ¿Hay otro trabajo que todavía esté activo?"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:804
|
||||
msgctxt "@label:MonitorStatus"
|
||||
msgid "Print aborted. Please check the printer"
|
||||
msgstr "Impresión cancelada. Compruebe la impresora."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:810
|
||||
msgctxt "@label:MonitorStatus"
|
||||
msgid "Pausing print..."
|
||||
msgstr "Pausando impresión..."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:812
|
||||
msgctxt "@label:MonitorStatus"
|
||||
msgid "Resuming print..."
|
||||
msgstr "Reanudando impresión..."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:920
|
||||
msgctxt "@window:title"
|
||||
msgid "Changes on the Printer"
|
||||
msgstr "Cambios en la impresora"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:922
|
||||
msgctxt "@label"
|
||||
msgid ""
|
||||
"Do you want to change the PrintCores and materials in Cura to match your "
|
||||
"printer?"
|
||||
msgstr "¿Desea cambiar los PrintCores y materiales de Cura para que coincidan con la impresora?"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:924
|
||||
msgctxt "@label"
|
||||
msgid ""
|
||||
"The PrintCores and/or materials on your printer were changed. For the best "
|
||||
"result, always slice for the PrintCores and materials that are inserted in "
|
||||
"your printer."
|
||||
msgstr "Se han modificado los PrintCores y/o materiales de la impresora. Para obtener el mejor resultado, segmente siempre los PrintCores y materiales que se han insertado en la impresora."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:19
|
||||
msgctxt "@action"
|
||||
msgid "Connect via Network"
|
||||
msgstr "Conectar a través de la red"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57
|
||||
msgctxt "@title:window"
|
||||
msgid "Connect to Networked Printer"
|
||||
msgstr "Conectar con la impresora en red"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:67
|
||||
msgctxt "@label"
|
||||
msgid ""
|
||||
"To print directly to your printer over the network, please make sure your "
|
||||
"printer is connected to the network using a network cable or by connecting "
|
||||
"your printer to your WIFI network. If you don't connect Cura with your "
|
||||
"printer, you can still use a USB drive to transfer g-code files to your "
|
||||
"printer.\n"
|
||||
"\n"
|
||||
"Select your printer from the list below:"
|
||||
msgstr "Para imprimir directamente en la impresora a través de la red, asegúrese de que esta está conectada a la red utilizando un cable de red o conéctela a la red wifi. Si no conecta Cura con la impresora, también puede utilizar una unidad USB para transferir archivos GCode a la impresora.\n\nSeleccione la impresora de la siguiente lista:"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106
|
||||
msgctxt "@action:button"
|
||||
msgid "Refresh"
|
||||
msgstr "Actualizar"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:198
|
||||
msgctxt "@label"
|
||||
msgid ""
|
||||
"If your printer is not listed, read the <a href='%1'>network-printing "
|
||||
"troubleshooting guide</a>"
|
||||
msgstr "Si la impresora no aparece en la lista, lea la <a href='%1'>guía de solución de problemas de impresión y red</a>"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:225
|
||||
msgctxt "@label"
|
||||
msgid "Type"
|
||||
msgstr "Tipo"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:231
|
||||
msgctxt "@label"
|
||||
msgid "Ultimaker 3"
|
||||
msgstr "Ultimaker 3"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:231
|
||||
msgctxt "@label"
|
||||
msgid "Ultimaker 3 Extended"
|
||||
msgstr "Ultimaker 3 Extended"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:237
|
||||
msgctxt "@label"
|
||||
msgid "Firmware version"
|
||||
msgstr "Versión de firmware"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:249
|
||||
msgctxt "@label"
|
||||
msgid "Address"
|
||||
msgstr "Dirección"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:263
|
||||
msgctxt "@label"
|
||||
msgid "The printer at this address has not yet responded."
|
||||
msgstr "La impresora todavía no ha respondido en esta dirección."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:268
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38
|
||||
msgctxt "@action:button"
|
||||
msgid "Connect"
|
||||
msgstr "Conectar"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:280
|
||||
msgctxt "@label:"
|
||||
msgid "Print Again"
|
||||
msgstr "Volver a imprimir"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:289
|
||||
msgctxt "@title:window"
|
||||
msgid "Printer Address"
|
||||
msgstr "Dirección de la impresora"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:319
|
||||
msgctxt "@alabel"
|
||||
msgid "Enter the IP address or hostname of your printer on the network."
|
||||
msgstr "Introduzca la dirección IP o el nombre de host de la impresora en red."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:346
|
||||
msgctxt "@action:button"
|
||||
msgid "Ok"
|
||||
msgstr "Aceptar"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:37
|
||||
msgctxt "@info:tooltip"
|
||||
msgid "Connect to a printer"
|
||||
msgstr "Conecta a una impresora."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:116
|
||||
msgctxt "@info:tooltip"
|
||||
msgid "Load the configuration of the printer into Cura"
|
||||
msgstr "Carga la configuración de la impresora en Cura."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117
|
||||
msgctxt "@action:button"
|
||||
msgid "Activate Configuration"
|
||||
msgstr "Activar configuración"
|
||||
|
|
|
@ -3,7 +3,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: Uranium json setting files\n"
|
||||
"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n"
|
||||
"POT-Creation-Date: 2016-09-20 14:48+0000\n"
|
||||
"POT-Creation-Date: 2016-10-27 11:28+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE\n"
|
||||
|
|
|
@ -3,7 +3,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: Uranium json setting files\n"
|
||||
"Report-Msgid-Bugs-To: http://github.com/ultimaker/uranium\n"
|
||||
"POT-Creation-Date: 2016-09-20 14:48+0000\n"
|
||||
"POT-Creation-Date: 2016-10-27 11:28+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE\n"
|
||||
|
@ -815,6 +815,20 @@ msgid ""
|
|||
"outside of the model."
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "outer_inset_first label"
|
||||
msgid "Outer Before Inner Walls"
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "outer_inset_first description"
|
||||
msgid ""
|
||||
"Prints walls in order of outside to inside when enabled. This can help "
|
||||
"improve dimensional accuracy in X and Y when using a high viscosity plastic "
|
||||
"like ABS; however it can decrease outer surface print quality, especially on "
|
||||
"overhangs."
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "alternate_extra_perimeter label"
|
||||
msgid "Alternate Extra Wall"
|
||||
|
@ -1310,42 +1324,6 @@ msgid ""
|
|||
"material is limited."
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "retraction_hop_enabled label"
|
||||
msgid "Z Hop when Retracted"
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "retraction_hop_enabled description"
|
||||
msgid ""
|
||||
"Whenever a retraction is done, the build plate is lowered to create "
|
||||
"clearance between the nozzle and the print. It prevents the nozzle from "
|
||||
"hitting the print during travel moves, reducing the chance to knock the "
|
||||
"print from the build plate."
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "retraction_hop_only_when_collides label"
|
||||
msgid "Z Hop Only Over Printed Parts"
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "retraction_hop_only_when_collides description"
|
||||
msgid ""
|
||||
"Only perform a Z Hop when moving over printed parts which cannot be avoided "
|
||||
"by horizontal motion by Avoid Printed Parts when Traveling."
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "retraction_hop label"
|
||||
msgid "Z Hop Height"
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "retraction_hop description"
|
||||
msgid "The height difference when performing a Z Hop."
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "material_standby_temperature label"
|
||||
msgid "Standby Temperature"
|
||||
|
@ -1405,19 +1383,6 @@ msgid ""
|
|||
"retraction."
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "retraction_hop_after_extruder_switch label"
|
||||
msgid "Z Hop After Extruder Switch"
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "retraction_hop_after_extruder_switch description"
|
||||
msgid ""
|
||||
"After the machine switched from one extruder to the other, the build plate "
|
||||
"is lowered to create clearance between the nozzle and the print. This "
|
||||
"prevents the nozzle from leaving oozed material on the outside of a print."
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "speed label"
|
||||
msgid "Speed"
|
||||
|
@ -2070,6 +2035,55 @@ msgid ""
|
|||
"during travel moves."
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "retraction_hop_enabled label"
|
||||
msgid "Z Hop when Retracted"
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "retraction_hop_enabled description"
|
||||
msgid ""
|
||||
"Whenever a retraction is done, the build plate is lowered to create "
|
||||
"clearance between the nozzle and the print. It prevents the nozzle from "
|
||||
"hitting the print during travel moves, reducing the chance to knock the "
|
||||
"print from the build plate."
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "retraction_hop_only_when_collides label"
|
||||
msgid "Z Hop Only Over Printed Parts"
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "retraction_hop_only_when_collides description"
|
||||
msgid ""
|
||||
"Only perform a Z Hop when moving over printed parts which cannot be avoided "
|
||||
"by horizontal motion by Avoid Printed Parts when Traveling."
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "retraction_hop label"
|
||||
msgid "Z Hop Height"
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "retraction_hop description"
|
||||
msgid "The height difference when performing a Z Hop."
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "retraction_hop_after_extruder_switch label"
|
||||
msgid "Z Hop After Extruder Switch"
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "retraction_hop_after_extruder_switch description"
|
||||
msgid ""
|
||||
"After the machine switched from one extruder to the other, the build plate "
|
||||
"is lowered to create clearance between the nozzle and the print. This "
|
||||
"prevents the nozzle from leaving oozed material on the outside of a print."
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "cooling label"
|
||||
msgid "Cooling"
|
||||
|
@ -2176,7 +2190,9 @@ msgctxt "cool_min_layer_time description"
|
|||
msgid ""
|
||||
"The minimum time spent in a layer. This forces the printer to slow down, to "
|
||||
"at least spend the time set here in one layer. This allows the printed "
|
||||
"material to cool down properly before printing the next layer."
|
||||
"material to cool down properly before printing the next layer. Layers may "
|
||||
"still take shorter than the minimal layer time if Lift Head is disabled and "
|
||||
"if the Minimum Speed would otherwise be violated."
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
|
@ -2227,6 +2243,54 @@ msgid ""
|
|||
"severe overhangs."
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_extruder_nr label"
|
||||
msgid "Support Extruder"
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_extruder_nr description"
|
||||
msgid ""
|
||||
"The extruder train to use for printing the support. This is used in multi-"
|
||||
"extrusion."
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_infill_extruder_nr label"
|
||||
msgid "Support Infill Extruder"
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_infill_extruder_nr description"
|
||||
msgid ""
|
||||
"The extruder train to use for printing the infill of the support. This is "
|
||||
"used in multi-extrusion."
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_extruder_nr_layer_0 label"
|
||||
msgid "First Layer Support Extruder"
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_extruder_nr_layer_0 description"
|
||||
msgid ""
|
||||
"The extruder train to use for printing the first layer of support infill. "
|
||||
"This is used in multi-extrusion."
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_interface_extruder_nr label"
|
||||
msgid "Support Interface Extruder"
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_interface_extruder_nr description"
|
||||
msgid ""
|
||||
"The extruder train to use for printing the roofs and bottoms of the support. "
|
||||
"This is used in multi-extrusion."
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_type label"
|
||||
msgid "Support Placement"
|
||||
|
@ -2687,6 +2751,18 @@ msgctxt "adhesion_type option raft"
|
|||
msgid "Raft"
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "adhesion_extruder_nr label"
|
||||
msgid "Build Plate Adhesion Extruder"
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "adhesion_extruder_nr description"
|
||||
msgid ""
|
||||
"The extruder train to use for printing the skirt/brim/raft. This is used in "
|
||||
"multi-extrusion."
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "skirt_line_count label"
|
||||
msgid "Skirt Line Count"
|
||||
|
@ -3100,66 +3176,6 @@ msgctxt "dual description"
|
|||
msgid "Settings used for printing with multiple extruders."
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "adhesion_extruder_nr label"
|
||||
msgid "Build Plate Adhesion Extruder"
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "adhesion_extruder_nr description"
|
||||
msgid ""
|
||||
"The extruder train to use for printing the skirt/brim/raft. This is used in "
|
||||
"multi-extrusion."
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_extruder_nr label"
|
||||
msgid "Support Extruder"
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_extruder_nr description"
|
||||
msgid ""
|
||||
"The extruder train to use for printing the support. This is used in multi-"
|
||||
"extrusion."
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_infill_extruder_nr label"
|
||||
msgid "Support Infill Extruder"
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_infill_extruder_nr description"
|
||||
msgid ""
|
||||
"The extruder train to use for printing the infill of the support. This is "
|
||||
"used in multi-extrusion."
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_extruder_nr_layer_0 label"
|
||||
msgid "First Layer Support Extruder"
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_extruder_nr_layer_0 description"
|
||||
msgid ""
|
||||
"The extruder train to use for printing the first layer of support infill. "
|
||||
"This is used in multi-extrusion."
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_interface_extruder_nr label"
|
||||
msgid "Support Interface Extruder"
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_interface_extruder_nr description"
|
||||
msgid ""
|
||||
"The extruder train to use for printing the roofs and bottoms of the support. "
|
||||
"This is used in multi-extrusion."
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "prime_tower_enable label"
|
||||
msgid "Enable Prime Tower"
|
||||
|
@ -3336,6 +3352,18 @@ msgid ""
|
|||
"everything else fails to produce proper GCode."
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "carve_multiple_volumes label"
|
||||
msgid "Remove Mesh Intersection"
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "carve_multiple_volumes description"
|
||||
msgid ""
|
||||
"Remove areas where multiple objecs are overlapping with each other. This is "
|
||||
"may be used if merged dual material objects overlap with each other."
|
||||
msgstr ""
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "blackmagic label"
|
||||
msgid "Special Modes"
|
||||
|
|
|
@ -1831,13 +1831,13 @@ msgstr "Tulostimen näyttölaite"
|
|||
|
||||
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:382
|
||||
msgctxt "@title:tab"
|
||||
msgid "Simple"
|
||||
msgstr "Yksinkertainen"
|
||||
msgid "Recommended"
|
||||
msgstr "Suositeltu"
|
||||
|
||||
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:383
|
||||
msgctxt "@title:tab"
|
||||
msgid "Advanced"
|
||||
msgstr "Laajennettu"
|
||||
msgid "Custom"
|
||||
msgstr "Mukautettu"
|
||||
|
||||
#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:18
|
||||
#: /home/ruben/Projects/Cura/resources/qml/Menus/NozzleMenu.qml:18
|
||||
|
@ -2295,25 +2295,6 @@ msgid ""
|
|||
"Click to open the profile manager."
|
||||
msgstr "Jotkut asetusten arvot eroavat profiiliin tallennetuista arvoista.\n\nAvaa profiilin hallinta napsauttamalla."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:24
|
||||
msgid "Modify G-Code"
|
||||
msgstr "Muokkaa GCode-arvoa"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/__init__.py:12
|
||||
msgctxt "@label"
|
||||
msgid "Post Processing"
|
||||
msgstr "Jälkikäsittely"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/__init__.py:16
|
||||
msgctxt "Description of plugin"
|
||||
msgid "Extension that allows for user created scripts for post processing"
|
||||
msgstr "Lisäosa, jonka avulla käyttäjät voivat luoda komentosarjoja jälkikäsittelyä varten"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:18
|
||||
msgctxt "@title:window"
|
||||
msgid "Post Processing Plugin"
|
||||
msgstr "Jälkikäsittelylisäosa"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:49
|
||||
msgctxt "@label"
|
||||
msgid "Post Processing Scripts"
|
||||
|
@ -2333,3 +2314,318 @@ msgstr "Asetukset"
|
|||
msgctxt "@info:tooltip"
|
||||
msgid "Change active post-processing scripts"
|
||||
msgstr "Muuta aktiivisia jälkikäsittelykomentosarjoja"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/__init__.py:13
|
||||
msgctxt "@info:whatsthis"
|
||||
msgid "Manages network connections to Ultimaker 3 printers"
|
||||
msgstr "Ultimaker 3 -tulostimien verkkoyhteyksien hallinta"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:100
|
||||
msgctxt "@action:button"
|
||||
msgid "Print over network"
|
||||
msgstr "Tulosta verkon kautta"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:101
|
||||
msgctxt "@properties:tooltip"
|
||||
msgid "Print over network"
|
||||
msgstr "Tulosta verkon kautta"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:143
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
"Access to the printer requested. Please approve the request on the printer"
|
||||
msgstr "Tulostimen käyttöoikeutta pyydetty. Hyväksy tulostimen pyyntö"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:144
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:145
|
||||
msgctxt "@action:button"
|
||||
msgid "Retry"
|
||||
msgstr "Yritä uudelleen"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:145
|
||||
msgctxt "@info:tooltip"
|
||||
msgid "Re-send the access request"
|
||||
msgstr "Lähetä käyttöoikeuspyyntö uudelleen"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:147
|
||||
msgctxt "@info:status"
|
||||
msgid "Access to the printer accepted"
|
||||
msgstr "Tulostimen käyttöoikeus hyväksytty"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:148
|
||||
msgctxt "@info:status"
|
||||
msgid "No access to print with this printer. Unable to send print job."
|
||||
msgstr "Tällä tulostimella tulostukseen ei ole käyttöoikeutta. Tulostustyön lähetys ei onnistu."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:149
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72
|
||||
msgctxt "@action:button"
|
||||
msgid "Request Access"
|
||||
msgstr "Pyydä käyttöoikeutta"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:149
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:27
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:71
|
||||
msgctxt "@info:tooltip"
|
||||
msgid "Send access request to the printer"
|
||||
msgstr "Lähetä tulostimen käyttöoikeuspyyntö"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:232
|
||||
#, python-brace-format
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
"Connected over the network to {0}. Please approve the access request on the "
|
||||
"printer."
|
||||
msgstr "Yhdistetty verkon kautta tulostimeen {0}. Hyväksy tulostimen käyttöoikeuspyyntö."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:239
|
||||
#, python-brace-format
|
||||
msgctxt "@info:status"
|
||||
msgid "Connected over the network to {0}."
|
||||
msgstr "Yhdistetty verkon kautta tulostimeen {0}."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:252
|
||||
#, python-brace-format
|
||||
msgctxt "@info:status"
|
||||
msgid "Connected over the network to {0}. No access to control the printer."
|
||||
msgstr "Yhdistetty verkon kautta tulostimeen {0}. Ei käyttöoikeutta tulostimen hallintaan."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:257
|
||||
msgctxt "@info:status"
|
||||
msgid "Access request was denied on the printer."
|
||||
msgstr "Tulostimen käyttöoikeuspyyntö hylättiin."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:260
|
||||
msgctxt "@info:status"
|
||||
msgid "Access request failed due to a timeout."
|
||||
msgstr "Käyttöoikeuspyyntö epäonnistui aikakatkaisun vuoksi."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:323
|
||||
msgctxt "@info:status"
|
||||
msgid "The connection with the network was lost."
|
||||
msgstr "Yhteys verkkoon menetettiin."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:354
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
"The connection with the printer was lost. Check your printer to see if it is "
|
||||
"connected."
|
||||
msgstr "Yhteys tulostimeen menetettiin. Tarkista, onko tulostin yhdistetty."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:466
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
"Unable to start a new print job because the printer is busy. Please check "
|
||||
"the printer."
|
||||
msgstr "Uuden tulostustyön aloittaminen ei onnistu, koska tulostin on varattu. Tarkista tulostin."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:471
|
||||
#, python-format
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
"Unable to start a new print job, printer is busy. Current printer status is "
|
||||
"%s."
|
||||
msgstr "Uuden tulostustyön aloittaminen ei onnistu, koska tulostin on varattu. Nykyinen tulostimen tila on %s."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:491
|
||||
#, python-brace-format
|
||||
msgctxt "@info:status"
|
||||
msgid "Unable to start a new print job. No PrinterCore loaded in slot {0}"
|
||||
msgstr "Uuden tulostustyön aloittaminen ei onnistu. PrinterCorea ei ole ladattu aukkoon {0}"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:498
|
||||
#, python-brace-format
|
||||
msgctxt "@info:status"
|
||||
msgid "Unable to start a new print job. No material loaded in slot {0}"
|
||||
msgstr "Uuden tulostustyön aloittaminen ei onnistu. Materiaalia ei ole ladattu aukkoon {0}"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:509
|
||||
#, python-brace-format
|
||||
msgctxt "@label"
|
||||
msgid "Not enough material for spool {0}."
|
||||
msgstr "Kelalle {0} ei ole tarpeeksi materiaalia."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:519
|
||||
#, python-brace-format
|
||||
msgctxt "@label"
|
||||
msgid "Different PrintCore (Cura: {0}, Printer: {1}) selected for extruder {2}"
|
||||
msgstr "Eri PrintCore (Cura: {0}, tulostin: {1}) valittu suulakkeelle {2}"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:533
|
||||
#, python-brace-format
|
||||
msgctxt "@label"
|
||||
msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}"
|
||||
msgstr "Eri materiaali (Cura: {0}, tulostin: {1}) valittu suulakkeelle {2}"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:536
|
||||
msgctxt "@label"
|
||||
msgid "Are you sure you wish to print with the selected configuration?"
|
||||
msgstr "Haluatko varmasti tulostaa valitulla määrityksellä?"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:537
|
||||
msgctxt "@label"
|
||||
msgid ""
|
||||
"There is a mismatch between the configuration of the printer and Cura. For "
|
||||
"the best result, always slice for the PrintCores and materials that are "
|
||||
"inserted in your printer."
|
||||
msgstr "Tulostimen ja Curan määrityksen välillä on ristiriita. Parhaat tulokset saavutetaan viipaloimalla aina tulostimeen asetetuille PrintCoreille ja materiaaleille."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:543
|
||||
msgctxt "@window:title"
|
||||
msgid "Mismatched configuration"
|
||||
msgstr "Ristiriitainen määritys"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:633
|
||||
msgctxt "@info:status"
|
||||
msgid "Sending data to printer"
|
||||
msgstr "Lähetetään tietoja tulostimeen"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:680
|
||||
msgctxt "@info:status"
|
||||
msgid "Unable to send data to printer. Is another job still active?"
|
||||
msgstr "Tietojen lähetys tulostimeen ei onnistu. Onko toinen työ yhä aktiivinen?"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:804
|
||||
msgctxt "@label:MonitorStatus"
|
||||
msgid "Print aborted. Please check the printer"
|
||||
msgstr "Tulostus keskeytetty. Tarkista tulostin"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:810
|
||||
msgctxt "@label:MonitorStatus"
|
||||
msgid "Pausing print..."
|
||||
msgstr "Tulostus pysäytetään..."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:812
|
||||
msgctxt "@label:MonitorStatus"
|
||||
msgid "Resuming print..."
|
||||
msgstr "Tulostusta jatketaan..."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:920
|
||||
msgctxt "@window:title"
|
||||
msgid "Changes on the Printer"
|
||||
msgstr "Tulostimen muutokset"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:922
|
||||
msgctxt "@label"
|
||||
msgid ""
|
||||
"Do you want to change the PrintCores and materials in Cura to match your "
|
||||
"printer?"
|
||||
msgstr "Haluatko muuttaa Curan PrintCoret ja materiaalit vastaamaan tulostinta?"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:924
|
||||
msgctxt "@label"
|
||||
msgid ""
|
||||
"The PrintCores and/or materials on your printer were changed. For the best "
|
||||
"result, always slice for the PrintCores and materials that are inserted in "
|
||||
"your printer."
|
||||
msgstr "Tulostimen PrintCoreja ja/tai materiaaleja muutettiin. Parhaat tulokset saavutetaan viipaloimalla aina tulostimeen asetetuille PrintCoreille ja materiaaleille."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:19
|
||||
msgctxt "@action"
|
||||
msgid "Connect via Network"
|
||||
msgstr "Yhdistä verkon kautta"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57
|
||||
msgctxt "@title:window"
|
||||
msgid "Connect to Networked Printer"
|
||||
msgstr "Yhdistä verkkotulostimeen"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:67
|
||||
msgctxt "@label"
|
||||
msgid ""
|
||||
"To print directly to your printer over the network, please make sure your "
|
||||
"printer is connected to the network using a network cable or by connecting "
|
||||
"your printer to your WIFI network. If you don't connect Cura with your "
|
||||
"printer, you can still use a USB drive to transfer g-code files to your "
|
||||
"printer.\n"
|
||||
"\n"
|
||||
"Select your printer from the list below:"
|
||||
msgstr "Tulosta suoraan tulostimeen verkon kautta yhdistämällä tulostin verkkoon verkkokaapelilla tai yhdistämällä tulostin Wi-Fi-verkkoon. Jos Curaa ei yhdistetä tulostimeen, GCode-tiedostot voidaan silti siirtää tulostimeen USB-aseman avulla.\n\nValitse tulostin alla olevasta luettelosta:"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106
|
||||
msgctxt "@action:button"
|
||||
msgid "Refresh"
|
||||
msgstr "Päivitä"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:198
|
||||
msgctxt "@label"
|
||||
msgid ""
|
||||
"If your printer is not listed, read the <a href='%1'>network-printing "
|
||||
"troubleshooting guide</a>"
|
||||
msgstr "Jos tulostinta ei ole luettelossa, lue <a href='%1'>verkkotulostuksen vianetsintäopas</a>"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:225
|
||||
msgctxt "@label"
|
||||
msgid "Type"
|
||||
msgstr "Tyyppi"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:231
|
||||
msgctxt "@label"
|
||||
msgid "Ultimaker 3"
|
||||
msgstr "Ultimaker 3"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:231
|
||||
msgctxt "@label"
|
||||
msgid "Ultimaker 3 Extended"
|
||||
msgstr "Ultimaker 3 Extended"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:237
|
||||
msgctxt "@label"
|
||||
msgid "Firmware version"
|
||||
msgstr "Laiteohjelmistoversio"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:249
|
||||
msgctxt "@label"
|
||||
msgid "Address"
|
||||
msgstr "Osoite"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:263
|
||||
msgctxt "@label"
|
||||
msgid "The printer at this address has not yet responded."
|
||||
msgstr "Tämän osoitteen tulostin ei ole vielä vastannut."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:268
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38
|
||||
msgctxt "@action:button"
|
||||
msgid "Connect"
|
||||
msgstr "Yhdistä"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:280
|
||||
msgctxt "@label:"
|
||||
msgid "Print Again"
|
||||
msgstr "Tulosta uudelleen"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:289
|
||||
msgctxt "@title:window"
|
||||
msgid "Printer Address"
|
||||
msgstr "Tulostimen osoite"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:319
|
||||
msgctxt "@alabel"
|
||||
msgid "Enter the IP address or hostname of your printer on the network."
|
||||
msgstr "Anna verkon tulostimen IP-osoite tai isäntänimi."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:346
|
||||
msgctxt "@action:button"
|
||||
msgid "Ok"
|
||||
msgstr "OK"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:37
|
||||
msgctxt "@info:tooltip"
|
||||
msgid "Connect to a printer"
|
||||
msgstr "Yhdistä tulostimeen"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:116
|
||||
msgctxt "@info:tooltip"
|
||||
msgid "Load the configuration of the printer into Cura"
|
||||
msgstr "Lataa tulostimen määritys Curaan"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117
|
||||
msgctxt "@action:button"
|
||||
msgid "Activate Configuration"
|
||||
msgstr "Aktivoi määritys"
|
||||
|
|
|
@ -1831,13 +1831,13 @@ msgstr "Moniteur de l'imprimante"
|
|||
|
||||
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:382
|
||||
msgctxt "@title:tab"
|
||||
msgid "Simple"
|
||||
msgstr "Simple"
|
||||
msgid "Recommended"
|
||||
msgstr "Recommandé"
|
||||
|
||||
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:383
|
||||
msgctxt "@title:tab"
|
||||
msgid "Advanced"
|
||||
msgstr "Avancée"
|
||||
msgid "Custom"
|
||||
msgstr "Personnalisé"
|
||||
|
||||
#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:18
|
||||
#: /home/ruben/Projects/Cura/resources/qml/Menus/NozzleMenu.qml:18
|
||||
|
@ -2295,25 +2295,6 @@ msgid ""
|
|||
"Click to open the profile manager."
|
||||
msgstr "Certaines valeurs de paramètre sont différentes des valeurs enregistrées dans le profil.\n\nCliquez pour ouvrir le gestionnaire de profils."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:24
|
||||
msgid "Modify G-Code"
|
||||
msgstr "Modifier le G-Code"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/__init__.py:12
|
||||
msgctxt "@label"
|
||||
msgid "Post Processing"
|
||||
msgstr "Post-traitement"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/__init__.py:16
|
||||
msgctxt "Description of plugin"
|
||||
msgid "Extension that allows for user created scripts for post processing"
|
||||
msgstr "Extension qui permet le post-traitement des scripts créés par l'utilisateur"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:18
|
||||
msgctxt "@title:window"
|
||||
msgid "Post Processing Plugin"
|
||||
msgstr "Plug-in de post-traitement"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:49
|
||||
msgctxt "@label"
|
||||
msgid "Post Processing Scripts"
|
||||
|
@ -2333,3 +2314,318 @@ msgstr "Paramètres"
|
|||
msgctxt "@info:tooltip"
|
||||
msgid "Change active post-processing scripts"
|
||||
msgstr "Modifier les scripts de post-traitement actifs"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/__init__.py:13
|
||||
msgctxt "@info:whatsthis"
|
||||
msgid "Manages network connections to Ultimaker 3 printers"
|
||||
msgstr "Gère les connexions réseau vers les imprimantes Ultimaker 3"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:100
|
||||
msgctxt "@action:button"
|
||||
msgid "Print over network"
|
||||
msgstr "Imprimer sur le réseau"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:101
|
||||
msgctxt "@properties:tooltip"
|
||||
msgid "Print over network"
|
||||
msgstr "Imprimer sur le réseau"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:143
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
"Access to the printer requested. Please approve the request on the printer"
|
||||
msgstr "Accès à l'imprimante demandé. Veuillez approuver la demande sur l'imprimante"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:144
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:145
|
||||
msgctxt "@action:button"
|
||||
msgid "Retry"
|
||||
msgstr "Réessayer"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:145
|
||||
msgctxt "@info:tooltip"
|
||||
msgid "Re-send the access request"
|
||||
msgstr "Renvoyer la demande d'accès"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:147
|
||||
msgctxt "@info:status"
|
||||
msgid "Access to the printer accepted"
|
||||
msgstr "Accès à l'imprimante accepté"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:148
|
||||
msgctxt "@info:status"
|
||||
msgid "No access to print with this printer. Unable to send print job."
|
||||
msgstr "Aucun accès pour imprimer avec cette imprimante. Impossible d'envoyer la tâche d'impression."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:149
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72
|
||||
msgctxt "@action:button"
|
||||
msgid "Request Access"
|
||||
msgstr "Demande d'accès"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:149
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:27
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:71
|
||||
msgctxt "@info:tooltip"
|
||||
msgid "Send access request to the printer"
|
||||
msgstr "Envoyer la demande d'accès à l'imprimante"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:232
|
||||
#, python-brace-format
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
"Connected over the network to {0}. Please approve the access request on the "
|
||||
"printer."
|
||||
msgstr "Connecté sur le réseau à {0}. Veuillez approuver la demande d'accès sur l'imprimante."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:239
|
||||
#, python-brace-format
|
||||
msgctxt "@info:status"
|
||||
msgid "Connected over the network to {0}."
|
||||
msgstr "Connecté sur le réseau à {0}."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:252
|
||||
#, python-brace-format
|
||||
msgctxt "@info:status"
|
||||
msgid "Connected over the network to {0}. No access to control the printer."
|
||||
msgstr "Connecté sur le réseau à {0}. Pas d'accès pour commander l'imprimante."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:257
|
||||
msgctxt "@info:status"
|
||||
msgid "Access request was denied on the printer."
|
||||
msgstr "La demande d'accès a été refusée sur l'imprimante."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:260
|
||||
msgctxt "@info:status"
|
||||
msgid "Access request failed due to a timeout."
|
||||
msgstr "Échec de la demande d'accès à cause de la durée limite."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:323
|
||||
msgctxt "@info:status"
|
||||
msgid "The connection with the network was lost."
|
||||
msgstr "La connexion avec le réseau a été perdue."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:354
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
"The connection with the printer was lost. Check your printer to see if it is "
|
||||
"connected."
|
||||
msgstr "La connexion avec l'imprimante a été perdue. Vérifiez que votre imprimante est connectée."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:466
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
"Unable to start a new print job because the printer is busy. Please check "
|
||||
"the printer."
|
||||
msgstr "Impossible de démarrer une nouvelle tâche d'impression car l'imprimante est occupée. Vérifiez l'imprimante."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:471
|
||||
#, python-format
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
"Unable to start a new print job, printer is busy. Current printer status is "
|
||||
"%s."
|
||||
msgstr "Impossible de démarrer une nouvelle tâche d'impression car l'imprimante est occupée. L'état actuel de l'imprimante est %s."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:491
|
||||
#, python-brace-format
|
||||
msgctxt "@info:status"
|
||||
msgid "Unable to start a new print job. No PrinterCore loaded in slot {0}"
|
||||
msgstr "Impossible de démarrer une nouvelle tâche d'impression car l'imprimante est occupée. Pas de PrinterCore inséré dans la fente {0}."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:498
|
||||
#, python-brace-format
|
||||
msgctxt "@info:status"
|
||||
msgid "Unable to start a new print job. No material loaded in slot {0}"
|
||||
msgstr "Impossible de démarrer une nouvelle tâche d'impression car l'imprimante est occupée. Pas de matériau chargé dans la fente {0}."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:509
|
||||
#, python-brace-format
|
||||
msgctxt "@label"
|
||||
msgid "Not enough material for spool {0}."
|
||||
msgstr "Pas suffisamment de matériau pour bobine {0}."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:519
|
||||
#, python-brace-format
|
||||
msgctxt "@label"
|
||||
msgid "Different PrintCore (Cura: {0}, Printer: {1}) selected for extruder {2}"
|
||||
msgstr "PrintCore différent (Cura : {0}, Imprimante : {1}) sélectionné pour l'extrudeuse {2}"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:533
|
||||
#, python-brace-format
|
||||
msgctxt "@label"
|
||||
msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}"
|
||||
msgstr "Matériau différent (Cura : {0}, Imprimante : {1}) sélectionné pour l'extrudeuse {2}"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:536
|
||||
msgctxt "@label"
|
||||
msgid "Are you sure you wish to print with the selected configuration?"
|
||||
msgstr "Êtes-vous sûr(e) de vouloir imprimer avec la configuration sélectionnée ?"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:537
|
||||
msgctxt "@label"
|
||||
msgid ""
|
||||
"There is a mismatch between the configuration of the printer and Cura. For "
|
||||
"the best result, always slice for the PrintCores and materials that are "
|
||||
"inserted in your printer."
|
||||
msgstr "Problème de compatibilité entre la configuration de l'imprimante et Cura. Pour un résultat optimal, découpez toujours pour les PrintCores et matériaux insérés dans votre imprimante."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:543
|
||||
msgctxt "@window:title"
|
||||
msgid "Mismatched configuration"
|
||||
msgstr "Configuration différente"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:633
|
||||
msgctxt "@info:status"
|
||||
msgid "Sending data to printer"
|
||||
msgstr "Envoi des données à l'imprimante"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:680
|
||||
msgctxt "@info:status"
|
||||
msgid "Unable to send data to printer. Is another job still active?"
|
||||
msgstr "Impossible d'envoyer les données à l'imprimante. Une autre tâche est-elle toujours active ?"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:804
|
||||
msgctxt "@label:MonitorStatus"
|
||||
msgid "Print aborted. Please check the printer"
|
||||
msgstr "Abandon de l'impression. Vérifiez l'imprimante"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:810
|
||||
msgctxt "@label:MonitorStatus"
|
||||
msgid "Pausing print..."
|
||||
msgstr "Mise en pause de l'impression..."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:812
|
||||
msgctxt "@label:MonitorStatus"
|
||||
msgid "Resuming print..."
|
||||
msgstr "Reprise de l'impression..."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:920
|
||||
msgctxt "@window:title"
|
||||
msgid "Changes on the Printer"
|
||||
msgstr "Modifications sur l'imprimante"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:922
|
||||
msgctxt "@label"
|
||||
msgid ""
|
||||
"Do you want to change the PrintCores and materials in Cura to match your "
|
||||
"printer?"
|
||||
msgstr "Voulez-vous modifier les PrintCores et matériaux dans Cura pour correspondre à votre imprimante ?"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:924
|
||||
msgctxt "@label"
|
||||
msgid ""
|
||||
"The PrintCores and/or materials on your printer were changed. For the best "
|
||||
"result, always slice for the PrintCores and materials that are inserted in "
|
||||
"your printer."
|
||||
msgstr "Les PrintCores et/ou matériaux sur votre imprimante ont été modifiés. Pour un résultat optimal, découpez toujours pour les PrintCores et matériaux insérés dans votre imprimante."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:19
|
||||
msgctxt "@action"
|
||||
msgid "Connect via Network"
|
||||
msgstr "Connecter via le réseau"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57
|
||||
msgctxt "@title:window"
|
||||
msgid "Connect to Networked Printer"
|
||||
msgstr "Connecter à l'imprimante en réseau"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:67
|
||||
msgctxt "@label"
|
||||
msgid ""
|
||||
"To print directly to your printer over the network, please make sure your "
|
||||
"printer is connected to the network using a network cable or by connecting "
|
||||
"your printer to your WIFI network. If you don't connect Cura with your "
|
||||
"printer, you can still use a USB drive to transfer g-code files to your "
|
||||
"printer.\n"
|
||||
"\n"
|
||||
"Select your printer from the list below:"
|
||||
msgstr "Pour imprimer directement sur votre imprimante sur le réseau, assurez-vous que votre imprimante est connectée au réseau via un câble réseau ou en connectant votre imprimante à votre réseau Wi-Fi. Si vous ne connectez pas Cura avec votre imprimante, vous pouvez utiliser une clé USB pour transférer les fichiers g-code sur votre imprimante.\n\nSélectionnez votre imprimante dans la liste ci-dessous :"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106
|
||||
msgctxt "@action:button"
|
||||
msgid "Refresh"
|
||||
msgstr "Rafraîchir"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:198
|
||||
msgctxt "@label"
|
||||
msgid ""
|
||||
"If your printer is not listed, read the <a href='%1'>network-printing "
|
||||
"troubleshooting guide</a>"
|
||||
msgstr "Si votre imprimante n'apparaît pas dans la liste, lisez le <a href='%1'>guide de dépannage de l'impression en réseau</a>"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:225
|
||||
msgctxt "@label"
|
||||
msgid "Type"
|
||||
msgstr "Type"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:231
|
||||
msgctxt "@label"
|
||||
msgid "Ultimaker 3"
|
||||
msgstr "Ultimaker 3"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:231
|
||||
msgctxt "@label"
|
||||
msgid "Ultimaker 3 Extended"
|
||||
msgstr "Ultimaker 3 Extended"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:237
|
||||
msgctxt "@label"
|
||||
msgid "Firmware version"
|
||||
msgstr "Version du firmware"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:249
|
||||
msgctxt "@label"
|
||||
msgid "Address"
|
||||
msgstr "Adresse"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:263
|
||||
msgctxt "@label"
|
||||
msgid "The printer at this address has not yet responded."
|
||||
msgstr "L'imprimante à cette adresse n'a pas encore répondu."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:268
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38
|
||||
msgctxt "@action:button"
|
||||
msgid "Connect"
|
||||
msgstr "Connecter"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:280
|
||||
msgctxt "@label:"
|
||||
msgid "Print Again"
|
||||
msgstr "Imprimer à nouveau"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:289
|
||||
msgctxt "@title:window"
|
||||
msgid "Printer Address"
|
||||
msgstr "Adresse de l'imprimante"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:319
|
||||
msgctxt "@alabel"
|
||||
msgid "Enter the IP address or hostname of your printer on the network."
|
||||
msgstr "Saisissez l'adresse IP ou le nom d'hôte de votre imprimante sur le réseau."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:346
|
||||
msgctxt "@action:button"
|
||||
msgid "Ok"
|
||||
msgstr "Ok"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:37
|
||||
msgctxt "@info:tooltip"
|
||||
msgid "Connect to a printer"
|
||||
msgstr "Connecter à une imprimante"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:116
|
||||
msgctxt "@info:tooltip"
|
||||
msgid "Load the configuration of the printer into Cura"
|
||||
msgstr "Charger la configuration de l'imprimante dans Cura"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117
|
||||
msgctxt "@action:button"
|
||||
msgid "Activate Configuration"
|
||||
msgstr "Activer la configuration"
|
||||
|
|
|
@ -160,13 +160,13 @@ msgstr "Salvato su unità rimovibile {0} come {1}"
|
|||
#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:103
|
||||
msgctxt "@action:button"
|
||||
msgid "Eject"
|
||||
msgstr "Espelli"
|
||||
msgstr "Rimuovi"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:103
|
||||
#, python-brace-format
|
||||
msgctxt "@action"
|
||||
msgid "Eject removable device {0}"
|
||||
msgstr "Espelli il dispositivo rimovibile {0}"
|
||||
msgstr "Rimuovi il dispositivo rimovibile {0}"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py:108
|
||||
#, python-brace-format
|
||||
|
@ -1831,13 +1831,13 @@ msgstr "Monitoraggio stampante"
|
|||
|
||||
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:382
|
||||
msgctxt "@title:tab"
|
||||
msgid "Simple"
|
||||
msgstr "Semplice"
|
||||
msgid "Recommended"
|
||||
msgstr "Consigliata"
|
||||
|
||||
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:383
|
||||
msgctxt "@title:tab"
|
||||
msgid "Advanced"
|
||||
msgstr "Avanzata"
|
||||
msgid "Custom"
|
||||
msgstr "Personalizzata"
|
||||
|
||||
#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:18
|
||||
#: /home/ruben/Projects/Cura/resources/qml/Menus/NozzleMenu.qml:18
|
||||
|
@ -2008,7 +2008,7 @@ msgstr "Sel&eziona tutti i modelli"
|
|||
#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:248
|
||||
msgctxt "@action:inmenu menubar:edit"
|
||||
msgid "&Clear Build Plate"
|
||||
msgstr "&Cancella piano di stampa"
|
||||
msgstr "&Cancellare piano di stampa"
|
||||
|
||||
#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:258
|
||||
msgctxt "@action:inmenu menubar:file"
|
||||
|
@ -2295,25 +2295,6 @@ msgid ""
|
|||
"Click to open the profile manager."
|
||||
msgstr "Alcuni valori di impostazione sono diversi dai valori memorizzati nel profilo.\n\nFare clic per aprire la gestione profili."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:24
|
||||
msgid "Modify G-Code"
|
||||
msgstr "Modifica il codice G"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/__init__.py:12
|
||||
msgctxt "@label"
|
||||
msgid "Post Processing"
|
||||
msgstr "Post-elaborazione"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/__init__.py:16
|
||||
msgctxt "Description of plugin"
|
||||
msgid "Extension that allows for user created scripts for post processing"
|
||||
msgstr "Estensione che consente la post-elaborazione degli script creati da utente"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:18
|
||||
msgctxt "@title:window"
|
||||
msgid "Post Processing Plugin"
|
||||
msgstr "Plug-in di post-elaborazione"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:49
|
||||
msgctxt "@label"
|
||||
msgid "Post Processing Scripts"
|
||||
|
@ -2333,3 +2314,318 @@ msgstr "Impostazioni"
|
|||
msgctxt "@info:tooltip"
|
||||
msgid "Change active post-processing scripts"
|
||||
msgstr "Modifica script di post-elaborazione attivi"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/__init__.py:13
|
||||
msgctxt "@info:whatsthis"
|
||||
msgid "Manages network connections to Ultimaker 3 printers"
|
||||
msgstr "Gestisce le connessioni di rete alle stampanti Ultimaker 3"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:100
|
||||
msgctxt "@action:button"
|
||||
msgid "Print over network"
|
||||
msgstr "Stampa sulla rete"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:101
|
||||
msgctxt "@properties:tooltip"
|
||||
msgid "Print over network"
|
||||
msgstr "Stampa sulla rete"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:143
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
"Access to the printer requested. Please approve the request on the printer"
|
||||
msgstr "Richiesto accesso alla stampante. Approvare la richiesta sulla stampante"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:144
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:145
|
||||
msgctxt "@action:button"
|
||||
msgid "Retry"
|
||||
msgstr "Riprova"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:145
|
||||
msgctxt "@info:tooltip"
|
||||
msgid "Re-send the access request"
|
||||
msgstr "Invia nuovamente la richiesta di accesso"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:147
|
||||
msgctxt "@info:status"
|
||||
msgid "Access to the printer accepted"
|
||||
msgstr "Accesso alla stampante accettato"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:148
|
||||
msgctxt "@info:status"
|
||||
msgid "No access to print with this printer. Unable to send print job."
|
||||
msgstr "Nessun accesso per stampare con questa stampante. Impossibile inviare il processo di stampa."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:149
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72
|
||||
msgctxt "@action:button"
|
||||
msgid "Request Access"
|
||||
msgstr "Richiesta di accesso"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:149
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:27
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:71
|
||||
msgctxt "@info:tooltip"
|
||||
msgid "Send access request to the printer"
|
||||
msgstr "Invia la richiesta di accesso alla stampante"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:232
|
||||
#, python-brace-format
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
"Connected over the network to {0}. Please approve the access request on the "
|
||||
"printer."
|
||||
msgstr "Collegato alla rete a {0}. Si prega di approvare la richiesta di accesso sulla stampante."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:239
|
||||
#, python-brace-format
|
||||
msgctxt "@info:status"
|
||||
msgid "Connected over the network to {0}."
|
||||
msgstr "Collegato alla rete a {0}."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:252
|
||||
#, python-brace-format
|
||||
msgctxt "@info:status"
|
||||
msgid "Connected over the network to {0}. No access to control the printer."
|
||||
msgstr "Collegato alla rete a {0}. Nessun accesso per controllare la stampante."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:257
|
||||
msgctxt "@info:status"
|
||||
msgid "Access request was denied on the printer."
|
||||
msgstr "Richiesta di accesso negata sulla stampante."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:260
|
||||
msgctxt "@info:status"
|
||||
msgid "Access request failed due to a timeout."
|
||||
msgstr "Richiesta di accesso non riuscita per superamento tempo."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:323
|
||||
msgctxt "@info:status"
|
||||
msgid "The connection with the network was lost."
|
||||
msgstr "Il collegamento con la rete si è interrotto."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:354
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
"The connection with the printer was lost. Check your printer to see if it is "
|
||||
"connected."
|
||||
msgstr "Il collegamento con la stampante si è interrotto. Controllare la stampante per verificare se è collegata."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:466
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
"Unable to start a new print job because the printer is busy. Please check "
|
||||
"the printer."
|
||||
msgstr "Impossibile avviare un nuovo processo di stampa perché la stampante è occupata. Controllare la stampante."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:471
|
||||
#, python-format
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
"Unable to start a new print job, printer is busy. Current printer status is "
|
||||
"%s."
|
||||
msgstr "Impossibile avviare un nuovo processo di stampa perché la stampante è occupata. Stato stampante corrente %s."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:491
|
||||
#, python-brace-format
|
||||
msgctxt "@info:status"
|
||||
msgid "Unable to start a new print job. No PrinterCore loaded in slot {0}"
|
||||
msgstr "Impossibile avviare un nuovo processo di stampa. Nessun PrinterCore caricato nello slot {0}"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:498
|
||||
#, python-brace-format
|
||||
msgctxt "@info:status"
|
||||
msgid "Unable to start a new print job. No material loaded in slot {0}"
|
||||
msgstr "Impossibile avviare un nuovo processo di stampa. Nessun materiale caricato nello slot {0}"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:509
|
||||
#, python-brace-format
|
||||
msgctxt "@label"
|
||||
msgid "Not enough material for spool {0}."
|
||||
msgstr "Materiale per la bobina insufficiente {0}."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:519
|
||||
#, python-brace-format
|
||||
msgctxt "@label"
|
||||
msgid "Different PrintCore (Cura: {0}, Printer: {1}) selected for extruder {2}"
|
||||
msgstr "PrintCore diverso (Cura: {0}, Stampante: {1}) selezionato per l’estrusore {2}"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:533
|
||||
#, python-brace-format
|
||||
msgctxt "@label"
|
||||
msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}"
|
||||
msgstr "Materiale diverso (Cura: {0}, Stampante: {1}) selezionato per l’estrusore {2}"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:536
|
||||
msgctxt "@label"
|
||||
msgid "Are you sure you wish to print with the selected configuration?"
|
||||
msgstr "Sei sicuro di voler stampare con la configurazione selezionata?"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:537
|
||||
msgctxt "@label"
|
||||
msgid ""
|
||||
"There is a mismatch between the configuration of the printer and Cura. For "
|
||||
"the best result, always slice for the PrintCores and materials that are "
|
||||
"inserted in your printer."
|
||||
msgstr "Le configurazioni della stampante e di Cura non corrispondono. Per ottenere i migliori risultati, sezionare sempre per i PrintCore e i materiali inseriti nella stampante utilizzata."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:543
|
||||
msgctxt "@window:title"
|
||||
msgid "Mismatched configuration"
|
||||
msgstr "Mancata corrispondenza della configurazione"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:633
|
||||
msgctxt "@info:status"
|
||||
msgid "Sending data to printer"
|
||||
msgstr "Invio dati alla stampante in corso"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:680
|
||||
msgctxt "@info:status"
|
||||
msgid "Unable to send data to printer. Is another job still active?"
|
||||
msgstr "Impossibile inviare i dati alla stampante. Altro processo ancora attivo?"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:804
|
||||
msgctxt "@label:MonitorStatus"
|
||||
msgid "Print aborted. Please check the printer"
|
||||
msgstr "Stampa interrotta. Controllare la stampante"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:810
|
||||
msgctxt "@label:MonitorStatus"
|
||||
msgid "Pausing print..."
|
||||
msgstr "Messa in pausa stampa..."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:812
|
||||
msgctxt "@label:MonitorStatus"
|
||||
msgid "Resuming print..."
|
||||
msgstr "Ripresa stampa..."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:920
|
||||
msgctxt "@window:title"
|
||||
msgid "Changes on the Printer"
|
||||
msgstr "Modifiche alla stampante."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:922
|
||||
msgctxt "@label"
|
||||
msgid ""
|
||||
"Do you want to change the PrintCores and materials in Cura to match your "
|
||||
"printer?"
|
||||
msgstr "Desideri modificare i PrintCore e i materiali in Cura per abbinare la stampante?"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:924
|
||||
msgctxt "@label"
|
||||
msgid ""
|
||||
"The PrintCores and/or materials on your printer were changed. For the best "
|
||||
"result, always slice for the PrintCores and materials that are inserted in "
|
||||
"your printer."
|
||||
msgstr "I PrintCore e/o i materiali della stampante sono stati modificati. Per ottenere i migliori risultati, sezionare sempre per i PrintCore e i materiali inseriti nella stampante utilizzata."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:19
|
||||
msgctxt "@action"
|
||||
msgid "Connect via Network"
|
||||
msgstr "Collega tramite rete"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57
|
||||
msgctxt "@title:window"
|
||||
msgid "Connect to Networked Printer"
|
||||
msgstr "Collega alla stampante in rete"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:67
|
||||
msgctxt "@label"
|
||||
msgid ""
|
||||
"To print directly to your printer over the network, please make sure your "
|
||||
"printer is connected to the network using a network cable or by connecting "
|
||||
"your printer to your WIFI network. If you don't connect Cura with your "
|
||||
"printer, you can still use a USB drive to transfer g-code files to your "
|
||||
"printer.\n"
|
||||
"\n"
|
||||
"Select your printer from the list below:"
|
||||
msgstr "Per stampare direttamente sulla stampante in rete, verificare che la stampante desiderata sia collegata alla rete mediante un cavo di rete o mediante collegamento alla rete WIFI. Se si collega Cura alla stampante, è comunque possibile utilizzare una chiavetta USB per trasferire i file codice G alla stampante.\n\nSelezionare la stampante dall’elenco seguente:"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106
|
||||
msgctxt "@action:button"
|
||||
msgid "Refresh"
|
||||
msgstr "Aggiorna"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:198
|
||||
msgctxt "@label"
|
||||
msgid ""
|
||||
"If your printer is not listed, read the <a href='%1'>network-printing "
|
||||
"troubleshooting guide</a>"
|
||||
msgstr "Se la stampante non è nell’elenco, leggere la <a href=’%1’>guida alla ricerca guasti per la stampa in rete</a>"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:225
|
||||
msgctxt "@label"
|
||||
msgid "Type"
|
||||
msgstr "Tipo"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:231
|
||||
msgctxt "@label"
|
||||
msgid "Ultimaker 3"
|
||||
msgstr "Ultimaker 3"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:231
|
||||
msgctxt "@label"
|
||||
msgid "Ultimaker 3 Extended"
|
||||
msgstr "Ultimaker3 Extended"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:237
|
||||
msgctxt "@label"
|
||||
msgid "Firmware version"
|
||||
msgstr "Versione firmware"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:249
|
||||
msgctxt "@label"
|
||||
msgid "Address"
|
||||
msgstr "Indirizzo"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:263
|
||||
msgctxt "@label"
|
||||
msgid "The printer at this address has not yet responded."
|
||||
msgstr "La stampante a questo indirizzo non ha ancora risposto."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:268
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38
|
||||
msgctxt "@action:button"
|
||||
msgid "Connect"
|
||||
msgstr "Collega"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:280
|
||||
msgctxt "@label:"
|
||||
msgid "Print Again"
|
||||
msgstr "Ripeti stampa"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:289
|
||||
msgctxt "@title:window"
|
||||
msgid "Printer Address"
|
||||
msgstr "Indirizzo stampante"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:319
|
||||
msgctxt "@alabel"
|
||||
msgid "Enter the IP address or hostname of your printer on the network."
|
||||
msgstr "Inserire l’indirizzo IP o l’hostname della stampante sulla rete."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:346
|
||||
msgctxt "@action:button"
|
||||
msgid "Ok"
|
||||
msgstr "Ok"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:37
|
||||
msgctxt "@info:tooltip"
|
||||
msgid "Connect to a printer"
|
||||
msgstr "Collega a una stampante"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:116
|
||||
msgctxt "@info:tooltip"
|
||||
msgid "Load the configuration of the printer into Cura"
|
||||
msgstr "Carica la configurazione della stampante in Cura"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117
|
||||
msgctxt "@action:button"
|
||||
msgid "Activate Configuration"
|
||||
msgstr "Attiva la configurazione"
|
||||
|
|
|
@ -2257,12 +2257,12 @@ msgstr "Regola il posizionamento delle strutture di supporto. Il posizionamento
|
|||
#: fdmprinter.def.json
|
||||
msgctxt "support_type option buildplate"
|
||||
msgid "Touching Buildplate"
|
||||
msgstr "Sostegno solo delle pareti esterne"
|
||||
msgstr "Contatto con il Piano di Stampa"
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_type option everywhere"
|
||||
msgid "Everywhere"
|
||||
msgstr "In tutti i possibili punti"
|
||||
msgstr "In Tutti i Possibili Punti"
|
||||
|
||||
#: fdmprinter.def.json
|
||||
msgctxt "support_angle label"
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -2,11 +2,11 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"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/Cura\n"
|
||||
"POT-Creation-Date: 2016-09-20 17:35+0000\n"
|
||||
"PO-Revision-Date: 2016-09-29 13:02+0200\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE\n"
|
||||
"PO-Revision-Date: 2016-10-11 16:05+0200\n"
|
||||
"Last-Translator: Ruben Dulek <r.dulek@ultimaker.com>\n"
|
||||
"Language-Team: Ultimaker\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
@ -34,7 +34,7 @@ msgstr "De extruder train die voor het printen wordt gebruikt. Deze wordt gebrui
|
|||
#: fdmextruder.def.json
|
||||
msgctxt "machine_nozzle_offset_x label"
|
||||
msgid "Nozzle X Offset"
|
||||
msgstr "Offset X-nozzle"
|
||||
msgstr "X-Offset Nozzle"
|
||||
|
||||
#: fdmextruder.def.json
|
||||
msgctxt "machine_nozzle_offset_x description"
|
||||
|
@ -44,7 +44,7 @@ msgstr "De X-coördinaat van de offset van de nozzle."
|
|||
#: fdmextruder.def.json
|
||||
msgctxt "machine_nozzle_offset_y label"
|
||||
msgid "Nozzle Y Offset"
|
||||
msgstr "Offset Y-nozzle"
|
||||
msgstr "Y-Offset Nozzle"
|
||||
|
||||
#: fdmextruder.def.json
|
||||
msgctxt "machine_nozzle_offset_y description"
|
||||
|
@ -54,7 +54,7 @@ msgstr "De Y-coördinaat van de offset van de nozzle."
|
|||
#: fdmextruder.def.json
|
||||
msgctxt "machine_extruder_start_code label"
|
||||
msgid "Extruder Start G-Code"
|
||||
msgstr "G-code van extruderstart"
|
||||
msgstr "Start G-code van Extruder"
|
||||
|
||||
#: fdmextruder.def.json
|
||||
msgctxt "machine_extruder_start_code description"
|
||||
|
@ -64,7 +64,7 @@ msgstr "Start-g-code die wordt uitgevoerd wanneer de extruder wordt ingeschakeld
|
|||
#: fdmextruder.def.json
|
||||
msgctxt "machine_extruder_start_pos_abs label"
|
||||
msgid "Extruder Start Position Absolute"
|
||||
msgstr "Absolute startpositie extruder"
|
||||
msgstr "Absolute Startpositie Extruder"
|
||||
|
||||
#: fdmextruder.def.json
|
||||
msgctxt "machine_extruder_start_pos_abs description"
|
||||
|
@ -76,7 +76,7 @@ msgstr "Maak van de startpositie van de extruder de absolute startpositie, in pl
|
|||
#: fdmextruder.def.json
|
||||
msgctxt "machine_extruder_start_pos_x label"
|
||||
msgid "Extruder Start Position X"
|
||||
msgstr "X-startpositie extruder"
|
||||
msgstr "X-startpositie Extruder"
|
||||
|
||||
#: fdmextruder.def.json
|
||||
msgctxt "machine_extruder_start_pos_x description"
|
||||
|
@ -86,7 +86,7 @@ msgstr "De X-coördinaat van de startpositie wanneer de extruder wordt ingeschak
|
|||
#: fdmextruder.def.json
|
||||
msgctxt "machine_extruder_start_pos_y label"
|
||||
msgid "Extruder Start Position Y"
|
||||
msgstr "Y-startpositie extruder"
|
||||
msgstr "Y-startpositie Extruder"
|
||||
|
||||
#: fdmextruder.def.json
|
||||
msgctxt "machine_extruder_start_pos_y description"
|
||||
|
@ -96,7 +96,7 @@ msgstr "De Y-coördinaat van de startpositie wanneer de extruder wordt ingeschak
|
|||
#: fdmextruder.def.json
|
||||
msgctxt "machine_extruder_end_code label"
|
||||
msgid "Extruder End G-Code"
|
||||
msgstr "G-code van extrudereinde"
|
||||
msgstr "Eind-g-code van Extruder"
|
||||
|
||||
#: fdmextruder.def.json
|
||||
msgctxt "machine_extruder_end_code description"
|
||||
|
@ -106,7 +106,7 @@ msgstr "Eind-g-code die wordt uitgevoerd wanneer de extruder wordt uitgeschakeld
|
|||
#: fdmextruder.def.json
|
||||
msgctxt "machine_extruder_end_pos_abs label"
|
||||
msgid "Extruder End Position Absolute"
|
||||
msgstr "Absolute eindpositie extruder"
|
||||
msgstr "Absolute Eindpositie Extruder"
|
||||
|
||||
#: fdmextruder.def.json
|
||||
msgctxt "machine_extruder_end_pos_abs description"
|
||||
|
@ -118,7 +118,7 @@ msgstr "Maak van de eindpositie van de extruder de absolute eindpositie, in plaa
|
|||
#: fdmextruder.def.json
|
||||
msgctxt "machine_extruder_end_pos_x label"
|
||||
msgid "Extruder End Position X"
|
||||
msgstr "X-eindpositie extruder"
|
||||
msgstr "X-eindpositie Extruder"
|
||||
|
||||
#: fdmextruder.def.json
|
||||
msgctxt "machine_extruder_end_pos_x description"
|
||||
|
@ -128,7 +128,7 @@ msgstr "De X-coördinaat van de eindpositie wanneer de extruder wordt uitgeschak
|
|||
#: fdmextruder.def.json
|
||||
msgctxt "machine_extruder_end_pos_y label"
|
||||
msgid "Extruder End Position Y"
|
||||
msgstr "Y-eindpositie extruder"
|
||||
msgstr "Y-eindpositie Extruder"
|
||||
|
||||
#: fdmextruder.def.json
|
||||
msgctxt "machine_extruder_end_pos_y description"
|
||||
|
@ -138,19 +138,19 @@ msgstr "De Y-coördinaat van de eindpositie wanneer de extruder wordt uitgeschak
|
|||
#: fdmextruder.def.json
|
||||
msgctxt "extruder_prime_pos_z label"
|
||||
msgid "Extruder Prime Z Position"
|
||||
msgstr "Z-positie voor primen extruder"
|
||||
msgstr "Z-positie voor Primen Extruder"
|
||||
|
||||
#: fdmextruder.def.json
|
||||
msgctxt "extruder_prime_pos_z description"
|
||||
msgid ""
|
||||
"The Z coordinate of the position where the nozzle primes at the start of "
|
||||
"printing."
|
||||
msgstr "De Z-coördinaat van de positie waar filament in de nozzle wordt teruggeduwd aan het begin van het printen."
|
||||
msgstr "De Z-coördinaat van de positie waar filament in de nozzle wordt geprimet aan het begin van het printen."
|
||||
|
||||
#: fdmextruder.def.json
|
||||
msgctxt "platform_adhesion label"
|
||||
msgid "Build Plate Adhesion"
|
||||
msgstr "Hechting aan platform"
|
||||
msgstr "Hechting aan Platform"
|
||||
|
||||
#: fdmextruder.def.json
|
||||
msgctxt "platform_adhesion description"
|
||||
|
@ -160,23 +160,23 @@ msgstr "Hechting"
|
|||
#: fdmextruder.def.json
|
||||
msgctxt "extruder_prime_pos_x label"
|
||||
msgid "Extruder Prime X Position"
|
||||
msgstr "X-positie voor primen extruder"
|
||||
msgstr "X-positie voor Primen Extruder"
|
||||
|
||||
#: fdmextruder.def.json
|
||||
msgctxt "extruder_prime_pos_x description"
|
||||
msgid ""
|
||||
"The X coordinate of the position where the nozzle primes at the start of "
|
||||
"printing."
|
||||
msgstr "De X-coördinaat van de positie waar filament in de nozzle wordt teruggeduwd aan het begin van het printen."
|
||||
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 label"
|
||||
msgid "Extruder Prime Y Position"
|
||||
msgstr "Y-positie voor primen extruder"
|
||||
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 teruggeduwd aan het begin van het printen."
|
||||
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
|
@ -1831,13 +1831,13 @@ msgstr "Yazıcı İzleyici"
|
|||
|
||||
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:382
|
||||
msgctxt "@title:tab"
|
||||
msgid "Simple"
|
||||
msgstr "Basit"
|
||||
msgid "Recommended"
|
||||
msgstr "Önerilen Ayarlar"
|
||||
|
||||
#: /home/ruben/Projects/Cura/resources/qml/Sidebar.qml:383
|
||||
msgctxt "@title:tab"
|
||||
msgid "Advanced"
|
||||
msgstr "Gelişmiş"
|
||||
msgid "Custom"
|
||||
msgstr "Özel"
|
||||
|
||||
#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:18
|
||||
#: /home/ruben/Projects/Cura/resources/qml/Menus/NozzleMenu.qml:18
|
||||
|
@ -2295,25 +2295,6 @@ msgid ""
|
|||
"Click to open the profile manager."
|
||||
msgstr "Bazı ayar değerleri profilinizde saklanan değerlerden farklıdır.\n\nProfil yöneticisini açmak için tıklayın."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.py:24
|
||||
msgid "Modify G-Code"
|
||||
msgstr "GCode Değiştir"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/__init__.py:12
|
||||
msgctxt "@label"
|
||||
msgid "Post Processing"
|
||||
msgstr "Son İşleme"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/__init__.py:16
|
||||
msgctxt "Description of plugin"
|
||||
msgid "Extension that allows for user created scripts for post processing"
|
||||
msgstr "Kullanıcının oluşturduğu komut dosyalarına son işleme için izin veren uzantı"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:18
|
||||
msgctxt "@title:window"
|
||||
msgid "Post Processing Plugin"
|
||||
msgstr "Son İşleme Uzantısı"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/PostProcessingPlugin/PostProcessingPlugin.qml:49
|
||||
msgctxt "@label"
|
||||
msgid "Post Processing Scripts"
|
||||
|
@ -2333,3 +2314,318 @@ msgstr "Ayarlar"
|
|||
msgctxt "@info:tooltip"
|
||||
msgid "Change active post-processing scripts"
|
||||
msgstr "Etkin son işleme dosyalarını değiştir"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/__init__.py:13
|
||||
msgctxt "@info:whatsthis"
|
||||
msgid "Manages network connections to Ultimaker 3 printers"
|
||||
msgstr "Ultimaker 3 yazıcıları için ağ bağlantılarını yönetir"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:100
|
||||
msgctxt "@action:button"
|
||||
msgid "Print over network"
|
||||
msgstr "Ağ üzerinden yazdır"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:101
|
||||
msgctxt "@properties:tooltip"
|
||||
msgid "Print over network"
|
||||
msgstr "Ağ üzerinden yazdır"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:143
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
"Access to the printer requested. Please approve the request on the printer"
|
||||
msgstr "İstenen yazıcıya erişim. Lütfen yazıcı isteğini onaylayın"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:144
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:145
|
||||
msgctxt "@action:button"
|
||||
msgid "Retry"
|
||||
msgstr "Yeniden dene"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:145
|
||||
msgctxt "@info:tooltip"
|
||||
msgid "Re-send the access request"
|
||||
msgstr "Erişim talebini yeniden gönder"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:147
|
||||
msgctxt "@info:status"
|
||||
msgid "Access to the printer accepted"
|
||||
msgstr "Kabul edilen yazıcıya erişim"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:148
|
||||
msgctxt "@info:status"
|
||||
msgid "No access to print with this printer. Unable to send print job."
|
||||
msgstr "Bu yazıcıyla yazdırmaya erişim yok. Yazdırma işi gönderilemedi."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:149
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:28
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:72
|
||||
msgctxt "@action:button"
|
||||
msgid "Request Access"
|
||||
msgstr "Erişim Talep Et"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:149
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:27
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:71
|
||||
msgctxt "@info:tooltip"
|
||||
msgid "Send access request to the printer"
|
||||
msgstr "Yazıcıya erişim talebi gönder"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:232
|
||||
#, python-brace-format
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
"Connected over the network to {0}. Please approve the access request on the "
|
||||
"printer."
|
||||
msgstr "Ağ üzerinden şuraya bağlandı: {0}. Lütfen yazıcıya erişim isteğini onaylayın."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:239
|
||||
#, python-brace-format
|
||||
msgctxt "@info:status"
|
||||
msgid "Connected over the network to {0}."
|
||||
msgstr "Ağ üzerinden şuraya bağlandı: {0}."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:252
|
||||
#, python-brace-format
|
||||
msgctxt "@info:status"
|
||||
msgid "Connected over the network to {0}. No access to control the printer."
|
||||
msgstr "Ağ üzerinden şuraya bağlandı: {0}. Yazıcıyı kontrol etmek için erişim yok."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:257
|
||||
msgctxt "@info:status"
|
||||
msgid "Access request was denied on the printer."
|
||||
msgstr "Yazıcıya erişim talebi reddedildi."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:260
|
||||
msgctxt "@info:status"
|
||||
msgid "Access request failed due to a timeout."
|
||||
msgstr "Erişim talebi zaman aşımı nedeniyle başarısız oldu."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:323
|
||||
msgctxt "@info:status"
|
||||
msgid "The connection with the network was lost."
|
||||
msgstr "Ağ bağlantısı kaybedildi."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:354
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
"The connection with the printer was lost. Check your printer to see if it is "
|
||||
"connected."
|
||||
msgstr "Yazıcı bağlantısı kaybedildi. Yazıcınızın bağlı olup olmadığını kontrol edin."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:466
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
"Unable to start a new print job because the printer is busy. Please check "
|
||||
"the printer."
|
||||
msgstr "Yazıcı meşgul olduğu için yeni bir yazdırma başlatılamıyor. Lütfen yazıcıyı kontrol edin."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:471
|
||||
#, python-format
|
||||
msgctxt "@info:status"
|
||||
msgid ""
|
||||
"Unable to start a new print job, printer is busy. Current printer status is "
|
||||
"%s."
|
||||
msgstr "Yazıcı meşgul, yeni bir yazdırma başlatılamıyor. Geçerli yazıcı durumu: %s."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:491
|
||||
#, python-brace-format
|
||||
msgctxt "@info:status"
|
||||
msgid "Unable to start a new print job. No PrinterCore loaded in slot {0}"
|
||||
msgstr "Yeni bir yazdırma başlatılamıyor. {0} yuvasına PrinterCore yüklenmedi"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:498
|
||||
#, python-brace-format
|
||||
msgctxt "@info:status"
|
||||
msgid "Unable to start a new print job. No material loaded in slot {0}"
|
||||
msgstr "Yeni bir yazdırma başlatılamıyor. {0} yuvasına Malzeme yüklenmedi"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:509
|
||||
#, python-brace-format
|
||||
msgctxt "@label"
|
||||
msgid "Not enough material for spool {0}."
|
||||
msgstr "Biriktirme {0} için yeterli malzeme yok."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:519
|
||||
#, python-brace-format
|
||||
msgctxt "@label"
|
||||
msgid "Different PrintCore (Cura: {0}, Printer: {1}) selected for extruder {2}"
|
||||
msgstr "Farklı PrintCore (Cura: {0}, Yazıcı: {1}), ekstrüder {2} için seçildi"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:533
|
||||
#, python-brace-format
|
||||
msgctxt "@label"
|
||||
msgid "Different material (Cura: {0}, Printer: {1}) selected for extruder {2}"
|
||||
msgstr "Farklı malzeme (Cura: {0}, Yazıcı: {1}), ekstrüder {2} için seçildi"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:536
|
||||
msgctxt "@label"
|
||||
msgid "Are you sure you wish to print with the selected configuration?"
|
||||
msgstr "Seçilen yapılandırma ile yazdırmak istediğinizden emin misiniz?"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:537
|
||||
msgctxt "@label"
|
||||
msgid ""
|
||||
"There is a mismatch between the configuration of the printer and Cura. For "
|
||||
"the best result, always slice for the PrintCores and materials that are "
|
||||
"inserted in your printer."
|
||||
msgstr "Yazıcı yapılandırması ve Cura arasında uyumsuzluk var. En iyi sonucu almak istiyorsanız, her zaman PrintCore ve yazıcıya eklenen malzemeler için dilimleme yapın."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:543
|
||||
msgctxt "@window:title"
|
||||
msgid "Mismatched configuration"
|
||||
msgstr "Uyumsuz yapılandırma"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:633
|
||||
msgctxt "@info:status"
|
||||
msgid "Sending data to printer"
|
||||
msgstr "Veriler yazıcıya gönderiliyor"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:680
|
||||
msgctxt "@info:status"
|
||||
msgid "Unable to send data to printer. Is another job still active?"
|
||||
msgstr "Veriler yazıcıya gönderilemedi. Hala etkin olan başka bir iş var mı?"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:804
|
||||
msgctxt "@label:MonitorStatus"
|
||||
msgid "Print aborted. Please check the printer"
|
||||
msgstr "Yazdırma durduruldu. Lütfen yazıcıyı kontrol edin"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:810
|
||||
msgctxt "@label:MonitorStatus"
|
||||
msgid "Pausing print..."
|
||||
msgstr "Yazdırma duraklatılıyor..."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:812
|
||||
msgctxt "@label:MonitorStatus"
|
||||
msgid "Resuming print..."
|
||||
msgstr "Yazdırma devam ediyor..."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:920
|
||||
msgctxt "@window:title"
|
||||
msgid "Changes on the Printer"
|
||||
msgstr "Yazıcıdaki Değişiklikler"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:922
|
||||
msgctxt "@label"
|
||||
msgid ""
|
||||
"Do you want to change the PrintCores and materials in Cura to match your "
|
||||
"printer?"
|
||||
msgstr "Yazıcıya uyumlu hale getirmek için PrintCore ve Cura’daki malzemeleri değiştirmek istiyor musunuz?"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py:924
|
||||
msgctxt "@label"
|
||||
msgid ""
|
||||
"The PrintCores and/or materials on your printer were changed. For the best "
|
||||
"result, always slice for the PrintCores and materials that are inserted in "
|
||||
"your printer."
|
||||
msgstr "PrintCore ve/veya yazıcınızdaki malzemeler değiştirildi. En iyi sonucu almak istiyorsanız, her zaman PrintCore ve yazıcıya eklenen malzemeler için dilimleme yapın."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.py:19
|
||||
msgctxt "@action"
|
||||
msgid "Connect via Network"
|
||||
msgstr "Ağ ile Bağlan"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:57
|
||||
msgctxt "@title:window"
|
||||
msgid "Connect to Networked Printer"
|
||||
msgstr "Ağ Yazıcısına Bağlan"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:67
|
||||
msgctxt "@label"
|
||||
msgid ""
|
||||
"To print directly to your printer over the network, please make sure your "
|
||||
"printer is connected to the network using a network cable or by connecting "
|
||||
"your printer to your WIFI network. If you don't connect Cura with your "
|
||||
"printer, you can still use a USB drive to transfer g-code files to your "
|
||||
"printer.\n"
|
||||
"\n"
|
||||
"Select your printer from the list below:"
|
||||
msgstr "Yazıcınıza ağ üzerinden doğrudan bağlamak için, lütfen yazıcınızın ağ kablosu kullanan bir ağa bağlı olduğundan emin olun veya yazıcınızı WiFi ağına bağlayın. Cura'ya yazıcınız ile bağlanamıyorsanız g-code dosyalarını yazıcınıza aktarmak için USB sürücüsü kullanabilirsiniz.\n\nAşağıdaki listeden yazıcınızı seçin:"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:106
|
||||
msgctxt "@action:button"
|
||||
msgid "Refresh"
|
||||
msgstr "Yenile"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:198
|
||||
msgctxt "@label"
|
||||
msgid ""
|
||||
"If your printer is not listed, read the <a href='%1'>network-printing "
|
||||
"troubleshooting guide</a>"
|
||||
msgstr "Yazıcınız listede yoksa <a href=’%1’>ağ yazdırma sorun giderme kılavuzunu</a> okuyun"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:225
|
||||
msgctxt "@label"
|
||||
msgid "Type"
|
||||
msgstr "Tür"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:231
|
||||
msgctxt "@label"
|
||||
msgid "Ultimaker 3"
|
||||
msgstr "Ultimaker 3"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:231
|
||||
msgctxt "@label"
|
||||
msgid "Ultimaker 3 Extended"
|
||||
msgstr "Genişletilmiş Ultimaker 3"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:237
|
||||
msgctxt "@label"
|
||||
msgid "Firmware version"
|
||||
msgstr "Üretici yazılımı sürümü"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:249
|
||||
msgctxt "@label"
|
||||
msgid "Address"
|
||||
msgstr "Adres"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:263
|
||||
msgctxt "@label"
|
||||
msgid "The printer at this address has not yet responded."
|
||||
msgstr "Bu adresteki yazıcı henüz yanıt vermedi."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:268
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:38
|
||||
msgctxt "@action:button"
|
||||
msgid "Connect"
|
||||
msgstr "Bağlan"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:280
|
||||
msgctxt "@label:"
|
||||
msgid "Print Again"
|
||||
msgstr "Yeniden Yazdır"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:289
|
||||
msgctxt "@title:window"
|
||||
msgid "Printer Address"
|
||||
msgstr "Yazıcı Adresi"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:319
|
||||
msgctxt "@alabel"
|
||||
msgid "Enter the IP address or hostname of your printer on the network."
|
||||
msgstr "IP adresini veya yazıcınızın ağ üzerindeki ana bilgisayar adını girin."
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/DiscoverUM3Action.qml:346
|
||||
msgctxt "@action:button"
|
||||
msgid "Ok"
|
||||
msgstr "Tamam"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:37
|
||||
msgctxt "@info:tooltip"
|
||||
msgid "Connect to a printer"
|
||||
msgstr "Yazıcıya Bağlan"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:116
|
||||
msgctxt "@info:tooltip"
|
||||
msgid "Load the configuration of the printer into Cura"
|
||||
msgstr "Yazıcı yapılandırmasını Cura’ya yükle"
|
||||
|
||||
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/UM3InfoComponents.qml:117
|
||||
msgctxt "@action:button"
|
||||
msgid "Activate Configuration"
|
||||
msgstr "Yapılandırmayı Etkinleştir"
|
||||
|
|
BIN
resources/images/Ultimaker3Extendedbackplate.png
Normal file
BIN
resources/images/Ultimaker3Extendedbackplate.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
BIN
resources/images/Ultimaker3backplate.png
Normal file
BIN
resources/images/Ultimaker3backplate.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 13 KiB |
|
@ -1,35 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Generic ABS profile. Serves as an example file, data in this file is not correct.
|
||||
-->
|
||||
<fdmmaterial xmlns="http://www.ultimaker.com/material">
|
||||
<metadata>
|
||||
<name>
|
||||
<brand>Generic</brand>
|
||||
<material>ABS</material>
|
||||
<color>Generic</color>
|
||||
</name>
|
||||
<GUID>60636bb4-518f-42e7-8237-fe77b194ebe0</GUID>
|
||||
<version>1</version>
|
||||
<color_code>#8cb219</color_code>
|
||||
</metadata>
|
||||
<properties>
|
||||
<density>1.10</density>
|
||||
<diameter>2.85</diameter>
|
||||
</properties>
|
||||
<settings>
|
||||
<setting key="print temperature">240</setting>
|
||||
<setting key="heated bed temperature">80</setting>
|
||||
<setting key="standby temperature">200</setting>
|
||||
|
||||
<machine>
|
||||
<machine_identifier manufacturer="Ultimaker" product="Ultimaker 2+"/>
|
||||
<machine_identifier manufacturer="Ultimaker" product="Ultimaker 2 Extended+"/>
|
||||
|
||||
<hotend id="0.25 mm" />
|
||||
<hotend id="0.4 mm" />
|
||||
<hotend id="0.6 mm" />
|
||||
<hotend id="0.8 mm" />
|
||||
</machine>
|
||||
</settings>
|
||||
</fdmmaterial>
|
|
@ -1,35 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Generic CPE profile. Serves as an example file, data in this file is not correct.
|
||||
-->
|
||||
<fdmmaterial xmlns="http://www.ultimaker.com/material">
|
||||
<metadata>
|
||||
<name>
|
||||
<brand>Generic</brand>
|
||||
<material>CPE</material>
|
||||
<color>Generic</color>
|
||||
</name>
|
||||
<GUID>12f41353-1a33-415e-8b4f-a775a6c70cc6</GUID>
|
||||
<version>1</version>
|
||||
<color_code>#159499</color_code>
|
||||
</metadata>
|
||||
<properties>
|
||||
<density>1.27</density>
|
||||
<diameter>2.85</diameter>
|
||||
</properties>
|
||||
<settings>
|
||||
<setting key="print temperature">250</setting>
|
||||
<setting key="heated bed temperature">70</setting>
|
||||
<setting key="standby temperature">175</setting>
|
||||
|
||||
<machine>
|
||||
<machine_identifier manufacturer="Ultimaker" product="Ultimaker 2+"/>
|
||||
<machine_identifier manufacturer="Ultimaker" product="Ultimaker 2 Extended+"/>
|
||||
|
||||
<hotend id="0.25 mm" />
|
||||
<hotend id="0.4 mm" />
|
||||
<hotend id="0.6 mm" />
|
||||
<hotend id="0.8 mm" />
|
||||
</machine>
|
||||
</settings>
|
||||
</fdmmaterial>
|
|
@ -1,39 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Generic CPE+ profile. Serves as an example file, data in this file is not correct.
|
||||
-->
|
||||
<fdmmaterial xmlns="http://www.ultimaker.com/material">
|
||||
<metadata>
|
||||
<name>
|
||||
<brand>Generic</brand>
|
||||
<material>CPE+</material>
|
||||
<color>Generic</color>
|
||||
</name>
|
||||
<GUID>e2409626-b5a0-4025-b73e-b58070219259</GUID>
|
||||
<version>1</version>
|
||||
<color_code>#3633F2</color_code>
|
||||
</metadata>
|
||||
<properties>
|
||||
<density>1.18</density>
|
||||
<diameter>2.85</diameter>
|
||||
</properties>
|
||||
<settings>
|
||||
<setting key="hardware compatible">no</setting><!-- This material is not supported on most printers due to high temperatures -->
|
||||
<setting key="print temperature">260</setting>
|
||||
<setting key="heated bed temperature">110</setting>
|
||||
<setting key="standby temperature">175</setting>
|
||||
|
||||
<machine>
|
||||
<machine_identifier manufacturer="Ultimaker" product="Ultimaker 2+"/>
|
||||
<machine_identifier manufacturer="Ultimaker" product="Ultimaker 2 Extended+"/>
|
||||
<setting key="hardware compatible">yes</setting>
|
||||
|
||||
<hotend id="0.25 mm">
|
||||
<setting key="hardware compatible">no</setting>
|
||||
</hotend>
|
||||
<hotend id="0.4 mm" />
|
||||
<hotend id="0.6 mm" />
|
||||
<hotend id="0.8 mm" />
|
||||
</machine>
|
||||
</settings>
|
||||
</fdmmaterial>
|
|
@ -1,36 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Generic Nylon profile. Serves as an example file, data in this file is not correct.
|
||||
-->
|
||||
<fdmmaterial xmlns="http://www.ultimaker.com/material">
|
||||
<metadata>
|
||||
<name>
|
||||
<brand>Generic</brand>
|
||||
<material>Nylon</material>
|
||||
<color>Generic</color>
|
||||
</name>
|
||||
<GUID>28fb4162-db74-49e1-9008-d05f1e8bef5c</GUID>
|
||||
<version>1</version>
|
||||
<color_code>#3DF266</color_code>
|
||||
</metadata>
|
||||
<properties>
|
||||
<density>1.14</density>
|
||||
<diameter>2.85</diameter>
|
||||
</properties>
|
||||
<settings>
|
||||
<setting key="print temperature">250</setting>
|
||||
<setting key="heated bed temperature">60</setting>
|
||||
<setting key="standby temperature">175</setting>
|
||||
|
||||
<machine>
|
||||
<machine_identifier manufacturer="Ultimaker" product="Ultimaker 2+"/>
|
||||
<machine_identifier manufacturer="Ultimaker" product="Ultimaker 2 Extended+"/>
|
||||
<setting key="hardware compatible">yes</setting>
|
||||
|
||||
<hotend id="0.25 mm" />
|
||||
<hotend id="0.4 mm" />
|
||||
<hotend id="0.6 mm" />
|
||||
<hotend id="0.8 mm" />
|
||||
</machine>
|
||||
</settings>
|
||||
</fdmmaterial>
|
|
@ -1,37 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Generic PC profile. Serves as an example file, data in this file is not correct.
|
||||
-->
|
||||
<fdmmaterial xmlns="http://www.ultimaker.com/material">
|
||||
<metadata>
|
||||
<name>
|
||||
<brand>Generic</brand>
|
||||
<material>PC</material>
|
||||
<color>Generic</color>
|
||||
</name>
|
||||
<GUID>98c05714-bf4e-4455-ba27-57d74fe331e4</GUID>
|
||||
<version>1</version>
|
||||
<color_code>#F29030</color_code>
|
||||
</metadata>
|
||||
<properties>
|
||||
<density>1.19</density>
|
||||
<diameter>2.85</diameter>
|
||||
</properties>
|
||||
<settings>
|
||||
<setting key="hardware compatible">no</setting><!-- This material is not supported on most printers due to high temperatures -->
|
||||
<setting key="print temperature">260</setting>
|
||||
<setting key="heated bed temperature">110</setting>
|
||||
<setting key="standby temperature">175</setting>
|
||||
|
||||
<machine>
|
||||
<machine_identifier manufacturer="Ultimaker" product="Ultimaker 2+"/>
|
||||
<machine_identifier manufacturer="Ultimaker" product="Ultimaker 2 Extended+"/>
|
||||
<setting key="hardware compatible">yes</setting>
|
||||
|
||||
<hotend id="0.25 mm" />
|
||||
<hotend id="0.4 mm" />
|
||||
<hotend id="0.6 mm" />
|
||||
<hotend id="0.8 mm" />
|
||||
</machine>
|
||||
</settings>
|
||||
</fdmmaterial>
|
|
@ -1,51 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Generic PLA profile. Serves as an example file, data in this file is not correct.
|
||||
-->
|
||||
<fdmmaterial xmlns="http://www.ultimaker.com/material">
|
||||
<metadata>
|
||||
<name>
|
||||
<brand>Generic</brand>
|
||||
<material>PLA</material>
|
||||
<color>Generic</color>
|
||||
</name>
|
||||
<GUID>506c9f0d-e3aa-4bd4-b2d2-23e2425b1aa9</GUID>
|
||||
<version>1</version>
|
||||
<color_code>#ffc924</color_code>
|
||||
</metadata>
|
||||
<properties>
|
||||
<density>1.24</density>
|
||||
<diameter>2.85</diameter>
|
||||
</properties>
|
||||
<settings>
|
||||
<setting key="print temperature">200</setting>
|
||||
<setting key="heated bed temperature">60</setting>
|
||||
<setting key="standby temperature">175</setting>
|
||||
|
||||
<machine>
|
||||
<machine_identifier manufacturer="Ultimaker" product="Ultimaker 2+"/>
|
||||
<machine_identifier manufacturer="Ultimaker" product="Ultimaker 2 Extended+"/>
|
||||
|
||||
<hotend id="0.25 mm" />
|
||||
<hotend id="0.4 mm" />
|
||||
<hotend id="0.6 mm" />
|
||||
<hotend id="0.8 mm" />
|
||||
</machine>
|
||||
|
||||
<machine>
|
||||
<machine_identifier manufacturer="Ultimaker" product="Ultimaker 2"/>
|
||||
<machine_identifier manufacturer="Ultimaker" product="Ultimaker 2 Go"/>
|
||||
<machine_identifier manufacturer="Ultimaker" product="Ultimaker 2 Extended"/>
|
||||
<setting key="standby temperature">150</setting>
|
||||
<setting key="processing temperature graph">
|
||||
<point flow="2" temperature="180"/>
|
||||
<point flow="10" temperature="230"/>
|
||||
</setting>
|
||||
</machine>
|
||||
|
||||
<machine>
|
||||
<machine_identifier manufacturer="Ultimaker" product="Ultimaker Original"/>
|
||||
<setting key="standby temperature">150</setting>
|
||||
</machine>
|
||||
</settings>
|
||||
</fdmmaterial>
|
|
@ -1,39 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Generic TPU 95A profile. Serves as an example file, data in this file is not correct.
|
||||
-->
|
||||
<fdmmaterial xmlns="http://www.ultimaker.com/material">
|
||||
<metadata>
|
||||
<name>
|
||||
<brand>Generic</brand>
|
||||
<material>TPU 95A</material>
|
||||
<color>Generic</color>
|
||||
</name>
|
||||
<GUID>1d52b2be-a3a2-41de-a8b1-3bcdb5618695</GUID>
|
||||
<version>1</version>
|
||||
<color_code>#B22744</color_code>
|
||||
</metadata>
|
||||
<properties>
|
||||
<density>1.22</density>
|
||||
<diameter>2.85</diameter>
|
||||
</properties>
|
||||
<settings>
|
||||
<setting key="hardware compatible">no</setting><!-- This material is not supported on most printers due to high temperatures -->
|
||||
<setting key="print temperature">260</setting>
|
||||
<setting key="heated bed temperature">110</setting>
|
||||
<setting key="standby temperature">175</setting>
|
||||
|
||||
<machine>
|
||||
<machine_identifier manufacturer="Ultimaker" product="Ultimaker 2+"/>
|
||||
<machine_identifier manufacturer="Ultimaker" product="Ultimaker 2 Extended+"/>
|
||||
<setting key="hardware compatible">yes</setting>
|
||||
|
||||
<hotend id="0.25 mm" />
|
||||
<hotend id="0.4 mm" />
|
||||
<hotend id="0.6 mm" />
|
||||
<hotend id="0.8 mm">
|
||||
<setting key="hardware compatible">no</setting>
|
||||
</hotend>
|
||||
</machine>
|
||||
</settings>
|
||||
</fdmmaterial>
|
|
@ -1,35 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Automatically generated ABS profile. Data in this file may not be not correct.
|
||||
-->
|
||||
<fdmmaterial xmlns="http://www.ultimaker.com/material">
|
||||
<metadata>
|
||||
<name>
|
||||
<brand>Ultimaker</brand>
|
||||
<material>ABS</material>
|
||||
<color>Black</color>
|
||||
</name>
|
||||
<GUID>2f9d2279-9b0e-4765-bf9b-d1e1e13f3c49</GUID>
|
||||
<version>0</version>
|
||||
<color_code>#2a292a</color_code>
|
||||
</metadata>
|
||||
<properties>
|
||||
<density>1.10</density>
|
||||
<diameter>2.85</diameter>
|
||||
</properties>
|
||||
<settings>
|
||||
<setting key="print temperature">240</setting>
|
||||
<setting key="heated bed temperature">80</setting>
|
||||
<setting key="standby temperature">200</setting>
|
||||
|
||||
<machine>
|
||||
<machine_identifier manufacturer="Ultimaker" product="Ultimaker 2+"/>
|
||||
<machine_identifier manufacturer="Ultimaker" product="Ultimaker 2 Extended+"/>
|
||||
|
||||
<hotend id="0.25 mm" />
|
||||
<hotend id="0.4 mm" />
|
||||
<hotend id="0.6 mm" />
|
||||
<hotend id="0.8 mm" />
|
||||
</machine>
|
||||
</settings>
|
||||
</fdmmaterial>
|
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