Merge remote-tracking branch 'origin/main' into CURA-9278_choose_printer_dialog

This commit is contained in:
Remco Burema 2022-09-06 23:33:45 +02:00
commit 5866560540
57 changed files with 200 additions and 185 deletions

View file

@ -53,7 +53,6 @@ env:
jobs: jobs:
conan-package-create: conan-package-create:
if: ${{ github.event.pull_request.head.repo.full_name == github.repository }}
runs-on: ${{ inputs.runs_on }} runs-on: ${{ inputs.runs_on }}
steps: steps:

View file

@ -157,8 +157,8 @@ jobs:
channel_metadata = f"{channel}_{no_commits}" channel_metadata = f"{channel}_{no_commits}"
# FIXME: for when we create a new release branch # FIXME: for when we create a new release branch
if latest_branch_version.prerelease == "": if latest_branch_version.prerelease == "":
bump_up_minor = int(latest_branch_version.minor) + 1 bump_up_patch = int(latest_branch_version.patch) + 1
actual_version = f"{latest_branch_version.major}.{bump_up_minor}.{latest_branch_version.patch}-alpha+{buildmetadata}{channel_metadata}" actual_version = f"{latest_branch_version.major}.{latest_branch_version.minor}.{bump_up_patch}-alpha+{buildmetadata}{channel_metadata}"
else: else:
actual_version = f"{latest_branch_version.major}.{latest_branch_version.minor}.{latest_branch_version.patch}-{latest_branch_version.prerelease.lower()}+{buildmetadata}{channel_metadata}" actual_version = f"{latest_branch_version.major}.{latest_branch_version.minor}.{latest_branch_version.patch}-{latest_branch_version.prerelease.lower()}+{buildmetadata}{channel_metadata}"
else: else:

View file

@ -1,2 +1,2 @@
conan!=1.51.0,!=1.51.1,!=1.51.2,!=1.51.3,!=1.52.0 conan!=1.51.0,!=1.51.1,!=1.51.2,!=1.51.3
sip sip

View file

@ -103,7 +103,18 @@ jobs:
- name: Install Linux system requirements - name: Install Linux system requirements
if: ${{ runner.os == 'Linux' }} if: ${{ runner.os == 'Linux' }}
run: sudo apt install build-essential checkinstall libegl-dev zlib1g-dev libssl-dev ninja-build autoconf libx11-dev libx11-xcb-dev libfontenc-dev libice-dev libsm-dev libxau-dev libxaw7-dev libxcomposite-dev libxcursor-dev libxdamage-dev libxdmcp-dev libxext-dev libxfixes-dev libxi-dev libxinerama-dev libxkbfile-dev libxmu-dev libxmuu-dev libxpm-dev libxrandr-dev libxrender-dev libxres-dev libxss-dev libxt-dev libxtst-dev libxv-dev libxvmc-dev libxxf86vm-dev xtrans-dev libxcb-render0-dev libxcb-render-util0-dev libxcb-xkb-dev libxcb-icccm4-dev libxcb-image0-dev libxcb-keysyms1-dev libxcb-randr0-dev libxcb-shape0-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-xinerama0-dev xkb-data libxcb-dri3-dev uuid-dev libxcb-util-dev libxkbcommon-x11-dev -y run: |
sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
sudo apt update
sudo apt upgrade
sudo apt install build-essential checkinstall libegl-dev zlib1g-dev libssl-dev ninja-build autoconf libx11-dev libx11-xcb-dev libfontenc-dev libice-dev libsm-dev libxau-dev libxaw7-dev libxcomposite-dev libxcursor-dev libxdamage-dev libxdmcp-dev libxext-dev libxfixes-dev libxi-dev libxinerama-dev libxkbfile-dev libxmu-dev libxmuu-dev libxpm-dev libxrandr-dev libxrender-dev libxres-dev libxss-dev libxt-dev libxtst-dev libxv-dev libxvmc-dev libxxf86vm-dev xtrans-dev libxcb-render0-dev libxcb-render-util0-dev libxcb-xkb-dev libxcb-icccm4-dev libxcb-image0-dev libxcb-keysyms1-dev libxcb-randr0-dev libxcb-shape0-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-xinerama0-dev xkb-data libxcb-dri3-dev uuid-dev libxcb-util-dev libxkbcommon-x11-dev pkg-config -y
- name: Install GCC-12 on ubuntu-22.04
if: ${{ startsWith(inputs.runs_on, 'ubuntu-22.04') }}
run: |
sudo apt install g++-12 gcc-12 -y
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 12
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 12
- name: Get Conan configuration - name: Get Conan configuration
run: conan config install https://github.com/Ultimaker/conan-config.git run: conan config install https://github.com/Ultimaker/conan-config.git

View file

