From 909a4156f3ccc64b86a3b0c4864b8c20fd5105e8 Mon Sep 17 00:00:00 2001 From: Saumya Jain Date: Wed, 21 Feb 2024 15:13:27 +0100 Subject: [PATCH 1/3] Updating _ucp_model to None everytime a write is done CURA-11403 --- plugins/3MFWriter/ThreeMFWorkspaceWriter.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/plugins/3MFWriter/ThreeMFWorkspaceWriter.py b/plugins/3MFWriter/ThreeMFWorkspaceWriter.py index cff938788b..2536f5dacb 100644 --- a/plugins/3MFWriter/ThreeMFWorkspaceWriter.py +++ b/plugins/3MFWriter/ThreeMFWorkspaceWriter.py @@ -33,7 +33,7 @@ class ThreeMFWorkspaceWriter(WorkspaceWriter): if self._ucp_model != model: self._ucp_model = model - def write(self, stream, nodes, mode=WorkspaceWriter.OutputMode.BinaryMode): + def _write(self, stream, nodes, mode=WorkspaceWriter.OutputMode.BinaryMode): application = Application.getInstance() machine_manager = application.getMachineManager() @@ -125,6 +125,11 @@ class ThreeMFWorkspaceWriter(WorkspaceWriter): return True + def write(self, stream, nodes, mode=WorkspaceWriter.OutputMode.BinaryMode): + success = self._write(stream, nodes, mode=WorkspaceWriter.OutputMode.BinaryMode) + self._ucp_model = None + return success + @staticmethod def _writePluginMetadataToArchive(archive: zipfile.ZipFile) -> None: file_name_template = "%s/plugin_metadata.json" From 2681932fec55545c4ae4c9b07d52bf30568b29a6 Mon Sep 17 00:00:00 2001 From: Saumya Jain Date: Wed, 21 Feb 2024 15:20:38 +0100 Subject: [PATCH 2/3] Adding cura share icon to thumbnail CURA-11624 --- plugins/3MFWriter/ThreeMFWriter.py | 24 +++++++++++++++++++++++- resources/images/cura-share.png | Bin 0 -> 8108 bytes 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 resources/images/cura-share.png diff --git a/plugins/3MFWriter/ThreeMFWriter.py b/plugins/3MFWriter/ThreeMFWriter.py index 6e3dc86890..9e519e255d 100644 --- a/plugins/3MFWriter/ThreeMFWriter.py +++ b/plugins/3MFWriter/ThreeMFWriter.py @@ -10,6 +10,7 @@ from UM.Math.Vector import Vector from UM.Logger import Logger from UM.Math.Matrix import Matrix from UM.Application import Application +from UM.Resources import Resources from UM.Scene.SceneNode import SceneNode from UM.Settings.ContainerRegistry import ContainerRegistry @@ -20,7 +21,8 @@ from cura.Utils.Threading import call_on_qt_thread from cura.Scene.CuraSceneNode import CuraSceneNode from cura.Snapshot import Snapshot -from PyQt6.QtCore import QBuffer +from PyQt6.QtCore import Qt, QBuffer +from PyQt6.QtGui import QImage, QPainter import pySavitar as Savitar from .UCPDialog import UCPDialog @@ -170,6 +172,24 @@ class ThreeMFWriter(MeshWriter): def getArchive(self): return self._archive + def _addShareLogoToThumbnail(self, primary_image): + # Load the icon png image + icon_image = QImage(Resources.getPath(Resources.Images, "cura-share.png")) + + # Resize icon_image to be 1/3 of primary_image size + new_width = int(primary_image.width() / 4) + new_height = int(primary_image.height() / 4) + icon_image = icon_image.scaled(new_width, new_height, Qt.AspectRatioMode.KeepAspectRatio) + # Create a QPainter to draw on the image + painter = QPainter(primary_image) + + # Draw the icon in the top-left corner (adjust coordinates as needed) + icon_position = (10, 10) + painter.drawImage(icon_position[0], icon_position[1], icon_image) + + painter.end() + primary_image.save("test.png", "PNG") + def write(self, stream, nodes, mode = MeshWriter.OutputMode.BinaryMode, export_settings_model = None) -> bool: self._archive = None # Reset archive archive = zipfile.ZipFile(stream, "w", compression = zipfile.ZIP_DEFLATED) @@ -194,6 +214,8 @@ class ThreeMFWriter(MeshWriter): # Attempt to add a thumbnail snapshot = self._createSnapshot() if snapshot: + if export_settings_model != None: + self._addShareLogoToThumbnail(snapshot) thumbnail_buffer = QBuffer() thumbnail_buffer.open(QBuffer.OpenModeFlag.ReadWrite) snapshot.save(thumbnail_buffer, "PNG") diff --git a/resources/images/cura-share.png b/resources/images/cura-share.png new file mode 100644 index 0000000000000000000000000000000000000000..60de85194c7a9c71f93ddd90f2f885d18d49c11e GIT binary patch literal 8108 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 qWvu{Yyxl$m0<@dkS8ngj zyn*4U>}7f6Rh?B~oyO#B6<9q-FJ8w-+9~ zyT7o>?r_K@aqval5TmSsN>qjF%K3Q-qx60#U&H4lyw0!7?%hyZn1Q0eU`ffOWTnm8 z4x0`cg~~?V6@@t% zDoo+UP4cMXy6osUw{cCrzaU+qfvH3Y0050qKV?JQF*iM;D}_E=FdVh3ELtch3W7({ z15WCNq@oEYp(#Y}w9R@yS5N7m6-cE3O8bqn4=v}Y7$uE$@@sOBt0^5IV;V>{!woK7 zb;iJO)B;GXMn{&6npBgYDMi!DbUNI`&loj}9iY&gP1cj4pk5Sni`NwHk1f}=*pH~z zFi~A`6p(XM3+%A#x-$xfZ)rXr;>gW{m6wvvZlL>aL!S44hOk}jWi;ULT+JI8j*5Vs zrJ-qF!EiJWm5cvxY2LwbbQX}=(HQ~5(OE!7r!xkIqyGgV=nSNJP7uHV0000 Date: Wed, 21 Feb 2024 15:22:20 +0100 Subject: [PATCH 3/3] Removing debug statement CURA-11624 --- plugins/3MFWriter/ThreeMFWriter.py | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/3MFWriter/ThreeMFWriter.py b/plugins/3MFWriter/ThreeMFWriter.py index 9e519e255d..ce9ea33fbd 100644 --- a/plugins/3MFWriter/ThreeMFWriter.py +++ b/plugins/3MFWriter/ThreeMFWriter.py @@ -188,7 +188,6 @@ class ThreeMFWriter(MeshWriter): painter.drawImage(icon_position[0], icon_position[1], icon_image) painter.end() - primary_image.save("test.png", "PNG") def write(self, stream, nodes, mode = MeshWriter.OutputMode.BinaryMode, export_settings_model = None) -> bool: self._archive = None # Reset archive