mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-08-14 00:15:56 +08:00
Merge branch 'master' into PP-129_increase-filter-distance
This commit is contained in:
commit
c4748ba332
5
SECURITY.md
Normal file
5
SECURITY.md
Normal file
@ -0,0 +1,5 @@
|
||||
# Reporting vulnerabilities
|
||||
|
||||
If you discover a vulnerability, please let us know as soon as possible via `security@ultimaker.com`.
|
||||
Please do not take advantage of the vulnerability and do not reveal the problem to others.
|
||||
To allow us to resolve the issue, please do provide us with sufficient information to reproduce the problem.
|
@ -1,258 +0,0 @@
|
||||
# Copyright (c) 2020 Ultimaker B.V.
|
||||
# Cura is released under the terms of the LGPLv3 or higher.
|
||||
from typing import Optional
|
||||
|
||||
from UM.Decorators import deprecated
|
||||
from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
|
||||
from UM.Logger import Logger
|
||||
from UM.Math.Polygon import Polygon
|
||||
from UM.Math.Vector import Vector
|
||||
from UM.Scene.SceneNode import SceneNode
|
||||
from cura.Arranging.ShapeArray import ShapeArray
|
||||
from cura.BuildVolume import BuildVolume
|
||||
from cura.Scene import ZOffsetDecorator
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
import numpy
|
||||
import copy
|
||||
|
||||
LocationSuggestion = namedtuple("LocationSuggestion", ["x", "y", "penalty_points", "priority"])
|
||||
"""Return object for bestSpot"""
|
||||
|
||||
|
||||
class Arrange:
|
||||
"""
|
||||
The Arrange classed is used together with :py:class:`cura.Arranging.ShapeArray.ShapeArray`. Use it to find good locations for objects that you try to put
|
||||
on a build place. Different priority schemes can be defined so it alters the behavior while using the same logic.
|
||||
|
||||
.. note::
|
||||
|
||||
Make sure the scale is the same between :py:class:`cura.Arranging.ShapeArray.ShapeArray` objects and the :py:class:`cura.Arranging.Arrange.Arrange` instance.
|
||||
"""
|
||||
|
||||
build_volume = None # type: Optional[BuildVolume]
|
||||
|
||||
@deprecated("Use the functions in Nest2dArrange instead", "4.8")
|
||||
def __init__(self, x, y, offset_x, offset_y, scale = 0.5):
|
||||
self._scale = scale # convert input coordinates to arrange coordinates
|
||||
world_x, world_y = int(x * self._scale), int(y * self._scale)
|
||||
self._shape = (world_y, world_x)
|
||||
self._priority = numpy.zeros((world_y, world_x), dtype=numpy.int32) # beware: these are indexed (y, x)
|
||||
self._priority_unique_values = []
|
||||
self._occupied = numpy.zeros((world_y, world_x), dtype=numpy.int32) # beware: these are indexed (y, x)
|
||||
self._offset_x = int(offset_x * self._scale)
|
||||
self._offset_y = int(offset_y * self._scale)
|
||||
self._last_priority = 0
|
||||
self._is_empty = True
|
||||
|
||||
@classmethod
|
||||
@deprecated("Use the functions in Nest2dArrange instead", "4.8")
|
||||
def create(cls, scene_root = None, fixed_nodes = None, scale = 0.5, x = 350, y = 250, min_offset = 8) -> "Arrange":
|
||||
"""Helper to create an :py:class:`cura.Arranging.Arrange.Arrange` instance
|
||||
|
||||
Either fill in scene_root and create will find all sliceable nodes by itself, or use fixed_nodes to provide the
|
||||
nodes yourself.
|
||||
|
||||
:param scene_root: Root for finding all scene nodes default = None
|
||||
:param fixed_nodes: Scene nodes to be placed default = None
|
||||
:param scale: default = 0.5
|
||||
:param x: default = 350
|
||||
:param y: default = 250
|
||||
:param min_offset: default = 8
|
||||
"""
|
||||
|
||||
arranger = Arrange(x, y, x // 2, y // 2, scale = scale)
|
||||
arranger.centerFirst()
|
||||
|
||||
if fixed_nodes is None:
|
||||
fixed_nodes = []
|
||||
for node_ in DepthFirstIterator(scene_root):
|
||||
# Only count sliceable objects
|
||||
if node_.callDecoration("isSliceable"):
|
||||
fixed_nodes.append(node_)
|
||||
|
||||
# Place all objects fixed nodes
|
||||
for fixed_node in fixed_nodes:
|
||||
vertices = fixed_node.callDecoration("getConvexHullHead") or fixed_node.callDecoration("getConvexHull")
|
||||
if not vertices:
|
||||
continue
|
||||
vertices = vertices.getMinkowskiHull(Polygon.approximatedCircle(min_offset))
|
||||
points = copy.deepcopy(vertices._points)
|
||||
|
||||
# After scaling (like up to 0.1 mm) the node might not have points
|
||||
if not points.size:
|
||||
continue
|
||||
try:
|
||||
shape_arr = ShapeArray.fromPolygon(points, scale = scale)
|
||||
except ValueError:
|
||||
Logger.logException("w", "Unable to create polygon")
|
||||
continue
|
||||
arranger.place(0, 0, shape_arr)
|
||||
|
||||
# If a build volume was set, add the disallowed areas
|
||||
if Arrange.build_volume:
|
||||
disallowed_areas = Arrange.build_volume.getDisallowedAreasNoBrim()
|
||||
for area in disallowed_areas:
|
||||
points = copy.deepcopy(area._points)
|
||||
shape_arr = ShapeArray.fromPolygon(points, scale = scale)
|
||||
arranger.place(0, 0, shape_arr, update_empty = False)
|
||||
return arranger
|
||||
|
||||
def resetLastPriority(self):
|
||||
"""This resets the optimization for finding location based on size"""
|
||||
|
||||
self._last_priority = 0
|
||||
|
||||
@deprecated("Use the functions in Nest2dArrange instead", "4.8")
|
||||
def findNodePlacement(self, node: SceneNode, offset_shape_arr: ShapeArray, hull_shape_arr: ShapeArray, step = 1) -> bool:
|
||||
"""Find placement for a node (using offset shape) and place it (using hull shape)
|
||||
|
||||
:param node: The node to be placed
|
||||
:param offset_shape_arr: shape array with offset, for placing the shape
|
||||
:param hull_shape_arr: shape array without offset, used to find location
|
||||
:param step: default = 1
|
||||
:return: the nodes that should be placed
|
||||
"""
|
||||
|
||||
best_spot = self.bestSpot(
|
||||
hull_shape_arr, start_prio = self._last_priority, step = step)
|
||||
x, y = best_spot.x, best_spot.y
|
||||
|
||||
# Save the last priority.
|
||||
self._last_priority = best_spot.priority
|
||||
|
||||
# Ensure that the object is above the build platform
|
||||
node.removeDecorator(ZOffsetDecorator.ZOffsetDecorator)
|
||||
bbox = node.getBoundingBox()
|
||||
if bbox:
|
||||
center_y = node.getWorldPosition().y - bbox.bottom
|
||||
else:
|
||||
center_y = 0
|
||||
|
||||
if x is not None: # We could find a place
|
||||
node.setPosition(Vector(x, center_y, y))
|
||||
found_spot = True
|
||||
self.place(x, y, offset_shape_arr) # place the object in arranger
|
||||
else:
|
||||
Logger.log("d", "Could not find spot!")
|
||||
found_spot = False
|
||||
node.setPosition(Vector(200, center_y, 100))
|
||||
return found_spot
|
||||
|
||||
def centerFirst(self):
|
||||
"""Fill priority, center is best. Lower value is better. """
|
||||
|
||||
# Square distance: creates a more round shape
|
||||
self._priority = numpy.fromfunction(
|
||||
lambda j, i: (self._offset_x - i) ** 2 + (self._offset_y - j) ** 2, self._shape, dtype=numpy.int32)
|
||||
self._priority_unique_values = numpy.unique(self._priority)
|
||||
self._priority_unique_values.sort()
|
||||
|
||||
def backFirst(self):
|
||||
"""Fill priority, back is best. Lower value is better """
|
||||
|
||||
self._priority = numpy.fromfunction(
|
||||
lambda j, i: 10 * j + abs(self._offset_x - i), self._shape, dtype=numpy.int32)
|
||||
self._priority_unique_values = numpy.unique(self._priority)
|
||||
self._priority_unique_values.sort()
|
||||
|
||||
def checkShape(self, x, y, shape_arr) -> Optional[numpy.ndarray]:
|
||||
"""Return the amount of "penalty points" for polygon, which is the sum of priority
|
||||
|
||||
:param x: x-coordinate to check shape
|
||||
:param y: y-coordinate to check shape
|
||||
:param shape_arr: the shape array object to place
|
||||
:return: None if occupied
|
||||
"""
|
||||
|
||||
x = int(self._scale * x)
|
||||
y = int(self._scale * y)
|
||||
offset_x = x + self._offset_x + shape_arr.offset_x
|
||||
offset_y = y + self._offset_y + shape_arr.offset_y
|
||||
if offset_x < 0 or offset_y < 0:
|
||||
return None # out of bounds in self._occupied
|
||||
occupied_x_max = offset_x + shape_arr.arr.shape[1]
|
||||
occupied_y_max = offset_y + shape_arr.arr.shape[0]
|
||||
if occupied_x_max > self._occupied.shape[1] + 1 or occupied_y_max > self._occupied.shape[0] + 1:
|
||||
return None # out of bounds in self._occupied
|
||||
occupied_slice = self._occupied[
|
||||
offset_y:occupied_y_max,
|
||||
offset_x:occupied_x_max]
|
||||
try:
|
||||
if numpy.any(occupied_slice[numpy.where(shape_arr.arr == 1)]):
|
||||
return None
|
||||
except IndexError: # out of bounds if you try to place an object outside
|
||||
return None
|
||||
prio_slice = self._priority[
|
||||
offset_y:offset_y + shape_arr.arr.shape[0],
|
||||
offset_x:offset_x + shape_arr.arr.shape[1]]
|
||||
return numpy.sum(prio_slice[numpy.where(shape_arr.arr == 1)])
|
||||
|
||||
def bestSpot(self, shape_arr, start_prio = 0, step = 1) -> LocationSuggestion:
|
||||
"""Find "best" spot for ShapeArray
|
||||
|
||||
:param shape_arr: shape array
|
||||
:param start_prio: Start with this priority value (and skip the ones before)
|
||||
:param step: Slicing value, higher = more skips = faster but less accurate
|
||||
:return: namedtuple with properties x, y, penalty_points, priority.
|
||||
"""
|
||||
|
||||
start_idx_list = numpy.where(self._priority_unique_values == start_prio)
|
||||
if start_idx_list:
|
||||
try:
|
||||
start_idx = start_idx_list[0][0]
|
||||
except IndexError:
|
||||
start_idx = 0
|
||||
else:
|
||||
start_idx = 0
|
||||
priority = 0
|
||||
for priority in self._priority_unique_values[start_idx::step]:
|
||||
tryout_idx = numpy.where(self._priority == priority)
|
||||
for idx in range(len(tryout_idx[0])):
|
||||
x = tryout_idx[1][idx]
|
||||
y = tryout_idx[0][idx]
|
||||
projected_x = int((x - self._offset_x) / self._scale)
|
||||
projected_y = int((y - self._offset_y) / self._scale)
|
||||
|
||||
penalty_points = self.checkShape(projected_x, projected_y, shape_arr)
|
||||
if penalty_points is not None:
|
||||
return LocationSuggestion(x = projected_x, y = projected_y, penalty_points = penalty_points, priority = priority)
|
||||
return LocationSuggestion(x = None, y = None, penalty_points = None, priority = priority) # No suitable location found :-(
|
||||
|
||||
def place(self, x, y, shape_arr, update_empty = True):
|
||||
"""Place the object.
|
||||
|
||||
Marks the locations in self._occupied and self._priority
|
||||
|
||||
:param x:
|
||||
:param y:
|
||||
:param shape_arr:
|
||||
:param update_empty: updates the _is_empty, used when adding disallowed areas
|
||||
"""
|
||||
|
||||
x = int(self._scale * x)
|
||||
y = int(self._scale * y)
|
||||
offset_x = x + self._offset_x + shape_arr.offset_x
|
||||
offset_y = y + self._offset_y + shape_arr.offset_y
|
||||
shape_y, shape_x = self._occupied.shape
|
||||
|
||||
min_x = min(max(offset_x, 0), shape_x - 1)
|
||||
min_y = min(max(offset_y, 0), shape_y - 1)
|
||||
max_x = min(max(offset_x + shape_arr.arr.shape[1], 0), shape_x - 1)
|
||||
max_y = min(max(offset_y + shape_arr.arr.shape[0], 0), shape_y - 1)
|
||||
occupied_slice = self._occupied[min_y:max_y, min_x:max_x]
|
||||
# we use a slice of shape because it can be out of bounds
|
||||
new_occupied = numpy.where(shape_arr.arr[
|
||||
min_y - offset_y:max_y - offset_y, min_x - offset_x:max_x - offset_x] == 1)
|
||||
if update_empty and new_occupied:
|
||||
self._is_empty = False
|
||||
occupied_slice[new_occupied] = 1
|
||||
|
||||
# Set priority to low (= high number), so it won't get picked at trying out.
|
||||
prio_slice = self._priority[min_y:max_y, min_x:max_x]
|
||||
prio_slice[new_occupied] = 999
|
||||
|
||||
@property
|
||||
def isEmpty(self):
|
||||
return self._is_empty
|
@ -1,154 +0,0 @@
|
||||
# Copyright (c) 2019 Ultimaker B.V.
|
||||
# Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
from UM.Application import Application
|
||||
from UM.Job import Job
|
||||
from UM.Scene.SceneNode import SceneNode
|
||||
from UM.Math.Vector import Vector
|
||||
from UM.Operations.TranslateOperation import TranslateOperation
|
||||
from UM.Operations.GroupedOperation import GroupedOperation
|
||||
from UM.Message import Message
|
||||
from UM.i18n import i18nCatalog
|
||||
i18n_catalog = i18nCatalog("cura")
|
||||
|
||||
from cura.Scene.ZOffsetDecorator import ZOffsetDecorator
|
||||
from cura.Arranging.Arrange import Arrange
|
||||
from cura.Arranging.ShapeArray import ShapeArray
|
||||
|
||||
from typing import List
|
||||
|
||||
|
||||
class ArrangeArray:
|
||||
"""Do arrangements on multiple build plates (aka builtiplexer)"""
|
||||
|
||||
def __init__(self, x: int, y: int, fixed_nodes: List[SceneNode]) -> None:
|
||||
self._x = x
|
||||
self._y = y
|
||||
self._fixed_nodes = fixed_nodes
|
||||
self._count = 0
|
||||
self._first_empty = None
|
||||
self._has_empty = False
|
||||
self._arrange = [] # type: List[Arrange]
|
||||
|
||||
def _updateFirstEmpty(self):
|
||||
for i, a in enumerate(self._arrange):
|
||||
if a.isEmpty:
|
||||
self._first_empty = i
|
||||
self._has_empty = True
|
||||
return
|
||||
self._first_empty = None
|
||||
self._has_empty = False
|
||||
|
||||
def add(self):
|
||||
new_arrange = Arrange.create(x = self._x, y = self._y, fixed_nodes = self._fixed_nodes)
|
||||
self._arrange.append(new_arrange)
|
||||
self._count += 1
|
||||
self._updateFirstEmpty()
|
||||
|
||||
def count(self):
|
||||
return self._count
|
||||
|
||||
def get(self, index):
|
||||
return self._arrange[index]
|
||||
|
||||
def getFirstEmpty(self):
|
||||
if not self._has_empty:
|
||||
self.add()
|
||||
return self._arrange[self._first_empty]
|
||||
|
||||
|
||||
class ArrangeObjectsAllBuildPlatesJob(Job):
|
||||
def __init__(self, nodes: List[SceneNode], min_offset = 8) -> None:
|
||||
super().__init__()
|
||||
self._nodes = nodes
|
||||
self._min_offset = min_offset
|
||||
|
||||
def run(self):
|
||||
status_message = Message(i18n_catalog.i18nc("@info:status", "Finding new location for objects"),
|
||||
lifetime = 0,
|
||||
dismissable=False,
|
||||
progress = 0,
|
||||
title = i18n_catalog.i18nc("@info:title", "Finding Location"))
|
||||
status_message.show()
|
||||
|
||||
|
||||
# Collect nodes to be placed
|
||||
nodes_arr = [] # fill with (size, node, offset_shape_arr, hull_shape_arr)
|
||||
for node in self._nodes:
|
||||
offset_shape_arr, hull_shape_arr = ShapeArray.fromNode(node, min_offset = self._min_offset)
|
||||
nodes_arr.append((offset_shape_arr.arr.shape[0] * offset_shape_arr.arr.shape[1], node, offset_shape_arr, hull_shape_arr))
|
||||
|
||||
# Sort the nodes with the biggest area first.
|
||||
nodes_arr.sort(key=lambda item: item[0])
|
||||
nodes_arr.reverse()
|
||||
|
||||
global_container_stack = Application.getInstance().getGlobalContainerStack()
|
||||
machine_width = global_container_stack.getProperty("machine_width", "value")
|
||||
machine_depth = global_container_stack.getProperty("machine_depth", "value")
|
||||
|
||||
x, y = machine_width, machine_depth
|
||||
|
||||
arrange_array = ArrangeArray(x = x, y = y, fixed_nodes = [])
|
||||
arrange_array.add()
|
||||
|
||||
# Place nodes one at a time
|
||||
start_priority = 0
|
||||
grouped_operation = GroupedOperation()
|
||||
found_solution_for_all = True
|
||||
left_over_nodes = [] # nodes that do not fit on an empty build plate
|
||||
|
||||
for idx, (size, node, offset_shape_arr, hull_shape_arr) in enumerate(nodes_arr):
|
||||
# For performance reasons, we assume that when a location does not fit,
|
||||
# it will also not fit for the next object (while what can be untrue).
|
||||
|
||||
try_placement = True
|
||||
|
||||
current_build_plate_number = 0 # always start with the first one
|
||||
|
||||
while try_placement:
|
||||
# make sure that current_build_plate_number is not going crazy or you'll have a lot of arrange objects
|
||||
while current_build_plate_number >= arrange_array.count():
|
||||
arrange_array.add()
|
||||
arranger = arrange_array.get(current_build_plate_number)
|
||||
|
||||
best_spot = arranger.bestSpot(hull_shape_arr, start_prio=start_priority)
|
||||
x, y = best_spot.x, best_spot.y
|
||||
node.removeDecorator(ZOffsetDecorator)
|
||||
if node.getBoundingBox():
|
||||
center_y = node.getWorldPosition().y - node.getBoundingBox().bottom
|
||||
else:
|
||||
center_y = 0
|
||||
if x is not None: # We could find a place
|
||||
arranger.place(x, y, offset_shape_arr) # place the object in the arranger
|
||||
|
||||
node.callDecoration("setBuildPlateNumber", current_build_plate_number)
|
||||
grouped_operation.addOperation(TranslateOperation(node, Vector(x, center_y, y), set_position = True))
|
||||
try_placement = False
|
||||
else:
|
||||
# very naive, because we skip to the next build plate if one model doesn't fit.
|
||||
if arranger.isEmpty:
|
||||
# apparently we can never place this object
|
||||
left_over_nodes.append(node)
|
||||
try_placement = False
|
||||
else:
|
||||
# try next build plate
|
||||
current_build_plate_number += 1
|
||||
try_placement = True
|
||||
|
||||
status_message.setProgress((idx + 1) / len(nodes_arr) * 100)
|
||||
Job.yieldThread()
|
||||
|
||||
for node in left_over_nodes:
|
||||
node.callDecoration("setBuildPlateNumber", -1) # these are not on any build plate
|
||||
found_solution_for_all = False
|
||||
|
||||
grouped_operation.push()
|
||||
|
||||
status_message.hide()
|
||||
|
||||
if not found_solution_for_all:
|
||||
no_full_solution_message = Message(i18n_catalog.i18nc("@info:status",
|
||||
"Unable to find a location within the build volume for all objects"),
|
||||
title = i18n_catalog.i18nc("@info:title", "Can't Find Location"),
|
||||
message_type = Message.MessageType.WARNING)
|
||||
no_full_solution_message.show()
|
@ -1113,7 +1113,8 @@ class BuildVolume(SceneNode):
|
||||
# Use brim width if brim is enabled OR the prime tower has a brim.
|
||||
if adhesion_type == "brim":
|
||||
brim_line_count = skirt_brim_stack.getProperty("brim_line_count", "value")
|
||||
bed_adhesion_size = skirt_brim_line_width * brim_line_count * initial_layer_line_width_factor / 100.0
|
||||
brim_gap = skirt_brim_stack.getProperty("brim_gap", "value")
|
||||
bed_adhesion_size = brim_gap + skirt_brim_line_width * brim_line_count * initial_layer_line_width_factor / 100.0
|
||||
|
||||
for extruder_stack in used_extruders:
|
||||
bed_adhesion_size += extruder_stack.getProperty("skirt_brim_line_width", "value") * extruder_stack.getProperty("initial_layer_line_width_factor", "value") / 100.0
|
||||
@ -1214,7 +1215,7 @@ class BuildVolume(SceneNode):
|
||||
return max(min(value, max_value), min_value)
|
||||
|
||||
_machine_settings = ["machine_width", "machine_depth", "machine_height", "machine_shape", "machine_center_is_zero"]
|
||||
_skirt_settings = ["adhesion_type", "skirt_gap", "skirt_line_count", "skirt_brim_line_width", "brim_width", "brim_line_count", "raft_margin", "draft_shield_enabled", "draft_shield_dist", "initial_layer_line_width_factor"]
|
||||
_skirt_settings = ["adhesion_type", "skirt_gap", "skirt_line_count", "skirt_brim_line_width", "brim_gap", "brim_width", "brim_line_count", "raft_margin", "draft_shield_enabled", "draft_shield_dist", "initial_layer_line_width_factor"]
|
||||
_raft_settings = ["adhesion_type", "raft_base_thickness", "raft_interface_layers", "raft_interface_thickness", "raft_surface_layers", "raft_surface_thickness", "raft_airgap", "layer_0_z_overlap"]
|
||||
_extra_z_settings = ["retraction_hop_enabled", "retraction_hop"]
|
||||
_prime_settings = ["extruder_prime_pos_x", "extruder_prime_pos_y", "prime_blob_enable"]
|
||||
|
@ -43,7 +43,7 @@ from UM.Scene.Selection import Selection
|
||||
from UM.Scene.ToolHandle import ToolHandle
|
||||
from UM.Settings.ContainerRegistry import ContainerRegistry
|
||||
from UM.Settings.InstanceContainer import InstanceContainer
|
||||
from UM.Settings.SettingDefinition import SettingDefinition, DefinitionPropertyType
|
||||
from UM.Settings.SettingDefinition import SettingDefinition, DefinitionPropertyType, toIntConversion
|
||||
from UM.Settings.SettingFunction import SettingFunction
|
||||
from UM.Settings.Validator import Validator
|
||||
from UM.View.SelectionPass import SelectionPass # For typing.
|
||||
@ -52,8 +52,6 @@ from UM.i18n import i18nCatalog
|
||||
from cura import ApplicationMetadata
|
||||
from cura.API import CuraAPI
|
||||
from cura.API.Account import Account
|
||||
from cura.Arranging.Arrange import Arrange
|
||||
from cura.Arranging.ArrangeObjectsAllBuildPlatesJob import ArrangeObjectsAllBuildPlatesJob
|
||||
from cura.Arranging.ArrangeObjectsJob import ArrangeObjectsJob
|
||||
from cura.Arranging.Nest2DArrange import arrange
|
||||
from cura.Machines.MachineErrorChecker import MachineErrorChecker
|
||||
@ -129,7 +127,7 @@ class CuraApplication(QtApplication):
|
||||
# SettingVersion represents the set of settings available in the machine/extruder definitions.
|
||||
# You need to make sure that this version number needs to be increased if there is any non-backwards-compatible
|
||||
# changes of the settings.
|
||||
SettingVersion = 19
|
||||
SettingVersion = 20
|
||||
|
||||
Created = False
|
||||
|
||||
@ -382,11 +380,12 @@ class CuraApplication(QtApplication):
|
||||
SettingDefinition.addSupportedProperty("resolve", DefinitionPropertyType.Function, default=None,
|
||||
depends_on="value")
|
||||
|
||||
SettingDefinition.addSettingType("extruder", None, str, Validator)
|
||||
SettingDefinition.addSettingType("optional_extruder", None, str, None)
|
||||
SettingDefinition.addSettingType("extruder", None, toIntConversion, Validator)
|
||||
SettingDefinition.addSettingType("optional_extruder", None, toIntConversion, None)
|
||||
SettingDefinition.addSettingType("[int]", None, str, None)
|
||||
|
||||
|
||||
|
||||
def _initializeSettingFunctions(self):
|
||||
"""Adds custom property types, settings types, and extra operators (functions).
|
||||
|
||||
@ -818,9 +817,6 @@ class CuraApplication(QtApplication):
|
||||
root = self.getController().getScene().getRoot()
|
||||
self._volume = BuildVolume.BuildVolume(self, root)
|
||||
|
||||
# Ensure that the old style arranger still works.
|
||||
Arrange.build_volume = self._volume
|
||||
|
||||
# initialize info objects
|
||||
self._print_information = PrintInformation.PrintInformation(self)
|
||||
self._cura_actions = CuraActions.CuraActions(self)
|
||||
@ -1376,33 +1372,6 @@ class CuraApplication(QtApplication):
|
||||
op.addOperation(SetTransformOperation(node, Vector(0, center_y, 0), Quaternion(), Vector(1, 1, 1)))
|
||||
op.push()
|
||||
|
||||
@pyqtSlot()
|
||||
def arrangeObjectsToAllBuildPlates(self) -> None:
|
||||
"""Arrange all objects."""
|
||||
|
||||
nodes_to_arrange = []
|
||||
for node in DepthFirstIterator(self.getController().getScene().getRoot()):
|
||||
if not isinstance(node, SceneNode):
|
||||
continue
|
||||
|
||||
if not node.getMeshData() and not node.callDecoration("isGroup"):
|
||||
continue # Node that doesn't have a mesh and is not a group.
|
||||
|
||||
parent_node = node.getParent()
|
||||
if parent_node and parent_node.callDecoration("isGroup"):
|
||||
continue # Grouped nodes don't need resetting as their parent (the group) is reset)
|
||||
|
||||
if not node.callDecoration("isSliceable") and not node.callDecoration("isGroup"):
|
||||
continue # i.e. node with layer data
|
||||
|
||||
bounding_box = node.getBoundingBox()
|
||||
# Skip nodes that are too big
|
||||
if bounding_box is None or bounding_box.width < self._volume.getBoundingBox().width or bounding_box.depth < self._volume.getBoundingBox().depth:
|
||||
nodes_to_arrange.append(node)
|
||||
job = ArrangeObjectsAllBuildPlatesJob(nodes_to_arrange)
|
||||
job.start()
|
||||
self.getCuraSceneController().setActiveBuildPlate(0) # Select first build plate
|
||||
|
||||
# Single build plate
|
||||
@pyqtSlot()
|
||||
def arrangeAll(self) -> None:
|
||||
|
@ -137,7 +137,9 @@ class PrinterOutputDevice(QObject, OutputDevice):
|
||||
"""
|
||||
if self.connectionState != connection_state:
|
||||
self._connection_state = connection_state
|
||||
cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack().setMetaDataEntry("is_online", self.isConnected())
|
||||
global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()
|
||||
if global_stack:
|
||||
global_stack.setMetaDataEntry("is_online", self.isConnected())
|
||||
self.connectionStateChanged.emit(self._id)
|
||||
|
||||
@pyqtProperty(int, constant = True)
|
||||
|
@ -1,4 +0,0 @@
|
||||
import warnings
|
||||
warnings.warn("Importing cura.PrinterOutput.PrinterOutputModel has been deprecated since 4.1, use cura.PrinterOutput.Models.PrinterOutputModel instead", DeprecationWarning, stacklevel=2)
|
||||
# We moved the the models to one submodule deeper
|
||||
from cura.PrinterOutput.Models.PrinterOutputModel import PrinterOutputModel
|
@ -1,4 +0,0 @@
|
||||
import warnings
|
||||
warnings.warn("Importing cura.PrinterOutputDevice has been deprecated since 4.1, use cura.PrinterOutput.PrinterOutputDevice instead", DeprecationWarning, stacklevel=2)
|
||||
# We moved the PrinterOutput device to it's own submodule.
|
||||
from cura.PrinterOutput.PrinterOutputDevice import PrinterOutputDevice, ConnectionState
|
@ -60,16 +60,6 @@ class GlobalStack(CuraContainerStack):
|
||||
extrudersChanged = pyqtSignal()
|
||||
configuredConnectionTypesChanged = pyqtSignal()
|
||||
|
||||
@pyqtProperty("QVariantMap", notify = extrudersChanged)
|
||||
@deprecated("Please use extruderList instead.", "4.4")
|
||||
def extruders(self) -> Dict[str, "ExtruderStack"]:
|
||||
"""Get the list of extruders of this stack.
|
||||
|
||||
:return: The extruders registered with this stack.
|
||||
"""
|
||||
|
||||
return self._extruders
|
||||
|
||||
@pyqtProperty("QVariantList", notify = extrudersChanged)
|
||||
def extruderList(self) -> List["ExtruderStack"]:
|
||||
result_tuple_list = sorted(list(self._extruders.items()), key=lambda x: int(x[0]))
|
||||
|
@ -14,7 +14,7 @@ import time
|
||||
class CuraSplashScreen(QSplashScreen):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self._scale = 0.7
|
||||
self._scale = 1
|
||||
self._version_y_offset = 0 # when extra visual elements are in the background image, move version text down
|
||||
|
||||
if ApplicationMetadata.IsAlternateVersion:
|
||||
@ -69,23 +69,21 @@ class CuraSplashScreen(QSplashScreen):
|
||||
version = Application.getInstance().getVersion().split("-")
|
||||
|
||||
# Draw version text
|
||||
font = QFont() # Using system-default font here
|
||||
font.setPixelSize(18)
|
||||
font = QFont()
|
||||
font.setPixelSize(24)
|
||||
painter.setFont(font)
|
||||
painter.drawText(60, 70 + self._version_y_offset, round(330 * self._scale), round(230 * self._scale), Qt.AlignLeft | Qt.AlignTop, version[0] if not ApplicationMetadata.IsAlternateVersion else ApplicationMetadata.CuraBuildType)
|
||||
if len(version) > 1:
|
||||
font.setPixelSize(16)
|
||||
painter.setFont(font)
|
||||
painter.setPen(QColor(200, 200, 200, 255))
|
||||
painter.drawText(247, 105 + self._version_y_offset, round(330 * self._scale), round(255 * self._scale), Qt.AlignLeft | Qt.AlignTop, version[1])
|
||||
painter.setPen(QColor(255, 255, 255, 255))
|
||||
|
||||
if len(version) == 1:
|
||||
painter.drawText(40, 104 + self._version_y_offset, round(330 * self._scale), round(230 * self._scale), Qt.AlignLeft | Qt.AlignTop, version[0] if not ApplicationMetadata.IsAlternateVersion else ApplicationMetadata.CuraBuildType)
|
||||
elif len(version) > 1:
|
||||
painter.drawText(40, 104 + self._version_y_offset, round(330 * self._scale), round(230 * self._scale), Qt.AlignLeft | Qt.AlignTop, version[0] +" "+ version[1] if not ApplicationMetadata.IsAlternateVersion else ApplicationMetadata.CuraBuildType)
|
||||
|
||||
# Draw the loading image
|
||||
pen = QPen()
|
||||
pen.setWidthF(6 * self._scale)
|
||||
pen.setColor(QColor(32, 166, 219, 255))
|
||||
pen.setWidthF(2 * self._scale)
|
||||
pen.setColor(QColor(255, 255, 255, 255))
|
||||
painter.setPen(pen)
|
||||
painter.drawArc(60, 150, round(32 * self._scale), round(32 * self._scale), round(self._loading_image_rotation_angle * 16), 300 * 16)
|
||||
painter.drawArc(38, 324, round(20 * self._scale), round(20 * self._scale), round(self._loading_image_rotation_angle * 16), 300 * 16)
|
||||
|
||||
# Draw message text
|
||||
if self._current_message:
|
||||
@ -95,7 +93,7 @@ class CuraSplashScreen(QSplashScreen):
|
||||
pen.setColor(QColor(255, 255, 255, 255))
|
||||
painter.setPen(pen)
|
||||
painter.setFont(font)
|
||||
painter.drawText(100, 128, 170, 64,
|
||||
painter.drawText(70, 320, 170, 24,
|
||||
Qt.AlignLeft | Qt.AlignVCenter | Qt.TextWordWrap,
|
||||
self._current_message)
|
||||
|
||||
|
@ -17,8 +17,7 @@ UM.Dialog
|
||||
minimumWidth: UM.Theme.getSize("popup_dialog").width
|
||||
minimumHeight: UM.Theme.getSize("popup_dialog").height
|
||||
width: minimumWidth
|
||||
height: Math.max(dialogSummaryItem.height + 2 * buttonsItem.height, minimumHeight) // 2 * button height to also have some extra space around the button relative to the button size
|
||||
|
||||
|
||||
property int comboboxHeight: UM.Theme.getSize("default_margin").height
|
||||
|
||||
onClosing: manager.notifyClosed()
|
||||
@ -67,7 +66,7 @@ UM.Dialog
|
||||
Column
|
||||
{
|
||||
width: parent.width
|
||||
height: cildrenRect.height
|
||||
height: childrenRect.height
|
||||
|
||||
UM.Label
|
||||
{
|
||||
@ -149,7 +148,7 @@ UM.Dialog
|
||||
Column
|
||||
{
|
||||
width: parent.width
|
||||
height: cildrenRect.height
|
||||
height: childrenRect.height
|
||||
|
||||
UM.Label
|
||||
{
|
||||
@ -225,7 +224,7 @@ UM.Dialog
|
||||
Column
|
||||
{
|
||||
width: parent.width
|
||||
height: cildrenRect.height
|
||||
height: childrenRect.height
|
||||
|
||||
UM.Label
|
||||
{
|
||||
@ -341,7 +340,7 @@ UM.Dialog
|
||||
Column
|
||||
{
|
||||
width: parent.width
|
||||
height: cildrenRect.height
|
||||
height: childrenRect.height
|
||||
Row
|
||||
{
|
||||
height: childrenRect.height
|
||||
@ -382,7 +381,7 @@ UM.Dialog
|
||||
Column
|
||||
{
|
||||
width: parent.width
|
||||
height: cildrenRect.height
|
||||
height: childrenRect.height
|
||||
|
||||
UM.Label
|
||||
{
|
||||
|
@ -67,11 +67,17 @@ Item
|
||||
}
|
||||
|
||||
text: PrintInformation.jobName
|
||||
font: UM.Theme.getFont("medium")
|
||||
font: fontMetrics.font
|
||||
height: fontMetrics.height + 2 * UM.Theme.getSize("thin_margin").height
|
||||
placeholderText: "Enter the name of the file."
|
||||
onAccepted: { if (saveButton.enabled) {saveButton.clicked()}}
|
||||
}
|
||||
|
||||
FontMetrics
|
||||
{
|
||||
id: fontMetrics
|
||||
font: UM.Theme.getFont("medium")
|
||||
}
|
||||
|
||||
Rectangle
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2021 Ultimaker B.V.
|
||||
# Copyright (c) 2022 Ultimaker B.V.
|
||||
# Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import math
|
||||
@ -31,6 +31,8 @@ Position = NamedTuple("Position", [("x", float), ("y", float), ("z", float), ("f
|
||||
class FlavorParser:
|
||||
"""This parser is intended to interpret the common firmware codes among all the different flavors"""
|
||||
|
||||
MAX_EXTRUDER_COUNT = 16
|
||||
|
||||
def __init__(self) -> None:
|
||||
CuraApplication.getInstance().hideMessageSignal.connect(self._onHideMessage)
|
||||
self._cancelled = False
|
||||
@ -53,7 +55,7 @@ class FlavorParser:
|
||||
|
||||
def _clearValues(self) -> None:
|
||||
self._extruder_number = 0
|
||||
self._extrusion_length_offset = [0] * 8 # type: List[float]
|
||||
self._extrusion_length_offset = [0] * self.MAX_EXTRUDER_COUNT # type: List[float]
|
||||
self._layer_type = LayerPolygon.Inset0Type
|
||||
self._layer_number = 0
|
||||
self._previous_z = 0 # type: float
|
||||
@ -355,7 +357,7 @@ class FlavorParser:
|
||||
|
||||
Logger.log("d", "Parsing g-code...")
|
||||
|
||||
current_position = Position(0, 0, 0, 0, [0] * 8)
|
||||
current_position = Position(0, 0, 0, 0, [0] * self.MAX_EXTRUDER_COUNT)
|
||||
current_path = [] #type: List[List[float]]
|
||||
min_layer_number = 0
|
||||
negative_layers = 0
|
||||
|
@ -31,8 +31,11 @@ class Marketplace(Extension, QObject):
|
||||
# Not entirely the cleanest code, since the localPackage list also checks the server if there are updates
|
||||
# Since that in turn will trigger notifications to be shown, we do need to construct it here and make sure
|
||||
# that it checks for updates...
|
||||
preferences = CuraApplication.getInstance().getPreferences()
|
||||
preferences.addPreference("info/automatic_plugin_update_check", True)
|
||||
self._local_package_list = LocalPackageList(self)
|
||||
self._local_package_list.checkForUpdates(self._package_manager.local_packages)
|
||||
if preferences.getValue("info/automatic_plugin_update_check"):
|
||||
self._local_package_list.checkForUpdates(self._package_manager.local_packages)
|
||||
|
||||
self._package_manager.installedPackagesChanged.connect(self.checkIfRestartNeeded)
|
||||
|
||||
|
@ -4,62 +4,21 @@
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 2.1
|
||||
|
||||
import Cura 1.5 as Cura
|
||||
import UM 1.5 as UM
|
||||
import Cura 1.0 as Cura
|
||||
import ".."
|
||||
|
||||
Button {
|
||||
Cura.CategoryButton
|
||||
{
|
||||
id: base;
|
||||
|
||||
background: Rectangle {
|
||||
color: UM.Theme.getColor("category_background")
|
||||
}
|
||||
|
||||
contentItem: Row
|
||||
{
|
||||
spacing: UM.Theme.getSize("default_lining").width
|
||||
|
||||
Item //Wrapper to give space before icon with fixed width. This allows aligning checkbox with category icon.
|
||||
{
|
||||
height: label.height
|
||||
width: height
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
|
||||
UM.RecolorImage
|
||||
{
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
height: (label.height / 2) | 0
|
||||
width: height
|
||||
source: base.checked ? UM.Theme.getIcon("ChevronSingleDown") : UM.Theme.getIcon("ChevronSingleRight")
|
||||
color: base.hovered ? UM.Theme.getColor("primary_button_hover"): UM.Theme.getColor("text")
|
||||
}
|
||||
}
|
||||
UM.RecolorImage
|
||||
{
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
height: label.height
|
||||
width: height
|
||||
source: UM.Theme.getIcon(definition.icon)
|
||||
color: base.hovered ? UM.Theme.getColor("primary_button_hover") : UM.Theme.getColor("text")
|
||||
}
|
||||
UM.Label
|
||||
{
|
||||
id: label
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
text: base.text
|
||||
color: base.hovered ? UM.Theme.getColor("primary_button_hover") : UM.Theme.getColor("text")
|
||||
font.bold: true
|
||||
}
|
||||
}
|
||||
categoryIcon: definition ? UM.Theme.getIcon(definition.icon) : ""
|
||||
labelText: definition ? definition.label : ""
|
||||
expanded: definition ? definition.expanded : false
|
||||
|
||||
signal showTooltip(string text)
|
||||
signal hideTooltip()
|
||||
signal contextMenuRequested()
|
||||
|
||||
text: definition.label
|
||||
|
||||
checkable: true
|
||||
checked: definition.expanded
|
||||
|
||||
onClicked: definition.expanded ? settingDefinitionsModel.collapseRecursive(definition.key) : settingDefinitionsModel.expandRecursive(definition.key)
|
||||
onClicked: expanded ? settingDefinitionsModel.collapseRecursive(definition.key) : settingDefinitionsModel.expandRecursive(definition.key)
|
||||
}
|
||||
|
@ -10,25 +10,15 @@ import Cura 1.0 as Cura
|
||||
|
||||
UM.TooltipArea
|
||||
{
|
||||
x: model.depth * UM.Theme.getSize("default_margin").width
|
||||
x: model.depth * UM.Theme.getSize("narrow_margin").width
|
||||
text: model.description
|
||||
|
||||
width: childrenRect.width
|
||||
height: childrenRect.height
|
||||
|
||||
Item
|
||||
{
|
||||
id: spacer
|
||||
// Align checkbox with PerObjectCategory icon
|
||||
width: UM.Theme.getSize("default_margin").width
|
||||
}
|
||||
|
||||
UM.CheckBox
|
||||
{
|
||||
id: check
|
||||
|
||||
anchors.left: spacer.right
|
||||
|
||||
text: definition.label
|
||||
checked: addedSettingsModel.getVisible(model.key)
|
||||
|
||||
|
@ -187,7 +187,7 @@ Item
|
||||
// It kinda looks ugly otherwise (big panel, no content on it)
|
||||
id: currentSettings
|
||||
property int maximumHeight: 200 * screenScaleFactor
|
||||
height: Math.min(contents.count * (UM.Theme.getSize("section").height + UM.Theme.getSize("default_lining").height), maximumHeight)
|
||||
height: Math.min(contents.count * (UM.Theme.getSize("section").height + UM.Theme.getSize("narrow_margin").height + UM.Theme.getSize("default_lining").height), maximumHeight)
|
||||
visible: currentMeshType != "anti_overhang_mesh"
|
||||
|
||||
ListView
|
||||
@ -245,7 +245,7 @@ Item
|
||||
{
|
||||
id: settingLoader
|
||||
width: UM.Theme.getSize("setting").width
|
||||
height: UM.Theme.getSize("section").height
|
||||
height: UM.Theme.getSize("section").height + UM.Theme.getSize("narrow_margin").height
|
||||
enabled: provider.properties.enabled === "True"
|
||||
property var definition: model
|
||||
property var settingDefinitionsModel: addedSettingsModel
|
||||
|
@ -12,6 +12,8 @@ UM.Dialog
|
||||
{
|
||||
id: settingPickDialog
|
||||
|
||||
margin: UM.Theme.getSize("default_margin").width
|
||||
|
||||
title: catalog.i18nc("@title:window", "Select Settings to Customize for this model")
|
||||
width: UM.Theme.getSize("small_popup_dialog").width
|
||||
backgroundColor: UM.Theme.getColor("background_1")
|
||||
|
@ -298,7 +298,7 @@ class ChangeAtZ(Script):
|
||||
},
|
||||
"caz_change_retract": {
|
||||
"label": "Change Retraction",
|
||||
"description": "Indicates you would like to modify retraction properties.",
|
||||
"description": "Indicates you would like to modify retraction properties. Does not work when using relative extrusion.",
|
||||
"type": "bool",
|
||||
"default_value": false
|
||||
},
|
||||
|
@ -21,7 +21,10 @@ Component
|
||||
|
||||
Cura.PrintMonitor
|
||||
{
|
||||
anchors.fill: parent
|
||||
anchors.top: parent.top
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
anchors.bottom: footerSeparator.top
|
||||
}
|
||||
|
||||
Rectangle
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2021 Ultimaker B.V.
|
||||
# Copyright (c) 2022 Ultimaker B.V.
|
||||
# Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import configparser
|
||||
@ -11,14 +11,19 @@ _removed_settings = {
|
||||
"travel_compensate_overlapping_walls_0_enabled",
|
||||
"travel_compensate_overlapping_walls_x_enabled",
|
||||
"fill_perimeter_gaps",
|
||||
"filter_out_tiny_gaps",
|
||||
"wall_min_flow",
|
||||
"wall_min_flow_retract",
|
||||
"speed_equalize_flow_enabled",
|
||||
"speed_equalize_flow_min"
|
||||
"speed_equalize_flow_max"
|
||||
}
|
||||
|
||||
_transformed_settings = { # These settings have been changed to a new topic, but may have different data type. Used only for setting visibility; the rest is handled separately.
|
||||
"outer_inset_first": "inset_direction",
|
||||
"speed_equalize_flow_enabled": "speed_equalize_flow_width_factor"
|
||||
}
|
||||
|
||||
|
||||
class VersionUpgrade49to50(VersionUpgrade):
|
||||
class VersionUpgrade413to50(VersionUpgrade):
|
||||
def upgradePreferences(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
|
||||
"""
|
||||
Upgrades preferences to remove from the visibility list the settings that were removed in this version.
|
||||
@ -34,7 +39,7 @@ class VersionUpgrade49to50(VersionUpgrade):
|
||||
parser.read_string(serialized)
|
||||
|
||||
# Update version number.
|
||||
parser["metadata"]["setting_version"] = "18"
|
||||
parser["metadata"]["setting_version"] = "20"
|
||||
|
||||
# Remove deleted settings from the visible settings list.
|
||||
if "general" in parser and "visible_settings" in parser["general"]:
|
||||
@ -43,10 +48,11 @@ class VersionUpgrade49to50(VersionUpgrade):
|
||||
if removed in visible_settings:
|
||||
visible_settings.remove(removed)
|
||||
|
||||
# Replace Outer Before Inner Walls with equivalent.
|
||||
if "outer_inset_first" in visible_settings:
|
||||
visible_settings.remove("outer_inset_first")
|
||||
visible_settings.add("inset_direction")
|
||||
# Replace equivalent settings that have been transformed.
|
||||
for old, new in _transformed_settings.items():
|
||||
if old in visible_settings:
|
||||
visible_settings.remove(old)
|
||||
visible_settings.add(new)
|
||||
|
||||
parser["general"]["visible_settings"] = ";".join(visible_settings)
|
||||
|
||||
@ -71,7 +77,7 @@ class VersionUpgrade49to50(VersionUpgrade):
|
||||
parser.read_string(serialized)
|
||||
|
||||
# Update version number.
|
||||
parser["metadata"]["setting_version"] = "18"
|
||||
parser["metadata"]["setting_version"] = "20"
|
||||
|
||||
if "values" in parser:
|
||||
# Remove deleted settings from the instance containers.
|
||||
@ -86,9 +92,12 @@ class VersionUpgrade49to50(VersionUpgrade):
|
||||
old_value = old_value[1:]
|
||||
parser["values"]["inset_direction"] = f"='outside_in' if ({old_value}) else 'inside_out'" # Makes it work both with plain setting values and formulas.
|
||||
|
||||
# Disable Fuzzy Skin as it doesn't work with with the libArachne walls
|
||||
if "magic_fuzzy_skin_enabled" in parser["values"]:
|
||||
parser["values"]["magic_fuzzy_skin_enabled"] = "False"
|
||||
# Replace Equalize Filament Flow with equivalent setting.
|
||||
if "speed_equalize_flow_enabled" in parser["values"]:
|
||||
old_value = parser["values"]["speed_equalize_flow_enabled"]
|
||||
if old_value.startswith("="): # Was already a formula.
|
||||
old_value = old_value[1:]
|
||||
parser["values"]["speed_equalize_flow_width_factor"] = f"=100 if ({old_value}) else 0" # If it used to be enabled, set it to 100%. Otherwise 0%.
|
||||
|
||||
result = io.StringIO()
|
||||
parser.write(result)
|
||||
@ -110,8 +119,7 @@ class VersionUpgrade49to50(VersionUpgrade):
|
||||
if "metadata" not in parser:
|
||||
parser["metadata"] = {}
|
||||
|
||||
parser["general"]["version"] = "5"
|
||||
parser["metadata"]["setting_version"] = "18"
|
||||
parser["metadata"]["setting_version"] = "20"
|
||||
|
||||
result = io.StringIO()
|
||||
parser.write(result)
|
@ -1,28 +1,26 @@
|
||||
# Copyright (c) 2020 Ultimaker B.V.
|
||||
# Copyright (c) 2022 Ultimaker B.V.
|
||||
# Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
from typing import Any, Dict, TYPE_CHECKING
|
||||
|
||||
from . import VersionUpgrade49to50
|
||||
from . import VersionUpgrade413to50
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from UM.Application import Application
|
||||
|
||||
upgrade = VersionUpgrade49to50.VersionUpgrade49to50()
|
||||
upgrade = VersionUpgrade413to50.VersionUpgrade413to50()
|
||||
|
||||
def getMetaData() -> Dict[str, Any]:
|
||||
return { # Since there is no VersionUpgrade from 48 to 49 yet, upgrade the 48 profiles to 50.
|
||||
return {
|
||||
"version_upgrade": {
|
||||
# From To Upgrade function
|
||||
("preferences", 6000016): ("preferences", 6000018, upgrade.upgradePreferences),
|
||||
("machine_stack", 5000016): ("machine_stack", 5000018, upgrade.upgradeStack),
|
||||
("extruder_train", 5000016): ("extruder_train", 5000018, upgrade.upgradeStack),
|
||||
("machine_stack", 4000018): ("machine_stack", 5000018, upgrade.upgradeStack), # We made a mistake in the arachne beta 1
|
||||
("extruder_train", 4000018): ("extruder_train", 5000018, upgrade.upgradeStack), # We made a mistake in the arachne beta 1
|
||||
("definition_changes", 4000016): ("definition_changes", 4000018, upgrade.upgradeInstanceContainer),
|
||||
("quality_changes", 4000016): ("quality_changes", 4000018, upgrade.upgradeInstanceContainer),
|
||||
("quality", 4000016): ("quality", 4000018, upgrade.upgradeInstanceContainer),
|
||||
("user", 4000016): ("user", 4000018, upgrade.upgradeInstanceContainer),
|
||||
("preferences", 7000019): ("preferences", 7000020, upgrade.upgradePreferences),
|
||||
("machine_stack", 5000019): ("machine_stack", 5000020, upgrade.upgradeStack),
|
||||
("extruder_train", 5000019): ("extruder_train", 5000020, upgrade.upgradeStack),
|
||||
("definition_changes", 4000019): ("definition_changes", 4000020, upgrade.upgradeInstanceContainer),
|
||||
("quality_changes", 4000019): ("quality_changes", 4000020, upgrade.upgradeInstanceContainer),
|
||||
("quality", 4000019): ("quality", 4000020, upgrade.upgradeInstanceContainer),
|
||||
("user", 4000019): ("user", 4000020, upgrade.upgradeInstanceContainer),
|
||||
},
|
||||
"sources": {
|
||||
"preferences": {
|
8
plugins/VersionUpgrade/VersionUpgrade413to50/plugin.json
Normal file
8
plugins/VersionUpgrade/VersionUpgrade413to50/plugin.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"name": "Version Upgrade 4.13 to 5.0",
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.0",
|
||||
"description": "Upgrades configurations from Cura 4.13 to Cura 5.0.",
|
||||
"api": "7.9.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
@ -1,8 +0,0 @@
|
||||
{
|
||||
"name": "Version Upgrade 4.9 to 5.0",
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.0",
|
||||
"description": "Upgrades configurations from Cura 4.9 to Cura 5.0.",
|
||||
"api": "7.4.0",
|
||||
"i18n-catalog": "cura"
|
||||
}
|
@ -6,7 +6,7 @@
|
||||
"type": "extruder",
|
||||
"author": "Ultimaker",
|
||||
"manufacturer": "Unknown",
|
||||
"setting_version": 19,
|
||||
"setting_version": 20,
|
||||
"visible": false,
|
||||
"position": "0"
|
||||
},
|
||||
|
@ -6,7 +6,7 @@
|
||||
"type": "machine",
|
||||
"author": "Unknown",
|
||||
"manufacturer": "Unknown",
|
||||
"setting_version": 19,
|
||||
"setting_version": 20,
|
||||
"file_formats": "text/x-gcode;model/stl;application/x-wavefront-obj;application/x3g",
|
||||
"visible": false,
|
||||
"has_materials": true,
|
||||
@ -758,6 +758,16 @@
|
||||
"default_value": 10.0,
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
},
|
||||
"machine_scale_fan_speed_zero_to_one":
|
||||
{
|
||||
"label": "Scale Fan Speed To 0-1",
|
||||
"description": "Scale the fan speed to be between 0 and 1 instead of between 0 and 256.",
|
||||
"type": "bool",
|
||||
"default_value": false,
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false,
|
||||
"settable_per_meshgroup": false
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -1078,52 +1088,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"beading_strategy_type":
|
||||
{
|
||||
"label": "Variable Line Strategy",
|
||||
"description": "Strategy to use to print the width of a part with a number of walls. This determines how many walls it will use for a certain total width, and how wide each of these lines are. \"Center Deviation\" will print all walls at the nominal line width except the central one(s), causing big variations in the center but very consistent outsides. \"Distributed\" distributes the width equally over all walls. \"Inward Distributed\" is a balance between the other two, distributing the changes in width over all walls but keeping the walls on the outside slightly more consistent.",
|
||||
"type": "enum",
|
||||
"options":
|
||||
{
|
||||
"center_deviation": "Center Deviation",
|
||||
"distributed": "Distributed",
|
||||
"inward_distributed": "Inward Distributed"
|
||||
},
|
||||
"default_value": "inward_distributed",
|
||||
"limit_to_extruder": "wall_0_extruder_nr"
|
||||
},
|
||||
"wall_transition_threshold": {
|
||||
"label": "Middle Line Threshold",
|
||||
"description": "The smallest line width, as a factor of the normal line width, below which it will choose to use fewer, but wider lines to fill the available space the wall needs to occupy. Reduce this setting to use more, thinner lines. Increase to use fewer, wider lines. Note that this applies -as if- the entire shape should be filled with wall, so the middle here refers to the middle of the object between two outer edges of the shape, even if there actually is fill or (other) skin in the print instead of wall.",
|
||||
"type": "float",
|
||||
"unit": "%",
|
||||
"default_value": 90,
|
||||
"minimum_value": "1",
|
||||
"maximum_value": "99",
|
||||
"children":
|
||||
{
|
||||
"wall_split_middle_threshold": {
|
||||
"label": "Split Middle Line Threshold",
|
||||
"description": "The smallest line width, as a factor of the normal line width, above which the middle line (if there is one) will be split into two. Reduce this setting to use more, thinner lines. Increase to use fewer, wider lines. Note that this applies -as if- the entire shape should be filled with wall, so the middle here refers to the middle of the object between two outer edges of the shape, even if there actually is fill or (other) skin in the print instead of wall.",
|
||||
"type": "float",
|
||||
"unit": "%",
|
||||
"default_value": 90,
|
||||
"value": "wall_transition_threshold",
|
||||
"minimum_value": "1",
|
||||
"maximum_value": "99"
|
||||
},
|
||||
"wall_add_middle_threshold": {
|
||||
"label": "Add Middle Line Threshold",
|
||||
"description": "The smallest line width, as a factor of the normal line width, above which a middle line (if there wasn't one already) will be added. Reduce this setting to use more, thinner lines. Increase to use fewer, wider lines. Note that this applies -as if- the entire shape should be filled with wall, so the middle here refers to the middle of the object between two outer edges of the shape, even if there actually is fill or (other) skin in the print instead of wall.",
|
||||
"type": "float",
|
||||
"unit": "%",
|
||||
"default_value": 80,
|
||||
"value": "wall_transition_threshold * 8 / 9",
|
||||
"minimum_value": "1",
|
||||
"maximum_value": "99"
|
||||
}
|
||||
}
|
||||
},
|
||||
"wall_transition_length":
|
||||
{
|
||||
"label": "Wall Transition Length",
|
||||
@ -1144,13 +1108,12 @@
|
||||
"type": "int",
|
||||
"maximum_value": "999999",
|
||||
"default_value": 1,
|
||||
"minimum_value": "1",
|
||||
"enabled": "beading_strategy_type == 'inward_distributed'"
|
||||
"minimum_value": "1"
|
||||
},
|
||||
"wall_transition_angle":
|
||||
{
|
||||
"label": "Wall Transition Angle",
|
||||
"description": "When transitioning between different numbers of walls as the part becomes thinner, two adjacent walls will join together at this angle. This can make the walls come together faster than what the Wall Transition Length indicates, filling the space better.",
|
||||
"label": "Wall Transitioning Threshold Angle",
|
||||
"description": "When to create transitions between even and odd numbers of walls. A wedge shape with an angle greater than this setting will not have transitions and no walls will be printed in the center to fill the remaining space. Reducing this setting reduces the number and length of these center walls, but may leave gaps or overextrude.",
|
||||
"type": "float",
|
||||
"unit": "°",
|
||||
"default_value": 10,
|
||||
@ -1161,16 +1124,29 @@
|
||||
},
|
||||
"wall_transition_filter_distance":
|
||||
{
|
||||
"label": "Wall Transition Distance Filter",
|
||||
"label": "Wall Transitioning Filter Distance",
|
||||
"description": "If it would be transitioning back and forth between different numbers of walls in quick succession, don't transition at all. Remove transitions if they are closer together than this distance.",
|
||||
"type": "float",
|
||||
"unit": "mm",
|
||||
"default_value": 100,
|
||||
"value": "100",
|
||||
"enabled": false,
|
||||
"default_value": 100,
|
||||
"minimum_value": "wall_transition_length",
|
||||
"minimum_value_warning": "math.cos(wall_transition_angle / 180 * math.pi) * wall_line_width_x",
|
||||
"maximum_value": "999999"
|
||||
},
|
||||
"wall_transition_filter_deviation":
|
||||
{
|
||||
"label": "Wall Transitioning Filter Margin",
|
||||
"description": "Prevent transitioning back and forth between one extra wall and one less. This margin extends the range of line widths which follow to [Minimum Wall Line Width - Margin, 2 * Minimum Wall Line Width + Margin]. Increasing this margin reduces the number of transitions, which reduces the number of extrusion starts/stops and travel time. However, large line width variation can lead to under- or overextrusion problems.",
|
||||
"type": "float",
|
||||
"unit": "mm",
|
||||
"default_value": 0.1,
|
||||
"value": ".25 * machine_nozzle_size",
|
||||
"minimum_value": "0",
|
||||
"minimum_value_warning": ".01",
|
||||
"maximum_value_warning": "machine_nozzle_size"
|
||||
},
|
||||
"wall_0_wipe_dist":
|
||||
{
|
||||
"label": "Outer Wall Wipe Distance",
|
||||
@ -1212,10 +1188,9 @@
|
||||
"type": "enum",
|
||||
"options": {
|
||||
"inside_out": "Inside To Outside",
|
||||
"outside_in": "Outside To Inside",
|
||||
"center_last": "Center Last"
|
||||
"outside_in": "Outside To Inside"
|
||||
},
|
||||
"default_value": "center_last",
|
||||
"default_value": "outside_in",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"alternate_extra_perimeter":
|
||||
@ -1227,14 +1202,70 @@
|
||||
"limit_to_extruder": "infill_extruder_nr",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"filter_out_tiny_gaps":
|
||||
"min_wall_line_width":
|
||||
{
|
||||
"label": "Filter Out Tiny Gaps",
|
||||
"description": "Filter out tiny gaps to reduce blobs on outside of model.",
|
||||
"type": "bool",
|
||||
"default_value": true,
|
||||
"limit_to_extruder": "wall_0_extruder_nr",
|
||||
"settable_per_mesh": true
|
||||
"label": "Minimum Wall Line Width",
|
||||
"description": "For thin structures around once or twice the nozzle size, the line widths need to be altered to adhere to the thickness of the model. This setting controls the minimum line width allowed for the walls. The minimum line widths inherently also determine the maximum line widths, since we transition from N to N+1 walls at some geometry thickness where the N walls are wide and the N+1 walls are narrow. The widest possible wall line is twice the Minimum Wall Line Width.",
|
||||
"unit": "mm",
|
||||
"minimum_value_warning": ".5 * max(wall_line_width_0, wall_line_width_x)",
|
||||
"maximum_value_warning": "min(wall_line_width_0, wall_line_width_x)",
|
||||
"default_value": 0.3,
|
||||
"value": "machine_nozzle_size * .85",
|
||||
"type": "float",
|
||||
"settable_per_mesh": true,
|
||||
"children":
|
||||
{
|
||||
"min_even_wall_line_width":
|
||||
{
|
||||
"label": "Minimum Even Wall Line Width",
|
||||
"description": "The minimum line width for normal polygonal walls. This setting determines at which model thickness we switch from printing a single thin wall line, to printing two wall lines. A higher Minimum Even Wall Line Width leads to a higher maximum odd wall line width. The maximum even wall line width is calculated as Outer Wall Line Width + 0.5 * Minimum Odd Wall Line Width.",
|
||||
"unit": "mm",
|
||||
"minimum_value_warning": ".5 * max(wall_line_width_0, wall_line_width_x)",
|
||||
"maximum_value_warning": "min(wall_line_width_0, wall_line_width_x)",
|
||||
"default_value": 0.3,
|
||||
"value": "min_wall_line_width",
|
||||
"type": "float",
|
||||
"settable_per_mesh": true,
|
||||
"children":
|
||||
{
|
||||
"wall_split_middle_threshold": {
|
||||
"label": "Split Middle Line Threshold",
|
||||
"description": "The smallest line width, as a factor of the normal line width, above which the middle line (if there is one) will be split into two. Reduce this setting to use more, thinner lines. Increase to use fewer, wider lines. Note that this applies -as if- the entire shape should be filled with wall, so the middle here refers to the middle of the object between two outer edges of the shape, even if there actually is fill or (other) skin in the print instead of wall.",
|
||||
"type": "float",
|
||||
"unit": "%",
|
||||
"default_value": 50,
|
||||
"value": "max(1, min(99, 100 * (2 * min_even_wall_line_width - wall_line_width_0) / wall_line_width_0))",
|
||||
"minimum_value": "1",
|
||||
"maximum_value": "99"
|
||||
}
|
||||
}
|
||||
},
|
||||
"min_odd_wall_line_width":
|
||||
{
|
||||
"label": "Minimum Odd Wall Line Width",
|
||||
"description": "The minimum line width for middle line gap filler polyline walls. This setting determines at which model thickness we switch from printing two wall lines, to printing two outer walls and a single central wall in the middle. A higher Minimum Odd Wall Line Width leads to a higher maximum even wall line width. The maximum odd wall line width is calculated as 2 * Minimum Even Wall Line Width,",
|
||||
"unit": "mm",
|
||||
"minimum_value_warning": ".5 * max(wall_line_width_0, wall_line_width_x)",
|
||||
"maximum_value_warning": "min(wall_line_width_0, wall_line_width_x)",
|
||||
"default_value": 0.3,
|
||||
"value": "min_wall_line_width",
|
||||
"type": "float",
|
||||
"settable_per_mesh": true,
|
||||
"children":
|
||||
{
|
||||
"wall_add_middle_threshold": {
|
||||
"label": "Add Middle Line Threshold",
|
||||
"description": "The smallest line width, as a factor of the normal line width, above which a middle line (if there wasn't one already) will be added. Reduce this setting to use more, thinner lines. Increase to use fewer, wider lines. Note that this applies -as if- the entire shape should be filled with wall, so the middle here refers to the middle of the object between two outer edges of the shape, even if there actually is fill or (other) skin in the print instead of wall.",
|
||||
"type": "float",
|
||||
"unit": "%",
|
||||
"default_value": 75,
|
||||
"value": "max(1, min(99, 100 * min_odd_wall_line_width / wall_line_width_x))",
|
||||
"minimum_value": "1",
|
||||
"maximum_value": "99"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"fill_outline_gaps": {
|
||||
"label": "Print Thin Walls",
|
||||
@ -1260,10 +1291,10 @@
|
||||
},
|
||||
"min_bead_width":
|
||||
{
|
||||
"label": "Minimum Wall Line Width",
|
||||
"label": "Minimum Thin Wall Line Width",
|
||||
"description": "Width of the wall that will replace thin features (according to the Minimum Feature Size) of the model. If the Minimum Wall Line Width is thinner than the thickness of the feature, the wall will become as thick as the feature itself.",
|
||||
"unit": "mm",
|
||||
"value": "wall_line_width_0 * (100.0 + wall_split_middle_threshold)/200",
|
||||
"value": "min_wall_line_width",
|
||||
"default_value": 0.2,
|
||||
"minimum_value": "0.001",
|
||||
"minimum_value_warning": "min_feature_size",
|
||||
@ -1521,7 +1552,7 @@
|
||||
"default_value": 6,
|
||||
"maximum_value": "999999",
|
||||
"type": "int",
|
||||
"value": "999999 if infill_sparse_density == 100 else math.ceil(round(bottom_thickness / resolveOrValue('layer_height'), 4))",
|
||||
"value": "999999 if infill_sparse_density == 100 and not magic_spiralize else math.ceil(round(bottom_thickness / resolveOrValue('layer_height'), 4))",
|
||||
"limit_to_extruder": "top_bottom_extruder_nr",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
@ -2516,7 +2547,7 @@
|
||||
"unit": "%",
|
||||
"type": "float",
|
||||
"default_value": 100.0,
|
||||
"enabled": false,
|
||||
"enabled": true,
|
||||
"minimum_value": "0.001",
|
||||
"minimum_value_warning": "100",
|
||||
"maximum_value_warning": "120",
|
||||
@ -2532,7 +2563,7 @@
|
||||
"unit": "%",
|
||||
"type": "float",
|
||||
"default_value": 100.0,
|
||||
"enabled": false,
|
||||
"enabled": true,
|
||||
"minimum_value": "0.001",
|
||||
"minimum_value_warning": "100",
|
||||
"maximum_value_warning": "120",
|
||||
@ -2548,7 +2579,7 @@
|
||||
"unit": "%",
|
||||
"type": "float",
|
||||
"default_value": 100.0,
|
||||
"enabled": false,
|
||||
"enabled": true,
|
||||
"minimum_value": "0.001",
|
||||
"minimum_value_warning": "100",
|
||||
"maximum_value_warning": "120",
|
||||
@ -4366,6 +4397,7 @@
|
||||
"default_value": "0",
|
||||
"value": "support_extruder_nr",
|
||||
"enabled": "(support_enable or support_meshes_present) and extruders_enabled_count > 1",
|
||||
"resolve": "max(extruderValues('support_interface_extruder_nr'))",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false,
|
||||
"children":
|
||||
@ -4378,6 +4410,7 @@
|
||||
"default_value": "0",
|
||||
"value": "support_interface_extruder_nr",
|
||||
"enabled": "(support_enable or support_meshes_present) and extruders_enabled_count > 1",
|
||||
"resolve": "max(extruderValues('support_roof_extruder_nr'))",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
},
|
||||
@ -4389,6 +4422,7 @@
|
||||
"default_value": "0",
|
||||
"value": "support_interface_extruder_nr",
|
||||
"enabled": "(support_enable or support_meshes_present) and extruders_enabled_count > 1",
|
||||
"resolve": "max(extruderValues('support_bottom_extruder_nr'))",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
}
|
||||
@ -5421,6 +5455,7 @@
|
||||
"default_value": "0",
|
||||
"value": "int(defaultExtruderPosition())",
|
||||
"enabled": "extruders_enabled_count > 1 and (resolveOrValue('adhesion_type') != 'none' or resolveOrValue('prime_tower_brim_enable'))",
|
||||
"resolve": "max(extruderValues('adhesion_extruder_nr'))",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false,
|
||||
"children":
|
||||
@ -5444,6 +5479,7 @@
|
||||
"default_value": "0",
|
||||
"value": "adhesion_extruder_nr",
|
||||
"enabled": "extruders_enabled_count > 1 and resolveOrValue('adhesion_type') == 'raft'",
|
||||
"resolve": "max(extruderValues('raft_base_extruder_nr'))",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
},
|
||||
@ -5455,6 +5491,7 @@
|
||||
"default_value": "0",
|
||||
"value": "adhesion_extruder_nr",
|
||||
"enabled": "extruders_enabled_count > 1 and resolveOrValue('adhesion_type') == 'raft'",
|
||||
"resolve": "max(extruderValues('raft_interface_extruder_nr'))",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
},
|
||||
@ -5466,6 +5503,7 @@
|
||||
"default_value": "0",
|
||||
"value": "adhesion_extruder_nr",
|
||||
"enabled": "extruders_enabled_count > 1 and resolveOrValue('adhesion_type') == 'raft'",
|
||||
"resolve": "max(extruderValues('raft_surface_extruder_nr'))",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false
|
||||
}
|
||||
@ -6411,8 +6449,10 @@
|
||||
"description": "The maximum extrusion area deviation allowed when removing intermediate points from a straight line. An intermediate point may serve as width-changing point in a long straight line. Therefore, if it is removed, it will cause the line to have a uniform width and, as a result, lose (or gain) a bit of extrusion area. If you increase this you may notice slight under- (or over-) extrusion in between straight parallel walls, as more intermediate width-changing points will be allowed to be removed. Your print will be less accurate, but the g-code will be smaller.",
|
||||
"type": "float",
|
||||
"unit": "μm²",
|
||||
"default_value": 50000,
|
||||
"default_value": 2000,
|
||||
"minimum_value": "0",
|
||||
"minimum_value_warning": "500",
|
||||
"maximum_value_warning": "50000",
|
||||
"settable_per_mesh": true
|
||||
}
|
||||
}
|
||||
|
@ -29,7 +29,7 @@
|
||||
"default_value": "M104 S{material_print_temperature_layer_0} ;Set Hotend Temperature\nM140 S{material_bed_temperature_layer_0} ;Set Bed Temperature\nG28 ;home\nG90 ;absolute positioning\nG1 X-10 Y-10 F3000 ;Move to corner \nG1 Z0 F1800 ;Go to zero offset\nM109 S{material_print_temperature_layer_0} ;Wait for Hotend Temperature\nM190 S{material_bed_temperature_layer_0} ;Wait for Bed Temperature\nG92 E0 ;Zero set extruder position\nG1 E20 F200 ;Feed filament to clear nozzle\nG92 E0 ;Zero set extruder position"
|
||||
},
|
||||
"machine_end_gcode": {
|
||||
"default_value": "M104 S0 ;Extruder heater off\nM140 S0 ;Heated bed heater off\nG90 ;absolute positioning\nG92 E0 ;Retract the filament\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z{machine_width} E-1 F3000 ;move Z up a bit and retract filament even more\nG1 X0 F3000 ;move X to min endstops, so the head is out of the way\nG1 Y{machine_depth} F3000 ;so the head is out of the way and Plate is moved forward"
|
||||
"default_value": "M104 S0 ;Extruder heater off\nM140 S0 ;Heated bed heater off\nG90 ;absolute positioning\nG92 E0 ;Retract the filament\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z{machine_height} E-1 F3000 ;move Z up a bit and retract filament even more\nG1 X0 F3000 ;move X to min endstops, so the head is out of the way\nG1 Y{machine_depth} F3000 ;so the head is out of the way and Plate is moved forward"
|
||||
},
|
||||
"machine_nozzle_size": {
|
||||
"default_value": 0.4
|
||||
|
@ -47,26 +47,53 @@
|
||||
"line_width": {
|
||||
"value": "machine_nozzle_size"
|
||||
},
|
||||
"wall_thickness": {
|
||||
"value": "wall_line_width_0 + wall_line_width_x"
|
||||
},
|
||||
"infill_before_walls": {
|
||||
"value": "False"
|
||||
},
|
||||
"infill_material_flow": {
|
||||
"value": "(1.95-infill_sparse_density / 100 if infill_sparse_density > 95 else 1) * material_flow"
|
||||
},
|
||||
"retraction_combing": {
|
||||
"value": "'no_outer_surfaces'"
|
||||
},
|
||||
"roofing_layer_count": {
|
||||
"value": "0"
|
||||
},
|
||||
"roofing_material_flow": {
|
||||
"value": "material_flow"
|
||||
},
|
||||
"skin_material_flow": {
|
||||
"value": "0.97 * material_flow"
|
||||
},
|
||||
"skin_monotonic" : {
|
||||
"value": true
|
||||
},
|
||||
"speed_equalize_flow_width_factor": {
|
||||
"value": "110.0"
|
||||
},
|
||||
"meshfix_maximum_extrusion_area_deviation": {
|
||||
"value": "50000"
|
||||
},
|
||||
"top_layers": {
|
||||
"value": "math.ceil(round(top_thickness / resolveOrValue('layer_height'), 4))"
|
||||
},
|
||||
"bottom_layers": {
|
||||
"value": "math.ceil(round(bottom_thickness / resolveOrValue('layer_height'), 4))"
|
||||
},
|
||||
"xy_offset": {
|
||||
"value": "-layer_height * 0.1"
|
||||
},
|
||||
"meshfix_maximum_resolution": {
|
||||
"value": "max(speed_wall_0 / 75, 0.5)"
|
||||
},
|
||||
"meshfix_maximum_deviation": {
|
||||
"value": "machine_nozzle_size / 10"
|
||||
},
|
||||
"jerk_travel": {
|
||||
"value": "jerk_print"
|
||||
},
|
||||
"acceleration_travel": {
|
||||
"value": "acceleration_wall"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -34,9 +34,6 @@
|
||||
"layer_height_0": {
|
||||
"value": "round(machine_nozzle_size / 1.5, 2)"
|
||||
},
|
||||
"line_width": {
|
||||
"value": "machine_nozzle_size"
|
||||
},
|
||||
"speed_support": {
|
||||
"value": "speed_wall_0"
|
||||
},
|
||||
|
@ -60,7 +60,6 @@
|
||||
"speed_infill": { "value": "speed_print" },
|
||||
"speed_wall_x": { "value": "speed_wall" },
|
||||
"layer_height_0": { "value": "round(machine_nozzle_size / 1.5, 2)" },
|
||||
"line_width": { "value": "machine_nozzle_size" },
|
||||
"optimize_wall_printing_order": { "value": "True" },
|
||||
"zig_zaggify_infill": { "value": "gradual_infill_steps == 0" },
|
||||
"speed_support": { "value": "speed_wall_0" },
|
||||
|
@ -111,7 +111,6 @@
|
||||
"jerk_support_infill": {"minimum_value_warning": 20 },
|
||||
"jerk_support_interface": { "value": "math.ceil(jerk_print * 5 / 20)"},
|
||||
"jerk_prime_tower": { "value": "jerk_print", "minimum_value_warning": 20 },
|
||||
"jerk_travel": {"minimum_value_warning": 20 },
|
||||
"jerk_layer_0": { "value": "jerk_topbottom", "minimum_value_warning": 20},
|
||||
"jerk_print_layer_0": {"minimum_value_warning": 20 },
|
||||
"jerk_travel_layer_0": {"minimum_value_warning": 20 },
|
||||
@ -166,7 +165,6 @@
|
||||
"top_bottom_thickness": { "value": "1" },
|
||||
"travel_avoid_distance": { "value": "3 if extruders_enabled_count > 1 else machine_nozzle_tip_outer_diameter / 2 * 1.5" },
|
||||
"wall_0_inset": { "value": "0" },
|
||||
"wall_thickness": { "value": "1" },
|
||||
"zig_zaggify_infill": { "value": "gradual_infill_steps == 0" }
|
||||
}
|
||||
}
|
||||
|
@ -103,7 +103,6 @@
|
||||
"jerk_support_infill": {"minimum_value_warning": 20 },
|
||||
"jerk_support_interface": { "value": "math.ceil(jerk_print * 5 / 20)"},
|
||||
"jerk_prime_tower": { "value": "jerk_print", "minimum_value_warning": 20 },
|
||||
"jerk_travel": {"minimum_value_warning": 20 },
|
||||
"jerk_layer_0": { "value": "jerk_topbottom", "minimum_value_warning": 20},
|
||||
"jerk_print_layer_0": {"minimum_value_warning": 20 },
|
||||
"jerk_travel_layer_0": {"minimum_value_warning": 20 },
|
||||
@ -159,9 +158,6 @@
|
||||
"travel_avoid_supports": { "value": "True" },
|
||||
"travel_avoid_distance": { "value": "3 if extruders_enabled_count > 1 else machine_nozzle_tip_outer_diameter / 2 * 1.5" },
|
||||
"wall_0_inset": { "value": "0" },
|
||||
"wall_thickness": { "value": "1" },
|
||||
"meshfix_maximum_resolution": { "value": "(speed_wall_0 + speed_wall_x) / 60" },
|
||||
"meshfix_maximum_deviation": { "value": "layer_height / 4" },
|
||||
"initial_layer_line_width_factor": { "value": "120" },
|
||||
"zig_zaggify_infill": { "value": "gradual_infill_steps == 0" }
|
||||
}
|
||||
|
@ -105,7 +105,6 @@
|
||||
"jerk_support_infill": {"minimum_value_warning": 20 },
|
||||
"jerk_support_interface": { "value": "math.ceil(jerk_print * 5 / 20)"},
|
||||
"jerk_prime_tower": { "value": "jerk_print", "minimum_value_warning": 20 },
|
||||
"jerk_travel": {"minimum_value_warning": 20 },
|
||||
"jerk_layer_0": { "value": "jerk_topbottom", "minimum_value_warning": 20},
|
||||
"jerk_print_layer_0": {"minimum_value_warning": 20 },
|
||||
"jerk_travel_layer_0": {"minimum_value_warning": 20 },
|
||||
@ -161,9 +160,6 @@
|
||||
"travel_avoid_supports": { "value": "True" },
|
||||
"travel_avoid_distance": { "value": "3 if extruders_enabled_count > 1 else machine_nozzle_tip_outer_diameter / 2 * 1.5" },
|
||||
"wall_0_inset": { "value": "0" },
|
||||
"wall_thickness": { "value": "1" },
|
||||
"meshfix_maximum_resolution": { "value": "(speed_wall_0 + speed_wall_x) / 60" },
|
||||
"meshfix_maximum_deviation": { "value": "layer_height / 4" },
|
||||
"optimize_wall_printing_order": { "value": "True" },
|
||||
"initial_layer_line_width_factor": { "value": "120" },
|
||||
"zig_zaggify_infill": { "value": "gradual_infill_steps == 0" },
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 318 KiB |
Binary file not shown.
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 320 KiB |
Binary file not shown.
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 317 KiB |
@ -4,7 +4,7 @@ name = Accurate
|
||||
definition = deltacomb_base
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = D010
|
||||
intent_category = engineering
|
||||
|
@ -4,7 +4,7 @@ name = Accurate
|
||||
definition = deltacomb_base
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = D015
|
||||
intent_category = engineering
|
||||
|
@ -4,7 +4,7 @@ name = Accurate
|
||||
definition = deltacomb_base
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = D020
|
||||
intent_category = engineering
|
||||
|
@ -4,7 +4,7 @@ name = Quick
|
||||
definition = deltacomb_base
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = D020
|
||||
intent_category = quick
|
||||
|
@ -4,7 +4,7 @@ name = Quick
|
||||
definition = deltacomb_base
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = D030
|
||||
intent_category = quick
|
||||
|
@ -4,7 +4,7 @@ name = Accurate
|
||||
definition = deltacomb_base
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = D010
|
||||
intent_category = engineering
|
||||
|
@ -4,7 +4,7 @@ name = Accurate
|
||||
definition = deltacomb_base
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = D015
|
||||
intent_category = engineering
|
||||
|
@ -4,7 +4,7 @@ name = Accurate
|
||||
definition = deltacomb_base
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = D020
|
||||
intent_category = engineering
|
||||
|
@ -4,7 +4,7 @@ name = Quick
|
||||
definition = deltacomb_base
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = D020
|
||||
intent_category = quick
|
||||
|
@ -4,7 +4,7 @@ name = Quick
|
||||
definition = deltacomb_base
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = D030
|
||||
intent_category = quick
|
||||
|
@ -4,7 +4,7 @@ name = Accurate
|
||||
definition = deltacomb_base
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = D010
|
||||
intent_category = engineering
|
||||
|
@ -4,7 +4,7 @@ name = Accurate
|
||||
definition = deltacomb_base
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = D015
|
||||
intent_category = engineering
|
||||
|
@ -4,7 +4,7 @@ name = Accurate
|
||||
definition = deltacomb_base
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = D020
|
||||
intent_category = engineering
|
||||
|
@ -4,7 +4,7 @@ name = Quick
|
||||
definition = deltacomb_base
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = D020
|
||||
intent_category = quick
|
||||
|
@ -4,7 +4,7 @@ name = Quick
|
||||
definition = deltacomb_base
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = D020
|
||||
intent_category = quick
|
||||
|
@ -4,7 +4,7 @@ name = Quick
|
||||
definition = deltacomb_base
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = D030
|
||||
intent_category = quick
|
||||
|
@ -4,7 +4,7 @@ name = Accurate
|
||||
definition = deltacomb_base
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = D010
|
||||
intent_category = engineering
|
||||
|
@ -4,7 +4,7 @@ name = Accurate
|
||||
definition = deltacomb_base
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = D015
|
||||
intent_category = engineering
|
||||
|
@ -4,7 +4,7 @@ name = Accurate
|
||||
definition = deltacomb_base
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = D020
|
||||
intent_category = engineering
|
||||
|
@ -4,7 +4,7 @@ name = Quick
|
||||
definition = deltacomb_base
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = D015
|
||||
intent_category = quick
|
||||
|
@ -4,7 +4,7 @@ name = Quick
|
||||
definition = deltacomb_base
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = D020
|
||||
intent_category = quick
|
||||
|
@ -4,7 +4,7 @@ name = Quick
|
||||
definition = deltacomb_base
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = D030
|
||||
intent_category = quick
|
||||
|
@ -4,7 +4,7 @@ name = Accurate
|
||||
definition = deltacomb_base
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = D010
|
||||
intent_category = engineering
|
||||
|
@ -4,7 +4,7 @@ name = Accurate
|
||||
definition = deltacomb_base
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = D015
|
||||
intent_category = engineering
|
||||
|
@ -4,7 +4,7 @@ name = Accurate
|
||||
definition = deltacomb_base
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = D020
|
||||
intent_category = engineering
|
||||
|
@ -4,7 +4,7 @@ name = Quick
|
||||
definition = deltacomb_base
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = D020
|
||||
intent_category = quick
|
||||
|
@ -4,7 +4,7 @@ name = Quick
|
||||
definition = deltacomb_base
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = D030
|
||||
intent_category = quick
|
||||
|
@ -4,7 +4,7 @@ name = Accurate
|
||||
definition = deltacomb_base
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = D010
|
||||
intent_category = engineering
|
||||
|
@ -4,7 +4,7 @@ name = Accurate
|
||||
definition = deltacomb_base
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = D015
|
||||
intent_category = engineering
|
||||
|
@ -4,7 +4,7 @@ name = Accurate
|
||||
definition = deltacomb_base
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = D020
|
||||
intent_category = engineering
|
||||
|
@ -4,7 +4,7 @@ name = Quick
|
||||
definition = deltacomb_base
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = D020
|
||||
intent_category = quick
|
||||
|
@ -4,7 +4,7 @@ name = Quick
|
||||
definition = deltacomb_base
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = D030
|
||||
intent_category = quick
|
||||
|
@ -4,7 +4,7 @@ name = Quick
|
||||
definition = liquid
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
intent_category = quick
|
||||
quality_type = draft
|
||||
|
@ -4,7 +4,7 @@ name = Accurate
|
||||
definition = liquid
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = fast
|
||||
|
@ -4,7 +4,7 @@ name = Visual
|
||||
definition = liquid
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = fast
|
||||
intent_category = visual
|
||||
|
@ -4,7 +4,7 @@ name = Visual
|
||||
definition = liquid
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = high
|
||||
intent_category = visual
|
||||
|
@ -4,7 +4,7 @@ name = Accurate
|
||||
definition = liquid
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = normal
|
||||
|
@ -4,7 +4,7 @@ name = Visual
|
||||
definition = liquid
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = normal
|
||||
intent_category = visual
|
||||
|
@ -4,7 +4,7 @@ name = Accurate
|
||||
definition = liquid
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = fast
|
||||
|
@ -4,7 +4,7 @@ name = Accurate
|
||||
definition = liquid
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = normal
|
||||
|
@ -4,7 +4,7 @@ name = Accurate
|
||||
definition = liquid
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = fast
|
||||
|
@ -4,7 +4,7 @@ name = Accurate
|
||||
definition = liquid
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = normal
|
||||
|
@ -4,7 +4,7 @@ name = Accurate
|
||||
definition = liquid
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = fast
|
||||
|
@ -4,7 +4,7 @@ name = Accurate
|
||||
definition = liquid
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = normal
|
||||
|
@ -4,7 +4,7 @@ name = Quick
|
||||
definition = liquid
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
intent_category = quick
|
||||
quality_type = draft
|
||||
|
@ -4,7 +4,7 @@ name = Accurate
|
||||
definition = liquid
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = fast
|
||||
|
@ -4,7 +4,7 @@ name = Visual
|
||||
definition = liquid
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = fast
|
||||
intent_category = visual
|
||||
|
@ -4,7 +4,7 @@ name = Visual
|
||||
definition = liquid
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = high
|
||||
intent_category = visual
|
||||
|
@ -4,7 +4,7 @@ name = Accurate
|
||||
definition = liquid
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = normal
|
||||
|
@ -4,7 +4,7 @@ name = Visual
|
||||
definition = liquid
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = normal
|
||||
intent_category = visual
|
||||
|
@ -4,7 +4,7 @@ name = Quick
|
||||
definition = liquid
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
intent_category = quick
|
||||
quality_type = draft
|
||||
|
@ -4,7 +4,7 @@ name = Accurate
|
||||
definition = liquid
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = fast
|
||||
|
@ -4,7 +4,7 @@ name = Visual
|
||||
definition = liquid
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = fast
|
||||
intent_category = visual
|
||||
|
@ -4,7 +4,7 @@ name = Visual
|
||||
definition = liquid
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = high
|
||||
intent_category = visual
|
||||
|
@ -4,7 +4,7 @@ name = Accurate
|
||||
definition = liquid
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = normal
|
||||
|
@ -4,7 +4,7 @@ name = Visual
|
||||
definition = liquid
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = normal
|
||||
intent_category = visual
|
||||
|
@ -4,7 +4,7 @@ name = Quick
|
||||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
intent_category = quick
|
||||
quality_type = draft
|
||||
@ -18,8 +18,7 @@ speed_wall = =speed_print
|
||||
speed_wall_0 = =speed_wall
|
||||
speed_wall_x = =speed_wall
|
||||
speed_layer_0 = 20
|
||||
top_bottom_thickness = =wall_thickness
|
||||
wall_thickness = =line_width * 2
|
||||
top_bottom_thickness = 0.8
|
||||
infill_sparse_density = 15
|
||||
|
||||
jerk_print = 30
|
||||
|
@ -4,7 +4,7 @@ name = Accurate
|
||||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = fast
|
||||
@ -31,4 +31,3 @@ speed_wall_x = =speed_wall
|
||||
top_bottom_thickness = =wall_thickness
|
||||
|
||||
wall_thickness = =line_width * 3
|
||||
xy_offset = =-layer_height * 0.2
|
||||
|
@ -4,7 +4,7 @@ name = Visual
|
||||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = fast
|
||||
intent_category = visual
|
||||
@ -13,5 +13,4 @@ variant = AA 0.4
|
||||
|
||||
[values]
|
||||
speed_infill = 50
|
||||
wall_thickness = =wall_line_width * 3
|
||||
top_bottom_thickness = =wall_thickness
|
||||
top_bottom_thickness = 1.05
|
||||
|
@ -4,7 +4,7 @@ name = Visual
|
||||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = high
|
||||
intent_category = visual
|
||||
@ -13,5 +13,4 @@ variant = AA 0.4
|
||||
|
||||
[values]
|
||||
speed_infill = 50
|
||||
wall_thickness = =wall_line_width * 3
|
||||
top_bottom_thickness = =wall_thickness
|
||||
top_bottom_thickness = 1.05
|
||||
|
@ -4,7 +4,7 @@ name = Accurate
|
||||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = normal
|
||||
@ -31,4 +31,3 @@ speed_wall_x = =speed_wall
|
||||
top_bottom_thickness = =wall_thickness
|
||||
|
||||
wall_thickness = =line_width * 3
|
||||
xy_offset = =-layer_height * 0.2
|
||||
|
@ -4,7 +4,7 @@ name = Visual
|
||||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
setting_version = 20
|
||||
type = intent
|
||||
quality_type = normal
|
||||
intent_category = visual
|
||||
@ -13,5 +13,4 @@ variant = AA 0.4
|
||||
|
||||
[values]
|
||||
speed_infill = 50
|
||||
wall_thickness = =wall_line_width * 3
|
||||
top_bottom_thickness = =wall_thickness
|
||||
top_bottom_thickness = 1.05
|
||||
|
@ -1,35 +1,34 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Accurate
|
||||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = fast
|
||||
material = generic_cpe_plus
|
||||
variant = AA 0.4
|
||||
|
||||
[values]
|
||||
|
||||
jerk_print = 30
|
||||
jerk_infill = =jerk_print
|
||||
jerk_topbottom = =jerk_print
|
||||
jerk_wall = =jerk_print
|
||||
jerk_wall_0 = =jerk_wall
|
||||
jerk_wall_x = =jerk_wall
|
||||
jerk_layer_0 = 5
|
||||
|
||||
speed_print = 30
|
||||
speed_infill = =speed_print
|
||||
speed_layer_0 = 20
|
||||
speed_topbottom = =speed_print
|
||||
speed_wall = =speed_print
|
||||
speed_wall_0 = =speed_wall
|
||||
speed_wall_x = =speed_wall
|
||||
top_bottom_thickness = =wall_thickness
|
||||
|
||||
wall_thickness = =line_width * 3
|
||||
xy_offset = =-layer_height * 0.2
|
||||
|
||||
[general]
|
||||
version = 4
|
||||
name = Accurate
|
||||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 20
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = fast
|
||||
material = generic_cpe_plus
|
||||
variant = AA 0.4
|
||||
|
||||
[values]
|
||||
|
||||
jerk_print = 30
|
||||
jerk_infill = =jerk_print
|
||||
jerk_topbottom = =jerk_print
|
||||
jerk_wall = =jerk_print
|
||||
jerk_wall_0 = =jerk_wall
|
||||
jerk_wall_x = =jerk_wall
|
||||
jerk_layer_0 = 5
|
||||
|
||||
speed_print = 30
|
||||
speed_infill = =speed_print
|
||||
speed_layer_0 = 20
|
||||
speed_topbottom = =speed_print
|
||||
speed_wall = =speed_print
|
||||
speed_wall_0 = =speed_wall
|
||||
speed_wall_x = =speed_wall
|
||||
top_bottom_thickness = =wall_thickness
|
||||
|
||||
wall_thickness = =line_width * 3
|
||||
|
||||
|
@ -1,35 +1,34 @@
|
||||
[general]
|
||||
version = 4
|
||||
name = Accurate
|
||||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 19
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = normal
|
||||
material = generic_cpe_plus
|
||||
variant = AA 0.4
|
||||
|
||||
[values]
|
||||
|
||||
jerk_print = 30
|
||||
jerk_infill = =jerk_print
|
||||
jerk_topbottom = =jerk_print
|
||||
jerk_wall = =jerk_print
|
||||
jerk_wall_0 = =jerk_wall
|
||||
jerk_wall_x = =jerk_wall
|
||||
jerk_layer_0 = 5
|
||||
|
||||
speed_print = 30
|
||||
speed_infill = =speed_print
|
||||
speed_layer_0 = 20
|
||||
speed_topbottom = =speed_print
|
||||
speed_wall = =speed_print
|
||||
speed_wall_0 = =speed_wall
|
||||
speed_wall_x = =speed_wall
|
||||
top_bottom_thickness = =wall_thickness
|
||||
|
||||
wall_thickness = =line_width * 3
|
||||
xy_offset = =-layer_height * 0.2
|
||||
|
||||
[general]
|
||||
version = 4
|
||||
name = Accurate
|
||||
definition = ultimaker_s3
|
||||
|
||||
[metadata]
|
||||
setting_version = 20
|
||||
type = intent
|
||||
intent_category = engineering
|
||||
quality_type = normal
|
||||
material = generic_cpe_plus
|
||||
variant = AA 0.4
|
||||
|
||||
[values]
|
||||
|
||||
jerk_print = 30
|
||||
jerk_infill = =jerk_print
|
||||
jerk_topbottom = =jerk_print
|
||||
jerk_wall = =jerk_print
|
||||
jerk_wall_0 = =jerk_wall
|
||||
jerk_wall_x = =jerk_wall
|
||||
jerk_layer_0 = 5
|
||||
|
||||
speed_print = 30
|
||||
speed_infill = =speed_print
|
||||
speed_layer_0 = 20
|
||||
speed_topbottom = =speed_print
|
||||
speed_wall = =speed_print
|
||||
speed_wall_0 = =speed_wall
|
||||
speed_wall_x = =speed_wall
|
||||
top_bottom_thickness = =wall_thickness
|
||||
|
||||
wall_thickness = =line_width * 3
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user