@ -16,4 +16,6 @@ Making pull requests
-------------------- --------------------
If you want to propose a change to Cura's source code, please create a pull request in the appropriate repository (being [Cura](https://github.com/Ultimaker/Cura), [Uranium](https://github.com/Ultimaker/Uranium), [CuraEngine](https://github.com/Ultimaker/CuraEngine), [fdm_materials](https://github.com/Ultimaker/fdm_materials), [libArcus](https://github.com/Ultimaker/libArcus), [cura-build](https://github.com/Ultimaker/cura-build), [cura-build-environment](https://github.com/Ultimaker/cura-build-environment), [libSavitar](https://github.com/Ultimaker/libSavitar), [libCharon](https://github.com/Ultimaker/libCharon) or [cura-binary-data](https://github.com/Ultimaker/cura-binary-data)) and if your change requires changes on multiple of these repositories, please link them together so that we know to merge them together. If you want to propose a change to Cura's source code, please create a pull request in the appropriate repository (being [Cura](https://github.com/Ultimaker/Cura), [Uranium](https://github.com/Ultimaker/Uranium), [CuraEngine](https://github.com/Ultimaker/CuraEngine), [fdm_materials](https://github.com/Ultimaker/fdm_materials), [libArcus](https://github.com/Ultimaker/libArcus), [cura-build](https://github.com/Ultimaker/cura-build), [cura-build-environment](https://github.com/Ultimaker/cura-build-environment), [libSavitar](https://github.com/Ultimaker/libSavitar), [libCharon](https://github.com/Ultimaker/libCharon) or [cura-binary-data](https://github.com/Ultimaker/cura-binary-data)) and if your change requires changes on multiple of these repositories, please link them together so that we know to merge them together.
The style guide for code contributions to Cura and other Ultimaker projects can be found [here](https://github.com/Ultimaker/Meta/blob/master/general/generic_code_conventions.md).
Some of these repositories will have automated tests running when you create a pull request, indicated by green check marks or red crosses in the Github web page. If you see a red cross, that means that a test has failed. If the test doesn't fail on the Master branch but does fail on your branch, that indicates that you've probably made a mistake and you need to do that. Click on the cross for more details, or run the test locally by running `cmake . && ctest --verbose`. Some of these repositories will have automated tests running when you create a pull request, indicated by green check marks or red crosses in the Github web page. If you see a red cross, that means that a test has failed. If the test doesn't fail on the Master branch but does fail on your branch, that indicates that you've probably made a mistake and you need to do that. Click on the cross for more details, or run the test locally by running `cmake . && ctest --verbose`.

View file

@ -24,9 +24,12 @@ class LayerPolygon:
PrimeTowerType = 11 PrimeTowerType = 11
__number_of_types = 12 __number_of_types = 12
__jump_map = numpy.logical_or(numpy.logical_or(numpy.arange(__number_of_types) == NoneType, numpy.arange(__number_of_types) == MoveCombingType), numpy.arange(__number_of_types) == MoveRetractionType) __jump_map = numpy.logical_or(numpy.logical_or(numpy.arange(__number_of_types) == NoneType,
numpy.arange(__number_of_types) == MoveCombingType),
numpy.arange(__number_of_types) == MoveRetractionType)
def __init__(self, extruder: int, line_types: numpy.ndarray, data: numpy.ndarray, line_widths: numpy.ndarray, line_thicknesses: numpy.ndarray, line_feedrates: numpy.ndarray) -> None: def __init__(self, extruder: int, line_types: numpy.ndarray, data: numpy.ndarray,
line_widths: numpy.ndarray, line_thicknesses: numpy.ndarray, line_feedrates: numpy.ndarray) -> None:
"""LayerPolygon, used in ProcessSlicedLayersJob """LayerPolygon, used in ProcessSlicedLayersJob
:param extruder: The position of the extruder :param extruder: The position of the extruder
@ -39,10 +42,12 @@ class LayerPolygon:
self._extruder = extruder self._extruder = extruder
self._types = line_types self._types = line_types
for i in range(len(self._types)): unknown_types = np.where(self_types >= self_number_of_types)
if self._types[i] >= self.__number_of_types: # Got faulty line data from the engine. if unknown_types:
Logger.log("w", "Found an unknown line type: %s", i) # Got faulty line data from the engine.
self._types[i] = self.NoneType for idx in unknown_types:
Logger.warn(f"Found an unknown line type at: {idx}")
self._types[idx] = self.NoneType
self._data = data self._data = data
self._line_widths = line_widths self._line_widths = line_widths
self._line_thicknesses = line_thicknesses self._line_thicknesses = line_thicknesses
@ -63,9 +68,11 @@ class LayerPolygon:
self._color_map = LayerPolygon.getColorMap() self._color_map = LayerPolygon.getColorMap()
self._colors = self._color_map[self._types] # type: numpy.ndarray self._colors = self._color_map[self._types] # type: numpy.ndarray
# When type is used as index returns true if type == LayerPolygon.InfillType or type == LayerPolygon.SkinType or type == LayerPolygon.SupportInfillType # When type is used as index returns true if type == LayerPolygon.InfillType
# or type == LayerPolygon.SkinType
# or type == LayerPolygon.SupportInfillType
# Should be generated in better way, not hardcoded. # Should be generated in better way, not hardcoded.
self._is_infill_or_skin_type_map = numpy.array([0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0], dtype = bool) self._is_infill_or_skin_type_map = numpy.array([0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0], dtype=bool)
self._build_cache_line_mesh_mask = None # type: Optional[numpy.ndarray] self._build_cache_line_mesh_mask = None # type: Optional[numpy.ndarray]
self._build_cache_needed_points = None # type: Optional[numpy.ndarray] self._build_cache_needed_points = None # type: Optional[numpy.ndarray]
@ -80,12 +87,14 @@ class LayerPolygon:
# Only if the type of line segment changes do we need to add an extra vertex to change colors # Only if the type of line segment changes do we need to add an extra vertex to change colors
self._build_cache_needed_points[1:, 0][:, numpy.newaxis] = self._types[1:] != self._types[:-1] self._build_cache_needed_points[1:, 0][:, numpy.newaxis] = self._types[1:] != self._types[:-1]
# Mark points as unneeded if they are of types we don't want in the line mesh according to the calculated mask # Mark points as unneeded if they are of types we don't want in the line mesh according to the calculated mask
numpy.logical_and(self._build_cache_needed_points, self._build_cache_line_mesh_mask, self._build_cache_needed_points ) numpy.logical_and(self._build_cache_needed_points, self._build_cache_line_mesh_mask, self._build_cache_needed_points)
self._vertex_begin = 0 self._vertex_begin = 0
self._vertex_end = cast(int, numpy.sum(self._build_cache_needed_points)) self._vertex_end = cast(int, numpy.sum(self._build_cache_needed_points))
def build(self, vertex_offset: int, index_offset: int, vertices: numpy.ndarray, colors: numpy.ndarray, line_dimensions: numpy.ndarray, feedrates: numpy.ndarray, extruders: numpy.ndarray, line_types: numpy.ndarray, indices: numpy.ndarray) -> None: def build(self, vertex_offset: int, index_offset: int, vertices: numpy.ndarray,
colors: numpy.ndarray, line_dimensions: numpy.ndarray, feedrates: numpy.ndarray,
extruders: numpy.ndarray, line_types: numpy.ndarray, indices: numpy.ndarray) -> None:
"""Set all the arrays provided by the function caller, representing the LayerPolygon """Set all the arrays provided by the function caller, representing the LayerPolygon
The arrays are either by vertex or by indices. The arrays are either by vertex or by indices.
@ -111,10 +120,11 @@ class LayerPolygon:
line_mesh_mask = self._build_cache_line_mesh_mask line_mesh_mask = self._build_cache_line_mesh_mask
needed_points_list = self._build_cache_needed_points needed_points_list = self._build_cache_needed_points
# Index to the points we need to represent the line mesh. This is constructed by generating simple # Index to the points we need to represent the line mesh.
# start and end points for each line. For line segment n these are points n and n+1. Row n reads [n n+1] # This is constructed by generating simple start and end points for each line.
# Then then the indices for the points we don't need are thrown away based on the pre-calculated list. # For line segment n, these are points n and n+1. Row n reads [n n+1]
index_list = ( numpy.arange(len(self._types)).reshape((-1, 1)) + numpy.array([[0, 1]]) ).reshape((-1, 1))[needed_points_list.reshape((-1, 1))] # Then the indices for the points we don't need are thrown away based on the pre-calculated list.
index_list = (numpy.arange(len(self._types)).reshape((-1, 1)) + numpy.array([[0, 1]])).reshape((-1, 1))[needed_points_list.reshape((-1, 1))]
# The relative values of begin and end indices have already been set in buildCache, so we only need to offset them to the parents offset. # The relative values of begin and end indices have already been set in buildCache, so we only need to offset them to the parents offset.
self._vertex_begin += vertex_offset self._vertex_begin += vertex_offset
@ -138,11 +148,12 @@ class LayerPolygon:
# Convert type per vertex to type per line # Convert type per vertex to type per line
line_types[self._vertex_begin:self._vertex_end] = numpy.tile(self._types, (1, 2)).reshape((-1, 1))[needed_points_list.ravel()][:, 0] line_types[self._vertex_begin:self._vertex_end] = numpy.tile(self._types, (1, 2)).reshape((-1, 1))[needed_points_list.ravel()][:, 0]
# The relative values of begin and end indices have already been set in buildCache, so we only need to offset them to the parents offset. # The relative values of begin and end indices have already been set in buildCache,
# so we only need to offset them to the parents offset.
self._index_begin += index_offset self._index_begin += index_offset
self._index_end += index_offset self._index_end += index_offset
indices[self._index_begin:self._index_end, :] = numpy.arange(self._index_end-self._index_begin, dtype = numpy.int32).reshape((-1, 1)) indices[self._index_begin:self._index_end, :] = numpy.arange(self._index_end-self._index_begin, dtype=numpy.int32).reshape((-1, 1))
# When the line type changes the index needs to be increased by 2. # When the line type changes the index needs to be increased by 2.
indices[self._index_begin:self._index_end, :] += numpy.cumsum(needed_points_list[line_mesh_mask.ravel(), 0], dtype = numpy.int32).reshape((-1, 1)) indices[self._index_begin:self._index_end, :] += numpy.cumsum(needed_points_list[line_mesh_mask.ravel(), 0], dtype = numpy.int32).reshape((-1, 1))
# Each line segment goes from it's starting point p to p+1, offset by the vertex index. # Each line segment goes from it's starting point p to p+1, offset by the vertex index.
@ -217,10 +228,9 @@ class LayerPolygon:
normals[:, 1] = 0.0 # We are only interested in 2D normals normals[:, 1] = 0.0 # We are only interested in 2D normals
# Calculate the edges between points. # Calculate the edges between points.
# The call to numpy.roll shifts the entire array by one so that # The call to numpy.roll shifts the entire array by one
# we end up subtracting each next point from the current, wrapping # so that we end up subtracting each next point from the current, wrapping around.
# around. This gives us the edges from the next point to the current # This gives us the edges from the next point to the current point.
# point.
normals = numpy.diff(normals, 1, 0) normals = numpy.diff(normals, 1, 0)
# Calculate the length of each edge using standard Pythagoras # Calculate the length of each edge using standard Pythagoras

View file

@ -43,7 +43,7 @@ class MachineErrorChecker(QObject):
self._application = cura.CuraApplication.CuraApplication.getInstance() self._application = cura.CuraApplication.CuraApplication.getInstance()
self._machine_manager = self._application.getMachineManager() self._machine_manager = self._application.getMachineManager()
self._start_time = 0. # measure checking time self._check_start_time = time.time()
self._setCheckTimer() self._setCheckTimer()
@ -160,7 +160,7 @@ class MachineErrorChecker(QObject):
self._stacks_and_keys_to_check.append((stack, key)) self._stacks_and_keys_to_check.append((stack, key))
self._application.callLater(self._checkStack) self._application.callLater(self._checkStack)
self._start_time = time.time() self._check_start_time = time.time()
Logger.log("d", "New error check scheduled.") Logger.log("d", "New error check scheduled.")
def _checkStack(self) -> None: def _checkStack(self) -> None:
@ -212,12 +212,10 @@ class MachineErrorChecker(QObject):
self._has_errors = result self._has_errors = result
self.hasErrorUpdated.emit() self.hasErrorUpdated.emit()
self._machine_manager.stacksValidationChanged.emit() self._machine_manager.stacksValidationChanged.emit()
if keys_to_recheck is None: self._keys_to_check = keys_to_recheck if keys_to_recheck else set()
self._keys_to_check = set()
else:
self._keys_to_check = keys_to_recheck
self._need_to_check = False self._need_to_check = False
self._check_in_progress = False self._check_in_progress = False
self.needToWaitForResultChanged.emit() self.needToWaitForResultChanged.emit()
self.errorCheckFinished.emit() self.errorCheckFinished.emit()
Logger.log("i", "Error check finished, result = %s, time = %0.1fs", result, time.time() - self._start_time) execution_time = time.time() - self._check_start_time
Logger.info(f"Error check finished, result = {result}, time = {execution_time:.2f}s")

View file

@ -44,6 +44,7 @@ class GlobalStacksModel(ListModel):
self._filter_connection_type = None # type: Optional[ConnectionType] self._filter_connection_type = None # type: Optional[ConnectionType]
self._filter_online_only = False self._filter_online_only = False
self._filter_capabilities: List[str] = [] # Required capabilities that all listed printers must have. self._filter_capabilities: List[str] = [] # Required capabilities that all listed printers must have.
self._filter_abstract_machines: Optional[bool] = None
# Listen to changes # Listen to changes
CuraContainerRegistry.getInstance().containerAdded.connect(self._onContainerChanged) CuraContainerRegistry.getInstance().containerAdded.connect(self._onContainerChanged)
@ -54,6 +55,7 @@ class GlobalStacksModel(ListModel):
filterConnectionTypeChanged = pyqtSignal() filterConnectionTypeChanged = pyqtSignal()
filterCapabilitiesChanged = pyqtSignal() filterCapabilitiesChanged = pyqtSignal()
filterOnlineOnlyChanged = pyqtSignal() filterOnlineOnlyChanged = pyqtSignal()
filterAbstractMachinesChanged = pyqtSignal()
def setFilterConnectionType(self, new_filter: Optional[ConnectionType]) -> None: def setFilterConnectionType(self, new_filter: Optional[ConnectionType]) -> None:
if self._filter_connection_type != new_filter: if self._filter_connection_type != new_filter:
@ -98,6 +100,22 @@ class GlobalStacksModel(ListModel):
""" """
return self._filter_capabilities return self._filter_capabilities
def setFilterAbstractMachines(self, new_filter: Optional[bool]) -> None:
if self._filter_abstract_machines != new_filter:
self._filter_abstract_machines = new_filter
self.filterAbstractMachinesChanged.emit()
@pyqtProperty(bool, fset = setFilterAbstractMachines, notify = filterAbstractMachinesChanged)
def filterAbstractMachines(self) -> Optional[bool]:
"""
Weather we include abstract printers, non-abstract printers or both
if this is set to None both abstract and non-abstract printers will be included in the list
set to True will only include abstract printers
set to False will only inclde non-abstract printers
"""
return self._filter_abstract_machines
def _onContainerChanged(self, container) -> None: def _onContainerChanged(self, container) -> None:
"""Handler for container added/removed events from registry""" """Handler for container added/removed events from registry"""
@ -130,6 +148,10 @@ class GlobalStacksModel(ListModel):
if self._filter_online_only and not is_online: if self._filter_online_only and not is_online:
continue continue
is_abstract_machine = parseBool(container_stack.getMetaDataEntry("is_abstract_machine", False))
if self._filter_abstract_machines is not None and self._filter_abstract_machines is not is_abstract_machine:
continue
capabilities = set(container_stack.getMetaDataEntry(META_CAPABILITIES, "").split(",")) capabilities = set(container_stack.getMetaDataEntry(META_CAPABILITIES, "").split(","))
if set(self._filter_capabilities) - capabilities: # Not all required capabilities are met. if set(self._filter_capabilities) - capabilities: # Not all required capabilities are met.
continue continue

View file

@ -93,16 +93,19 @@ class MachineListModel(ListModel):
definition_id = abstract_machine.definition.getId() definition_id = abstract_machine.definition.getId()
online_machine_stacks = machines_manager.getMachinesWithDefinition(definition_id, online_only = True) online_machine_stacks = machines_manager.getMachinesWithDefinition(definition_id, online_only = True)
# Create a list item for abstract machine online_machine_stacks = list(filter(lambda machine: machine.hasNetworkedConnection(), online_machine_stacks))
self.addItem(abstract_machine, len(online_machine_stacks))
other_machine_stacks.remove(abstract_machine) other_machine_stacks.remove(abstract_machine)
if abstract_machine in online_machine_stacks: if abstract_machine in online_machine_stacks:
online_machine_stacks.remove(abstract_machine) online_machine_stacks.remove(abstract_machine)
# Create a list item for abstract machine
self.addItem(abstract_machine, True, len(online_machine_stacks))
# Create list of machines that are children of the abstract machine # Create list of machines that are children of the abstract machine
for stack in online_machine_stacks: for stack in online_machine_stacks:
if self._show_cloud_printers: if self._show_cloud_printers:
self.addItem(stack) self.addItem(stack, True)
# Remove this machine from the other stack list # Remove this machine from the other stack list
if stack in other_machine_stacks: if stack in other_machine_stacks:
other_machine_stacks.remove(stack) other_machine_stacks.remove(stack)
@ -122,25 +125,18 @@ class MachineListModel(ListModel):
}) })
for stack in other_machine_stacks: for stack in other_machine_stacks:
self.addItem(stack) self.addItem(stack, False)
def addItem(self, container_stack: ContainerStack, machine_count: int = 0) -> None: def addItem(self, container_stack: ContainerStack, is_online: bool, machine_count: int = 0) -> None:
if parseBool(container_stack.getMetaDataEntry("hidden", False)): if parseBool(container_stack.getMetaDataEntry("hidden", False)):
return return
# This is required because machines loaded from projects have the is_online="True" but no connection type.
# We want to display them the same way as unconnected printers in this case.
has_connection = False
has_connection |= parseBool(container_stack.getMetaDataEntry("is_abstract_machine", False))
for connection_type in [ConnectionType.NetworkConnection.value, ConnectionType.CloudConnection.value]:
has_connection |= connection_type in container_stack.configuredConnectionTypes
self.appendItem({ self.appendItem({
"componentType": "MACHINE", "componentType": "MACHINE",
"name": container_stack.getName(), "name": container_stack.getName(),
"id": container_stack.getId(), "id": container_stack.getId(),
"metadata": container_stack.getMetaData().copy(), "metadata": container_stack.getMetaData().copy(),
"isOnline": parseBool(container_stack.getMetaDataEntry("is_online", False)) and has_connection, "isOnline": is_online,
"isAbstractMachine": parseBool(container_stack.getMetaDataEntry("is_abstract_machine", False)), "isAbstractMachine": parseBool(container_stack.getMetaDataEntry("is_abstract_machine", False)),
"machineCount": machine_count, "machineCount": machine_count,
}) })

