From c1fd3c9abae9d7e26a5470ca597f15b4c44c1f07 Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Tue, 23 Sep 2025 16:01:25 +0200 Subject: [PATCH 01/10] Store printer-API creds is prefs. It's OK to do this in this manner and not via for example the keyring, since we there's no actual user-name involved, only the machine-name -- anyone on the same machine is _already_ capable of sending the basically the exact same request that originated the access in the first place. part of CURA-12708 (alt implementation) --- .../src/Network/ClusterApiClient.py | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py b/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py index 25617ce824..bbeca0d5ae 100644 --- a/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py +++ b/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py @@ -66,12 +66,18 @@ class ClusterApiClient: self._manager = QNetworkAccessManager() self._address = address self._on_error = on_error - self._auth_id = None - self._auth_key = None + self._auth_tries = 0 - self._nonce_count = 1 - self._nonce = None + prefs = CuraApplication.getInstance().getPreferences() + prefs.addPreference("cluster_api/auth_id", None) + prefs.addPreference("cluster_api/auth_key", None) + prefs.addPreference("cluster_api/nonce_count", 1) + prefs.addPreference("cluster_api/nonce", None) + self._auth_id = prefs.getValue("cluster_api/auth_id") + self._auth_key = prefs.getValue("cluster_api/auth_key") + self._nonce_count = int(prefs.getValue("cluster_api/nonce_count")) + self._nonce = prefs.getValue("cluster_api/nonce") def getSystem(self, on_finished: Callable) -> None: """Get printer system information. @@ -158,6 +164,9 @@ class ClusterApiClient: digest_str = self._makeAuthDigestHeaderPart(path, method=method) request.setRawHeader(b"Authorization", f"Digest {digest_str}".encode("utf-8")) self._nonce_count += 1 + prefs = CuraApplication.getInstance().getPreferences() + prefs.setValue("cluster_api/nonce_count", self._nonce_count) + CuraApplication.getInstance().savePreferences() elif not skip_auth: self._setupAuth() return request @@ -242,6 +251,10 @@ class ClusterApiClient: auth_info = json.loads(resp.data().decode()) self._auth_id = auth_info["id"] self._auth_key = auth_info["key"] + prefs = CuraApplication.getInstance().getPreferences() + prefs.setValue("cluster_api/auth_id", self._auth_id) + prefs.setValue("cluster_api/auth_key", self._auth_key) + CuraApplication.getInstance().savePreferences() except Exception as ex: Logger.warning(f"Couldn't get temporary digest token: {str(ex)}") return @@ -282,6 +295,10 @@ class ClusterApiClient: if nonce_match: self._nonce = nonce_match.group(1) self._nonce_count = 1 + prefs = CuraApplication.getInstance().getPreferences() + prefs.setValue("cluster_api/nonce_count", self._nonce_count) + prefs.setValue("cluster_api/nonce", self._nonce) + CuraApplication.getInstance().savePreferences() self._on_error(reply.errorString()) return From 971fb9d1041b9385591da8ef6f371c160b2eeb82 Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Tue, 30 Sep 2025 11:37:36 +0200 Subject: [PATCH 02/10] Save authorization per-cluster instead of in 1 value. This would otherwise invalidate all authorization information when switching printers. part of CURA-12708 --- .../src/Network/ClusterApiClient.py | 42 ++++++++++++------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py b/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py index bbeca0d5ae..a87f4d442b 100644 --- a/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py +++ b/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py @@ -70,14 +70,27 @@ class ClusterApiClient: self._auth_tries = 0 prefs = CuraApplication.getInstance().getPreferences() - prefs.addPreference("cluster_api/auth_id", None) - prefs.addPreference("cluster_api/auth_key", None) - prefs.addPreference("cluster_api/nonce_count", 1) - prefs.addPreference("cluster_api/nonce", None) - self._auth_id = prefs.getValue("cluster_api/auth_id") - self._auth_key = prefs.getValue("cluster_api/auth_key") - self._nonce_count = int(prefs.getValue("cluster_api/nonce_count")) - self._nonce = prefs.getValue("cluster_api/nonce") + prefs.addPreference("cluster_api/auth_ids", "{}") + prefs.addPreference("cluster_api/auth_keys", "{}") + prefs.addPreference("cluster_api/nonce_counts", "{}") + prefs.addPreference("cluster_api/nonces", "{}") + try: + self._auth_id = json.loads(prefs.getValue("cluster_api/auth_ids")).get(self._address, None) + self._auth_key = json.loads(prefs.getValue("cluster_api/auth_keys")).get(self._address, None) + self._nonce_count = int(json.loads(prefs.getValue("cluster_api/nonce_counts")).get(self._address, 1)) + self._nonce = json.loads(prefs.getValue("cluster_api/nonces")).get(self._address, None) + except (JSONDecodeError, TypeError, KeyError) as ex: + Logger.info(f"Get new cluster-API auth info ('{str(ex)}').") + self._auth_id = None + self._auth_key = None + self._nonce_count = 1 + self._nonce = None + + def _setLocalValueToPrefDict(self, name: str, value: Any) -> None: + prefs = CuraApplication.getInstance().getPreferences() + values_per_address = json.loads(prefs.getValue(name)) + values_per_address[self._address] = value + prefs.setValue(name, json.dumps(values_per_address)) def getSystem(self, on_finished: Callable) -> None: """Get printer system information. @@ -164,8 +177,7 @@ class ClusterApiClient: digest_str = self._makeAuthDigestHeaderPart(path, method=method) request.setRawHeader(b"Authorization", f"Digest {digest_str}".encode("utf-8")) self._nonce_count += 1 - prefs = CuraApplication.getInstance().getPreferences() - prefs.setValue("cluster_api/nonce_count", self._nonce_count) + self._setLocalValueToPrefDict("cluster_api/nonce_counts", self._nonce_count) CuraApplication.getInstance().savePreferences() elif not skip_auth: self._setupAuth() @@ -251,9 +263,8 @@ class ClusterApiClient: auth_info = json.loads(resp.data().decode()) self._auth_id = auth_info["id"] self._auth_key = auth_info["key"] - prefs = CuraApplication.getInstance().getPreferences() - prefs.setValue("cluster_api/auth_id", self._auth_id) - prefs.setValue("cluster_api/auth_key", self._auth_key) + self._setLocalValueToPrefDict("cluster_api/auth_ids", self._auth_id) + self._setLocalValueToPrefDict("cluster_api/auth_keys", self._auth_key) CuraApplication.getInstance().savePreferences() except Exception as ex: Logger.warning(f"Couldn't get temporary digest token: {str(ex)}") @@ -295,9 +306,8 @@ class ClusterApiClient: if nonce_match: self._nonce = nonce_match.group(1) self._nonce_count = 1 - prefs = CuraApplication.getInstance().getPreferences() - prefs.setValue("cluster_api/nonce_count", self._nonce_count) - prefs.setValue("cluster_api/nonce", self._nonce) + self._setLocalValueToPrefDict("cluster_api/nonce_counts", self._nonce_count) + self._setLocalValueToPrefDict("cluster_api/nonces", self._nonce) CuraApplication.getInstance().savePreferences() self._on_error(reply.errorString()) return From fb574bba25ff66978e071a7f45270602ccf4512a Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Tue, 30 Sep 2025 11:38:33 +0200 Subject: [PATCH 03/10] Reduce log-spam. done as part of CURA-12708 --- plugins/UM3NetworkPrinting/src/Network/ZeroConfClient.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/plugins/UM3NetworkPrinting/src/Network/ZeroConfClient.py b/plugins/UM3NetworkPrinting/src/Network/ZeroConfClient.py index 7b33ecabea..9dcd16b1f9 100644 --- a/plugins/UM3NetworkPrinting/src/Network/ZeroConfClient.py +++ b/plugins/UM3NetworkPrinting/src/Network/ZeroConfClient.py @@ -32,6 +32,8 @@ class ZeroConfClient: self._service_changed_request_event = None # type: Optional[Event] self._service_changed_request_thread = None # type: Optional[Thread] + self._warn_once_no_address_services = set() + def start(self) -> None: """The ZeroConf service changed requests are handled in a separate thread so we don't block the UI. @@ -145,9 +147,11 @@ class ZeroConfClient: address = '.'.join(map(str, info.addresses[0])) self.addedNetworkCluster.emit(str(name), address, info.properties) else: - Logger.log("w", "The type of the found device is '%s', not 'printer'." % type_of_device) + Logger.warning(f"The type of the found device is '{type_of_device}', not 'printer'.") else: - Logger.log("w", "Could not get information about %s" % name) + if name not in self._warn_once_no_address_services: + self._warn_once_no_address_services.add(name) + Logger.warning(f"Could not get information about '{name}'.") return False return True From e8152bf0478bb470a11eb2ffc840347a4c8d3bee Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Wed, 1 Oct 2025 11:44:14 +0200 Subject: [PATCH 04/10] Do the cursor projection using uvula CURA-12743 --- plugins/PaintTool/PaintTool.py | 44 +++++++++++++++------------------- 1 file changed, 19 insertions(+), 25 deletions(-) diff --git a/plugins/PaintTool/PaintTool.py b/plugins/PaintTool/PaintTool.py index b9e2866ed3..055a41ade5 100644 --- a/plugins/PaintTool/PaintTool.py +++ b/plugins/PaintTool/PaintTool.py @@ -7,6 +7,7 @@ import numpy from PyQt6.QtCore import Qt, QObject, pyqtEnum, QPointF from PyQt6.QtGui import QImage, QPainter, QPen, QBrush, QPolygonF, QPainterPath from typing import cast, Optional, Tuple, List +import pyUvula as uvula from UM.Application import Application from UM.Event import Event, MouseEvent @@ -15,6 +16,7 @@ from UM.Logger import Logger from UM.Math.AxisAlignedBox2D import AxisAlignedBox2D from UM.Math.Polygon import Polygon from UM.Math.Vector import Vector +from UM.Mesh.MeshData import MeshData from UM.Scene.Camera import Camera from UM.Scene.SceneNode import SceneNode from UM.Scene.Selection import Selection @@ -56,7 +58,7 @@ class PaintTool(Tool): self._shortcut_key: Qt.Key = Qt.Key.Key_P self._node_cache: Optional[SceneNode] = None - self._mesh_transformed_cache = None + self._mesh_transformed_cache: Optional[MeshData] = None self._cache_dirty: bool = True self._brush_size: int = 10 @@ -304,8 +306,6 @@ class PaintTool(Tool): Calculates intersections of the stroke with the surface of the geometry and maps them to UV-space polygons. - :param face_id_a: ID of the face where the stroke starts. - :param face_id_b: ID of the face where the stroke ends. :param world_coords_a: 3D ('world') coordinates corresponding to the starting stroke point. :param world_coords_b: 3D ('world') coordinates corresponding to the ending stroke point. :return: A list of UV-mapped polygons representing areas intersected by the stroke on the node's mesh surface. @@ -320,6 +320,7 @@ class PaintTool(Tool): dtype=numpy.float32) stroke_poly = self._getStrokePolygon(get_projected_on_plane(world_coords_a), get_projected_on_plane(world_coords_b)) + stroke_poly.toType(numpy.float32) stroke_poly_viewport = Polygon([get_projected_on_viewport_image(point) for point in stroke_poly]) faces_image, (faces_x, faces_y) = PaintTool._rasterizePolygons([stroke_poly_viewport], @@ -329,29 +330,22 @@ class PaintTool(Tool): texture_dimensions = numpy.array(list(self._view.getUvTexDimensions())) - res = [] - for face in faces: - _, fnorm = self._mesh_transformed_cache.getFacePlane(face) - if numpy.dot(fnorm, self._cam_norm) < 0: # <- facing away from the viewer - continue - - va, vb, vc = self._mesh_transformed_cache.getFaceNodes(face) - stroke_tri = Polygon([ - get_projected_on_plane(va), - get_projected_on_plane(vb), - get_projected_on_plane(vc)]) - face_uv_coordinates = self._node_cache.getMeshData().getFaceUvCoords(face) - if face_uv_coordinates is None: - continue - ta, tb, tc = face_uv_coordinates - original_uv_poly = numpy.array([ta, tb, tc]) - uv_area = stroke_poly.intersection(stroke_tri) - - if uv_area.isValid(): - uv_area_barycentric = PaintTool._getBarycentricCoordinates(uv_area.getPoints(), stroke_tri.getPoints()) - if uv_area_barycentric is not None: - res.append(Polygon((uv_area_barycentric @ original_uv_poly) * texture_dimensions)) + mesh_indices = self._mesh_transformed_cache.getIndices() + if mesh_indices is None: + mesh_indices = numpy.array([], dtype=numpy.int32) + res = uvula.project(stroke_poly.getPoints(), + self._mesh_transformed_cache.getVertices(), + mesh_indices, + self._node_cache.getMeshData().getUVCoordinates(), + self._view.getUvTexDimensions()[0], + self._view.getUvTexDimensions()[1], + self._camera.getProjectToViewMatrix().getData(), + self._camera.isPerspective(), + self._camera.getViewportWidth(), + self._camera.getViewportHeight(), + self._cam_norm, + faces) return res def event(self, event: Event) -> bool: From 7504c8be890874c910b294b349971bd09687a3b4 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Wed, 1 Oct 2025 16:29:45 +0200 Subject: [PATCH 05/10] Remove getting the faces under the cursor area CURA-12743 --- plugins/PaintTool/PaintTool.py | 41 +++++++--------------------------- 1 file changed, 8 insertions(+), 33 deletions(-) diff --git a/plugins/PaintTool/PaintTool.py b/plugins/PaintTool/PaintTool.py index 055a41ade5..f1d831ac7b 100644 --- a/plugins/PaintTool/PaintTool.py +++ b/plugins/PaintTool/PaintTool.py @@ -271,43 +271,15 @@ class PaintTool(Tool): return Polygon() return shape.translate(stroke_a[0], stroke_a[1]).unionConvexHulls(shape.translate(stroke_b[0], stroke_b[1])) - @staticmethod - def _rasterizePolygons(polygons: List[Polygon], pen: QPen, brush: QBrush) -> Tuple[QImage, Tuple[int, int]]: - if not polygons: - return QImage(), (0, 0) - - bounding_box = polygons[0].getBoundingBox() - for polygon in polygons[1:]: - bounding_box += polygon.getBoundingBox() - - bounding_box = AxisAlignedBox2D(numpy.array([math.floor(bounding_box.left), math.floor(bounding_box.top)]), - numpy.array([math.ceil(bounding_box.right), math.ceil(bounding_box.bottom)])) - - # Use RGB32 which is more optimized for drawing to - image = QImage(int(bounding_box.width), int(bounding_box.height), QImage.Format.Format_RGB32) - image.fill(0) - - painter = QPainter(image) - painter.translate(-bounding_box.left, -bounding_box.bottom) - painter.setRenderHint(QPainter.RenderHint.Antialiasing, False) - painter.setPen(pen) - painter.setBrush(brush) - - for polygon in polygons: - painter.drawPolygon(QPolygonF([QPointF(point[0], point[1]) for point in polygon])) - - painter.end() - - return image, (int(bounding_box.left), int(bounding_box.bottom)) - # NOTE: Currently, it's unclear how well this would work for non-convex brush-shapes. - def _getUvAreasForStroke(self, world_coords_a: numpy.ndarray, world_coords_b: numpy.ndarray) -> List[Polygon]: + def _getUvAreasForStroke(self, world_coords_a: numpy.ndarray, world_coords_b: numpy.ndarray, face_id: int) -> List[Polygon]: """ Fetches all texture-coordinate areas within the provided stroke on the mesh. Calculates intersections of the stroke with the surface of the geometry and maps them to UV-space polygons. :param world_coords_a: 3D ('world') coordinates corresponding to the starting stroke point. :param world_coords_b: 3D ('world') coordinates corresponding to the ending stroke point. + :param face_id: the ID of the face at the center of the stroke :return: A list of UV-mapped polygons representing areas intersected by the stroke on the node's mesh surface. """ @@ -338,6 +310,7 @@ class PaintTool(Tool): self._mesh_transformed_cache.getVertices(), mesh_indices, self._node_cache.getMeshData().getUVCoordinates(), + self._node_cache.getMeshData().getFacesConnections(), self._view.getUvTexDimensions()[0], self._view.getUvTexDimensions()[1], self._camera.getProjectToViewMatrix().getData(), @@ -345,7 +318,8 @@ class PaintTool(Tool): self._camera.getViewportWidth(), self._camera.getViewportHeight(), self._cam_norm, - faces) + face_id) + Logger.debug("done") return res def event(self, event: Event) -> bool: @@ -430,7 +404,7 @@ class PaintTool(Tool): try: brush_color = self._brush_color if self.getPaintType() != "extruder" else str(self._brush_extruder) - uv_areas_cursor = self._getUvAreasForStroke(world_coords, world_coords) + uv_areas_cursor = self._getUvAreasForStroke(world_coords, world_coords, face_id) if len(uv_areas_cursor) > 0: cursor_path = self._createStrokePath(uv_areas_cursor) self._view.setCursorStroke(cursor_path, brush_color) @@ -438,7 +412,8 @@ class PaintTool(Tool): self._view.clearCursorStroke() if self._mouse_held: - uv_areas = self._getUvAreasForStroke(self._last_world_coords, world_coords) + Logger.debug("start stroking") + uv_areas = self._getUvAreasForStroke(self._last_world_coords, world_coords, face_id) if len(uv_areas) == 0: return False stroke_path = self._createStrokePath(uv_areas) From 05b3aeb2bd22e95adc1296bcaa46a78671bdca2b Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Wed, 1 Oct 2025 16:38:50 +0200 Subject: [PATCH 06/10] Pre-cache faces connectivity during prepare job CURA-12743 This avoids a huge slowdown when starting to paint --- plugins/PaintTool/PrepareTextureJob.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/PaintTool/PrepareTextureJob.py b/plugins/PaintTool/PrepareTextureJob.py index 6c5e61c009..1e5cce6c51 100644 --- a/plugins/PaintTool/PrepareTextureJob.py +++ b/plugins/PaintTool/PrepareTextureJob.py @@ -31,3 +31,5 @@ class PrepareTextureJob(Job): # Force clear OpenGL buffer so that new UV coordinates will be sent delattr(mesh, OpenGL.VertexBufferProperty) + # Also cache the faces connection, can be quite long to compute + self._node.getMeshData().getFacesConnections() From 495a367539656a08c7e83063b09d30d31ee9967b Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Thu, 2 Oct 2025 12:05:39 +0200 Subject: [PATCH 07/10] Optimize painting operations CURA-12743 --- plugins/PaintTool/PaintClearCommand.py | 4 +-- plugins/PaintTool/PaintCommand.py | 32 +++++------------- plugins/PaintTool/PaintStrokeCommand.py | 44 ++++++++++++++++--------- plugins/PaintTool/PaintTool.py | 20 ++--------- plugins/PaintTool/PaintView.py | 27 +++++++-------- 5 files changed, 53 insertions(+), 74 deletions(-) diff --git a/plugins/PaintTool/PaintClearCommand.py b/plugins/PaintTool/PaintClearCommand.py index 7ee8993bd3..1e087c6b6f 100644 --- a/plugins/PaintTool/PaintClearCommand.py +++ b/plugins/PaintTool/PaintClearCommand.py @@ -20,10 +20,10 @@ class PaintClearCommand(PaintCommand): return 1 def redo(self) -> None: - cleared_image, painter = self._makeClearedTexture() + painter = self._makeClearedTexture() painter.end() - self._texture.setSubImage(cleared_image, 0, 0) + self._texture.updateImagePart(self._bounding_rect) def mergeWith(self, command: QUndoCommand) -> bool: if not isinstance(command, PaintClearCommand): diff --git a/plugins/PaintTool/PaintCommand.py b/plugins/PaintTool/PaintCommand.py index 38f1dbc6e4..65542b1cc2 100644 --- a/plugins/PaintTool/PaintCommand.py +++ b/plugins/PaintTool/PaintCommand.py @@ -23,9 +23,8 @@ class PaintCommand(QUndoCommand): self._bounding_rect = texture.getImage().rect() if make_original_image: - self._original_texture_image, painter = ( - self._preparePainting(specific_source_image=self._texture.getImage().copy(), - specific_bounding_rect=self._texture.getImage().rect())) + self._original_texture_image = self._texture.getImage().copy() + painter = QPainter(self._original_texture_image) # Keep only the bits contained in the bit range, so that we won't modify anything else in the image painter.setCompositionMode(QPainter.CompositionMode.RasterOp_SourceAndDestination) @@ -36,19 +35,19 @@ class PaintCommand(QUndoCommand): if self._original_texture_image is None: return - cleared_image, painter = self._makeClearedTexture() - + painter = self._makeClearedTexture() painter.setCompositionMode(QPainter.CompositionMode.RasterOp_SourceOrDestination) painter.drawImage(0, 0, self._original_texture_image) - painter.end() - self._texture.setSubImage(cleared_image, self._bounding_rect.left(), self._bounding_rect.top()) + self._texture.updateImagePart(self._bounding_rect) + + def _makeClearedTexture(self) -> QPainter: + painter = QPainter(self._texture.getImage()) + painter.setRenderHint(QPainter.RenderHint.Antialiasing, False) - def _makeClearedTexture(self) -> Tuple[QImage, QPainter]: - dest_image, painter = self._preparePainting() self._clearTextureBits(painter) - return dest_image, painter + return painter def _clearTextureBits(self, painter: QPainter): raise NotImplementedError() @@ -57,16 +56,3 @@ class PaintCommand(QUndoCommand): bit_range_start, bit_range_end = self._bit_range return (((PaintCommand.FULL_INT32 << (32 - 1 - (bit_range_end - bit_range_start))) & PaintCommand.FULL_INT32) >> (32 - 1 - bit_range_end)) - - def _preparePainting(self, - specific_source_image: Optional[QImage] = None, - specific_bounding_rect: Optional[QRect] = None) -> Tuple[QImage, QPainter]: - source_image = specific_source_image if specific_source_image is not None else self._texture.getImage() - bounding_rect = specific_bounding_rect if specific_bounding_rect is not None else self._bounding_rect - - dest_image = source_image.copy(bounding_rect) - painter = QPainter(dest_image) - painter.setRenderHint(QPainter.RenderHint.Antialiasing, False) - painter.translate(-bounding_rect.left(), -bounding_rect.top()) - - return dest_image, painter diff --git a/plugins/PaintTool/PaintStrokeCommand.py b/plugins/PaintTool/PaintStrokeCommand.py index 969d5d8a81..8d4a5c2dbd 100644 --- a/plugins/PaintTool/PaintStrokeCommand.py +++ b/plugins/PaintTool/PaintStrokeCommand.py @@ -1,13 +1,14 @@ # Copyright (c) 2025 UltiMaker # Cura is released under the terms of the LGPLv3 or higher. -from typing import cast, Optional +from typing import cast, Optional, List import math from PyQt6.QtCore import QRect, QRectF, QPoint from PyQt6.QtGui import QUndoCommand, QImage, QPainter, QPainterPath, QPen, QBrush from UM.View.GL.Texture import Texture +from UM.Math.Polygon import Polygon from .PaintCommand import PaintCommand @@ -18,13 +19,12 @@ class PaintStrokeCommand(PaintCommand): def __init__(self, texture: Texture, - stroke_path: QPainterPath, + stroke_polygons: List[Polygon], set_value: int, bit_range: tuple[int, int], mergeable: bool) -> None: super().__init__(texture, bit_range, make_original_image = not mergeable) - - self._stroke_path: QPainterPath = stroke_path + self._stroke_polygons: List[Polygon] = stroke_polygons self._calculateBoundingRect() self._set_value: int = set_value self._mergeable: bool = mergeable @@ -33,16 +33,14 @@ class PaintStrokeCommand(PaintCommand): return 0 def redo(self) -> None: - stroked_image, painter = self._makeClearedTexture() - + painter = self._makeClearedTexture() painter.setBrush(QBrush(self._set_value)) painter.setPen(QPen(painter.brush(), self.PEN_OVERLAP_WIDTH)) painter.setCompositionMode(QPainter.CompositionMode.RasterOp_SourceOrDestination) - painter.drawPath(self._stroke_path) - + painter.drawPath(self._makePainterPath()) painter.end() - self._texture.setSubImage(stroked_image, self._bounding_rect.left(), self._bounding_rect.top()) + self._texture.updateImagePart(self._bounding_rect) def mergeWith(self, command: QUndoCommand) -> bool: if not isinstance(command, PaintStrokeCommand): @@ -52,7 +50,7 @@ class PaintStrokeCommand(PaintCommand): if not paint_undo_command._mergeable: return False - self._stroke_path = self._stroke_path.united(paint_undo_command._stroke_path) + self._stroke_polygons = Polygon.union(self._stroke_polygons + paint_undo_command._stroke_polygons) self._calculateBoundingRect() return True @@ -61,10 +59,26 @@ class PaintStrokeCommand(PaintCommand): painter.setBrush(QBrush(self._getBitRangeMask())) painter.setPen(QPen(painter.brush(), self.PEN_OVERLAP_WIDTH)) painter.setCompositionMode(QPainter.CompositionMode.RasterOp_NotSourceAndDestination) - painter.drawPath(self._stroke_path) + painter.drawPath(self._makePainterPath()) + + def _makePainterPath(self) -> QPainterPath: + path = QPainterPath() + for polygon in self._stroke_polygons: + path.moveTo(polygon[0][0], polygon[0][1]) + for point in polygon: + path.lineTo(point[0], point[1]) + path.closeSubpath() + + return path def _calculateBoundingRect(self): - bounding_rect: QRectF = self._stroke_path.boundingRect() - self._bounding_rect = QRect( - QPoint(math.floor(bounding_rect.left()), math.floor(bounding_rect.top())), - QPoint(math.ceil(bounding_rect.right()), math.ceil(bounding_rect.bottom()))) \ No newline at end of file + bounding_box = Polygon.getGlobalBoundingBox(self._stroke_polygons) + if bounding_box is None: + self._bounding_rect = QRect() + else: + self._bounding_rect = QRect( + QPoint(math.floor(bounding_box.left - PaintStrokeCommand.PEN_OVERLAP_WIDTH), + math.floor(bounding_box.bottom - PaintStrokeCommand.PEN_OVERLAP_WIDTH)), + QPoint(math.ceil(bounding_box.right + PaintStrokeCommand.PEN_OVERLAP_WIDTH), + math.ceil(bounding_box.top + PaintStrokeCommand.PEN_OVERLAP_WIDTH))) + self._bounding_rect &= self._texture.getImage().rect() \ No newline at end of file diff --git a/plugins/PaintTool/PaintTool.py b/plugins/PaintTool/PaintTool.py index f1d831ac7b..5850c967fd 100644 --- a/plugins/PaintTool/PaintTool.py +++ b/plugins/PaintTool/PaintTool.py @@ -286,21 +286,8 @@ class PaintTool(Tool): def get_projected_on_plane(pt: numpy.ndarray) -> numpy.ndarray: return numpy.array([*self._camera.projectToViewport(Vector(*pt))], dtype=numpy.float32) - def get_projected_on_viewport_image(pt: numpy) -> numpy.ndarray: - return numpy.array([pt[0] + self._camera.getViewportWidth() / 2.0, - self._camera.getViewportHeight() - (pt[1] + self._camera.getViewportHeight() / 2.0)], - dtype=numpy.float32) - stroke_poly = self._getStrokePolygon(get_projected_on_plane(world_coords_a), get_projected_on_plane(world_coords_b)) stroke_poly.toType(numpy.float32) - stroke_poly_viewport = Polygon([get_projected_on_viewport_image(point) for point in stroke_poly]) - - faces_image, (faces_x, faces_y) = PaintTool._rasterizePolygons([stroke_poly_viewport], - QPen(Qt.PenStyle.NoPen), - QBrush(Qt.GlobalColor.white)) - faces = self._faces_selection_pass.getFacesIdsUnderMask(faces_image, faces_x, faces_y) - - texture_dimensions = numpy.array(list(self._view.getUvTexDimensions())) mesh_indices = self._mesh_transformed_cache.getIndices() if mesh_indices is None: @@ -319,8 +306,7 @@ class PaintTool(Tool): self._camera.getViewportHeight(), self._cam_norm, face_id) - Logger.debug("done") - return res + return [Polygon(points) for points in res] def event(self, event: Event) -> bool: """Handle mouse and keyboard events. @@ -412,12 +398,10 @@ class PaintTool(Tool): self._view.clearCursorStroke() if self._mouse_held: - Logger.debug("start stroking") uv_areas = self._getUvAreasForStroke(self._last_world_coords, world_coords, face_id) if len(uv_areas) == 0: return False - stroke_path = self._createStrokePath(uv_areas) - self._view.addStroke(stroke_path, brush_color, is_moved) + self._view.addStroke(uv_areas, brush_color, is_moved) except: Logger.logException("e", "Error when adding paint stroke") diff --git a/plugins/PaintTool/PaintView.py b/plugins/PaintTool/PaintView.py index 26dd19a25b..23ef83f54b 100644 --- a/plugins/PaintTool/PaintView.py +++ b/plugins/PaintTool/PaintView.py @@ -8,6 +8,7 @@ from PyQt6.QtCore import QRect, pyqtSignal, Qt, QPoint from PyQt6.QtGui import QImage, QUndoStack, QPainter, QColor, QPainterPath, QBrush, QPen from typing import Optional, List, Tuple, Dict +from UM.Logger import Logger from UM.Scene.SceneNode import SceneNode from cura.CuraApplication import CuraApplication from cura.BuildVolume import BuildVolume @@ -21,6 +22,7 @@ from UM.Scene.Selection import Selection from UM.View.GL.OpenGL import OpenGL from UM.i18n import i18nCatalog from UM.Math.Color import Color +from UM.Math.Polygon import Polygon from .PaintStrokeCommand import PaintStrokeCommand from .PaintClearCommand import PaintClearCommand @@ -162,23 +164,17 @@ class PaintView(CuraView): QPoint(math.floor(bounding_rect.left()), math.floor(bounding_rect.top())), QPoint(math.ceil(bounding_rect.right()), math.ceil(bounding_rect.bottom()))) - cursor_image = QImage(bounding_rect_rounded.width(), bounding_rect_rounded.height(), QImage.Format.Format_ARGB32) - cursor_image.fill(0) - - painter = QPainter(cursor_image) + painter = QPainter(self._cursor_texture.getImage()) painter.setRenderHint(QPainter.RenderHint.Antialiasing, False) - painter.translate(-bounding_rect.left(), -bounding_rect.top()) display_color = self._paint_modes[self._current_paint_type][brush_color].display_color paint_color = QColor(*[int(color_part * 255) for color_part in [display_color.r, display_color.g, display_color.b]]) paint_color.setAlpha(255) painter.setBrush(QBrush(paint_color)) painter.setPen(QPen(Qt.PenStyle.NoPen)) painter.drawPath(cursor_path) - painter.end() - self._cursor_texture.setSubImage(cursor_image, bounding_rect_rounded.left(), bounding_rect_rounded.top()) - + self._cursor_texture.updateImagePart(bounding_rect_rounded) self._previous_paint_texture_rect = bounding_rect_rounded def clearCursorStroke(self) -> bool: @@ -186,18 +182,17 @@ class PaintView(CuraView): self._cursor_texture is None or self._cursor_texture.getImage() is None): return False - clear_image = QImage(self._previous_paint_texture_rect.width(), - self._previous_paint_texture_rect.height(), - QImage.Format.Format_ARGB32) - clear_image.fill(0) - self._cursor_texture.setSubImage(clear_image, - self._previous_paint_texture_rect.left(), - self._previous_paint_texture_rect.top()) + painter = QPainter(self._cursor_texture.getImage()) + painter.setCompositionMode(QPainter.CompositionMode.CompositionMode_Source) + painter.fillRect(self._previous_paint_texture_rect, QBrush(QColor(0, 0, 0, 0))) + painter.end() + + self._cursor_texture.updateImagePart(self._previous_paint_texture_rect) self._previous_paint_texture_rect = None return True - def addStroke(self, stroke_path: QPainterPath, brush_color: str, merge_with_previous: bool) -> None: + def addStroke(self, stroke_path: List[Polygon], brush_color: str, merge_with_previous: bool) -> None: if self._current_paint_texture is None or self._current_paint_texture.getImage() is None: return From c0e145e307d34c3d1e043e33db8dd307ffd850b7 Mon Sep 17 00:00:00 2001 From: HellAholic Date: Thu, 2 Oct 2025 14:36:30 +0200 Subject: [PATCH 08/10] Add cluster_api keys to the ignore list for 3mfWorkspaceWriter --- plugins/3MFWriter/ThreeMFWorkspaceWriter.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/3MFWriter/ThreeMFWorkspaceWriter.py b/plugins/3MFWriter/ThreeMFWorkspaceWriter.py index 1b24e59309..33f23b0274 100644 --- a/plugins/3MFWriter/ThreeMFWorkspaceWriter.py +++ b/plugins/3MFWriter/ThreeMFWorkspaceWriter.py @@ -191,6 +191,10 @@ class ThreeMFWorkspaceWriter(WorkspaceWriter): "capabilities", "octoprint_api_key", "is_online", + "cluster_api/auth_ids", + "cluster_api/auth_keys", + "cluster_api/nonce_counts", + "cluster_api/nonces", } serialized_data = container.serialize(ignored_metadata_keys = ignore_keys) From 2203f5c29500860b2ceebd947f58cf937dc07e9d Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Thu, 2 Oct 2025 14:52:04 +0200 Subject: [PATCH 09/10] Remove BambuLab printers CURA-12760 Since the firmware of the printers have been updated, the current implementation of the BambuLab 3MF format is no more compatible. As we are in Beta period, we cannot make the proper changes to ensure a working behavior. --- plugins/3MFWriter/BambuLabVariant.py | 176 -- plugins/3MFWriter/ThreeMFWriter.py | 4 +- plugins/3MFWriter/__init__.py | 6 - resources/definitions/bambulab_a1.def.json | 42 - .../definitions/bambulab_a1mini.def.json | 42 - resources/definitions/bambulab_base.def.json | 267 --- resources/definitions/bambulab_x1.def.json | 58 - .../extruders/bambulab_a1_extruder_0.def.json | 19 - .../extruders/bambulab_a1_extruder_1.def.json | 19 - .../extruders/bambulab_a1_extruder_2.def.json | 19 - .../extruders/bambulab_a1_extruder_3.def.json | 19 - .../bambulab_a1mini_extruder_0.def.json | 19 - .../bambulab_a1mini_extruder_1.def.json | 19 - .../bambulab_a1mini_extruder_2.def.json | 19 - .../bambulab_a1mini_extruder_3.def.json | 19 - .../extruders/bambulab_x1_extruder_0.def.json | 18 - .../extruders/bambulab_x1_extruder_1.def.json | 18 - .../extruders/bambulab_x1_extruder_2.def.json | 18 - .../extruders/bambulab_x1_extruder_3.def.json | 18 - resources/images/bambulab-buildplate.png | Bin 35459 -> 0 bytes resources/meshes/bambulab_a1mini.obj | 1978 ---------------- resources/meshes/bambulab_x1.obj | 1999 ----------------- .../bambulab_a1_0.4_PLA_standard.inst.cfg | 14 - .../quality/bambu/bambulab_a1_normal.inst.cfg | 15 - .../bambulab_a1mini_0.4_PLA_standard.inst.cfg | 14 - .../bambu/bambulab_a1mini_normal.inst.cfg | 15 - .../bambulab_x1_0.4_PLA_standard.inst.cfg | 14 - .../quality/bambu/bambulab_x1_normal.inst.cfg | 15 - .../variants/bambu/bambulab_a1_0.4.inst.cfg | 13 - .../bambu/bambulab_a1mini_0.4.inst.cfg | 13 - .../variants/bambu/bambulab_x1_0.4.inst.cfg | 13 - 31 files changed, 1 insertion(+), 4921 deletions(-) delete mode 100644 plugins/3MFWriter/BambuLabVariant.py delete mode 100644 resources/definitions/bambulab_a1.def.json delete mode 100644 resources/definitions/bambulab_a1mini.def.json delete mode 100644 resources/definitions/bambulab_base.def.json delete mode 100644 resources/definitions/bambulab_x1.def.json delete mode 100644 resources/extruders/bambulab_a1_extruder_0.def.json delete mode 100644 resources/extruders/bambulab_a1_extruder_1.def.json delete mode 100644 resources/extruders/bambulab_a1_extruder_2.def.json delete mode 100644 resources/extruders/bambulab_a1_extruder_3.def.json delete mode 100644 resources/extruders/bambulab_a1mini_extruder_0.def.json delete mode 100644 resources/extruders/bambulab_a1mini_extruder_1.def.json delete mode 100644 resources/extruders/bambulab_a1mini_extruder_2.def.json delete mode 100644 resources/extruders/bambulab_a1mini_extruder_3.def.json delete mode 100644 resources/extruders/bambulab_x1_extruder_0.def.json delete mode 100644 resources/extruders/bambulab_x1_extruder_1.def.json delete mode 100644 resources/extruders/bambulab_x1_extruder_2.def.json delete mode 100644 resources/extruders/bambulab_x1_extruder_3.def.json delete mode 100644 resources/images/bambulab-buildplate.png delete mode 100644 resources/meshes/bambulab_a1mini.obj delete mode 100644 resources/meshes/bambulab_x1.obj delete mode 100644 resources/quality/bambu/bambulab_a1_0.4_PLA_standard.inst.cfg delete mode 100644 resources/quality/bambu/bambulab_a1_normal.inst.cfg delete mode 100644 resources/quality/bambu/bambulab_a1mini_0.4_PLA_standard.inst.cfg delete mode 100644 resources/quality/bambu/bambulab_a1mini_normal.inst.cfg delete mode 100644 resources/quality/bambu/bambulab_x1_0.4_PLA_standard.inst.cfg delete mode 100644 resources/quality/bambu/bambulab_x1_normal.inst.cfg delete mode 100644 resources/variants/bambu/bambulab_a1_0.4.inst.cfg delete mode 100644 resources/variants/bambu/bambulab_a1mini_0.4.inst.cfg delete mode 100644 resources/variants/bambu/bambulab_x1_0.4.inst.cfg diff --git a/plugins/3MFWriter/BambuLabVariant.py b/plugins/3MFWriter/BambuLabVariant.py deleted file mode 100644 index 69814505ad..0000000000 --- a/plugins/3MFWriter/BambuLabVariant.py +++ /dev/null @@ -1,176 +0,0 @@ -# Copyright (c) 2025 UltiMaker -# Cura is released under the terms of the LGPLv3 or higher. - -import hashlib -import json -from io import StringIO -import xml.etree.ElementTree as ET -import zipfile - -from PyQt6.QtCore import Qt, QBuffer -from PyQt6.QtGui import QImage - -from UM.Application import Application -from UM.Logger import Logger -from UM.Mesh.MeshWriter import MeshWriter -from UM.PluginRegistry import PluginRegistry -from typing import cast - -from cura.CuraApplication import CuraApplication - -from .ThreeMFVariant import ThreeMFVariant -from UM.i18n import i18nCatalog -catalog = i18nCatalog("cura") - -# Path constants -METADATA_PATH = "Metadata" -THUMBNAIL_PATH_MULTIPLATE = f"{METADATA_PATH}/plate_1.png" -THUMBNAIL_PATH_MULTIPLATE_SMALL = f"{METADATA_PATH}/plate_1_small.png" -GCODE_PATH = f"{METADATA_PATH}/plate_1.gcode" -GCODE_MD5_PATH = f"{GCODE_PATH}.md5" -MODEL_SETTINGS_PATH = f"{METADATA_PATH}/model_settings.config" -PLATE_DESC_PATH = f"{METADATA_PATH}/plate_1.json" -SLICE_INFO_PATH = f"{METADATA_PATH}/slice_info.config" -PROJECT_SETTINGS_PATH = f"{METADATA_PATH}/project_settings.config" - -class BambuLabVariant(ThreeMFVariant): - """BambuLab specific implementation of the 3MF format.""" - - @property - def mime_type(self) -> str: - return "application/vnd.bambulab-package.3dmanufacturing-3dmodel+xml" - - def process_thumbnail(self, snapshot: QImage, thumbnail_buffer: QBuffer, - archive: zipfile.ZipFile, relations_element: ET.Element) -> None: - """Process the thumbnail for BambuLab variant.""" - # Write thumbnail - archive.writestr(zipfile.ZipInfo(THUMBNAIL_PATH_MULTIPLATE), thumbnail_buffer.data()) - - # Add relations elements for thumbnails - ET.SubElement(relations_element, "Relationship", - Target="/" + THUMBNAIL_PATH_MULTIPLATE, Id="rel-2", - pe="http://schemas.openxmlformats.org/package/2006/relationships/metadata/thumbnail") - - ET.SubElement(relations_element, "Relationship", - Target="/" + THUMBNAIL_PATH_MULTIPLATE, Id="rel-4", - Type="http://schemas.bambulab.com/package/2021/cover-thumbnail-middle") - - # Create and save small thumbnail - small_snapshot = snapshot.scaled(128, 128, transformMode=Qt.TransformationMode.SmoothTransformation) - small_thumbnail_buffer = QBuffer() - small_thumbnail_buffer.open(QBuffer.OpenModeFlag.ReadWrite) - small_snapshot.save(small_thumbnail_buffer, "PNG") - - # Write small thumbnail - archive.writestr(zipfile.ZipInfo(THUMBNAIL_PATH_MULTIPLATE_SMALL), small_thumbnail_buffer.data()) - - # Add relation for small thumbnail - ET.SubElement(relations_element, "Relationship", - Target="/" + THUMBNAIL_PATH_MULTIPLATE_SMALL, Id="rel-5", - Type="http://schemas.bambulab.com/package/2021/cover-thumbnail-small") - - def add_extra_files(self, archive: zipfile.ZipFile, metadata_relations_element: ET.Element) -> None: - """Add BambuLab specific files to the archive.""" - self._storeGCode(archive, metadata_relations_element) - self._storeModelSettings(archive) - self._storePlateDesc(archive) - self._storeSliceInfo(archive) - self._storeProjectSettings(archive) - - def _storeGCode(self, archive: zipfile.ZipFile, metadata_relations_element: ET.Element): - """Store GCode data in the archive.""" - gcode_textio = StringIO() - gcode_writer = cast(MeshWriter, PluginRegistry.getInstance().getPluginObject("GCodeWriter")) - success = gcode_writer.write(gcode_textio, None) - - if not success: - error_msg = catalog.i18nc("@info:error", "Can't write GCode to 3MF file") - self._writer.setInformation(error_msg) - Logger.error(error_msg) - raise Exception(error_msg) - - gcode_data = gcode_textio.getvalue().encode("UTF-8") - archive.writestr(zipfile.ZipInfo(GCODE_PATH), gcode_data) - - gcode_relation_element = ET.SubElement(metadata_relations_element, "Relationship", - Target=f"/{GCODE_PATH}", Id="rel-1", - Type="http://schemas.bambulab.com/package/2021/gcode") - - # Calculate and store the MD5 sum of the gcode data - md5_hash = hashlib.md5(gcode_data).hexdigest() - archive.writestr(zipfile.ZipInfo(GCODE_MD5_PATH), md5_hash.encode("UTF-8")) - - def _storeModelSettings(self, archive: zipfile.ZipFile): - """Store model settings in the archive.""" - config = ET.Element("config") - plate = ET.SubElement(config, "plate") - ET.SubElement(plate, "metadata", key="plater_id", value="1") - ET.SubElement(plate, "metadata", key="plater_name", value="") - ET.SubElement(plate, "metadata", key="locked", value="false") - ET.SubElement(plate, "metadata", key="filament_map_mode", value="Auto For Flush") - extruders_count = len(CuraApplication.getInstance().getExtruderManager().extruderIds) - ET.SubElement(plate, "metadata", key="filament_maps", value=" ".join("1" for _ in range(extruders_count))) - ET.SubElement(plate, "metadata", key="gcode_file", value=GCODE_PATH) - ET.SubElement(plate, "metadata", key="thumbnail_file", value=THUMBNAIL_PATH_MULTIPLATE) - ET.SubElement(plate, "metadata", key="pattern_bbox_file", value=PLATE_DESC_PATH) - - self._writer._storeElementTree(archive, MODEL_SETTINGS_PATH, config) - - def _storePlateDesc(self, archive: zipfile.ZipFile): - """Store plate description in the archive.""" - plate_desc = {} - - filament_ids = [] - filament_colors = [] - - for extruder in CuraApplication.getInstance().getExtruderManager().getUsedExtruderStacks(): - filament_ids.append(extruder.getValue("extruder_nr")) - filament_colors.append(self._writer._getMaterialColor(extruder)) - - plate_desc["filament_ids"] = filament_ids - plate_desc["filament_colors"] = filament_colors - plate_desc["first_extruder"] = CuraApplication.getInstance().getExtruderManager().getInitialExtruderNr() - plate_desc["is_seq_print"] = Application.getInstance().getGlobalContainerStack().getValue("print_sequence") == "one_at_a_time" - plate_desc["nozzle_diameter"] = CuraApplication.getInstance().getExtruderManager().getActiveExtruderStack().getValue("machine_nozzle_size") - plate_desc["version"] = 2 - - file = zipfile.ZipInfo(PLATE_DESC_PATH) - file.compress_type = zipfile.ZIP_DEFLATED - archive.writestr(file, json.dumps(plate_desc).encode("UTF-8")) - - def _storeSliceInfo(self, archive: zipfile.ZipFile): - """Store slice information in the archive.""" - config = ET.Element("config") - - header = ET.SubElement(config, "header") - ET.SubElement(header, "header_item", key="X-BBL-Client-Type", value="slicer") - ET.SubElement(header, "header_item", key="X-BBL-Client-Version", value="02.00.01.50") - - plate = ET.SubElement(config, "plate") - ET.SubElement(plate, "metadata", key="index", value="1") - ET.SubElement(plate, - "metadata", - key="nozzle_diameters", - value=str(CuraApplication.getInstance().getExtruderManager().getActiveExtruderStack().getValue("machine_nozzle_size"))) - - print_information = CuraApplication.getInstance().getPrintInformation() - for index, extruder in enumerate(Application.getInstance().getGlobalContainerStack().extruderList): - used_m = print_information.materialLengths[index] - used_g = print_information.materialWeights[index] - if used_m > 0.0 and used_g > 0.0: - ET.SubElement(plate, - "filament", - id=str(extruder.getValue("extruder_nr") + 1), - tray_info_idx="GFA00", - type=extruder.material.getMetaDataEntry("material", ""), - color=self._writer._getMaterialColor(extruder), - used_m=str(used_m), - used_g=str(used_g)) - - self._writer._storeElementTree(archive, SLICE_INFO_PATH, config) - - def _storeProjectSettings(self, archive: zipfile.ZipFile): - api = CuraApplication.getInstance().getCuraAPI() - file = zipfile.ZipInfo(PROJECT_SETTINGS_PATH) - json_string = json.dumps(api.interface.settings.getAllGlobalSettings(), separators=(", ", ": "), indent=4) - archive.writestr(file, json_string.encode("UTF-8")) \ No newline at end of file diff --git a/plugins/3MFWriter/ThreeMFWriter.py b/plugins/3MFWriter/ThreeMFWriter.py index 37345b16b0..fe8d87bee2 100644 --- a/plugins/3MFWriter/ThreeMFWriter.py +++ b/plugins/3MFWriter/ThreeMFWriter.py @@ -51,7 +51,6 @@ from .SettingsExportModel import SettingsExportModel from .SettingsExportGroup import SettingsExportGroup from .ThreeMFVariant import ThreeMFVariant from .Cura3mfVariant import Cura3mfVariant -from .BambuLabVariant import BambuLabVariant from UM.i18n import i18nCatalog catalog = i18nCatalog("cura") @@ -78,8 +77,7 @@ class ThreeMFWriter(MeshWriter): # Register available variants self._variants = { - Cura3mfVariant(self).mime_type: Cura3mfVariant, - BambuLabVariant(self).mime_type: BambuLabVariant + Cura3mfVariant(self).mime_type: Cura3mfVariant } @staticmethod diff --git a/plugins/3MFWriter/__init__.py b/plugins/3MFWriter/__init__.py index 5d8a2e4d20..80c99765f4 100644 --- a/plugins/3MFWriter/__init__.py +++ b/plugins/3MFWriter/__init__.py @@ -32,12 +32,6 @@ def getMetaData(): "description": i18n_catalog.i18nc("@item:inlistbox", "3MF file"), "mime_type": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml", "mode": ThreeMFWriter.ThreeMFWriter.OutputMode.BinaryMode - }, - { - "extension": f"gcode.{workspace_extension}", - "description": i18n_catalog.i18nc("@item:inlistbox", "BambuLab 3MF file"), - "mime_type": "application/vnd.bambulab-package.3dmanufacturing-3dmodel+xml", - "mode": ThreeMFWorkspaceWriter.ThreeMFWorkspaceWriter.OutputMode.BinaryMode } ] } diff --git a/resources/definitions/bambulab_a1.def.json b/resources/definitions/bambulab_a1.def.json deleted file mode 100644 index 28737d9d8d..0000000000 --- a/resources/definitions/bambulab_a1.def.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "version": 2, - "name": "BambuLab A1", - "inherits": "bambulab_base", - "metadata": - { - "visible": true, - "platform": "bambulab_x1.obj", - "has_machine_quality": true, - "has_material": true, - "has_textured_buildplate": true, - "has_variant_buildplates": false, - "has_variants": true, - "machine_extruder_trains": - { - "0": "bambulab_a1_extruder_0", - "1": "bambulab_a1_extruder_1", - "2": "bambulab_a1_extruder_2", - "3": "bambulab_a1_extruder_3" - }, - "platform_offset": [ - -130, - 0, - 130 - ], - "platform_texture": "bambulab-buildplate.png", - "preferred_variant_name": "0.4mm", - "weight": 3 - }, - "overrides": - { - "machine_depth": { "value": 256 }, - "machine_end_gcode": { "default_value": ";===== date: 20231229 =====================\n;turn off nozzle clog detect\nG392 S0\n\nM400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-0.8 F1800 ; retract\nG1 Z{machine_height + 0.5} F900 ; lower z a little\nG1 X0 Y{machine_depth} F18000 ; move to safe pos\nG1 X-13.0 F3000 ; move to safe pos\n{if !magic_spiralize && print_sequence != 'one_at_a_time'}\nM1002 judge_flag timelapse_record_flag\nM622 J1\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM991 S0 P-1 ;end timelapse at safe pos\nM623\n{endif}\n\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off remote part cooling fan\nM106 P3 S0 ; turn off chamber cooling fan\n\n;G1 X27 F15000 ; wipe\n\n; pull back filament to AMS\nM620 S255\nG1 X181 F12000\nT255\nG1 X0 F18000\nG1 X-13.0 F3000\nG1 X0 F18000 ; wipe\nM621 S255\n\nM104 S0 ; turn off hotend\n\nM400 ; wait all motion done\nM17 S\nM17 Z0.4 ; lower z motor current to reduce impact if there is something in the bottom\nG1 Z180 F600\nG1 Z180\nM400 P100\nM17 R ; restore z current\n\nG90\nG1 X-13 Y180 F3600\n\nG91\nG1 Z-1 F600\nG90\nM83\n\nM220 S100 ; Reset feedrate magnitude\nM201.2 K1.0 ; Reset acc magnitude\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 0\n\n;=====printer finish sound=========\nM17\nM400 S1\nM1006 S1\nM1006 A0 B20 L100 C37 D20 M100 E42 F20 N100\nM1006 A0 B10 L100 C44 D10 M100 E44 F10 N100\nM1006 A0 B10 L100 C46 D10 M100 E46 F10 N100\nM1006 A44 B20 L100 C39 D20 M100 E48 F20 N100\nM1006 A0 B10 L100 C44 D10 M100 E44 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B10 L100 C39 D10 M100 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B10 L100 C44 D10 M100 E44 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B10 L100 C39 D10 M100 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A44 B10 L100 C0 D10 M100 E48 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A44 B20 L100 C41 D20 M100 E49 F20 N100\nM1006 A0 B20 L100 C0 D20 M100 E0 F20 N100\nM1006 A0 B20 L100 C37 D20 M100 E37 F20 N100\nM1006 W\n;=====printer finish sound=========\nM400 S1\nM18 X Y Z\n" }, - "machine_extruder_count": { "value": 4 }, - "machine_height": { "value": 251 }, - "machine_name": { "default_value": "BambuLab Bambu A1" }, - "machine_start_gcode": { "default_value": ";===== machine: A1 =========================\n;===== date: 20240620 =====================\nG392 S0\nM9833.2\n;M400\n;M73 P1.717\n\n;===== start to heat heatbead&hotend==========\nM1002 gcode_claim_action : 2\nM1002 set_filament_type:{material_type, initial_extruder_nr}\nM104 S140\nM140 S{material_bed_temperature_layer_0}\n\n;=====start printer sound ===================\n; 'The entertainer' by Scott Joplin\nM17\nM400 S1\nM1006 S1\n\nM1006 A0 B10 C39 D15 L30 M60 E0 F10 N60\nM1006 A0 B10 C40 D15 L30 M60 E0 F10 N60\nM1006 A0 B10 C41 D15 L30 M60 E0 F10 N60\nM1006 A0 B10 C49 D30 L30 M60 E0 F10 N60\nM1006 A0 B10 C41 D15 L30 M60 E0 F10 N60\nM1006 A0 B10 C49 D30 L30 M60 E0 F10 N60\nM1006 A0 B10 C41 D15 L30 M60 E0 F10 N60\nM1006 A0 B10 C49 D30 L30 M60 E0 F10 N60\n\nM1006 A0 B10 C0 D30 L30 M60 E0 F10 N60\n\nM1006 A0 B10 C49 D15 L30 M60 E0 F10 N60\nM1006 A0 B10 C50 D15 L30 M60 E0 F10 N60\nM1006 A0 B10 C51 D15 L30 M60 E0 F10 N60\nM1006 A0 B10 C53 D15 L30 M60 E0 F10 N60\nM1006 A0 B10 C50 D15 L30 M60 E0 F10 N60\nM1006 A0 B10 C51 D15 L30 M60 E0 F10 N60\nM1006 A0 B10 C53 D30 L30 M60 E0 F10 N60\nM1006 A0 B10 C47 D15 L30 M60 E0 F10 N60\nM1006 A0 B10 C51 D30 L30 M60 E0 F10 N60\nM1006 A0 B10 C49 D30 L30 M60 E0 F10 N60\n\nM1006 W\nM18\n;=====start printer sound ===================\n\n;=====avoid end stop =================\nG91\nG380 S2 Z40 F1200\nG380 S3 Z-15 F1200\nG90\n\n;===== reset machine status =================\n;M290 X39 Y39 Z8\nM204 S6000\n\nM630 S0 P0\nG91\nM17 Z0.3 ; lower the z-motor current\n\nG90\nM17 X0.65 Y1.2 Z0.6 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\n;M211 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\n\n;====== cog noise reduction=================\nM982.2 S1 ; turn on cog noise reduction\n\nM1002 gcode_claim_action : 13\n\nG28 X\nG91\nG1 Z5 F1200\nG90\nG0 X128 F30000\nG0 Y254 F3000\nG91\nG1 Z-5 F1200\n\nM109 S25 H140\n\nM17 E0.3\nM83\nG1 E10 F1200\nG1 E-0.5 F30\nM17 D\n\nG28 Z P0 T140; home z with low precision,permit 300deg temperature\nM104 S{material_print_temperature_layer_0, initial_extruder_nr}\n\nM1002 judge_flag build_plate_detect_flag\nM622 S1\n G39.4\n G90\n G1 Z5 F1200\nM623\n\n;M400\n;M73 P1.717\n\n;===== prepare print temperature and material ==========\nM1002 gcode_claim_action : 24\n\nM400\n;G392 S1\nM211 X0 Y0 Z0 ;turn off soft endstop\nM975 S1 ; turn on\n\nG90\nG1 X-28.5 F30000\nG1 X-48.2 F3000\n\nM620 M ;enable remap\nM620 S{initial_extruder_nr}A ; switch material if AMS exist\n M1002 gcode_claim_action : 4\n M400\n M1002 set_filament_type:UNKNOWN\n M109 S{material_print_temperature_layer_0, initial_extruder_nr}\n M104 S250\n M400\n T{initial_extruder_nr}\n G1 X-48.2 F3000\n M400\n\n M620.1 E F{material_max_flowrate/2.4053*60, initial_extruder_nr} T{material_print_temperature, initial_extruder_nr}\n M109 S250 ;set nozzle to common flush temp\n M106 P1 S0\n G92 E0\n G1 E50 F200\n M400\n M1002 set_filament_type:{material_type, initial_extruder_nr}\nM621 S{initial_extruder_nr}A\n\nM109 S{material_print_temperature, initial_extruder_nr} H300\nG92 E0\nG1 E50 F200 ; lower extrusion speed to avoid clog\nM400\nM106 P1 S178\nG92 E0\nG1 E5 F200\nM104 S{material_print_temperature_layer_0, initial_extruder_nr}\nG92 E0\nG1 E-0.5 F300\n\nG1 X-28.5 F30000\nG1 X-48.2 F3000\nG1 X-28.5 F30000 ;wipe and shake\nG1 X-48.2 F3000\nG1 X-28.5 F30000 ;wipe and shake\nG1 X-48.2 F3000\n\n;G392 S0\n\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n;M400\n;M73 P1.717\n\n;===== auto extrude cali start =========================\nM975 S1\n;G392 S1\n\nG90\nM83\nT1000\nG1 X-48.2 Y0 Z10 F10000\nM400\nM1002 set_filament_type:UNKNOWN\n\nM412 S1 ; ===turn on filament runout detection===\nM400 P10\nM620.3 W1; === turn on filament tangle detection===\nM400 S2\n\nM1002 set_filament_type:{material_type, initial_extruder_nr}\n\n;M1002 set_flag extrude_cali_flag=1\nM1002 judge_flag extrude_cali_flag\n\nM622 J1\n M1002 gcode_claim_action : 8\n\n M109 S{material_print_temperature, initial_extruder_nr}\n G1 E10 F{speed_wall_0*wall_line_width_0*layer_height/2.4*60, initial_extruder_nr}\n M983 F{speed_wall_0*wall_line_width_0*layer_height/2.4, initial_extruder_nr} A0.3 H{machine_nozzle_size}; cali dynamic extrusion compensation\n\n M106 P1 S255\n M400 S5\n G1 X-28.5 F18000\n G1 X-48.2 F3000\n G1 X-28.5 F18000 ;wipe and shake\n G1 X-48.2 F3000\n G1 X-28.5 F12000 ;wipe and shake\n G1 X-48.2 F3000\n M400\n M106 P1 S0\n\n M1002 judge_last_extrude_cali_success\n M622 J0\n M983 F{speed_wall_0*wall_line_width_0*layer_height/2.4, initial_extruder_nr} A0.3 H{machine_nozzle_size}; cali dynamic extrusion compensation\n M106 P1 S255\n M400 S5\n G1 X-28.5 F18000\n G1 X-48.2 F3000\n G1 X-28.5 F18000 ;wipe and shake\n G1 X-48.2 F3000\n G1 X-28.5 F12000 ;wipe and shake\n M400\n M106 P1 S0\n M623\n\n G1 X-48.2 F3000\n M400\n M984 A0.1 E1 S1 F{speed_wall_0*wall_line_width_0*layer_height/2.4, initial_extruder_nr} H{machine_nozzle_size}\n M106 P1 S178\n M400 S7\n G1 X-28.5 F18000\n G1 X-48.2 F3000\n G1 X-28.5 F18000 ;wipe and shake\n G1 X-48.2 F3000\n G1 X-28.5 F12000 ;wipe and shake\n G1 X-48.2 F3000\n M400\n M106 P1 S0\nM623 ; end of 'draw extrinsic para cali paint'\n\n;G392 S0\n;===== auto extrude cali end ========================\n\n;M400\n;M73 P1.717\n\nM104 S170 ; prepare to wipe nozzle\nM106 S255 ; turn on fan\n\n;===== mech mode fast check start =====================\nM1002 gcode_claim_action : 3\n\nG1 X128 Y128 F20000\nG1 Z5 F1200\nM400 P200\nM970.3 Q1 A5 K0 O3\nM974 Q1 S2 P0\n\nM970.2 Q1 K1 W58 Z0.1\nM974 S2\n\nG1 X128 Y128 F20000\nG1 Z5 F1200\nM400 P200\nM970.3 Q0 A10 K0 O1\nM974 Q0 S2 P0\n\nM970.2 Q0 K1 W78 Z0.1\nM974 S2\n\nM975 S1\nG1 F30000\nG1 X0 Y5\nG28 X ; re-home XY\n\nG1 Z4 F1200\n\n;===== mech mode fast check end =======================\n\n;M400\n;M73 P1.717\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\n\nM975 S1\nM106 S255 ; turn on fan (G28 has turn off fan)\nM211 S; push soft endstop status\nM211 X0 Y0 Z0 ;turn off Z axis endstop\n\n;===== remove waste by touching start =====\n\nM104 S170 ; set temp down to heatbed acceptable\n\nM83\nG1 E-1 F500\nG90\nM83\n\nM109 S170\nG0 X108 Y-0.5 F30000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X110 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X112 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X114 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X116 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X118 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X120 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X122 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X124 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X126 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X128 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X130 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X132 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X134 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X136 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X138 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X140 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X142 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X144 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X146 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X148 F10000\nG380 S3 Z-5 F1200\n\nG1 Z5 F30000\n;===== remove waste by touching end =====\n\nG1 Z10 F1200\nG0 X118 Y261 F30000\nG1 Z5 F1200\nM109 S{material_print_temperature_layer_0-50, initial_extruder_nr}\n\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nM104 S140 ; prepare to abl\nG0 Z5 F20000\n\nG0 X128 Y261 F20000 ; move to exposed steel surface\nG0 Z-1.01 F1200 ; stop the nozzle\n\nG91\nG2 I1 J0 X2 Y0 F2000.1\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\n\nG90\nG1 Z10 F1200\n\n;===== brush material wipe nozzle =====\n\nG90\nG1 Y250 F30000\nG1 X55\nG1 Z1.300 F1200\nG1 Y262.5 F6000\nG91\nG1 X-35 F30000\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Z5.000 F1200\n\nG90\nG1 X30 Y250.000 F30000\nG1 Z1.300 F1200\nG1 Y262.5 F6000\nG91\nG1 X35 F30000\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Z10.000 F1200\n\n;===== brush material wipe nozzle end =====\n\nG90\n;G0 X128 Y261 F20000 ; move to exposed steel surface\nG1 Y250 F30000\nG1 X138\nG1 Y261\nG0 Z-1.01 F1200 ; stop the nozzle\n\nG91\nG2 I1 J0 X2 Y0 F2000.1\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\n\nM109 S140\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM211 R; pop softend status\n\n;===== wipe nozzle end ================================\n\n;M400\n;M73 P1.717\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\n\nG90\nG1 Z5 F1200\nG1 X0 Y0 F30000\nG29.2 S1 ; turn on ABL\n\nM190 S{material_bed_temperature_layer_0}; ensure bed temp\nM109 S140\nM106 S0 ; turn off fan , too noisy\n\nM622 J1\n M1002 gcode_claim_action : 1\n G29 A1 X{-machine_width/2 if machine_center_is_zero else 0} Y{-machine_depth/2 if machine_center_is_zero else 0} I{machine_width} J{machine_depth}\n M400\n M500 ; save cali data\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n\n;===== home after wipe mouth end =======================\n\n;M400\n;M73 P1.717\n\nG1 X108.000 Y-0.500 F30000\nG1 Z0.300 F1200\nM400\nG2814 Z0.32\n\nM104 S{material_print_temperature_layer_0, initial_extruder_nr} ; prepare to print\n\n;===== extrude cali test ===============================\n\nM400\n M900 S\n M900 C\n G90\n M83\n\n M109 S{material_print_temperature_layer_0, initial_extruder_nr}\n G0 X128 E8 F{speed_wall_0*wall_line_width_0*layer_height/(24/20) * 60, initial_extruder_nr}\n G0 X133 E.3742 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/4 * 60, initial_extruder_nr}\n G0 X138 E.3742 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G0 X143 E.3742 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/4 * 60, initial_extruder_nr}\n G0 X148 E.3742 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G0 X153 E.3742 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/4 * 60, initial_extruder_nr}\n G91\n G1 X1 Z-0.300\n G1 X4\n G1 Z1 F1200\n G90\n M400\n\nM900 R\n\nM1002 judge_flag extrude_cali_flag\nM622 J1\n G90\n G1 X108.000 Y1.000 F30000\n G91\n G1 Z-0.700 F1200\n G90\n M83\n G0 X128 E10 F{speed_wall_0*wall_line_width_0*layer_height/(24/20) * 60, initial_extruder_nr}\n G0 X133 E.3742 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/4 * 60, initial_extruder_nr}\n G0 X138 E.3742 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G0 X143 E.3742 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/4 * 60, initial_extruder_nr}\n G0 X148 E.3742 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G0 X153 E.3742 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/4 * 60, initial_extruder_nr}\n G91\n G1 X1 Z-0.300\n G1 X4\n G1 Z1 F1200\n G90\n M400\nM623\n\nG1 Z0.2\n\n;M400\n;M73 P1.717\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if machine_buildplate_type=='textured_pei_plate'}\nG29.1 Z{-0.02} ; for Textured PEI Plate\n{endif}\n\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\n\nM211 X0 Y0 Z0 ;turn off soft endstop\n;G392 S1 ; turn on clog detection\nM1007 S1 ; turn on mass estimation\nG29.4\n" }, - "machine_width": { "value": 256 }, - "prime_tower_position_x": { "value": "resolveOrValue('prime_tower_size') + (resolveOrValue('prime_tower_base_size') if (resolveOrValue('adhesion_type') == 'raft' or resolveOrValue('prime_tower_brim_enable')) else 0) + max(max(extruderValues('travel_avoid_distance')) + max(extruderValues('machine_nozzle_offset_y')) + max(extruderValues('support_offset')) + (extruderValue(skirt_brim_extruder_nr, 'skirt_brim_line_width') * extruderValue(skirt_brim_extruder_nr, 'skirt_line_count') * extruderValue(skirt_brim_extruder_nr, 'initial_layer_line_width_factor') / 100 + extruderValue(skirt_brim_extruder_nr, 'skirt_gap') if resolveOrValue('adhesion_type') == 'skirt' else 0) + (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0), max(map(abs, extruderValues('machine_nozzle_offset_y'))), 1) - (resolveOrValue('machine_depth') / 2 if resolveOrValue('machine_center_is_zero') else 0)" }, - "prime_tower_position_y": { "value": "(resolveOrValue('prime_tower_base_size') if (resolveOrValue('adhesion_type') == 'raft' or resolveOrValue('prime_tower_brim_enable')) else 0) + max(max(extruderValues('travel_avoid_distance')) + max(extruderValues('machine_nozzle_offset_y')) + max(extruderValues('support_offset')) + (extruderValue(skirt_brim_extruder_nr, 'skirt_brim_line_width') * extruderValue(skirt_brim_extruder_nr, 'skirt_line_count') * extruderValue(skirt_brim_extruder_nr, 'initial_layer_line_width_factor') / 100 + extruderValue(skirt_brim_extruder_nr, 'skirt_gap') if resolveOrValue('adhesion_type') == 'skirt' else 0) + (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0), max(map(abs, extruderValues('machine_nozzle_offset_y'))), 1) - (resolveOrValue('machine_depth') / 2 if resolveOrValue('machine_center_is_zero') else 0)" } - } -} \ No newline at end of file diff --git a/resources/definitions/bambulab_a1mini.def.json b/resources/definitions/bambulab_a1mini.def.json deleted file mode 100644 index 490556e4f0..0000000000 --- a/resources/definitions/bambulab_a1mini.def.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "version": 2, - "name": "BambuLab A1 mini", - "inherits": "bambulab_base", - "metadata": - { - "visible": true, - "platform": "bambulab_a1mini.obj", - "has_machine_quality": true, - "has_material": true, - "has_textured_buildplate": true, - "has_variant_buildplates": false, - "has_variants": true, - "machine_extruder_trains": - { - "0": "bambulab_a1mini_extruder_0", - "1": "bambulab_a1mini_extruder_1", - "2": "bambulab_a1mini_extruder_2", - "3": "bambulab_a1mini_extruder_3" - }, - "platform_offset": [ - -90, - 0, - 90 - ], - "platform_texture": "bambulab-buildplate.png", - "preferred_variant_name": "0.4mm", - "weight": 3 - }, - "overrides": - { - "machine_depth": { "value": 180 }, - "machine_end_gcode": { "default_value": ";===== date: 20231229 =====================\n;turn off nozzle clog detect\nG392 S0\n\nM400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-0.8 F1800 ; retract\nG1 Z{machine_height + 0.5} F900 ; lower z a little\nG1 X0 Y{machine_depth} F18000 ; move to safe pos\nG1 X-13.0 F3000 ; move to safe pos\n{if !magic_spiralize && print_sequence != 'one_at_a_time'}\nM1002 judge_flag timelapse_record_flag\nM622 J1\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM991 S0 P-1 ;end timelapse at safe pos\nM623\n{endif}\n\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off remote part cooling fan\nM106 P3 S0 ; turn off chamber cooling fan\n\n;G1 X27 F15000 ; wipe\n\n; pull back filament to AMS\nM620 S255\nG1 X181 F12000\nT255\nG1 X0 F18000\nG1 X-13.0 F3000\nG1 X0 F18000 ; wipe\nM621 S255\n\nM104 S0 ; turn off hotend\n\nM400 ; wait all motion done\nM17 S\nM17 Z0.4 ; lower z motor current to reduce impact if there is something in the bottom\nG1 Z180 F600\nG1 Z180\nM400 P100\nM17 R ; restore z current\n\nG90\nG1 X-13 Y180 F3600\n\nG91\nG1 Z-1 F600\nG90\nM83\n\nM220 S100 ; Reset feedrate magnitude\nM201.2 K1.0 ; Reset acc magnitude\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 0\n\n;=====printer finish sound=========\nM17\nM400 S1\nM1006 S1\nM1006 A0 B20 L100 C37 D20 M100 E42 F20 N100\nM1006 A0 B10 L100 C44 D10 M100 E44 F10 N100\nM1006 A0 B10 L100 C46 D10 M100 E46 F10 N100\nM1006 A44 B20 L100 C39 D20 M100 E48 F20 N100\nM1006 A0 B10 L100 C44 D10 M100 E44 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B10 L100 C39 D10 M100 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B10 L100 C44 D10 M100 E44 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B10 L100 C39 D10 M100 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A44 B10 L100 C0 D10 M100 E48 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A44 B20 L100 C41 D20 M100 E49 F20 N100\nM1006 A0 B20 L100 C0 D20 M100 E0 F20 N100\nM1006 A0 B20 L100 C37 D20 M100 E37 F20 N100\nM1006 W\n;=====printer finish sound=========\nM400 S1\nM18 X Y Z\n" }, - "machine_extruder_count": { "value": 4 }, - "machine_height": { "value": 175 }, - "machine_name": { "default_value": "BambuLab Bambu A1 mini" }, - "machine_start_gcode": { "default_value": ";===== machine: A1 mini =========================\n\n;===== start to heat heatbead&hotend==========\nM1002 gcode_claim_action : 2\nM1002 set_filament_type:{material_type, initial_extruder_nr}\nM104 S170\nM140 S{material_bed_temperature_layer_0}\nG392 S0 ;turn off clog detect\nM9833.2\n;=====start printer sound ===================\n; 'The entertainer' by Scott Joplin\nM17\nM400 S1\nM1006 S1\n\nM1006 A0 B10 C39 D15 L30 M60 E0 F10 N60\nM1006 A0 B10 C40 D15 L30 M60 E0 F10 N60\nM1006 A0 B10 C41 D15 L30 M60 E0 F10 N60\nM1006 A0 B10 C49 D30 L30 M60 E0 F10 N60\nM1006 A0 B10 C41 D15 L30 M60 E0 F10 N60\nM1006 A0 B10 C49 D30 L30 M60 E0 F10 N60\nM1006 A0 B10 C41 D15 L30 M60 E0 F10 N60\nM1006 A0 B10 C49 D30 L30 M60 E0 F10 N60\n\nM1006 A0 B10 C0 D30 L30 M60 E0 F10 N60\n\nM1006 A0 B10 C49 D15 L30 M60 E0 F10 N60\nM1006 A0 B10 C50 D15 L30 M60 E0 F10 N60\nM1006 A0 B10 C51 D15 L30 M60 E0 F10 N60\nM1006 A0 B10 C53 D15 L30 M60 E0 F10 N60\nM1006 A0 B10 C50 D15 L30 M60 E0 F10 N60\nM1006 A0 B10 C51 D15 L30 M60 E0 F10 N60\nM1006 A0 B10 C53 D30 L30 M60 E0 F10 N60\nM1006 A0 B10 C47 D15 L30 M60 E0 F10 N60\nM1006 A0 B10 C51 D30 L30 M60 E0 F10 N60\nM1006 A0 B10 C49 D30 L30 M60 E0 F10 N60\n\nM1006 W\nM18\n;=====avoid end stop =================\nG91\nG380 S2 Z30 F1200\nG380 S3 Z-20 F1200\nG1 Z5 F1200\nG90\n\n;===== reset machine status =================\nM204 S6000\n\nM630 S0 P0\nG91\nM17 Z0.3 ; lower the z-motor current\n\nG90\nM17 X0.7 Y0.9 Z0.5 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM83\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\n;====== cog noise reduction=================\nM982.2 S1 ; turn on cog noise reduction\n\n;===== prepare print temperature and material ==========\nM400\nM18\nM109 S100 H170\nM104 S170\nM400\nM17\nM400\nG28 X\n\nM211 X0 Y0 Z0 ;turn off soft endstop ; turn off soft endstop to prevent protential logic problem\n\nM975 S1 ; turn on\n\nG1 X0.0 F30000\nG1 X-13.5 F3000\n\nM620 M ;enable remap\nM620 S{initial_extruder_nr}A ; switch material if AMS exist\n G392 S0 ;turn on clog detect\n M1002 gcode_claim_action : 4\n M400\n M1002 set_filament_type:UNKNOWN\n M109 S{material_print_temperature_layer_0, initial_extruder_nr}\n M104 S250\n M400\n T{initial_extruder_nr}\n G1 X-13.5 F3000\n M400\n M620.1 E F{material_max_flowrate/2.4053*60, initial_extruder_nr} T{material_print_temperature, initial_extruder_nr}\n M109 S250 ;set nozzle to common flush temp\n M106 P1 S0\n G92 E0\n G1 E50 F200\n M400\n M1002 set_filament_type:{material_type, initial_extruder_nr}\n M104 S{material_print_temperature, initial_extruder_nr}\n G92 E0\n G1 E50 F{material_max_flowrate/2.4053*60, initial_extruder_nr}\n M400\n M106 P1 S178\n G92 E0\n G1 E5 F{material_max_flowrate/2.4053*60, initial_extruder_nr}\n M109 S{material_print_temperature_layer_0-20, initial_extruder_nr} ; drop nozzle temp, make filament shink a bit\n M104 S{material_print_temperature_layer_0-40, material_print_temperature_layer_0}\n G92 E0\n G1 E-0.5 F300\n\n G1 X0 F30000\n G1 X-13.5 F3000\n G1 X0 F30000 ;wipe and shake\n G1 X-13.5 F3000\n G1 X0 F12000 ;wipe and shake\n G1 X0 F30000\n G1 X-13.5 F3000\n M109 S{material_print_temperature_layer_0-40, initial_extruder_nr}\n G392 S0 ;turn off clog detect\nM621 S{initial_extruder_nr}A\n\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== mech mode fast check============================\n{if material_print_temperature > 2000}\nM1002 gcode_claim_action : 3\n{endif}\nG0 X25 Y175 F20000 ; find a soft place to home\n;M104 S0\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nM104 S170\n\n; build plate detect\nM1002 judge_flag build_plate_detect_flag\nM622 S1\n G39.4\n M400\nM623\n\nG1 Z5 F3000\nG1 X90 Y-1 F30000\nM400 P200\nM970.3 Q1 A7 K0 O2\nM974 Q1 S2 P0\n\nG1 X90 Y0 Z5 F30000\nM400 P200\nM970 Q0 A10 B50 C90 H15 K0 M20 O3\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X-1 Y10\nG28 X ; re-home XY\n\n;===== wipe nozzle ===============================\n{if material_print_temperature > 2000}\nM1002 gcode_claim_action : 14\nM975 S1\n\nM104 S170 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\nM211 S; push soft endstop status\nM211 X0 Y0 Z0 ;turn off Z axis endstop\n\nM83\nG1 E-1 F500\nG90\nM83\n\nM109 S170\nM104 S140\nG0 X90 Y-4 F30000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X91 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X92 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X93 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X94 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X95 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X96 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X97 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X98 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X99 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X99 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X99 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X99 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X99 F10000\nG380 S3 Z-5 F1200\n\nG1 Z5 F30000\n;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\nG1 X25 Y175 F30000.1 ;Brush material\nG1 Z0.2 F30000.1\nG1 Y185\nG91\nG1 X-30 F30000\nG1 Y-2\nG1 X27\nG1 Y1.5\nG1 X-28\nG1 Y-2\nG1 X30\nG1 Y1.5\nG1 X-30\nG90\nM83\n\nG1 Z5 F3000\nG0 X50 Y175 F20000 ; find a soft place to home\nG28 Z P0 T300; home z with low precision, permit 300deg temperature\nG29.2 S0 ; turn off ABL\n\nG0 X85 Y185 F10000 ;move to exposed steel surface and stop the nozzle\nG0 Z-1.01 F10000\nG91\n\nG2 I1 J0 X2 Y0 F2000.1\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\n\nG90\nG1 Z5 F30000\nG1 X25 Y175 F30000.1 ;Brush material\nG1 Z0.2 F30000.1\nG1 Y185\nG91\nG1 X-30 F30000\nG1 Y-2\nG1 X27\nG1 Y1.5\nG1 X-28\nG1 Y-2\nG1 X30\nG1 Y1.5\nG1 X-30\nG90\nM83\n\nG1 Z5\nG0 X55 Y175 F20000 ; find a soft place to home\nG28 Z P0 T300; home z with low precision, permit 300deg temperature\nG29.2 S0 ; turn off ABL\n\nG1 Z10\nG1 X85 Y185\nG1 Z-1.01\nG1 X95\nG1 X90\n\nM211 R; pop softend status\n\nM106 S0 ; turn off fan , too noisy\n{endif}\n;===== wipe nozzle end ================================\n\n\n;===== wait heatbed ====================\nM1002 gcode_claim_action : 2\nM104 S0\nM190 S{material_bed_temperature_layer_0};set bed temp\nM109 S140\n\nG1 Z5 F3000\nG29.2 S1\nG1 X10 Y10 F20000\n\n;===== bed leveling ==================================\n;M1002 set_flag g29_before_print_flag=1\nM1002 judge_flag g29_before_print_flag\nM622 J1\n M1002 gcode_claim_action : 1\n G29 A1 X{-machine_width/2 if machine_center_is_zero else 0} Y{-machine_depth/2 if machine_center_is_zero else 0} I{machine_width} J{machine_depth}\n M400\n M500 ; save cali data\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28 T145\n\nM623\n\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n;===== nozzle load line ===============================\nM975 S1\nG90\nM83\nT1000\n\nG1 X-13.5 Y0 Z10 F10000\nG1 E1.2 F500\nM400\nM1002 set_filament_type:UNKNOWN\nM109 S{material_print_temperature_layer_0, initial_extruder_nr}\nM400\n\nM412 S1 ; ===turn on filament runout detection===\nM400 P10\n\nG392 S0 ;turn on clog detect\n\nM620.3 W1; === turn on filament tangle detection===\nM400 S2\n\nM1002 set_filament_type:{material_type, initial_extruder_nr}\n;M1002 set_flag extrude_cali_flag=1\nM1002 judge_flag extrude_cali_flag\nM622 J1\n M1002 gcode_claim_action : 8\n\n M400\n M900 K0.0 L1000.0 M1.0\n G90\n M83\n G0 X68 Y-4 F30000\n G0 Z0.3 F18000 ;Move to start position\n M400\n G0 X88 E10 F{speed_wall_0*wall_line_width_0*layer_height/(24/20) * 60, initial_extruder_nr}\n G0 X93 E.3742 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/4 * 60, initial_extruder_nr}\n G0 X98 E.3742 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G0 X103 E.3742 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/4 * 60, initial_extruder_nr}\n G0 X108 E.3742 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G0 X113 E.3742 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/4 * 60, initial_extruder_nr}\n G0 Y0 Z0 F20000\n M400\n\n G1 X-13.5 Y0 Z10 F10000\n M400\n\n G1 E10 F{speed_wall_0*wall_line_width_0*layer_height/2.4*60, initial_extruder_nr}\n M983 F{speed_wall_0*wall_line_width_0*layer_height/2.4, initial_extruder_nr} A0.3 H{machine_nozzle_size}; cali dynamic extrusion compensation\n M106 P1 S178\n M400 S7\n G1 X0 F18000\n G1 X-13.5 F3000\n G1 X0 F18000 ;wipe and shake\n G1 X-13.5 F3000\n G1 X0 F12000 ;wipe and shake\n G1 X-13.5 F3000\n M400\n M106 P1 S0\n\n M1002 judge_last_extrude_cali_success\n M622 J0\n M983 F{speed_wall_0*wall_line_width_0*layer_height/2.4, initial_extruder_nr} A0.3 H{machine_nozzle_size}; cali dynamic extrusion compensation\n M106 P1 S178\n M400 S7\n G1 X0 F18000\n G1 X-13.5 F3000\n G1 X0 F18000 ;wipe and shake\n G1 X-13.5 F3000\n G1 X0 F12000 ;wipe and shake\n M400\n M106 P1 S0\n M623\n\n G1 X-13.5 F3000\n M400\n M984 A0.1 E1 S1 F{speed_wall_0*wall_line_width_0*layer_height/2.4, initial_extruder_nr} H{machine_nozzle_size}\n M106 P1 S178\n M400 S7\n G1 X0 F18000\n G1 X-13.5 F3000\n G1 X0 F18000 ;wipe and shake\n G1 X-13.5 F3000\n G1 X0 F12000 ;wipe and shake\n G1 X-13.5 F3000\n M400\n M106 P1 S0\n\nM623 ; end of 'draw extrinsic para cali paint'\n\n;===== extrude cali test ===============================\nM104 S{material_print_temperature_layer_0, initial_extruder_nr}\nG90\nM83\nG0 X68 Y-2.5 F30000\nG0 Z0.3 F18000 ;Move to start position\nG0 X88 E10 F{speed_wall_0*wall_line_width_0*layer_height/(24/20) * 60, initial_extruder_nr}\nG0 X93 E.3742 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/4 * 60, initial_extruder_nr}\nG0 X98 E.3742 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\nG0 X103 E.3742 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/4 * 60, initial_extruder_nr}\nG0 X108 E.3742 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\nG0 X113 E.3742 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/4 * 60, initial_extruder_nr}\nG0 X115 Z0 F20000\nG0 Z5\nM400\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\n\nM400 ; wait all motion done before implement the emprical L parameters\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if machine_buildplate_type=='textured_pei_plate'}\nG29.1 Z{-0.02} ; for Textured PEI Plate\n{endif}\n\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\n\nM211 X0 Y0 Z0 ;turn off soft endstop\nM1007 S1\n\n\n\n" }, - "machine_width": { "value": 180 }, - "prime_tower_position_x": { "value": "resolveOrValue('prime_tower_size') + (resolveOrValue('prime_tower_base_size') if (resolveOrValue('adhesion_type') == 'raft' or resolveOrValue('prime_tower_brim_enable')) else 0) + max(max(extruderValues('travel_avoid_distance')) + max(extruderValues('machine_nozzle_offset_y')) + max(extruderValues('support_offset')) + (extruderValue(skirt_brim_extruder_nr, 'skirt_brim_line_width') * extruderValue(skirt_brim_extruder_nr, 'skirt_line_count') * extruderValue(skirt_brim_extruder_nr, 'initial_layer_line_width_factor') / 100 + extruderValue(skirt_brim_extruder_nr, 'skirt_gap') if resolveOrValue('adhesion_type') == 'skirt' else 0) + (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0), max(map(abs, extruderValues('machine_nozzle_offset_y'))), 1) - (resolveOrValue('machine_depth') / 2 if resolveOrValue('machine_center_is_zero') else 0)" }, - "prime_tower_position_y": { "value": "(resolveOrValue('prime_tower_base_size') if (resolveOrValue('adhesion_type') == 'raft' or resolveOrValue('prime_tower_brim_enable')) else 0) + max(max(extruderValues('travel_avoid_distance')) + max(extruderValues('machine_nozzle_offset_y')) + max(extruderValues('support_offset')) + (extruderValue(skirt_brim_extruder_nr, 'skirt_brim_line_width') * extruderValue(skirt_brim_extruder_nr, 'skirt_line_count') * extruderValue(skirt_brim_extruder_nr, 'initial_layer_line_width_factor') / 100 + extruderValue(skirt_brim_extruder_nr, 'skirt_gap') if resolveOrValue('adhesion_type') == 'skirt' else 0) + (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0), max(map(abs, extruderValues('machine_nozzle_offset_y'))), 1) - (resolveOrValue('machine_depth') / 2 if resolveOrValue('machine_center_is_zero') else 0)" } - } -} \ No newline at end of file diff --git a/resources/definitions/bambulab_base.def.json b/resources/definitions/bambulab_base.def.json deleted file mode 100644 index a28e606a38..0000000000 --- a/resources/definitions/bambulab_base.def.json +++ /dev/null @@ -1,267 +0,0 @@ -{ - "version": 2, - "name": "BambuLab base definition", - "inherits": "fdmprinter", - "metadata": - { - "visible": false, - "author": "UltiMaker", - "manufacturer": "BambuLab", - "file_formats": "application/vnd.bambulab-package.3dmanufacturing-3dmodel+xml" - }, - "overrides": - { - "acceleration_infill": { "value": "acceleration_print" }, - "acceleration_layer_0": { "value": 2000 }, - "acceleration_prime_tower": { "value": "acceleration_print" }, - "acceleration_print": { "value": 20000 }, - "acceleration_print_layer_0": { "value": "acceleration_layer_0" }, - "acceleration_roofing": { "value": "acceleration_wall_0" }, - "acceleration_skirt_brim": { "value": "acceleration_layer_0" }, - "acceleration_support": { "value": "acceleration_print" }, - "acceleration_support_bottom": { "value": "acceleration_support_interface" }, - "acceleration_support_infill": { "value": "acceleration_support" }, - "acceleration_support_interface": { "value": "acceleration_support" }, - "acceleration_support_roof": { "value": "acceleration_support_interface" }, - "acceleration_topbottom": { "value": "acceleration_print" }, - "acceleration_travel": { "value": 20000 }, - "acceleration_travel_enabled": { "value": true }, - "acceleration_travel_layer_0": { "value": "acceleration_layer_0" }, - "acceleration_wall": { "value": "acceleration_print/8" }, - "acceleration_wall_0": { "value": "acceleration_wall" }, - "acceleration_wall_0_roofing": { "value": "acceleration_wall_0" }, - "acceleration_wall_x": { "value": "acceleration_print" }, - "acceleration_wall_x_roofing": { "value": "acceleration_wall" }, - "adhesion_type": { "value": "'skirt'" }, - "bottom_thickness": { "value": 0.6 }, - "bridge_skin_speed": - { - "unit": "mm/s", - "value": "bridge_wall_speed" - }, - "bridge_sparse_infill_max_density": { "value": 50 }, - "bridge_wall_min_length": { "value": 10 }, - "bridge_wall_speed": - { - "unit": "mm/s", - "value": 50 - }, - "cool_min_layer_time": { "value": 6 }, - "cool_min_speed": { "value": 6 }, - "cool_min_temperature": { "value": "material_print_temperature-15" }, - "default_material_print_temperature": { "maximum_value_warning": 320 }, - "extra_infill_lines_to_support_skins": { "value": "'walls_and_lines'" }, - "gradual_flow_enabled": { "value": false }, - "hole_xy_offset": { "value": 0.075 }, - "infill_overlap": { "value": 10 }, - "infill_pattern": { "value": "'zigzag' if infill_sparse_density > 80 else 'gyroid'" }, - "infill_sparse_density": { "value": 15 }, - "infill_wall_line_count": { "value": "1 if infill_sparse_density > 80 else 0" }, - "jerk_infill": { "value": "jerk_print" }, - "jerk_layer_0": { "value": "jerk_print/2" }, - "jerk_prime_tower": { "value": "jerk_print" }, - "jerk_print": { "value": "50" }, - "jerk_print_layer_0": { "value": "jerk_layer_0" }, - "jerk_roofing": { "value": "jerk_wall_0" }, - "jerk_skirt_brim": { "value": "jerk_layer_0" }, - "jerk_support": { "value": "jerk_print" }, - "jerk_support_bottom": { "value": "jerk_support_interface" }, - "jerk_support_infill": { "value": "jerk_support" }, - "jerk_support_interface": { "value": "jerk_support" }, - "jerk_support_roof": { "value": "jerk_support_interface" }, - "jerk_topbottom": { "value": "jerk_print" }, - "jerk_travel": { "value": 50 }, - "jerk_travel_enabled": { "value": true }, - "jerk_travel_layer_0": { "value": "jerk_travel" }, - "jerk_wall": { "value": "jerk_print/5" }, - "jerk_wall_0": { "value": "jerk_wall" }, - "jerk_wall_0_roofing": { "value": "jerk_wall_0" }, - "jerk_wall_x": { "value": "jerk_print" }, - "jerk_wall_x_roofing": { "value": "jerk_wall_0" }, - "line_width": { "value": 0.42 }, - "machine_acceleration": { "value": 10000 }, - "machine_buildplate_type": - { - "default_value": "textured_pei_plate", - "options": - { - "cool_plate": "Cool Plate", - "engineering_plate": "Engineering Plate", - "high_temp_plate": "High Temp Plate", - "textured_pei_plate": "Textured PEI Plate" - } - }, - "machine_center_is_zero": { "default_value": false }, - "machine_gcode_flavor": { "default_value": "BambuLab" }, - "machine_heated_bed": { "default_value": true }, - "machine_max_feedrate_e": { "value": 150 }, - "machine_max_feedrate_x": { "value": 500 }, - "machine_max_feedrate_y": { "value": 500 }, - "machine_max_feedrate_z": { "value": 15 }, - "machine_max_jerk_e": { "default_value": 100 }, - "machine_max_jerk_xy": { "default_value": 5000 }, - "machine_max_jerk_z": { "default_value": 100 }, - "machine_nozzle_cool_down_speed": { "default_value": 1.3 }, - "machine_nozzle_heat_up_speed": { "default_value": 1.9 }, - "machine_nozzle_size": { "default_value": 0.4 }, - "machine_show_variants": { "value": true }, - "machine_use_extruder_offset_to_offset_coords": { "value": false }, - "material_diameter": { "default_value": 1.75 }, - "material_flush_purge_length": - { - "default_value": 80, - "enabled": "not prime_tower_enable" - }, - "material_flush_purge_speed": - { - "default_value": 500, - "enabled": "not prime_tower_enable" - }, - "material_max_flowrate": { "enabled": true }, - "max_skin_angle_for_expansion": { "value": 45 }, - "meshfix_maximum_resolution": { "value": 0.4 }, - "min_infill_area": { "default_value": 10 }, - "optimize_wall_printing_order": { "value": false }, - "prime_tower_enable": { "default_value": true }, - "prime_tower_line_width": { "value": "1.5 * line_width" }, - "prime_tower_min_volume": { "default_value": 250 }, - "prime_tower_size": { "default_value": 40 }, - "relative_extrusion": { "value": true }, - "retraction_amount": { "value": 0.5 }, - "retraction_combing_max_distance": { "value": 100 }, - "retraction_extra_prime_amount": { "value": 0.12 }, - "retraction_hop": { "value": 0.2 }, - "retraction_hop_after_extruder_switch_height": { "value": 2 }, - "retraction_hop_enabled": { "value": true }, - "retraction_min_travel": { "value": "5 if support_enable and support_structure=='tree' else line_width * 2" }, - "retraction_prime_speed": { "value": 15 }, - "retraction_speed": { "value": 30 }, - "skin_edge_support_thickness": { "value": 0 }, - "skin_material_flow": { "value": 95 }, - "skin_overlap": { "value": 0 }, - "skin_preshrink": { "value": 0 }, - "skirt_brim_speed": { "maximum_value_warning": 500 }, - "skirt_line_count": { "value": 5 }, - "small_skin_on_surface": { "value": false }, - "small_skin_width": { "value": 4 }, - "speed_infill": - { - "maximum_value_warning": 500, - "value": "speed_print" - }, - "speed_ironing": - { - "maximum_value_warning": 500, - "value": 20 - }, - "speed_layer_0": - { - "maximum_value_warning": 500, - "value": "speed_print/6" - }, - "speed_prime_tower": - { - "maximum_value_warning": 500, - "value": "speed_wall" - }, - "speed_print": - { - "maximum_value_warning": 500, - "value": 300 - }, - "speed_print_layer_0": - { - "maximum_value_warning": 500, - "value": "speed_layer_0" - }, - "speed_roofing": - { - "maximum_value_warning": 500, - "value": "speed_wall" - }, - "speed_support": - { - "maximum_value_warning": 500, - "value": "speed_wall_0" - }, - "speed_support_bottom": - { - "maximum_value_warning": 500, - "value": "speed_support_interface" - }, - "speed_support_infill": - { - "maximum_value_warning": 500, - "value": "speed_support" - }, - "speed_support_interface": - { - "maximum_value_warning": 500, - "value": 50 - }, - "speed_support_roof": - { - "maximum_value_warning": 500, - "value": "speed_support_interface" - }, - "speed_topbottom": - { - "maximum_value_warning": 500, - "value": "speed_print" - }, - "speed_travel": - { - "maximum_value": 500, - "value": 500 - }, - "speed_travel_layer_0": - { - "maximum_value": 500, - "value": 150 - }, - "speed_wall": - { - "maximum_value_warning": 500, - "value": "speed_print*2/3" - }, - "speed_wall_0": - { - "maximum_value_warning": 500, - "value": "speed_wall" - }, - "speed_wall_0_roofing": - { - "maximum_value_warning": 500, - "value": "speed_wall" - }, - "speed_wall_x": - { - "maximum_value_warning": 500, - "value": "speed_print" - }, - "speed_wall_x_roofing": - { - "maximum_value_warning": 500, - "value": "speed_wall" - }, - "support_brim_line_count": { "value": 5 }, - "support_infill_rate": { "value": "80 if gradual_support_infill_steps != 0 else 15" }, - "support_pattern": { "value": "'gyroid'" }, - "support_structure": { "value": "'tree'" }, - "switch_extruder_retraction_amount": { "value": 5 }, - "travel_avoid_other_parts": { "value": false }, - "wall_0_acceleration": { "value": 1000 }, - "wall_0_deceleration": { "value": 1000 }, - "wall_0_end_speed_ratio": { "value": 100 }, - "wall_0_speed_split_distance": { "value": 0.2 }, - "wall_0_start_speed_ratio": { "value": 100 }, - "wall_0_wipe_dist": { "value": 0 }, - "wall_material_flow": { "value": 95 }, - "wall_overhang_angle": { "value": 10 }, - "wall_overhang_speed_factors": { "default_value": "[25,15,5,5]" }, - "wall_x_material_flow": { "value": 100 }, - "z_seam_corner": { "value": "'z_seam_corner_weighted'" }, - "z_seam_position": { "value": "'backright'" }, - "z_seam_type": { "value": "'sharpest_corner'" } - } -} \ No newline at end of file diff --git a/resources/definitions/bambulab_x1.def.json b/resources/definitions/bambulab_x1.def.json deleted file mode 100644 index 0c6d223e1a..0000000000 --- a/resources/definitions/bambulab_x1.def.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "version": 2, - "name": "BambuLab X1", - "inherits": "bambulab_base", - "metadata": - { - "visible": true, - "platform": "bambulab_x1.obj", - "has_machine_quality": true, - "has_material": true, - "has_textured_buildplate": true, - "has_variant_buildplates": false, - "has_variants": true, - "machine_extruder_trains": - { - "0": "bambulab_x1_extruder_0", - "1": "bambulab_x1_extruder_1", - "2": "bambulab_x1_extruder_2", - "3": "bambulab_x1_extruder_3" - }, - "platform_offset": [ - -130, - 0, - 130 - ], - "platform_texture": "bambulab-buildplate.png", - "preferred_variant_name": "X1 0.4mm", - "weight": 3 - }, - "overrides": - { - "machine_depth": { "value": 256 }, - "machine_disallowed_areas": - { - "default_value": [ - [ - [-128, 100], - [-110, 100], - [-110, 128], - [-128, 128] - ] - ] - }, - "machine_end_gcode": { "default_value": ";===== date: 20240528 =====================\nM400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-0.8 F1800 ; retract\nG1 Z{machine_height + 0.5} F900 ; lower z a little\nG1 X65 Y245 F12000 ; move to safe pos\nG1 Y265 F3000\n\nG1 X65 Y245 F12000\nG1 Y265 F3000\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off remote part cooling fan\nM106 P3 S0 ; turn off chamber cooling fan\n\nG1 X100 F12000 ; wipe\n; pull back filament to AMS\nM620 S255\nG1 X20 Y50 F12000\nG1 Y-3\nT255\nG1 X65 F12000\nG1 Y265\nG1 X100 F12000 ; wipe\nM621 S255\nM104 S0 ; turn off hotend\n\nM622.1 S1 ; for prev firware, default turned on\nM1002 judge_flag timelapse_record_flag\nM622 J1\n M400 ; wait all motion done\n M991 S0 P-1 ;end smooth timelapse at safe pos\n M400 S3 ;wait for last picture to be taken\nM623; end of 'timelapse_record_flag'\n\nM400 ; wait all motion done\nM17 S\nM17 Z0.4 ; lower z motor current to reduce impact if there is something in the bottom\nG1 Z250 F600\nG1 Z248\nM400 P100\nM17 R ; restore z current\n\nM220 S100 ; Reset feedrate magnitude\nM201.2 K1.0 ; Reset acc magnitude\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 0\n\nM17 X0.8 Y0.8 Z0.5 ; lower motor current to 45% power\nM960 S5 P0 ; turn off logo lamp\n" }, - "machine_extruder_count": { "value": 4 }, - "machine_height": { "value": 251 }, - "machine_name": { "default_value": "BambuLab Bambu X1" }, - "machine_scan_first_layer": - { - "enabled": true, - "value": "machine_buildplate_type!='textured_pei_plate'" - }, - "machine_start_gcode": { "default_value": ";===== machine: X1 ====================\n;===== date: 20241023 ==================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z0 ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S{material_bed_temperature_layer_0} ;set bed temp\nM190 S{material_bed_temperature_layer_0} ;wait for bed temp\n\n{if machine_scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if material_type=='PLA' and (material_bed_temperature_layer_0>45 or material_bed_temperature>45), initial_extruder_nr}\n M106 P3 S180\n M142 P1 R35 S40\n{endif}\n{if material_type=='PLA' and (material_bed_temperature_layer_0<=45 and material_bed_temperature<=45) , initial_extruder_nr}\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S{material_print_temperature_layer_0, initial_extruder_nr} ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S{initial_extruder_nr}A ; switch material if AMS exist\n M109 S{material_print_temperature_layer_0, initial_extruder_nr}\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T{initial_extruder_nr}\n G1 X54 F12000\n G1 Y265\n M400\nM621 S{initial_extruder_nr}A\nM620.1 E F{material_max_flowrate/2.4053*60, initial_extruder_nr} T{material_print_temperature, initial_extruder_nr}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S{material_print_temperature_layer_0, initial_extruder_nr}\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{material_print_temperature_layer_0-20, initial_extruder_nr} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{material_print_temperature_layer_0-20, initial_extruder_nr}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{-machine_width/2 if machine_center_is_zero else 0} Y{-machine_depth/2 if machine_center_is_zero else 0} I{machine_width} J{machine_depth}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if material_type=='PLA' and (material_bed_temperature_layer_0>45 or material_bed_temperature>45), initial_extruder_nr}\n M106 P3 S180\n M142 P1 R35 S40\n{endif}\n{if material_type=='PLA' and (material_bed_temperature_layer_0<=45 and material_bed_temperature<=45) , initial_extruder_nr}\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{material_print_temperature_layer_0, initial_extruder_nr} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if machine_scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== nozzle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{material_print_temperature, initial_extruder_nr}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\nG0 Y11 E0.700 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X231 E0.700 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if machine_buildplate_type=='textured_pei_plate'}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000\n\n G0 F1200.0 X231 Y15 Z0.2 E0.741\n G0 F1200.0 X226 Y15 Z0.2 E0.275\n G0 F1200.0 X226 Y8 Z0.2 E0.384\n G0 F1200.0 X216 Y8 Z0.2 E0.549\n G0 F1200.0 X216 Y1.5 Z0.2 E0.357\n\n G0 X48.0 E12.0 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G0 X48.0 Y14 E0.92 F1200.0\n G0 X35.0 Y6.0 E1.03 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if acceleration_print > 0 and acceleration_wall_0 > 0, initial_extruder_nr}\n M204 S{acceleration_wall_0, initial_extruder_nr}\n {endif}\n {if acceleration_print > 0 and acceleration_wall_0 <= 0, initial_extruder_nr}\n M204 S{acceleration_print, initial_extruder_nr}\n {endif}\n\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F4800\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.160\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X70.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X75.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X80.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X85.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X90.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X95.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X100.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X105.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X110.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X115.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X120.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X125.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X130.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X135.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X140.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X145.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X150.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X155.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X160.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X165.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X170.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X175.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X180.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.080\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X70.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X75.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X80.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X85.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X90.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X95.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X100.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X105.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X110.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X115.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X120.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X125.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X130.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X135.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X140.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X145.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X150.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X155.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X160.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X165.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X170.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X175.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X180.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X70.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X75.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X80.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X85.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X90.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X95.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X100.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X105.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X110.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X115.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X120.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X125.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X130.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X135.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X140.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X145.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X150.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X155.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X160.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X165.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X170.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X175.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X180.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of 'draw extrinsic para cali paint'\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X18 E14.3 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\nM623\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{material_print_temperature, initial_extruder_nr} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{speed_wall_0*wall_line_width_0*layer_height/(1.75*1.75/4*3.14)*60/4, initial_extruder_nr} C5.000 D{speed_wall_0*wall_line_width_0*layer_height/(1.75*1.75/4*3.14)*60, initial_extruder_nr} E5.000 F175.000 H1.000 I0.000 J0.080 K0.160\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{material_print_temperature, initial_extruder_nr}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E1.24726 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X70.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X75.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X80.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X85.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X90.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X95.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X100.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X105.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X110.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X115.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X120.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X125.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X130.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X135.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.08 M{speed_wall_0*wall_line_width_0*layer_height/(1.75*1.75/4*3.14)*0.08, initial_extruder_nr}\n M623\n\n G1 X140.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X145.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X150.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X155.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X160.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X165.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X170.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X175.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X180.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X185.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X190.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X195.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X200.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X205.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X210.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X215.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X220.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X225.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n M973 S4\n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S{material_print_temperature_layer_0, initial_extruder_nr}\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\n;===== purge line to wipe the nozzle ============================\nG1 E{-retraction_amount, initial_extruder_nr} F1800\nG1 X18.0 Y2.5 Z0.8 F18000.0;Move to start position\nG1 E{retraction_amount, initial_extruder_nr} F1800\nM109 S{material_print_temperature_layer_0, initial_extruder_nr}\nG1 Z0.2\nG0 X239 E15 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\nG0 Y12 E0.7 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/4* 60, initial_extruder_nr}\n" }, - "machine_width": { "value": 256 }, - "prime_tower_position_x": { "value": "resolveOrValue('prime_tower_size') + (resolveOrValue('prime_tower_base_size') if (resolveOrValue('adhesion_type') == 'raft' or resolveOrValue('prime_tower_brim_enable')) else 0) + max(max(extruderValues('travel_avoid_distance')) + max(extruderValues('machine_nozzle_offset_y')) + max(extruderValues('support_offset')) + (extruderValue(skirt_brim_extruder_nr, 'skirt_brim_line_width') * extruderValue(skirt_brim_extruder_nr, 'skirt_line_count') * extruderValue(skirt_brim_extruder_nr, 'initial_layer_line_width_factor') / 100 + extruderValue(skirt_brim_extruder_nr, 'skirt_gap') if resolveOrValue('adhesion_type') == 'skirt' else 0) + (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0), max(map(abs, extruderValues('machine_nozzle_offset_y'))), 1) - (resolveOrValue('machine_depth') / 2 if resolveOrValue('machine_center_is_zero') else 0)" }, - "travel_avoid_distance": { "value": "3" } - } -} \ No newline at end of file diff --git a/resources/extruders/bambulab_a1_extruder_0.def.json b/resources/extruders/bambulab_a1_extruder_0.def.json deleted file mode 100644 index e2a89b97c4..0000000000 --- a/resources/extruders/bambulab_a1_extruder_0.def.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "version": 2, - "name": "Extruder", - "inherits": "fdmextruder", - "metadata": - { - "machine": "bambulab_a1", - "position": "0" - }, - "overrides": - { - "extruder_nr": { "default_value": 0 }, - "machine_extruder_change_duration": { "default_value": 29 }, - "machine_extruder_end_code": { "default_value": ";===== A1 extruder end {extruder_nr} begin =====\nG392 S0\nM1007 S0 ; turn off mass estimation\nM204 S9000\n\nG91 ; set relative positioning\nG1 Z3.0 F1200\nG90 ; back to abolute positioning\n\nG1 X267 F18000\nG1 Y128 F9000\n\nM400\nM106 P1 S0\nM106 P2 S0\n{if material_print_temperature > 142, extruder_nr}\nM104 S{material_print_temperature, extruder_nr}\n{endif}\n\n\nM620.11 S1 I{extruder_nr} E-18 F1200\nM400\n\nM620.1 E F{material_flush_purge_speed} T{material_print_temperature, extruder_nr}\nM620.10 A0 F{material_flush_purge_speed}\n\nM628 S1\nG92 E0\nG1 E-18 F{material_flush_purge_speed}\nM400\nM629 S1\n\n;===== A1 extruder end {extruder_nr} finish =====\n" }, - "machine_extruder_start_code": { "default_value": ";===== A1 extruder start {extruder_nr} begin =====\nM620.1 E F{material_flush_purge_speed} T{material_print_temperature, extruder_nr}\nM620.10 A1 F{material_flush_purge_speed} L{material_flush_purge_length} H{machine_nozzle_size} T{material_print_temperature, extruder_nr}\n\nM400\nG92 E0\n\n{if not prime_tower_enable}\n\n; FLUSH_START\n; always use highest temperature to flush\nM400\nM1002 set_filament_type:UNKNOWN\nM109 S{material_print_temperature, extruder_nr}\nM106 P1 S60\nG1 E{material_flush_purge_length / 4.0} F{min(extruderValues('material_flush_purge_speed'))} ; do not need pulsatile flushing for start part\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{min(extruderValues('material_flush_purge_speed'))}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\nM400\nM1002 set_filament_type:{material_type, extruder_nr}\n\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n\nM106 P1 S60\n; FLUSH_START\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\n\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n\nM106 P1 S60\n; FLUSH_START\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\n\n\nM400\nM106 P1 S60\nG1 E6 F{material_flush_purge_speed, extruder_nr} ;Compensate for filament spillage during waiting temperature\n\n{endif} ; prime_tower_enable\n\nM400\nG92 E0\n; G1 E-{retraction_amount} F1800\nM400\nM106 P1 S178\nM400 S4\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n\nM622.1 S0\n\nM621 S{extruder_nr}A\nG392 S0\n\nM1007 S1\n;===== A1 extruder start {extruder_nr} finish =====\n" }, - "material_diameter": { "default_value": 1.75 }, - "switch_extruder_retraction_amount": { "default_value": 18 } - } -} \ No newline at end of file diff --git a/resources/extruders/bambulab_a1_extruder_1.def.json b/resources/extruders/bambulab_a1_extruder_1.def.json deleted file mode 100644 index b61a74d199..0000000000 --- a/resources/extruders/bambulab_a1_extruder_1.def.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "version": 2, - "name": "Extruder", - "inherits": "fdmextruder", - "metadata": - { - "machine": "bambulab_a1", - "position": "1" - }, - "overrides": - { - "extruder_nr": { "default_value": 1 }, - "machine_extruder_change_duration": { "default_value": 29 }, - "machine_extruder_end_code": { "default_value": ";===== A1 extruder end {extruder_nr} begin =====\nG392 S0\nM1007 S0 ; turn off mass estimation\nM204 S9000\n\nG91 ; set relative positioning\nG1 Z3.0 F1200\nG90 ; back to abolute positioning\n\nG1 X267 F18000\nG1 Y128 F9000\n\nM400\nM106 P1 S0\nM106 P2 S0\n{if material_print_temperature > 142, extruder_nr}\nM104 S{material_print_temperature, extruder_nr}\n{endif}\n\n\nM620.11 S1 I{extruder_nr} E-18 F1200\nM400\n\nM620.1 E F{material_flush_purge_speed} T{material_print_temperature, extruder_nr}\nM620.10 A0 F{material_flush_purge_speed}\n\nM628 S1\nG92 E0\nG1 E-18 F{material_flush_purge_speed}\nM400\nM629 S1\n\n;===== A1 extruder end {extruder_nr} finish =====\n" }, - "machine_extruder_start_code": { "default_value": ";===== A1 extruder start {extruder_nr} begin =====\nM620.1 E F{material_flush_purge_speed} T{material_print_temperature, extruder_nr}\nM620.10 A1 F{material_flush_purge_speed} L{material_flush_purge_length} H{machine_nozzle_size} T{material_print_temperature, extruder_nr}\n\nM400\nG92 E0\n\n{if not prime_tower_enable}\n\n; FLUSH_START\n; always use highest temperature to flush\nM400\nM1002 set_filament_type:UNKNOWN\nM109 S{material_print_temperature, extruder_nr}\nM106 P1 S60\nG1 E{material_flush_purge_length / 4.0} F{min(extruderValues('material_flush_purge_speed'))} ; do not need pulsatile flushing for start part\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{min(extruderValues('material_flush_purge_speed'))}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\nM400\nM1002 set_filament_type:{material_type, extruder_nr}\n\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n\nM106 P1 S60\n; FLUSH_START\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\n\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n\nM106 P1 S60\n; FLUSH_START\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\n\n\nM400\nM106 P1 S60\nG1 E6 F{material_flush_purge_speed, extruder_nr} ;Compensate for filament spillage during waiting temperature\n\n{endif} ; prime_tower_enable\n\nM400\nG92 E0\n; G1 E-{retraction_amount} F1800\nM400\nM106 P1 S178\nM400 S4\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n\nM622.1 S0\n\nM621 S{extruder_nr}A\nG392 S0\n\nM1007 S1\n;===== A1 extruder start {extruder_nr} finish =====\n" }, - "material_diameter": { "default_value": 1.75 }, - "switch_extruder_retraction_amount": { "default_value": 18 } - } -} \ No newline at end of file diff --git a/resources/extruders/bambulab_a1_extruder_2.def.json b/resources/extruders/bambulab_a1_extruder_2.def.json deleted file mode 100644 index d439de1d30..0000000000 --- a/resources/extruders/bambulab_a1_extruder_2.def.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "version": 2, - "name": "Extruder", - "inherits": "fdmextruder", - "metadata": - { - "machine": "bambulab_a1", - "position": "2" - }, - "overrides": - { - "extruder_nr": { "default_value": 2 }, - "machine_extruder_change_duration": { "default_value": 29 }, - "machine_extruder_end_code": { "default_value": ";===== A1 extruder end {extruder_nr} begin =====\nG392 S0\nM1007 S0 ; turn off mass estimation\nM204 S9000\n\nG91 ; set relative positioning\nG1 Z3.0 F1200\nG90 ; back to abolute positioning\n\nG1 X267 F18000\nG1 Y128 F9000\n\nM400\nM106 P1 S0\nM106 P2 S0\n{if material_print_temperature > 142, extruder_nr}\nM104 S{material_print_temperature, extruder_nr}\n{endif}\n\n\nM620.11 S1 I{extruder_nr} E-18 F1200\nM400\n\nM620.1 E F{material_flush_purge_speed} T{material_print_temperature, extruder_nr}\nM620.10 A0 F{material_flush_purge_speed}\n\nM628 S1\nG92 E0\nG1 E-18 F{material_flush_purge_speed}\nM400\nM629 S1\n\n;===== A1 extruder end {extruder_nr} finish =====\n" }, - "machine_extruder_start_code": { "default_value": ";===== A1 extruder start {extruder_nr} begin =====\nM620.1 E F{material_flush_purge_speed} T{material_print_temperature, extruder_nr}\nM620.10 A1 F{material_flush_purge_speed} L{material_flush_purge_length} H{machine_nozzle_size} T{material_print_temperature, extruder_nr}\n\nM400\nG92 E0\n\n{if not prime_tower_enable}\n\n; FLUSH_START\n; always use highest temperature to flush\nM400\nM1002 set_filament_type:UNKNOWN\nM109 S{material_print_temperature, extruder_nr}\nM106 P1 S60\nG1 E{material_flush_purge_length / 4.0} F{min(extruderValues('material_flush_purge_speed'))} ; do not need pulsatile flushing for start part\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{min(extruderValues('material_flush_purge_speed'))}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\nM400\nM1002 set_filament_type:{material_type, extruder_nr}\n\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n\nM106 P1 S60\n; FLUSH_START\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\n\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n\nM106 P1 S60\n; FLUSH_START\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\n\n\nM400\nM106 P1 S60\nG1 E6 F{material_flush_purge_speed, extruder_nr} ;Compensate for filament spillage during waiting temperature\n\n{endif} ; prime_tower_enable\n\nM400\nG92 E0\n; G1 E-{retraction_amount} F1800\nM400\nM106 P1 S178\nM400 S4\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n\nM622.1 S0\n\nM621 S{extruder_nr}A\nG392 S0\n\nM1007 S1\n;===== A1 extruder start {extruder_nr} finish =====\n" }, - "material_diameter": { "default_value": 1.75 }, - "switch_extruder_retraction_amount": { "default_value": 18 } - } -} \ No newline at end of file diff --git a/resources/extruders/bambulab_a1_extruder_3.def.json b/resources/extruders/bambulab_a1_extruder_3.def.json deleted file mode 100644 index 13b7ec8699..0000000000 --- a/resources/extruders/bambulab_a1_extruder_3.def.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "version": 2, - "name": "Extruder", - "inherits": "fdmextruder", - "metadata": - { - "machine": "bambulab_a1", - "position": "3" - }, - "overrides": - { - "extruder_nr": { "default_value": 3 }, - "machine_extruder_change_duration": { "default_value": 29 }, - "machine_extruder_end_code": { "default_value": ";===== A1 extruder end {extruder_nr} begin =====\nG392 S0\nM1007 S0 ; turn off mass estimation\nM204 S9000\n\nG91 ; set relative positioning\nG1 Z3.0 F1200\nG90 ; back to abolute positioning\n\nG1 X267 F18000\nG1 Y128 F9000\n\nM400\nM106 P1 S0\nM106 P2 S0\n{if material_print_temperature > 142, extruder_nr}\nM104 S{material_print_temperature, extruder_nr}\n{endif}\n\n\nM620.11 S1 I{extruder_nr} E-18 F1200\nM400\n\nM620.1 E F{material_flush_purge_speed} T{material_print_temperature, extruder_nr}\nM620.10 A0 F{material_flush_purge_speed}\n\nM628 S1\nG92 E0\nG1 E-18 F{material_flush_purge_speed}\nM400\nM629 S1\n\n;===== A1 extruder end {extruder_nr} finish =====\n" }, - "machine_extruder_start_code": { "default_value": ";===== A1 extruder start {extruder_nr} begin =====\nM620.1 E F{material_flush_purge_speed} T{material_print_temperature, extruder_nr}\nM620.10 A1 F{material_flush_purge_speed} L{material_flush_purge_length} H{machine_nozzle_size} T{material_print_temperature, extruder_nr}\n\nM400\nG92 E0\n\n{if not prime_tower_enable}\n\n; FLUSH_START\n; always use highest temperature to flush\nM400\nM1002 set_filament_type:UNKNOWN\nM109 S{material_print_temperature, extruder_nr}\nM106 P1 S60\nG1 E{material_flush_purge_length / 4.0} F{min(extruderValues('material_flush_purge_speed'))} ; do not need pulsatile flushing for start part\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{min(extruderValues('material_flush_purge_speed'))}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\nM400\nM1002 set_filament_type:{material_type, extruder_nr}\n\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n\nM106 P1 S60\n; FLUSH_START\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\n\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n\nM106 P1 S60\n; FLUSH_START\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\n\n\nM400\nM106 P1 S60\nG1 E6 F{material_flush_purge_speed, extruder_nr} ;Compensate for filament spillage during waiting temperature\n\n{endif} ; prime_tower_enable\n\nM400\nG92 E0\n; G1 E-{retraction_amount} F1800\nM400\nM106 P1 S178\nM400 S4\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n\nM622.1 S0\n\nM621 S{extruder_nr}A\nG392 S0\n\nM1007 S1\n;===== A1 extruder start {extruder_nr} finish =====\n" }, - "material_diameter": { "default_value": 1.75 }, - "switch_extruder_retraction_amount": { "default_value": 18 } - } -} \ No newline at end of file diff --git a/resources/extruders/bambulab_a1mini_extruder_0.def.json b/resources/extruders/bambulab_a1mini_extruder_0.def.json deleted file mode 100644 index 57627b20b1..0000000000 --- a/resources/extruders/bambulab_a1mini_extruder_0.def.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "version": 2, - "name": "Extruder", - "inherits": "fdmextruder", - "metadata": - { - "machine": "bambulab_a1mini", - "position": "0" - }, - "overrides": - { - "extruder_nr": { "default_value": 0 }, - "machine_extruder_change_duration": { "default_value": 29 }, - "machine_extruder_end_code": { "default_value": ";===== A1mini extruder end {extruder_nr} begin =====\nG392 S0\nM1007 S0 ; turn off mass estimation\nM204 S9000\n\nG91 ; set relative positioning\nG1 Z3.0 F1200\nG90 ; back to abolute positioning\n\nG1 X180 F18000\nG1 Y90 F9000\n\nM400\nM106 P1 S0\nM106 P2 S0\n{if material_print_temperature > 142, extruder_nr}\nM104 S{material_print_temperature, extruder_nr}\n{endif}\n\n\nM620.11 S1 I{extruder_nr} E-18 F1200\nM400\n\nM620.1 E F{material_flush_purge_speed} T{material_print_temperature, extruder_nr}\nM620.10 A0 F{material_flush_purge_speed}\n\nM628 S1\nG92 E0\nG1 E-18 F{material_flush_purge_speed}\nM400\nM629 S1\n\n;===== A1mini extruder end {extruder_nr} finish =====\n" }, - "machine_extruder_start_code": { "default_value": ";===== A1mini extruder start {extruder_nr} begin =====\nM620.1 E F{material_flush_purge_speed} T{material_print_temperature, extruder_nr}\nM620.10 A1 F{material_flush_purge_speed} L{material_flush_purge_length} H{machine_nozzle_size} T{material_print_temperature, extruder_nr}\n\nM400\nG92 E0\n\n{if not prime_tower_enable}\n\n; FLUSH_START\n; always use highest temperature to flush\nM400\nM1002 set_filament_type:UNKNOWN\nM109 S{material_print_temperature, extruder_nr}\nM106 P1 S60\nG1 E{material_flush_purge_length / 4.0} F{min(extruderValues('material_flush_purge_speed'))} ; do not need pulsatile flushing for start part\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{min(extruderValues('material_flush_purge_speed'))}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\nM400\nM1002 set_filament_type:{material_type, extruder_nr}\n\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nM400\nM106 P1 S0\n\nM106 P1 S60\n; FLUSH_START\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\n\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nM400\nM106 P1 S0\n\nM106 P1 S60\n; FLUSH_START\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\n\n\nM400\nM106 P1 S60\nG1 E5 F{material_flush_purge_speed, extruder_nr} ;Compensate for filament spillage during waiting temperature\n\n{endif} ; prime_tower_enable\n\nM400\nG92 E0\n; G1 E-{retraction_amount} F1800\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nM400\nM106 P1 S0\n\nM622.1 S0\n\nM621 S{extruder_nr}A\nG392 S0\n\nM1007 S1\n;===== A1mini extruder start {extruder_nr} finish =====\n" }, - "material_diameter": { "default_value": 1.75 }, - "switch_extruder_retraction_amount": { "default_value": 18 } - } -} \ No newline at end of file diff --git a/resources/extruders/bambulab_a1mini_extruder_1.def.json b/resources/extruders/bambulab_a1mini_extruder_1.def.json deleted file mode 100644 index 02f2a102ff..0000000000 --- a/resources/extruders/bambulab_a1mini_extruder_1.def.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "version": 2, - "name": "Extruder", - "inherits": "fdmextruder", - "metadata": - { - "machine": "bambulab_a1mini", - "position": "1" - }, - "overrides": - { - "extruder_nr": { "default_value": 1 }, - "machine_extruder_change_duration": { "default_value": 29 }, - "machine_extruder_end_code": { "default_value": ";===== A1mini extruder end {extruder_nr} begin =====\nG392 S0\nM1007 S0 ; turn off mass estimation\nM204 S9000\n\nG91 ; set relative positioning\nG1 Z3.0 F1200\nG90 ; back to abolute positioning\n\nG1 X180 F18000\nG1 Y90 F9000\n\nM400\nM106 P1 S0\nM106 P2 S0\n{if material_print_temperature > 142, extruder_nr}\nM104 S{material_print_temperature, extruder_nr}\n{endif}\n\n\nM620.11 S1 I{extruder_nr} E-18 F1200\nM400\n\nM620.1 E F{material_flush_purge_speed} T{material_print_temperature, extruder_nr}\nM620.10 A0 F{material_flush_purge_speed}\n\nM628 S1\nG92 E0\nG1 E-18 F{material_flush_purge_speed}\nM400\nM629 S1\n\n;===== A1mini extruder end {extruder_nr} finish =====\n" }, - "machine_extruder_start_code": { "default_value": ";===== A1mini extruder start {extruder_nr} begin =====\nM620.1 E F{material_flush_purge_speed} T{material_print_temperature, extruder_nr}\nM620.10 A1 F{material_flush_purge_speed} L{material_flush_purge_length} H{machine_nozzle_size} T{material_print_temperature, extruder_nr}\n\nM400\nG92 E0\n\n{if not prime_tower_enable}\n\n; FLUSH_START\n; always use highest temperature to flush\nM400\nM1002 set_filament_type:UNKNOWN\nM109 S{material_print_temperature, extruder_nr}\nM106 P1 S60\nG1 E{material_flush_purge_length / 4.0} F{min(extruderValues('material_flush_purge_speed'))} ; do not need pulsatile flushing for start part\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{min(extruderValues('material_flush_purge_speed'))}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\nM400\nM1002 set_filament_type:{material_type, extruder_nr}\n\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nM400\nM106 P1 S0\n\nM106 P1 S60\n; FLUSH_START\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\n\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nM400\nM106 P1 S0\n\nM106 P1 S60\n; FLUSH_START\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\n\n\nM400\nM106 P1 S60\nG1 E5 F{material_flush_purge_speed, extruder_nr} ;Compensate for filament spillage during waiting temperature\n\n{endif} ; prime_tower_enable\n\nM400\nG92 E0\n; G1 E-{retraction_amount} F1800\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nM400\nM106 P1 S0\n\nM622.1 S0\n\nM621 S{extruder_nr}A\nG392 S0\n\nM1007 S1\n;===== A1mini extruder start {extruder_nr} finish =====\n" }, - "material_diameter": { "default_value": 1.75 }, - "switch_extruder_retraction_amount": { "default_value": 18 } - } -} \ No newline at end of file diff --git a/resources/extruders/bambulab_a1mini_extruder_2.def.json b/resources/extruders/bambulab_a1mini_extruder_2.def.json deleted file mode 100644 index 9b16132547..0000000000 --- a/resources/extruders/bambulab_a1mini_extruder_2.def.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "version": 2, - "name": "Extruder", - "inherits": "fdmextruder", - "metadata": - { - "machine": "bambulab_a1mini", - "position": "2" - }, - "overrides": - { - "extruder_nr": { "default_value": 2 }, - "machine_extruder_change_duration": { "default_value": 29 }, - "machine_extruder_end_code": { "default_value": ";===== A1mini extruder end {extruder_nr} begin =====\nG392 S0\nM1007 S0 ; turn off mass estimation\nM204 S9000\n\nG91 ; set relative positioning\nG1 Z3.0 F1200\nG90 ; back to abolute positioning\n\nG1 X180 F18000\nG1 Y90 F9000\n\nM400\nM106 P1 S0\nM106 P2 S0\n{if material_print_temperature > 142, extruder_nr}\nM104 S{material_print_temperature, extruder_nr}\n{endif}\n\n\nM620.11 S1 I{extruder_nr} E-18 F1200\nM400\n\nM620.1 E F{material_flush_purge_speed} T{material_print_temperature, extruder_nr}\nM620.10 A0 F{material_flush_purge_speed}\n\nM628 S1\nG92 E0\nG1 E-18 F{material_flush_purge_speed}\nM400\nM629 S1\n\n;===== A1mini extruder end {extruder_nr} finish =====\n" }, - "machine_extruder_start_code": { "default_value": ";===== A1mini extruder start {extruder_nr} begin =====\nM620.1 E F{material_flush_purge_speed} T{material_print_temperature, extruder_nr}\nM620.10 A1 F{material_flush_purge_speed} L{material_flush_purge_length} H{machine_nozzle_size} T{material_print_temperature, extruder_nr}\n\nM400\nG92 E0\n\n{if not prime_tower_enable}\n\n; FLUSH_START\n; always use highest temperature to flush\nM400\nM1002 set_filament_type:UNKNOWN\nM109 S{material_print_temperature, extruder_nr}\nM106 P1 S60\nG1 E{material_flush_purge_length / 4.0} F{min(extruderValues('material_flush_purge_speed'))} ; do not need pulsatile flushing for start part\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{min(extruderValues('material_flush_purge_speed'))}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\nM400\nM1002 set_filament_type:{material_type, extruder_nr}\n\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nM400\nM106 P1 S0\n\nM106 P1 S60\n; FLUSH_START\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\n\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nM400\nM106 P1 S0\n\nM106 P1 S60\n; FLUSH_START\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\n\n\nM400\nM106 P1 S60\nG1 E5 F{material_flush_purge_speed, extruder_nr} ;Compensate for filament spillage during waiting temperature\n\n{endif} ; prime_tower_enable\n\nM400\nG92 E0\n; G1 E-{retraction_amount} F1800\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nM400\nM106 P1 S0\n\nM622.1 S0\n\nM621 S{extruder_nr}A\nG392 S0\n\nM1007 S1\n;===== A1mini extruder start {extruder_nr} finish =====\n" }, - "material_diameter": { "default_value": 1.75 }, - "switch_extruder_retraction_amount": { "default_value": 18 } - } -} \ No newline at end of file diff --git a/resources/extruders/bambulab_a1mini_extruder_3.def.json b/resources/extruders/bambulab_a1mini_extruder_3.def.json deleted file mode 100644 index ee63528e5f..0000000000 --- a/resources/extruders/bambulab_a1mini_extruder_3.def.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "version": 2, - "name": "Extruder", - "inherits": "fdmextruder", - "metadata": - { - "machine": "bambulab_a1mini", - "position": "3" - }, - "overrides": - { - "extruder_nr": { "default_value": 3 }, - "machine_extruder_change_duration": { "default_value": 29 }, - "machine_extruder_end_code": { "default_value": ";===== A1mini extruder end {extruder_nr} begin =====\nG392 S0\nM1007 S0 ; turn off mass estimation\nM204 S9000\n\nG91 ; set relative positioning\nG1 Z3.0 F1200\nG90 ; back to abolute positioning\n\nG1 X180 F18000\nG1 Y90 F9000\n\nM400\nM106 P1 S0\nM106 P2 S0\n{if material_print_temperature > 142, extruder_nr}\nM104 S{material_print_temperature, extruder_nr}\n{endif}\n\n\nM620.11 S1 I{extruder_nr} E-18 F1200\nM400\n\nM620.1 E F{material_flush_purge_speed} T{material_print_temperature, extruder_nr}\nM620.10 A0 F{material_flush_purge_speed}\n\nM628 S1\nG92 E0\nG1 E-18 F{material_flush_purge_speed}\nM400\nM629 S1\n\n;===== A1mini extruder end {extruder_nr} finish =====\n" }, - "machine_extruder_start_code": { "default_value": ";===== A1mini extruder start {extruder_nr} begin =====\nM620.1 E F{material_flush_purge_speed} T{material_print_temperature, extruder_nr}\nM620.10 A1 F{material_flush_purge_speed} L{material_flush_purge_length} H{machine_nozzle_size} T{material_print_temperature, extruder_nr}\n\nM400\nG92 E0\n\n{if not prime_tower_enable}\n\n; FLUSH_START\n; always use highest temperature to flush\nM400\nM1002 set_filament_type:UNKNOWN\nM109 S{material_print_temperature, extruder_nr}\nM106 P1 S60\nG1 E{material_flush_purge_length / 4.0} F{min(extruderValues('material_flush_purge_speed'))} ; do not need pulsatile flushing for start part\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{min(extruderValues('material_flush_purge_speed'))}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\nM400\nM1002 set_filament_type:{material_type, extruder_nr}\n\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nM400\nM106 P1 S0\n\nM106 P1 S60\n; FLUSH_START\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\n\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nM400\nM106 P1 S0\n\nM106 P1 S60\n; FLUSH_START\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\n\n\nM400\nM106 P1 S60\nG1 E5 F{material_flush_purge_speed, extruder_nr} ;Compensate for filament spillage during waiting temperature\n\n{endif} ; prime_tower_enable\n\nM400\nG92 E0\n; G1 E-{retraction_amount} F1800\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nM400\nM106 P1 S0\n\nM622.1 S0\n\nM621 S{extruder_nr}A\nG392 S0\n\nM1007 S1\n;===== A1mini extruder start {extruder_nr} finish =====\n" }, - "material_diameter": { "default_value": 1.75 }, - "switch_extruder_retraction_amount": { "default_value": 18 } - } -} \ No newline at end of file diff --git a/resources/extruders/bambulab_x1_extruder_0.def.json b/resources/extruders/bambulab_x1_extruder_0.def.json deleted file mode 100644 index 3ff6e83c83..0000000000 --- a/resources/extruders/bambulab_x1_extruder_0.def.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "version": 2, - "name": "Extruder", - "inherits": "fdmextruder", - "metadata": - { - "machine": "bambulab_x1", - "position": "0" - }, - "overrides": - { - "extruder_nr": { "default_value": 0 }, - "machine_extruder_change_duration": { "default_value": 29 }, - "machine_extruder_end_code": { "default_value": "M204 S9000\n\nG91 ; set relative positioning\nG1 Z3.0 F1200\nG90 ; back to abolute positioning\n\nG1 X70 F21000\nG1 Y245\nG1 Y265 F3000\nM400\nM106 P1 S0\nM106 P2 S0\n\n{if material_print_temperature > 142}\nM104 S{material_print_temperature}\n{endif}\n\nM620.11 S1 I{extruder_nr} E-18 F1200\nM400\n\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 X120 F15000\nG1 X20 Y50 F21000\nG1 Y-3\n\n;{if toolchange_count == 2}\n; get travel path for change filament\n;M620.1 X[travel_point_1_x] Y[travel_point_1_y] F21000 P0\n;M620.1 X[travel_point_2_x] Y[travel_point_2_y] F21000 P1\n;M620.1 X[travel_point_3_x] Y[travel_point_3_y] F21000 P2\n;{endif}\n\nM620.1 E F{material_flush_purge_speed} T{material_print_temperature, extruder_nr}\n" }, - "machine_extruder_start_code": { "default_value": "M620.1 E F{material_flush_purge_speed} T{material_print_temperature, extruder_nr}\n\nG92 E0\n\n; always use highest temperature to flush\n{if material_type == 'PETG'}\nM109 S260\n{elsif material_type == 'PVA'}\nM109 S210\n{else}\nM109 S{material_print_temperature}\n{endif}\n\n{if not prime_tower_enable}\n\nM83\n; FLUSH_START\n; always use highest temperature to flush\nM400\nM1002 set_filament_type:UNKNOWN\nM109 S{material_print_temperature, extruder_nr}\nM106 P1 S60\nG1 E{material_flush_purge_length / 4.0} F{min(extruderValues('material_flush_purge_speed'))} ; do not need pulsatile flushing for start part\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{min(extruderValues('material_flush_purge_speed'))}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\nM400\nM1002 set_filament_type:{material_type, extruder_nr}\n\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n\nM106 P1 S60\n; FLUSH_START\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\n\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n\nM106 P1 S60\n; FLUSH_START\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\n\n; FLUSH_START\nM400\nM109 S{material_print_temperature}\nG1 E6 F{material_flush_purge_speed, extruder_nr} ;Compensate for filament spillage during waiting temperature\n; FLUSH_END\n\n{endif} ; prime_tower_enable\n\nM400\nG92 E0\n;G1 E-[new_retract_length_toolchange] F1800\nM106 P1 S255\nM400 S3\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X105 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\n\nG1 X70 F10000\nG1 X80 F15000\nG1 X60\nG1 X80\nG1 X60\nG1 X80 ; shake to put down garbage\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y256 ; move Y to aside, prevent collision\nM400\n\nM621 S{extruder_nr}A\n" }, - "material_diameter": { "default_value": 1.75 } - } -} \ No newline at end of file diff --git a/resources/extruders/bambulab_x1_extruder_1.def.json b/resources/extruders/bambulab_x1_extruder_1.def.json deleted file mode 100644 index 777e735fa6..0000000000 --- a/resources/extruders/bambulab_x1_extruder_1.def.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "version": 2, - "name": "Extruder", - "inherits": "fdmextruder", - "metadata": - { - "machine": "bambulab_x1", - "position": "1" - }, - "overrides": - { - "extruder_nr": { "default_value": 1 }, - "machine_extruder_change_duration": { "default_value": 29 }, - "machine_extruder_end_code": { "default_value": "M204 S9000\n\nG91 ; set relative positioning\nG1 Z3.0 F1200\nG90 ; back to abolute positioning\n\nG1 X70 F21000\nG1 Y245\nG1 Y265 F3000\nM400\nM106 P1 S0\nM106 P2 S0\n\n{if material_print_temperature > 142}\nM104 S{material_print_temperature}\n{endif}\n\nM620.11 S1 I{extruder_nr} E-18 F1200\nM400\n\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 X120 F15000\nG1 X20 Y50 F21000\nG1 Y-3\n\n;{if toolchange_count == 2}\n; get travel path for change filament\n;M620.1 X[travel_point_1_x] Y[travel_point_1_y] F21000 P0\n;M620.1 X[travel_point_2_x] Y[travel_point_2_y] F21000 P1\n;M620.1 X[travel_point_3_x] Y[travel_point_3_y] F21000 P2\n;{endif}\n\nM620.1 E F{material_flush_purge_speed} T{material_print_temperature, extruder_nr}\n" }, - "machine_extruder_start_code": { "default_value": "M620.1 E F{material_flush_purge_speed} T{material_print_temperature, extruder_nr}\n\nG92 E0\n\n; always use highest temperature to flush\n{if material_type == 'PETG'}\nM109 S260\n{elsif material_type == 'PVA'}\nM109 S210\n{else}\nM109 S{material_print_temperature}\n{endif}\n\n{if not prime_tower_enable}\n\nM83\n; FLUSH_START\n; always use highest temperature to flush\nM400\nM1002 set_filament_type:UNKNOWN\nM109 S{material_print_temperature, extruder_nr}\nM106 P1 S60\nG1 E{material_flush_purge_length / 4.0} F{min(extruderValues('material_flush_purge_speed'))} ; do not need pulsatile flushing for start part\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{min(extruderValues('material_flush_purge_speed'))}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\nM400\nM1002 set_filament_type:{material_type, extruder_nr}\n\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n\nM106 P1 S60\n; FLUSH_START\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\n\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n\nM106 P1 S60\n; FLUSH_START\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\n\n; FLUSH_START\nM400\nM109 S{material_print_temperature}\nG1 E6 F{material_flush_purge_speed, extruder_nr} ;Compensate for filament spillage during waiting temperature\n; FLUSH_END\n\n{endif} ; prime_tower_enable\n\nM400\nG92 E0\n;G1 E-[new_retract_length_toolchange] F1800\nM106 P1 S255\nM400 S3\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X105 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\n\nG1 X70 F10000\nG1 X80 F15000\nG1 X60\nG1 X80\nG1 X60\nG1 X80 ; shake to put down garbage\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y256 ; move Y to aside, prevent collision\nM400\n\nM621 S{extruder_nr}A\n" }, - "material_diameter": { "default_value": 1.75 } - } -} \ No newline at end of file diff --git a/resources/extruders/bambulab_x1_extruder_2.def.json b/resources/extruders/bambulab_x1_extruder_2.def.json deleted file mode 100644 index 3fad4c692d..0000000000 --- a/resources/extruders/bambulab_x1_extruder_2.def.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "version": 2, - "name": "Extruder", - "inherits": "fdmextruder", - "metadata": - { - "machine": "bambulab_x1", - "position": "2" - }, - "overrides": - { - "extruder_nr": { "default_value": 2 }, - "machine_extruder_change_duration": { "default_value": 29 }, - "machine_extruder_end_code": { "default_value": "M204 S9000\n\nG91 ; set relative positioning\nG1 Z3.0 F1200\nG90 ; back to abolute positioning\n\nG1 X70 F21000\nG1 Y245\nG1 Y265 F3000\nM400\nM106 P1 S0\nM106 P2 S0\n\n{if material_print_temperature > 142}\nM104 S{material_print_temperature}\n{endif}\n\nM620.11 S1 I{extruder_nr} E-18 F1200\nM400\n\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 X120 F15000\nG1 X20 Y50 F21000\nG1 Y-3\n\n;{if toolchange_count == 2}\n; get travel path for change filament\n;M620.1 X[travel_point_1_x] Y[travel_point_1_y] F21000 P0\n;M620.1 X[travel_point_2_x] Y[travel_point_2_y] F21000 P1\n;M620.1 X[travel_point_3_x] Y[travel_point_3_y] F21000 P2\n;{endif}\n\nM620.1 E F{material_flush_purge_speed} T{material_print_temperature, extruder_nr}\n" }, - "machine_extruder_start_code": { "default_value": "M620.1 E F{material_flush_purge_speed} T{material_print_temperature, extruder_nr}\n\nG92 E0\n\n; always use highest temperature to flush\n{if material_type == 'PETG'}\nM109 S260\n{elsif material_type == 'PVA'}\nM109 S210\n{else}\nM109 S{material_print_temperature}\n{endif}\n\n{if not prime_tower_enable}\n\nM83\n; FLUSH_START\n; always use highest temperature to flush\nM400\nM1002 set_filament_type:UNKNOWN\nM109 S{material_print_temperature, extruder_nr}\nM106 P1 S60\nG1 E{material_flush_purge_length / 4.0} F{min(extruderValues('material_flush_purge_speed'))} ; do not need pulsatile flushing for start part\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{min(extruderValues('material_flush_purge_speed'))}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\nM400\nM1002 set_filament_type:{material_type, extruder_nr}\n\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n\nM106 P1 S60\n; FLUSH_START\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\n\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n\nM106 P1 S60\n; FLUSH_START\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\n\n; FLUSH_START\nM400\nM109 S{material_print_temperature}\nG1 E6 F{material_flush_purge_speed, extruder_nr} ;Compensate for filament spillage during waiting temperature\n; FLUSH_END\n\n{endif} ; prime_tower_enable\n\nM400\nG92 E0\n;G1 E-[new_retract_length_toolchange] F1800\nM106 P1 S255\nM400 S3\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X105 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\n\nG1 X70 F10000\nG1 X80 F15000\nG1 X60\nG1 X80\nG1 X60\nG1 X80 ; shake to put down garbage\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y256 ; move Y to aside, prevent collision\nM400\n\nM621 S{extruder_nr}A\n" }, - "material_diameter": { "default_value": 1.75 } - } -} \ No newline at end of file diff --git a/resources/extruders/bambulab_x1_extruder_3.def.json b/resources/extruders/bambulab_x1_extruder_3.def.json deleted file mode 100644 index 751ec2b459..0000000000 --- a/resources/extruders/bambulab_x1_extruder_3.def.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "version": 2, - "name": "Extruder", - "inherits": "fdmextruder", - "metadata": - { - "machine": "bambulab_x1", - "position": "3" - }, - "overrides": - { - "extruder_nr": { "default_value": 3 }, - "machine_extruder_change_duration": { "default_value": 29 }, - "machine_extruder_end_code": { "default_value": "M204 S9000\n\nG91 ; set relative positioning\nG1 Z3.0 F1200\nG90 ; back to abolute positioning\n\nG1 X70 F21000\nG1 Y245\nG1 Y265 F3000\nM400\nM106 P1 S0\nM106 P2 S0\n\n{if material_print_temperature > 142}\nM104 S{material_print_temperature}\n{endif}\n\nM620.11 S1 I{extruder_nr} E-18 F1200\nM400\n\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 X120 F15000\nG1 X20 Y50 F21000\nG1 Y-3\n\n;{if toolchange_count == 2}\n; get travel path for change filament\n;M620.1 X[travel_point_1_x] Y[travel_point_1_y] F21000 P0\n;M620.1 X[travel_point_2_x] Y[travel_point_2_y] F21000 P1\n;M620.1 X[travel_point_3_x] Y[travel_point_3_y] F21000 P2\n;{endif}\n\nM620.1 E F{material_flush_purge_speed} T{material_print_temperature, extruder_nr}\n" }, - "machine_extruder_start_code": { "default_value": "M620.1 E F{material_flush_purge_speed} T{material_print_temperature, extruder_nr}\n\nG92 E0\n\n; always use highest temperature to flush\n{if material_type == 'PETG'}\nM109 S260\n{elsif material_type == 'PVA'}\nM109 S210\n{else}\nM109 S{material_print_temperature}\n{endif}\n\n{if not prime_tower_enable}\n\nM83\n; FLUSH_START\n; always use highest temperature to flush\nM400\nM1002 set_filament_type:UNKNOWN\nM109 S{material_print_temperature, extruder_nr}\nM106 P1 S60\nG1 E{material_flush_purge_length / 4.0} F{min(extruderValues('material_flush_purge_speed'))} ; do not need pulsatile flushing for start part\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{min(extruderValues('material_flush_purge_speed'))}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\nM400\nM1002 set_filament_type:{material_type, extruder_nr}\n\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n\nM106 P1 S60\n; FLUSH_START\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\n\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n\nM106 P1 S60\n; FLUSH_START\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\n\n; FLUSH_START\nM400\nM109 S{material_print_temperature}\nG1 E6 F{material_flush_purge_speed, extruder_nr} ;Compensate for filament spillage during waiting temperature\n; FLUSH_END\n\n{endif} ; prime_tower_enable\n\nM400\nG92 E0\n;G1 E-[new_retract_length_toolchange] F1800\nM106 P1 S255\nM400 S3\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X105 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\n\nG1 X70 F10000\nG1 X80 F15000\nG1 X60\nG1 X80\nG1 X60\nG1 X80 ; shake to put down garbage\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y256 ; move Y to aside, prevent collision\nM400\n\nM621 S{extruder_nr}A\n" }, - "material_diameter": { "default_value": 1.75 } - } -} \ No newline at end of file diff --git a/resources/images/bambulab-buildplate.png b/resources/images/bambulab-buildplate.png deleted file mode 100644 index 930337a695fc0b8f9dd0824e0c7a1dfac16ea8b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35459 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 Date: Thu, 2 Oct 2025 15:21:01 +0200 Subject: [PATCH 10/10] Revert the addition of keys to the ignore_keys and add them to the backups The whitelist of the preferences only allows: "general/visible_settings", "cura/active_mode", "cura/categories_expanded", "metadata/setting_version" to be stored. In backups, we're obfuscating Secret Preferences and these should be considered as items for that. --- cura/Backups/Backup.py | 2 +- plugins/3MFWriter/ThreeMFWorkspaceWriter.py | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/cura/Backups/Backup.py b/cura/Backups/Backup.py index 1438ce293a..db3f0c92ab 100644 --- a/cura/Backups/Backup.py +++ b/cura/Backups/Backup.py @@ -36,7 +36,7 @@ class Backup: IGNORED_FOLDERS = [] # type: List[str] """These folders should be ignored when making a backup.""" - SECRETS_SETTINGS = ["general/ultimaker_auth_data"] + SECRETS_SETTINGS = ["general/ultimaker_auth_data", "cluster_api/auth_ids", "cluster_api/auth_keys", "cluster_api/nonce_counts", "cluster_api/nonces"] """Secret preferences that need to obfuscated when making a backup of Cura""" catalog = i18nCatalog("cura") diff --git a/plugins/3MFWriter/ThreeMFWorkspaceWriter.py b/plugins/3MFWriter/ThreeMFWorkspaceWriter.py index 33f23b0274..1b24e59309 100644 --- a/plugins/3MFWriter/ThreeMFWorkspaceWriter.py +++ b/plugins/3MFWriter/ThreeMFWorkspaceWriter.py @@ -191,10 +191,6 @@ class ThreeMFWorkspaceWriter(WorkspaceWriter): "capabilities", "octoprint_api_key", "is_online", - "cluster_api/auth_ids", - "cluster_api/auth_keys", - "cluster_api/nonce_counts", - "cluster_api/nonces", } serialized_data = container.serialize(ignored_metadata_keys = ignore_keys)