View file

@ -347,6 +347,12 @@ class GlobalStack(CuraContainerStack):
nameChanged = pyqtSignal() nameChanged = pyqtSignal()
name = pyqtProperty(str, fget=getName, fset=setName, notify=nameChanged) name = pyqtProperty(str, fget=getName, fset=setName, notify=nameChanged)
def hasNetworkedConnection(self) -> bool:
has_connection = False
for connection_type in [ConnectionType.NetworkConnection.value, ConnectionType.CloudConnection.value]:
has_connection |= connection_type in self.configuredConnectionTypes
return has_connection
## private: ## private:
global_stack_mime = MimeType( global_stack_mime = MimeType(
name = "application/x-cura-globalstack", name = "application/x-cura-globalstack",

View file

@ -186,7 +186,7 @@ class PrintInformation(QObject):
if time != time: # Check for NaN. Engine can sometimes give us weird values. if time != time: # Check for NaN. Engine can sometimes give us weird values.
duration.setDuration(0) duration.setDuration(0)
Logger.log("w", "Received NaN for print duration message") Logger.warning("Received NaN for print duration message")
continue continue
total_estimated_time += time total_estimated_time += time
@ -368,7 +368,7 @@ class PrintInformation(QObject):
mime_type = MimeTypeDatabase.getMimeTypeForFile(name) mime_type = MimeTypeDatabase.getMimeTypeForFile(name)
data = mime_type.stripExtension(name) data = mime_type.stripExtension(name)
except MimeTypeNotFoundError: except MimeTypeNotFoundError:
Logger.log("w", "Unsupported Mime Type Database file extension %s", name) Logger.warning(f"Unsupported Mime Type Database file extension {name}")
if data is not None and check_name is not None: if data is not None and check_name is not None:
self._base_name = data self._base_name = data

View file

@ -62,15 +62,21 @@ class WhatsNewPagesModel(WelcomePagesModel):
def initialize(self) -> None: def initialize(self) -> None:
self._pages = [] self._pages = []
try:
self._pages.append({"id": "whats_new", self._pages.append({"id": "whats_new",
"page_url": self._getBuiltinWelcomePagePath("WhatsNewContent.qml"), "page_url": self._getBuiltinWelcomePagePath("WhatsNewContent.qml"),
"next_page_button_text": self._catalog.i18nc("@action:button", "Skip"), "next_page_button_text": self._catalog.i18nc("@action:button", "Skip"),
"next_page_id": "changelog" "next_page_id": "changelog"
}) })
except FileNotFoundError:
Logger.warning("Unable to find what's new page")
try:
self._pages.append({"id": "changelog", self._pages.append({"id": "changelog",
"page_url": self._getBuiltinWelcomePagePath("ChangelogContent.qml"), "page_url": self._getBuiltinWelcomePagePath("ChangelogContent.qml"),
"next_page_button_text": self._catalog.i18nc("@action:button", "Close"), "next_page_button_text": self._catalog.i18nc("@action:button", "Close"),
}) })
except FileNotFoundError:
Logger.warning("Unable to find changelog page")
self.setItems(self._pages) self.setItems(self._pages)
images, max_image = WhatsNewPagesModel._collectOrdinalFiles(Resources.Images, WhatsNewPagesModel.image_formats) images, max_image = WhatsNewPagesModel._collectOrdinalFiles(Resources.Images, WhatsNewPagesModel.image_formats)

View file

@ -664,10 +664,22 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
cura_file_names = [name for name in archive.namelist() if name.startswith("Cura/")] cura_file_names = [name for name in archive.namelist() if name.startswith("Cura/")]
# Create a shadow copy of the preferences (we don't want all of the preferences, but we do want to re-use its # Create a shadow copy of the preferences (We don't want all of the preferences, but we do want to re-use its
# parsing code. # parsing code.
temp_preferences = Preferences() temp_preferences = Preferences()
try:
serialized = archive.open("Cura/preferences.cfg").read().decode("utf-8") serialized = archive.open("Cura/preferences.cfg").read().decode("utf-8")
except KeyError:
# If there is no preferences file, it's not a workspace, so notify user of failure.
Logger.log("w", "File %s is not a valid workspace.", file_name)
message = Message(i18n_catalog.i18nc("@info:error Don't translate the XML tags <filename> or <message>!",
"Project file <filename>{0}</filename> is corrupt: <message>{1}</message>.",
file_name, str(e)),
title=i18n_catalog.i18nc("@info:title", "Can't Open Project File"),
message_type=Message.MessageType.ERROR)
message.show()
self.setWorkspaceName("")
return [], {}
temp_preferences.deserialize(serialized) temp_preferences.deserialize(serialized)
# Copy a number of settings from the temp preferences to the global # Copy a number of settings from the temp preferences to the global

View file

@ -31,7 +31,7 @@ class RemovedPrintersMessage(Message):
super().__init__(title=self.i18n_catalog.i18ncp("info:status", super().__init__(title=self.i18n_catalog.i18ncp("info:status",
"A cloud connection is not available for a printer", "A cloud connection is not available for a printer",
"A cloud connection is not available for some printers", "A cloud connection is not available for some printers",
len(self.removed_devices)), len(self._removed_devices)),
message_type=Message.MessageType.WARNING, message_type=Message.MessageType.WARNING,
text = message_text) text = message_text)

View file

@ -7,6 +7,7 @@
"author": "Abax 3D Technologies", "author": "Abax 3D Technologies",
"manufacturer": "Abax 3D Technologies", "manufacturer": "Abax 3D Technologies",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"has_machine_quality": "true",
"machine_extruder_trains": "machine_extruder_trains":
{ {
"0": "abax_pri3_extruder_0" "0": "abax_pri3_extruder_0"

View file

@ -7,6 +7,7 @@
"author": "Abax 3D Technologies", "author": "Abax 3D Technologies",
"manufacturer": "Abax 3D Technologies", "manufacturer": "Abax 3D Technologies",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"has_machine_quality": "true",
"machine_extruder_trains": "machine_extruder_trains":
{ {
"0": "abax_pri5_extruder_0" "0": "abax_pri5_extruder_0"

View file

@ -18,55 +18,55 @@
"default_value": "skirt" "default_value": "skirt"
}, },
"bottom_thickness": { "bottom_thickness": {
"value": "0.6" "value": 0.6
}, },
"brim_width": { "brim_width": {
"value": "3.0" "value": 3.0
}, },
"cool_fan_enabled": { "cool_fan_enabled": {
"value": "True" "value": true
}, },
"cool_fan_full_at_height": { "cool_fan_full_at_height": {
"value": "0.5" "value": 0.5
}, },
"cool_fan_speed_max": { "cool_fan_speed_max": {
"value": "100.0" "value": 100.0
}, },
"cool_fan_speed_min": { "cool_fan_speed_min": {
"value": "100.0" "value": 100.0
}, },
"cool_lift_head": { "cool_lift_head": {
"value": "True" "value": true
}, },
"cool_min_layer_time": { "cool_min_layer_time": {
"value": "1.0" "value": 1.0
}, },
"cool_min_speed": { "cool_min_speed": {
"value": "5.0" "value": 5.0
}, },
"infill_before_walls": { "infill_before_walls": {
"value": "True" "value": true
}, },
"infill_line_width": { "infill_line_width": {
"value": "0.6" "value": 0.6
}, },
"infill_overlap": { "infill_overlap": {
"value": "15.0" "value": 15.0
}, },
"infill_sparse_density": { "infill_sparse_density": {
"value": "26.0" "value": 26.0
}, },
"ironing_enabled": { "ironing_enabled": {
"value": "True" "value": true
}, },
"layer_0_z_overlap": { "layer_0_z_overlap": {
"value": "0.11" "value": 0.11
}, },
"layer_height_0": { "layer_height_0": {
"value": "0.3" "value": 0.3
}, },
"machine_depth": { "machine_depth": {
"value": "200" "value": 200
}, },
"machine_end_gcode": { "machine_end_gcode": {
"default_value": ";End GCode\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-4 F300 ;move Z up a bit and retract filament even more\nM104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG0 Z{machine_height} F1800 ;move the platform all the way down\nG28 X0 Y0 F1800 ;move X/Y to min endstops, so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning\nM117 Done" "default_value": ";End GCode\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-4 F300 ;move Z up a bit and retract filament even more\nM104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG0 Z{machine_height} F1800 ;move the platform all the way down\nG28 X0 Y0 F1800 ;move X/Y to min endstops, so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning\nM117 Done"
@ -75,10 +75,10 @@
"default_value": "RepRap (Marlin/Sprinter)" "default_value": "RepRap (Marlin/Sprinter)"
}, },
"machine_heated_bed": { "machine_heated_bed": {
"default_value": "true" "default_value": true
}, },
"machine_height": { "machine_height": {
"value": "200" "value": 200
}, },
"machine_name": { "machine_name": {
"default_value": "Renkforce RF100 XL" "default_value": "Renkforce RF100 XL"
@ -87,109 +87,109 @@
"default_value": ";Sliced at: {day} {date} {time}\nG21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG1 Z5.0 F1800 ;move Z to 5mm\nG28 X0 Y0 F1800 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstop\nG92 E0 ;zero the extruded length\nG1 F200 E6.0 ;extrude 6.0mm of feed stock to build pressure\nG1 Z5.0 F300 ;move the platform down 5mm\nG92 E0 ;zero the extruded length again\nG1 F1800\n;Put printing message on LCD screen\nM117 Printing..." "default_value": ";Sliced at: {day} {date} {time}\nG21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG1 Z5.0 F1800 ;move Z to 5mm\nG28 X0 Y0 F1800 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstop\nG92 E0 ;zero the extruded length\nG1 F200 E6.0 ;extrude 6.0mm of feed stock to build pressure\nG1 Z5.0 F300 ;move the platform down 5mm\nG92 E0 ;zero the extruded length again\nG1 F1800\n;Put printing message on LCD screen\nM117 Printing..."
}, },
"machine_width": { "machine_width": {
"value": "200" "value": 200
}, },
"material_bed_temperature": { "material_bed_temperature": {
"value": "70" "value": 70
}, },
"ooze_shield_enabled": { "ooze_shield_enabled": {
"value": "True" "value": true
}, },
"raft_airgap": { "raft_airgap": {
"value": "0.33" "value": 0.33
}, },
"raft_base_line_spacing": { "raft_base_line_spacing": {
"value": "3.0" "value": 3.0
}, },
"raft_base_line_width": { "raft_base_line_width": {
"value": "1.0" "value": 1.0
}, },
"raft_base_thickness": { "raft_base_thickness": {
"value": "0.3" "value": 0.3
}, },
"raft_interface_line_spacing": { "raft_interface_line_spacing": {
"value": "3.0" "value": 3.0
}, },
"raft_interface_line_width": { "raft_interface_line_width": {
"value": "0.4" "value": 0.4
}, },
"raft_interface_thickness": { "raft_interface_thickness": {
"value": "0.27" "value": 0.27
}, },
"raft_margin": { "raft_margin": {
"value": "6.0" "value": 6.0
}, },
"raft_speed": { "raft_speed": {
"value": "20.0" "value": 20.0
}, },
"raft_surface_layers": { "raft_surface_layers": {
"value": "2" "value": 2
}, },
"raft_surface_line_spacing": { "raft_surface_line_spacing": {
"value": "0.4" "value": 0.4
}, },
"raft_surface_line_width": { "raft_surface_line_width": {
"value": "0.4" "value": 0.4
}, },
"raft_surface_thickness": { "raft_surface_thickness": {
"value": "0.1" "value": 0.1
}, },
"retraction_amount": { "retraction_amount": {
"value": "5.0" "value": 5.0
}, },
"retraction_combing": { "retraction_combing": {
"value": "'all'" "value": "all"
}, },
"retraction_enable": { "retraction_enable": {
"value": "True" "value": true
}, },
"retraction_min_travel": { "retraction_min_travel": {
"value": "1.5" "value": 1.5
}, },
"skin_overlap": { "skin_overlap": {
"value": "15.0" "value": 15.0
}, },
"skirt_brim_minimal_length": { "skirt_brim_minimal_length": {
"value": "150.0" "value": 150.0
}, },
"skirt_gap": { "skirt_gap": {
"value": "3.0" "value": 3.0
}, },
"skirt_line_count": { "skirt_line_count": {
"value": "3" "value": 3
}, },
"speed_infill": { "speed_infill": {
"value": "50.0" "value": 50.0
}, },
"speed_layer_0": { "speed_layer_0": {
"value": "15.0" "value": 15.0
}, },
"speed_print": { "speed_print": {
"value": "50.0" "value": 50.0
}, },
"speed_topbottom": { "speed_topbottom": {
"value": "30.0" "value": 30.0
}, },
"speed_travel": { "speed_travel": {
"value": "50.0" "value": 50.0
}, },
"speed_wall_0": { "speed_wall_0": {
"value": "25.0" "value": 25.0
}, },
"speed_wall_x": { "speed_wall_x": {
"value": "35.0" "value": 35.0
}, },
"support_angle": { "support_angle": {
"value": "60.0" "value": 60.0
}, },
"support_enable": { "support_enable": {
"value": "False" "value": false
}, },
"support_infill_rate": { "support_infill_rate": {
"value": "15 if support_enable and support_structure == 'normal' else 0 if support_enable and support_structure == 'tree' else 15" "value": "15 if support_enable and support_structure == 'normal' else 0 if support_enable and support_structure == 'tree' else 15"
}, },
"support_line_width": { "support_line_width": {
"value": "0.6" "value": 0.6
}, },
"support_pattern": { "support_pattern": {
"default_value": "lines" "default_value": "lines"
@ -198,16 +198,16 @@
"default_value": "everywhere" "default_value": "everywhere"
}, },
"support_xy_distance": { "support_xy_distance": {
"value": "0.7" "value": 0.7
}, },
"support_z_distance": { "support_z_distance": {
"value": "0.35" "value": 0.35
}, },
"top_bottom_thickness": { "top_bottom_thickness": {
"value": "0.8" "value": 0.8
}, },
"wall_thickness": { "wall_thickness": {
"value": "0.8" "value": 0.8
} }
} }
} }

View file

@ -35,7 +35,7 @@
"update_url": "https://ultimaker.com/firmware?utm_source=cura&utm_medium=software&utm_campaign=fw-update" "update_url": "https://ultimaker.com/firmware?utm_source=cura&utm_medium=software&utm_campaign=fw-update"
}, },
"bom_numbers": [ "bom_numbers": [
213482 213482, 213483
] ]
}, },

View file

@ -36,7 +36,7 @@
"update_url": "https://ultimaker.com/firmware?utm_source=cura&utm_medium=software&utm_campaign=fw-update" "update_url": "https://ultimaker.com/firmware?utm_source=cura&utm_medium=software&utm_campaign=fw-update"
}, },
"bom_numbers": [ "bom_numbers": [
9051, 214475 9051, 214475, 214476
] ]
}, },

View file

@ -17,7 +17,7 @@ UM.ManagementPage
title: catalog.i18nc("@title:tab", "Printers") title: catalog.i18nc("@title:tab", "Printers")
detailsPlaneCaption: base.currentItem && base.currentItem.name ? base.currentItem.name : "" detailsPlaneCaption: base.currentItem && base.currentItem.name ? base.currentItem.name : ""
model: Cura.GlobalStacksModel { } model: Cura.GlobalStacksModel { filterAbstractMachines: false }
sectionRole: "discoverySource" sectionRole: "discoverySource"

View file

@ -11,7 +11,6 @@ weight = 0
material = generic_pla material = generic_pla
[values] [values]
layer_height = 0.2
wall_thickness = 1.05 wall_thickness = 1.05
top_bottom_thickness = 0.8 top_bottom_thickness = 0.8
infill_sparse_density = 20 infill_sparse_density = 20

View file

@ -11,7 +11,6 @@ weight = 1
material = generic_pla material = generic_pla
[values] [values]
layer_height = 0.1
wall_thickness = 1.05 wall_thickness = 1.05
top_bottom_thickness = 0.8 top_bottom_thickness = 0.8
infill_sparse_density = 20 infill_sparse_density = 20

View file

@ -11,7 +11,6 @@ weight = 0
material = generic_pla material = generic_pla
[values] [values]
layer_height = 0.2
wall_thickness = 1.05 wall_thickness = 1.05
top_bottom_thickness = 0.8 top_bottom_thickness = 0.8
infill_sparse_density = 20 infill_sparse_density = 20

View file

@ -11,7 +11,6 @@ weight = 0
material = generic_pla material = generic_pla
[values] [values]
layer_height = 0.2
wall_thickness = 1.05 wall_thickness = 1.05
top_bottom_thickness = 0.8 top_bottom_thickness = 0.8
infill_sparse_density = 20 infill_sparse_density = 20

View file

@ -11,7 +11,6 @@ weight = 1
material = generic_pla material = generic_pla
[values] [values]
layer_height = 0.1
wall_thickness = 1.05 wall_thickness = 1.05
top_bottom_thickness = 0.8 top_bottom_thickness = 0.8
infill_sparse_density = 20 infill_sparse_density = 20

View file

@ -11,7 +11,6 @@ weight = 0
material = generic_pla material = generic_pla
[values] [values]
layer_height = 0.2
wall_thickness = 1.05 wall_thickness = 1.05
top_bottom_thickness = 0.8 top_bottom_thickness = 0.8
infill_sparse_density = 20 infill_sparse_density = 20

View file

@ -11,7 +11,6 @@ weight = -2
material = chromatik_pla material = chromatik_pla
[values] [values]
layer_height = 0.2
line_width = =machine_nozzle_size * 0.875 line_width = =machine_nozzle_size * 0.875
material_print_temperature = =default_material_print_temperature + 10 material_print_temperature = =default_material_print_temperature + 10

View file

@ -11,7 +11,6 @@ weight = 0
material = chromatik_pla material = chromatik_pla
[values] [values]
layer_height = 0.1
line_width = =machine_nozzle_size * 0.875 line_width = =machine_nozzle_size * 0.875
speed_print = 35 speed_print = 35

View file

@ -11,7 +11,6 @@ weight = -1
material = chromatik_pla material = chromatik_pla
[values] [values]
layer_height = 0.15
line_width = =machine_nozzle_size * 0.875 line_width = =machine_nozzle_size * 0.875
material_print_temperature = =default_material_print_temperature + 5 material_print_temperature = =default_material_print_temperature + 5

View file

@ -11,7 +11,6 @@ weight = -2
material = chromatik_pla material = chromatik_pla
[values] [values]
layer_height = 0.2
line_width = =machine_nozzle_size * 0.875 line_width = =machine_nozzle_size * 0.875
material_print_temperature = =default_material_print_temperature + 10 material_print_temperature = =default_material_print_temperature + 10

View file

@ -11,7 +11,6 @@ weight = 0
material = chromatik_pla material = chromatik_pla
[values] [values]
layer_height = 0.1
line_width = =machine_nozzle_size * 0.875 line_width = =machine_nozzle_size * 0.875
speed_print = 35 speed_print = 35

View file

@ -11,7 +11,6 @@ weight = -1
material = chromatik_pla material = chromatik_pla
[values] [values]
layer_height = 0.15
line_width = =machine_nozzle_size * 0.875 line_width = =machine_nozzle_size * 0.875
material_print_temperature = =default_material_print_temperature + 5 material_print_temperature = =default_material_print_temperature + 5

View file

@ -11,7 +11,6 @@ weight = -2
material = chromatik_pla material = chromatik_pla
[values] [values]
layer_height = 0.2
line_width = =machine_nozzle_size * 0.875 line_width = =machine_nozzle_size * 0.875
material_print_temperature = =default_material_print_temperature + 10 material_print_temperature = =default_material_print_temperature + 10

View file

@ -11,7 +11,6 @@ weight = 0
material = chromatik_pla material = chromatik_pla
[values] [values]
layer_height = 0.1
line_width = =machine_nozzle_size * 0.875 line_width = =machine_nozzle_size * 0.875
speed_print = 35 speed_print = 35

View file

@ -11,7 +11,6 @@ weight = -1
material = chromatik_pla material = chromatik_pla
[values] [values]
layer_height = 0.15
line_width = =machine_nozzle_size * 0.875 line_width = =machine_nozzle_size * 0.875
material_print_temperature = =default_material_print_temperature + 5 material_print_temperature = =default_material_print_temperature + 5

View file

@ -11,7 +11,6 @@ weight = -2
material = chromatik_pla material = chromatik_pla
[values] [values]
layer_height = 0.2
line_width = =machine_nozzle_size * 0.875 line_width = =machine_nozzle_size * 0.875
material_print_temperature = =default_material_print_temperature + 10 material_print_temperature = =default_material_print_temperature + 10

View file

@ -11,7 +11,6 @@ weight = 0
material = chromatik_pla material = chromatik_pla
[values] [values]
layer_height = 0.1
line_width = =machine_nozzle_size * 0.875 line_width = =machine_nozzle_size * 0.875
speed_print = 35 speed_print = 35

View file

@ -11,7 +11,6 @@ weight = -1
material = chromatik_pla material = chromatik_pla
[values] [values]
layer_height = 0.15
line_width = =machine_nozzle_size * 0.875 line_width = =machine_nozzle_size * 0.875
material_print_temperature = =default_material_print_temperature + 5 material_print_temperature = =default_material_print_temperature + 5

View file

@ -11,7 +11,6 @@ weight = -2
material = chromatik_pla material = chromatik_pla
[values] [values]
layer_height = 0.2
line_width = =machine_nozzle_size * 0.875 line_width = =machine_nozzle_size * 0.875
material_print_temperature = =default_material_print_temperature + 10 material_print_temperature = =default_material_print_temperature + 10

View file

@ -11,7 +11,6 @@ weight = 0
material = chromatik_pla material = chromatik_pla
[values] [values]
layer_height = 0.1
line_width = =machine_nozzle_size * 0.875 line_width = =machine_nozzle_size * 0.875
speed_print = 30 speed_print = 30

View file

@ -11,7 +11,6 @@ weight = -1
material = chromatik_pla material = chromatik_pla
[values] [values]
layer_height = 0.15
line_width = =machine_nozzle_size * 0.875 line_width = =machine_nozzle_size * 0.875
material_print_temperature = =default_material_print_temperature + 5 material_print_temperature = =default_material_print_temperature + 5

View file

@ -11,7 +11,6 @@ weight = -2
material = chromatik_pla material = chromatik_pla
[values] [values]
layer_height = 0.2
line_width = =machine_nozzle_size * 0.875 line_width = =machine_nozzle_size * 0.875
material_print_temperature = =default_material_print_temperature + 10 material_print_temperature = =default_material_print_temperature + 10

View file

@ -11,7 +11,6 @@ weight = 0
material = chromatik_pla material = chromatik_pla
[values] [values]
layer_height = 0.1
line_width = =machine_nozzle_size * 0.875 line_width = =machine_nozzle_size * 0.875
speed_print = 30 speed_print = 30

View file

@ -11,7 +11,6 @@ weight = -1
material = chromatik_pla material = chromatik_pla
[values] [values]
layer_height = 0.15
line_width = =machine_nozzle_size * 0.875 line_width = =machine_nozzle_size * 0.875
material_print_temperature = =default_material_print_temperature + 5 material_print_temperature = =default_material_print_temperature + 5

View file

@ -14,8 +14,6 @@ variant = Lite 0.4 mm
[values] [values]
adhesion_type = raft adhesion_type = raft
speed_print = 80 speed_print = 80
layer_height = 0.2
layer_height_0 = 0.2
cool_fan_enabled = False cool_fan_enabled = False
cool_fan_full_at_height = 0.4 cool_fan_full_at_height = 0.4
cool_fan_speed = 50 cool_fan_speed = 50

View file

@ -14,8 +14,6 @@ variant = Lite 0.4 mm
[values] [values]
adhesion_type = raft adhesion_type = raft
speed_print = 45 speed_print = 45
layer_height = 0.1
layer_height_0 = 0.1
cool_fan_enabled = False cool_fan_enabled = False
cool_fan_full_at_height = 0.2 cool_fan_full_at_height = 0.2
cool_fan_speed = 50 cool_fan_speed = 50

View file

@ -14,8 +14,6 @@ variant = Lite 0.4 mm
[values] [values]
adhesion_type = raft adhesion_type = raft
speed_print = 60 speed_print = 60
layer_height = 0.15
layer_height_0 = 0.15
cool_fan_enabled = False cool_fan_enabled = False
cool_fan_full_at_height = 0.3 cool_fan_full_at_height = 0.3
cool_fan_speed = 50 cool_fan_speed = 50

View file

@ -23,8 +23,6 @@ cool_min_layer_time = 5
cool_min_speed = 0 cool_min_speed = 0
infill_overlap = 15 infill_overlap = 15
infill_sparse_density = 24 infill_sparse_density = 24
layer_height = 0.20
layer_height_0 = 0.15
line_width = =machine_nozzle_size line_width = =machine_nozzle_size
material_flow = 100 material_flow = 100
raft_airgap = 0.22 raft_airgap = 0.22

View file

@ -23,8 +23,6 @@ cool_min_layer_time = 5
cool_min_speed = 0 cool_min_speed = 0
infill_overlap = 15 infill_overlap = 15
infill_sparse_density = 24 infill_sparse_density = 24
layer_height = 0.10
layer_height_0 = 0.10
line_width = =machine_nozzle_size line_width = =machine_nozzle_size
material_flow = 100 material_flow = 100
raft_airgap = 0.22 raft_airgap = 0.22

View file

@ -23,8 +23,6 @@ cool_min_layer_time = 5
cool_min_speed = 0 cool_min_speed = 0
infill_overlap = 15 infill_overlap = 15
infill_sparse_density = 24 infill_sparse_density = 24
layer_height = 0.15
layer_height_0 = 0.10
line_width = =machine_nozzle_size line_width = =machine_nozzle_size
material_flow = 100 material_flow = 100
raft_airgap = 0.22 raft_airgap = 0.22

View file

@ -14,8 +14,6 @@ variant = Lite 0.4 mm
[values] [values]
adhesion_type = skirt adhesion_type = skirt
speed_print = 80 speed_print = 80
layer_height = 0.2
layer_height_0 = 0.2
cool_fan_enabled = True cool_fan_enabled = True
cool_fan_full_at_height = 0.4 cool_fan_full_at_height = 0.4
cool_fan_speed = 100 cool_fan_speed = 100

View file

@ -14,8 +14,6 @@ variant = Lite 0.4 mm
[values] [values]
adhesion_type = skirt adhesion_type = skirt
speed_print = 45 speed_print = 45
layer_height = 0.1
layer_height_0 = 0.1
cool_fan_enabled = True cool_fan_enabled = True
cool_fan_full_at_height = 0.2 cool_fan_full_at_height = 0.2
cool_fan_speed = 100 cool_fan_speed = 100

View file

@ -14,8 +14,6 @@ variant = Lite 0.4 mm
[values] [values]
adhesion_type = skirt adhesion_type = skirt
speed_print = 60 speed_print = 60
layer_height = 0.15
layer_height_0 = 0.15
cool_fan_enabled = True cool_fan_enabled = True
cool_fan_full_at_height = 0.3 cool_fan_full_at_height = 0.3
cool_fan_speed = 100 cool_fan_speed = 100

View file

@ -14,8 +14,6 @@ weight = -1
[values] [values]
adhesion_type = skirt adhesion_type = skirt
speed_print = 80 speed_print = 80
layer_height = 0.2
layer_height_0 = 0.2
cool_fan_enabled = True cool_fan_enabled = True
cool_fan_full_at_height = 0.4 cool_fan_full_at_height = 0.4
cool_fan_speed = 100 cool_fan_speed = 100

View file

@ -13,8 +13,6 @@ weight = 1
[values] [values]
adhesion_type = skirt adhesion_type = skirt
layer_height = 0.1
layer_height_0 = 0.1
cool_fan_enabled = True cool_fan_enabled = True
cool_fan_full_at_height = 0.2 cool_fan_full_at_height = 0.2
cool_fan_speed = 100 cool_fan_speed = 100

View file

@ -14,8 +14,6 @@ weight = 0
[values] [values]
adhesion_type = skirt adhesion_type = skirt
speed_print = 80 speed_print = 80
layer_height = 0.15
layer_height_0 = 0.15
cool_fan_enabled = True cool_fan_enabled = True
cool_fan_full_at_height = 0.3 cool_fan_full_at_height = 0.3
cool_fan_speed = 100 cool_fan_speed = 100

View file

@ -11,7 +11,6 @@ weight = -2
material = redd_abs material = redd_abs
global_quality = True global_quality = True
[values] [values]
layer_height = 0.3 layer_height = 0.3
layer_height_0 = 0.35 layer_height_0 = 0.35